diff --git a/Content.Client/Emoting/AnimatedEmotesSystem.cs b/Content.Client/Emoting/AnimatedEmotesSystem.cs new file mode 100644 index 00000000000..40766b4e13e --- /dev/null +++ b/Content.Client/Emoting/AnimatedEmotesSystem.cs @@ -0,0 +1,121 @@ +using Robust.Client.Animations; +using Robust.Shared.Animations; +using Robust.Shared.GameStates; +using Robust.Client.GameObjects; +using Content.Shared.Emoting; +using System.Numerics; +using Robust.Shared.Prototypes; +using Content.Shared.Chat.Prototypes; + +namespace Content.Client.Emoting; + +public sealed partial class AnimatedEmotesSystem : SharedAnimatedEmotesSystem +{ + [Dependency] private readonly AnimationPlayerSystem _anim = default!; + [Dependency] private readonly IPrototypeManager _prot = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnHandleState); + + SubscribeLocalEvent(OnFlip); + SubscribeLocalEvent(OnSpin); + SubscribeLocalEvent(OnJump); + } + + public void PlayEmote(EntityUid uid, Animation anim, string animationKey = "emoteAnimKeyId") + { + if (_anim.HasRunningAnimation(uid, animationKey)) + return; + + _anim.Play(uid, anim, animationKey); + } + + private void OnHandleState(EntityUid uid, AnimatedEmotesComponent component, ref ComponentHandleState args) + { + if (args.Current is not AnimatedEmotesComponentState state + || !_prot.TryIndex(state.Emote, out var emote)) + return; + + if (emote.Event != null) + RaiseLocalEvent(uid, emote.Event); + } + + private void OnFlip(Entity ent, ref AnimationFlipEmoteEvent args) + { + var a = new Animation + { + Length = TimeSpan.FromMilliseconds(500), + AnimationTracks = + { + new AnimationTrackComponentProperty + { + ComponentType = typeof(SpriteComponent), + Property = nameof(SpriteComponent.Rotation), + InterpolationMode = AnimationInterpolationMode.Linear, + KeyFrames = + { + new AnimationTrackProperty.KeyFrame(Angle.Zero, 0f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(180), 0.25f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(360), 0.25f), + } + } + } + }; + PlayEmote(ent, a); + } + private void OnSpin(Entity ent, ref AnimationSpinEmoteEvent args) + { + var a = new Animation + { + Length = TimeSpan.FromMilliseconds(600), + AnimationTracks = + { + new AnimationTrackComponentProperty + { + ComponentType = typeof(TransformComponent), + Property = nameof(TransformComponent.LocalRotation), + InterpolationMode = AnimationInterpolationMode.Linear, + KeyFrames = + { + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(0), 0f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(90), 0.075f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(180), 0.075f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(270), 0.075f), + new AnimationTrackProperty.KeyFrame(Angle.Zero, 0.075f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(90), 0.075f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(180), 0.075f), + new AnimationTrackProperty.KeyFrame(Angle.FromDegrees(270), 0.075f), + new AnimationTrackProperty.KeyFrame(Angle.Zero, 0.075f), + } + } + } + }; + PlayEmote(ent, a, "emoteAnimSpin"); + } + private void OnJump(Entity ent, ref AnimationJumpEmoteEvent args) + { + var a = new Animation + { + Length = TimeSpan.FromMilliseconds(250), + AnimationTracks = + { + new AnimationTrackComponentProperty + { + ComponentType = typeof(SpriteComponent), + Property = nameof(SpriteComponent.Offset), + InterpolationMode = AnimationInterpolationMode.Cubic, + KeyFrames = + { + new AnimationTrackProperty.KeyFrame(Vector2.Zero, 0f), + new AnimationTrackProperty.KeyFrame(new Vector2(0, .35f), 0.125f), + new AnimationTrackProperty.KeyFrame(Vector2.Zero, 0.125f), + } + } + } + }; + PlayEmote(ent, a); + } +} diff --git a/Content.Client/ListViewSelector/ListViewSelectorBUI.cs b/Content.Client/ListViewSelector/ListViewSelectorBUI.cs index f02bab512e8..dd1f2299427 100644 --- a/Content.Client/ListViewSelector/ListViewSelectorBUI.cs +++ b/Content.Client/ListViewSelector/ListViewSelectorBUI.cs @@ -84,7 +84,7 @@ private void PopulateWindow(List items) { var itemName = item.Name; var itemDesc = item.Description; - if (_prototypeManager.TryIndex(item.Id, out var itemPrototype)) + if (_prototypeManager.TryIndex(item.Id, out var itemPrototype, false)) { itemName = itemPrototype.Name; itemDesc = itemPrototype.Description; diff --git a/Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs b/Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs index 3e1a4b1906d..ffcd7454ac7 100644 --- a/Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs +++ b/Content.Client/Weapons/Melee/MeleeWeaponSystem.Effects.cs @@ -136,6 +136,7 @@ private Animation GetThrustAnimation(SpriteComponent sprite, float distance, Ang { const float thrustEnd = 0.05f; const float length = 0.15f; + var rotation = sprite.Rotation + spriteRotation; var startOffset = sprite.Rotation.RotateVec(new Vector2(0f, -distance / 5f)); var endOffset = sprite.Rotation.RotateVec(new Vector2(0f, -distance)); @@ -144,6 +145,15 @@ private Animation GetThrustAnimation(SpriteComponent sprite, float distance, Ang Length = TimeSpan.FromSeconds(length), AnimationTracks = { + new AnimationTrackComponentProperty() + { + ComponentType = typeof(SpriteComponent), + Property = nameof(SpriteComponent.Rotation), + KeyFrames = + { + new AnimationTrackProperty.KeyFrame(rotation, 0f), + } + }, new AnimationTrackComponentProperty() { ComponentType = typeof(SpriteComponent), diff --git a/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs b/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs index 1d72f16706f..9f2ee5eb8f6 100644 --- a/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs +++ b/Content.Client/Weapons/Melee/MeleeWeaponSystem.cs @@ -9,6 +9,7 @@ using Content.Shared.Weapons.Melee; using Content.Shared.Weapons.Melee.Events; using Content.Shared.Weapons.Ranged.Components; +using Content.Shared.Wieldable.Components; using Robust.Client.GameObjects; using Robust.Client.Graphics; using Robust.Client.Input; @@ -71,10 +72,22 @@ public override void Update(float frameTime) return; } - var useDown = _inputSystem.CmdStates.GetState(EngineKeyFunctions.Use); - var altDown = _inputSystem.CmdStates.GetState(EngineKeyFunctions.UseSecondary); + var useDown = _inputSystem.CmdStates.GetState(EngineKeyFunctions.Use) == BoundKeyState.Down; + var altDown = _inputSystem.CmdStates.GetState(EngineKeyFunctions.UseSecondary) == BoundKeyState.Down; - if (weapon.AutoAttack || useDown != BoundKeyState.Down && altDown != BoundKeyState.Down) + // Disregard inputs to the shoot binding + if (TryComp(weaponUid, out var gun) && + // Except if can't shoot due to being unwielded + (!HasComp(weaponUid) || + (TryComp(weaponUid, out var wieldable) && wieldable.Wielded))) + { + if (gun.UseKey) + useDown = false; + else + altDown = false; + } + + if (weapon.AutoAttack || !useDown && !altDown) { if (weapon.Attacking) { @@ -82,23 +95,13 @@ public override void Update(float frameTime) } } - if (weapon.Attacking || weapon.NextAttack > Timing.CurTime) + if (weapon.Attacking || weapon.NextAttack > Timing.CurTime || (!useDown && !altDown)) { return; } // TODO using targeted actions while combat mode is enabled should NOT trigger attacks. - // TODO: Need to make alt-fire melee its own component I guess? - // Melee and guns share a lot in the middle but share virtually nothing at the start and end so - // it's kinda tricky. - // I think as long as we make secondaries their own component it's probably fine - // as long as guncomp has an alt-use key then it shouldn't be too much of a PITA to deal with. - if (TryComp(weaponUid, out var gun) && gun.UseKey) - { - return; - } - var mousePos = _eyeManager.PixelToMap(_inputManager.MouseScreenPosition); if (mousePos.MapId == MapId.Nullspace) @@ -118,7 +121,8 @@ public override void Update(float frameTime) } // Heavy attack. - if (altDown == BoundKeyState.Down) + if (!weapon.DisableHeavy && + (!weapon.SwapKeys ? altDown : useDown)) { // If it's an unarmed attack then do a disarm if (weapon.AltDisarm && weaponUid == entity) @@ -139,7 +143,8 @@ public override void Update(float frameTime) } // Light attack - if (useDown == BoundKeyState.Down) + if (!weapon.DisableClick && + (!weapon.SwapKeys ? useDown : altDown)) { var attackerPos = Transform(entity).MapPosition; diff --git a/Content.Client/WhiteDream/BloodCult/PhaseShift/PhaseShiftSystem.cs b/Content.Client/WhiteDream/BloodCult/PhaseShift/PhaseShiftSystem.cs new file mode 100644 index 00000000000..881d8cc023a --- /dev/null +++ b/Content.Client/WhiteDream/BloodCult/PhaseShift/PhaseShiftSystem.cs @@ -0,0 +1,5 @@ +using Content.Shared.WhiteDream.BloodCult.Constructs.PhaseShift; + +namespace Content.Client.WhiteDream.BloodCult.PhaseShift; + +public sealed class PhaseShiftSystem : SharedPhaseShiftSystem; diff --git a/Content.Client/WhiteDream/BloodCult/Runes/UI/RuneDrawerBUI.cs b/Content.Client/WhiteDream/BloodCult/Runes/UI/RuneDrawerBUI.cs index ed0f27bc5da..c3476c41d22 100644 --- a/Content.Client/WhiteDream/BloodCult/Runes/UI/RuneDrawerBUI.cs +++ b/Content.Client/WhiteDream/BloodCult/Runes/UI/RuneDrawerBUI.cs @@ -1,5 +1,4 @@ -using System.Linq; -using System.Numerics; +using System.Numerics; using Content.Client.UserInterface.Controls; using Content.Shared.WhiteDream.BloodCult.Runes; using JetBrains.Annotations; @@ -23,17 +22,22 @@ public sealed class RuneDrawerBUI : BoundUserInterface [Dependency] private readonly IInputManager _inputManager = default!; private readonly SpriteSystem _spriteSystem; - - private RadialMenu? _menu; + private readonly RadialMenu _menu; public RuneDrawerBUI(EntityUid owner, Enum uiKey) : base(owner, uiKey) { _spriteSystem = _entManager.System(); + _menu = new() + { + HorizontalExpand = true, + VerticalExpand = true, + BackButtonStyleClass = "RadialMenuBackButton", + CloseButtonStyleClass = "RadialMenuCloseButton" + }; } protected override void Open() { - _menu = FormMenu(); _menu.OnClose += Close; _menu.OpenCenteredAt(_inputManager.MouseScreenPosition.Position / _displayManager.ScreenSize); } @@ -41,53 +45,49 @@ protected override void Open() protected override void Dispose(bool disposing) { base.Dispose(disposing); - if (disposing) - _menu?.Dispose(); + _menu.Close(); } - private RadialMenu FormMenu() + protected override void UpdateState(BoundUserInterfaceState state) { - var menu = new RadialMenu - { - HorizontalExpand = true, - VerticalExpand = true, - BackButtonStyleClass = "RadialMenuBackButton", - CloseButtonStyleClass = "RadialMenuCloseButton" - }; - - if (!_entManager.HasComponent(Owner)) - return menu; + if (state is RuneDrawerMenuState runeDrawerState) + FillMenu(runeDrawerState.AvailalbeRunes); + } - var runeSelectorArray = _protoManager.EnumeratePrototypes().OrderBy(r => r.ID).ToArray(); + private void FillMenu(List>? runes = null) + { + if (runes is null) + return; - var mainContainer = new RadialContainer + var container = new RadialContainer { - Radius = 36f / (runeSelectorArray.Length == 1 - ? 1 - : MathF.Sin(MathF.PI / runeSelectorArray.Length)) + Radius = 48f + 24f * MathF.Log(runes.Count) }; - foreach (var runeSelector in runeSelectorArray) + _menu.AddChild(container); + + foreach (var runeSelector in runes) { - if (!_protoManager.TryIndex(runeSelector.Prototype, out var proto)) + if (!_protoManager.TryIndex(runeSelector, out var runeSelectorProto) || + !_protoManager.TryIndex(runeSelectorProto.Prototype, out var runeProto)) continue; var itemSize = new Vector2(64f, 64f); var button = new RadialMenuTextureButton { - ToolTip = Loc.GetString(proto.Name), + ToolTip = Loc.GetString(runeProto.Name), StyleClasses = { "RadialMenuButton" }, SetSize = itemSize }; - var runeIcon = _spriteSystem.Frame0(proto); + var runeIcon = _spriteSystem.Frame0(runeProto); var runeScale = itemSize / runeIcon.Size; var texture = new TextureRect { VerticalAlignment = Control.VAlignment.Center, HorizontalAlignment = Control.HAlignment.Center, - Texture = _spriteSystem.Frame0(proto), + Texture = _spriteSystem.Frame0(runeProto), TextureScale = runeScale }; @@ -99,10 +99,7 @@ private RadialMenu FormMenu() Close(); }; - mainContainer.AddChild(button); + container.AddChild(button); } - - menu.AddChild(mainContainer); - return menu; } } diff --git a/Content.Server/Chat/Systems/ChatSystem.Emote.cs b/Content.Server/Chat/Systems/ChatSystem.Emote.cs index 724cf8f2bb1..3ee94072ca2 100644 --- a/Content.Server/Chat/Systems/ChatSystem.Emote.cs +++ b/Content.Server/Chat/Systems/ChatSystem.Emote.cs @@ -176,7 +176,7 @@ private void TryEmoteChatInput(EntityUid uid, string textInput) private void InvokeEmoteEvent(EntityUid uid, EmotePrototype proto) { var ev = new EmoteEvent(proto); - RaiseLocalEvent(uid, ref ev); + RaiseLocalEvent(uid, ref ev, true); // goob edit } } diff --git a/Content.Server/Emoting/AnimatedEmotesSystem.cs b/Content.Server/Emoting/AnimatedEmotesSystem.cs new file mode 100644 index 00000000000..cc4863d31f7 --- /dev/null +++ b/Content.Server/Emoting/AnimatedEmotesSystem.cs @@ -0,0 +1,28 @@ +using Robust.Shared.GameStates; +using Content.Server.Chat.Systems; +using Content.Shared.Chat.Prototypes; +using Content.Shared.Emoting; +using Robust.Shared.Prototypes; + +namespace Content.Server.Emoting; + +public sealed partial class AnimatedEmotesSystem : SharedAnimatedEmotesSystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnEmote); + } + + private void OnEmote(EntityUid uid, AnimatedEmotesComponent component, ref EmoteEvent args) + { + PlayEmoteAnimation(uid, component, args.Emote.ID); + } + + public void PlayEmoteAnimation(EntityUid uid, AnimatedEmotesComponent component, ProtoId prot) + { + component.Emote = prot; + Dirty(uid, component); + } +} diff --git a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs index daf76268a3c..26f0c20608e 100644 --- a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs +++ b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs @@ -53,22 +53,25 @@ private void OnMeleeExamineDamage(EntityUid uid, MeleeWeaponComponent component, return; var damageSpec = GetDamage(uid, args.User, component); - if (damageSpec.Empty) return; - _damageExamine.AddDamageExamine(args.Message, damageSpec, Loc.GetString("damage-melee")); - - if (damageSpec * component.HeavyDamageBaseModifier != damageSpec) - _damageExamine.AddDamageExamine(args.Message, damageSpec * component.HeavyDamageBaseModifier, Loc.GetString("damage-melee-heavy")); + if (!component.DisableClick) + _damageExamine.AddDamageExamine(args.Message, damageSpec, Loc.GetString("damage-melee")); - if (component.HeavyStaminaCost != 0) + if (!component.DisableHeavy) { - var staminaCostMarkup = FormattedMessage.FromMarkupOrThrow( - Loc.GetString("damage-stamina-cost", - ("type", Loc.GetString("damage-melee-heavy")), ("cost", component.HeavyStaminaCost))); - args.Message.PushNewline(); - args.Message.AddMessage(staminaCostMarkup); + if (damageSpec * component.HeavyDamageBaseModifier != damageSpec) + _damageExamine.AddDamageExamine(args.Message, damageSpec * component.HeavyDamageBaseModifier, Loc.GetString("damage-melee-heavy")); + + if (component.HeavyStaminaCost != 0) + { + var staminaCostMarkup = FormattedMessage.FromMarkupOrThrow( + Loc.GetString("damage-stamina-cost", + ("type", Loc.GetString("damage-melee-heavy")), ("cost", component.HeavyStaminaCost))); + args.Message.PushNewline(); + args.Message.AddMessage(staminaCostMarkup); + } } } diff --git a/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesAuraComponent.cs b/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesAuraComponent.cs index 09e92b31c5a..081e0e04c6e 100644 --- a/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesAuraComponent.cs +++ b/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesAuraComponent.cs @@ -51,6 +51,9 @@ public sealed partial class BloodRitesAuraComponent : Component [DataField] public FixedPoint2 TotalHealing = 20; + [DataField] + public float PuddleConsumeRadius = 0.5f; + [DataField] public SoundSpecifier BloodRitesAudio = new SoundPathSpecifier( new ResPath("/Audio/WhiteDream/BloodCult/rites.ogg"), diff --git a/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesSystem.cs b/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesSystem.cs index 76adc9bde89..63b1c08aaca 100644 --- a/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/BloodRites/BloodRitesSystem.cs @@ -10,7 +10,9 @@ using Content.Shared.Damage.Prototypes; using Content.Shared.DoAfter; using Content.Shared.Examine; +using Content.Shared.Fluids.Components; using Content.Shared.Interaction; +using Content.Shared.Interaction.Events; using Content.Shared.Mobs; using Content.Shared.Mobs.Components; using Content.Shared.UserInterface; @@ -34,6 +36,7 @@ public sealed class BloodRitesSystem : EntitySystem [Dependency] private readonly DamageableSystem _damageable = default!; [Dependency] private readonly DoAfterSystem _doAfter = default!; [Dependency] private readonly HandsSystem _handsSystem = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly TransformSystem _transform = default!; [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; @@ -52,6 +55,8 @@ public override void Initialize() SubscribeLocalEvent(BeforeUiOpen); SubscribeLocalEvent(OnRitesMessage); + + SubscribeLocalEvent(OnDropped); } private void OnExamining(Entity rites, ref ExaminedEvent args) => @@ -83,19 +88,16 @@ private void OnAfterInteract(Entity rites, ref AfterInt return; } - if (!TryComp(args.Target, out SolutionContainerManagerComponent? solutionContainer)) // please send help - return; - - foreach (var (_, solution) in _solutionContainer.EnumerateSolutions((args.Target.Value, solutionContainer))) + if (HasComp(args.Target)) { - // I don't think something will ever have more than 1000 blood units in it's solution... - rites.Comp.StoredBlood += solution.Comp.Solution.RemoveReagent(_bloodProto, 1000); - _solutionContainer.UpdateChemicals(solution); - break; + ConsumePuddles(args.Target.Value, rites); + args.Handled = true; + } + else if (TryComp(args.Target, out SolutionContainerManagerComponent? solutionContainer)) + { + ConsumeBloodFromSolution((args.Target.Value, solutionContainer), rites); + args.Handled = true; } - - _audio.PlayPvs(rites.Comp.BloodRitesAudio, rites); - args.Handled = true; } private void OnDoAfter(Entity rites, ref BloodRitesExtractDoAfterEvent args) @@ -154,6 +156,8 @@ private void OnRitesMessage(Entity rites, ref BloodRite _handsSystem.TryPickup(args.Actor, ent); } + private void OnDropped(Entity rites, ref DroppedEvent args) => QueueDel(rites); + private bool Heal(Entity rites, EntityUid user, Entity target) { if (target.Comp.TotalDamage == 0) @@ -234,4 +238,36 @@ Entity target rites.Comp.StoredBlood -= bloodCost; return true; } + + private void ConsumePuddles(EntityUid origin, Entity rites) + { + var coords = Transform(origin).Coordinates; + + var lookup = _lookup.GetEntitiesInRange( + coords, + rites.Comp.PuddleConsumeRadius, + LookupFlags.Uncontained); + + foreach (var puddle in lookup) + { + if (!TryComp(puddle, out SolutionContainerManagerComponent? solutionContainer)) + continue; + ConsumeBloodFromSolution((puddle, solutionContainer), rites); + } + + _audio.PlayPvs(rites.Comp.BloodRitesAudio, rites); + } + + private void ConsumeBloodFromSolution( + Entity ent, + Entity rites + ) + { + foreach (var (_, solution) in _solutionContainer.EnumerateSolutions(ent)) + { + rites.Comp.StoredBlood += solution.Comp.Solution.RemoveReagent(_bloodProto, 1000); + _solutionContainer.UpdateChemicals(solution); + break; + } + } } diff --git a/Content.Server/WhiteDream/BloodCult/ConstructActionsSystem.cs b/Content.Server/WhiteDream/BloodCult/ConstructActionsSystem.cs new file mode 100644 index 00000000000..3d5e4ae44cb --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/ConstructActionsSystem.cs @@ -0,0 +1,67 @@ +using Content.Server.WhiteDream.BloodCult.Constructs.PhaseShift; +using Content.Shared.StatusEffect; +using Content.Shared.WhiteDream.BloodCult.Spells; +using Robust.Server.Audio; +using Robust.Server.GameObjects; +using Robust.Shared.Map; +using Robust.Shared.Map.Components; +using PhaseShiftedComponent = Content.Shared.WhiteDream.BloodCult.Constructs.PhaseShift.PhaseShiftedComponent; + +namespace Content.Server.WhiteDream.BloodCult; + +public sealed class ConstructActionsSystem : EntitySystem +{ + [Dependency] private readonly ITileDefinitionManager _tileDef = default!; + + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly MapSystem _mapSystem = default!; + [Dependency] private readonly TransformSystem _transform = default!; + [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; + + private const string CultTileSpawnEffect = "CultTileSpawnEffect"; + + public override void Initialize() + { + SubscribeLocalEvent(OnPlaceTileEntityEvent); + SubscribeLocalEvent(OnPhaseShift); + } + + private void OnPlaceTileEntityEvent(PlaceTileEntityEvent args) + { + if (args.Handled) + return; + + if (args.Entity is { } entProtoId) + Spawn(entProtoId, args.Target); + + if (args.TileId is { } tileId) + { + if (_transform.GetGrid(args.Target) is not { } grid || !TryComp(grid, out MapGridComponent? mapGrid)) + return; + + var tileDef = _tileDef[tileId]; + var tile = new Tile(tileDef.TileId); + + _mapSystem.SetTile(grid, mapGrid, args.Target, tile); + Spawn(CultTileSpawnEffect, args.Target); + } + + if (args.Audio is { } audio) + _audio.PlayPvs(audio, args.Target); + + args.Handled = true; + } + + private void OnPhaseShift(PhaseShiftEvent args) + { + if (args.Handled) + return; + + if (_statusEffects.TryAddStatusEffect( + args.Performer, + args.StatusEffectId, + args.Duration, + false)) + args.Handled = true; + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Constructs/ConstructSystem.cs b/Content.Server/WhiteDream/BloodCult/Constructs/ConstructSystem.cs index fbb800eb0ba..c07f56a585b 100644 --- a/Content.Server/WhiteDream/BloodCult/Constructs/ConstructSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Constructs/ConstructSystem.cs @@ -1,4 +1,5 @@ -using Content.Server.WhiteDream.BloodCult.Gamerule; +using Content.Server.Actions; +using Content.Server.WhiteDream.BloodCult.Gamerule; using Content.Shared.WhiteDream.BloodCult; using Content.Shared.WhiteDream.BloodCult.Constructs; using Robust.Server.GameObjects; @@ -7,13 +8,14 @@ namespace Content.Server.WhiteDream.BloodCult.Constructs; public sealed class ConstructSystem : EntitySystem { + [Dependency] private readonly ActionsSystem _actions = default!; [Dependency] private readonly AppearanceSystem _appearanceSystem = default!; public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnComponentStartup); + SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnComponentShutdown); } @@ -37,23 +39,28 @@ public override void Update(float frameTime) } } - private void OnComponentStartup(Entity ent, ref ComponentStartup args) + private void OnMapInit(Entity construct, ref MapInitEvent args) { - _appearanceSystem.SetData(ent, ConstructVisualsState.Transforming, true); - ent.Comp.Transforming = true; - var cultistRule = EntityManager.EntityQueryEnumerator(); - while (cultistRule.MoveNext(out _, out var rule)) + foreach (var actionId in construct.Comp.Actions) { - rule.Constructs.Add(ent); + var action = _actions.AddAction(construct, actionId); + construct.Comp.ActionEntities.Add(action); } + + _appearanceSystem.SetData(construct, ConstructVisualsState.Transforming, true); + construct.Comp.Transforming = true; + var cultistRule = EntityManager.EntityQueryEnumerator(); + while (cultistRule.MoveNext(out _, out var rule)) + rule.Constructs.Add(construct); } - private void OnComponentShutdown(Entity ent, ref ComponentShutdown args) + private void OnComponentShutdown(Entity construct, ref ComponentShutdown args) { + foreach (var actionEntity in construct.Comp.ActionEntities) + _actions.RemoveAction(actionEntity); + var cultistRule = EntityManager.EntityQueryEnumerator(); while (cultistRule.MoveNext(out _, out var rule)) - { - rule.Constructs.Remove(ent); - } + rule.Constructs.Remove(construct); } } diff --git a/Content.Server/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftSystem.cs b/Content.Server/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftSystem.cs new file mode 100644 index 00000000000..1885b42d222 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftSystem.cs @@ -0,0 +1,34 @@ +using Content.Shared.Eye; +using Content.Shared.WhiteDream.BloodCult.Constructs.PhaseShift; +using Robust.Server.GameObjects; + +namespace Content.Server.WhiteDream.BloodCult.Constructs.PhaseShift; + +public sealed class PhaseShiftSystem : SharedPhaseShiftSystem +{ + [Dependency] private readonly VisibilitySystem _visibilitySystem = default!; + + protected override void OnComponentStartup(Entity ent, ref ComponentStartup args) + { + base.OnComponentStartup(ent, ref args); + + if (!TryComp(ent, out var visibility)) + return; + + _visibilitySystem.AddLayer((ent, visibility), (int) VisibilityFlags.Ghost, false); + _visibilitySystem.RemoveLayer((ent, visibility), (int) VisibilityFlags.Normal, false); + _visibilitySystem.RefreshVisibility(ent); + } + + protected override void OnComponentShutdown(Entity ent, ref ComponentShutdown args) + { + base.OnComponentShutdown(ent, ref args); + + if (!TryComp(ent, out var visibility)) + return; + + _visibilitySystem.RemoveLayer((ent, visibility), (int) VisibilityFlags.Ghost, false); + _visibilitySystem.AddLayer((ent, visibility), (int) VisibilityFlags.Normal, false); + _visibilitySystem.RefreshVisibility(ent); + } +} diff --git a/Content.Server/WhiteDream/BloodCult/Constructs/SoulShard/SoulShardSystem.cs b/Content.Server/WhiteDream/BloodCult/Constructs/SoulShard/SoulShardSystem.cs index 50e92bf2770..7a8578b665f 100644 --- a/Content.Server/WhiteDream/BloodCult/Constructs/SoulShard/SoulShardSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Constructs/SoulShard/SoulShardSystem.cs @@ -27,12 +27,22 @@ public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnInteractUsing); SubscribeLocalEvent(OnActivate); SubscribeLocalEvent(OnShardMindAdded); SubscribeLocalEvent(OnShardMindRemoved); } + private void OnMapInit(Entity shard, ref MapInitEvent args) + { + if (!shard.Comp.IsBlessed) + return; + + _appearanceSystem.SetData(shard, SoulShardVisualState.Blessed, true); + _lightSystem.SetColor(shard, shard.Comp.BlessedLightColor); + } + private void OnActivate(Entity shard, ref ActivateInWorldEvent args) { if (!_mind.TryGetMind(shard, out var mindId, out _)) @@ -76,10 +86,8 @@ private void OnShardMindAdded(Entity shard, ref MindAddedMes UpdateGlowVisuals(shard, true); } - private void OnShardMindRemoved(Entity shard, ref MindRemovedMessage args) - { + private void OnShardMindRemoved(Entity shard, ref MindRemovedMessage args) => UpdateGlowVisuals(shard, false); - } private void SpawnShade(Entity shard, EntProtoId proto, EntityUid mindId) { diff --git a/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleComponent.cs b/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleComponent.cs index 09dc2b542fb..d0a1991a9fd 100644 --- a/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleComponent.cs +++ b/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleComponent.cs @@ -1,4 +1,5 @@ using Content.Server.NPC.Components; +using Content.Server.WhiteDream.BloodCult.RendingRunePlacement; using Content.Shared.WhiteDream.BloodCult.BloodCultist; using Content.Shared.WhiteDream.BloodCult.Constructs; using Robust.Shared.Prototypes; @@ -26,9 +27,21 @@ public sealed partial class BloodCultRuleComponent : Component [DataField] public int PentagramThreshold = 8; + [DataField] + public int RendingRunePlacementsAmount = 3; + [ViewVariables(VVAccess.ReadOnly)] public bool LeaderSelected; + /// + /// If no rending rune markers were placed on the map, players will be able to place these runes anywhere on the map + /// but no more than total available. + /// + [DataField] + public bool EmergencyMarkersMode; + + public int EmergencyMarkersCount; + /// /// The entityUid of body which should be sacrificed. /// diff --git a/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleSystem.cs b/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleSystem.cs index c753d929134..bfb06c85ccf 100644 --- a/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Gamerule/BloodCultRuleSystem.cs @@ -3,36 +3,39 @@ using Content.Server.Actions; using Content.Server.Antag; using Content.Server.Antag.Components; +using Content.Server.Body.Systems; using Content.Server.GameTicking; using Content.Server.GameTicking.Rules; using Content.Server.Hands.Systems; using Content.Server.Language; +using Content.Server.Mind; using Content.Server.NPC.Systems; +using Content.Server.Pinpointer; using Content.Server.Roles; using Content.Server.RoundEnd; -using Content.Server.StationEvents.Components; using Content.Server.WhiteDream.BloodCult.Items.BloodSpear; using Content.Server.WhiteDream.BloodCult.Objectives; +using Content.Server.WhiteDream.BloodCult.RendingRunePlacement; using Content.Server.WhiteDream.BloodCult.Spells; -using Content.Shared.Body.Systems; using Content.Shared.Cloning; using Content.Shared.Cuffs.Components; using Content.Shared.GameTicking.Components; using Content.Shared.Humanoid; using Content.Shared.Inventory; -using Content.Shared.Mind; using Content.Shared.Mind.Components; using Content.Shared.Mobs; +using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; using Content.Shared.Mood; using Content.Shared.Movement.Pulling.Components; -using Content.Shared.Roles; using Content.Shared.WhiteDream.BloodCult.Components; using Content.Shared.WhiteDream.BloodCult.BloodCultist; using Content.Shared.WhiteDream.BloodCult.Items; using Robust.Server.Containers; +using Robust.Server.GameObjects; using Robust.Shared.Player; using Robust.Shared.Random; +using Robust.Shared.Utility; namespace Content.Server.WhiteDream.BloodCult.Gamerule; @@ -43,16 +46,18 @@ public sealed class BloodCultRuleSystem : GameRuleSystem [Dependency] private readonly ActionsSystem _actions = default!; [Dependency] private readonly AntagSelectionSystem _antagSelection = default!; [Dependency] private readonly BloodSpearSystem _bloodSpear = default!; + [Dependency] private readonly BodySystem _body = default!; [Dependency] private readonly ContainerSystem _container = default!; [Dependency] private readonly HandsSystem _hands = default!; - [Dependency] private readonly InventorySystem _inventorySystem = default!; - [Dependency] private readonly LanguageSystem _languageSystem = default!; - [Dependency] private readonly NpcFactionSystem _factionSystem = default!; - [Dependency] private readonly MobStateSystem _mobStateSystem = default!; - [Dependency] private readonly RoundEndSystem _roundEndSystem = default!; - [Dependency] private readonly SharedBodySystem _bodySystem = default!; - [Dependency] private readonly SharedRoleSystem _roleSystem = default!; - [Dependency] private readonly SharedMindSystem _mindSystem = default!; + [Dependency] private readonly InventorySystem _inventory = default!; + [Dependency] private readonly LanguageSystem _language = default!; + [Dependency] private readonly NavMapSystem _navMap = default!; + [Dependency] private readonly NpcFactionSystem _faction = default!; + [Dependency] private readonly MindSystem _mind = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly RoleSystem _role = default!; + [Dependency] private readonly RoundEndSystem _roundEnd = default!; + [Dependency] private readonly TransformSystem _transform = default!; public override void Initialize() { @@ -79,7 +84,7 @@ GameRuleStartedEvent args { base.Started(uid, component, gameRule, args); - component.OfferingTarget = FindTarget(); + GetRandomRunePlacements(component); } protected override void AppendRoundEndText( @@ -103,6 +108,8 @@ ref RoundEndTextAppendEvent args } } + #region EventHandlers + private void AfterEntitySelected(Entity ent, ref AfterAntagEntitySelectedEvent args) => MakeCultist(args.EntityUid, ent); @@ -112,7 +119,7 @@ private void OnNarsieSummon(BloodCultNarsieSummoned ev) while (rulesQuery.MoveNext(out _, out var cult, out _)) { cult.WinCondition = CultWinCondition.Win; - _roundEndSystem.EndRound(); + _roundEnd.EndRound(); foreach (var ent in cult.Cultists) { @@ -121,8 +128,8 @@ private void OnNarsieSummon(BloodCultNarsieSummoned ev) continue; var harvester = Spawn(cult.HarvesterPrototype, Transform(ent.Owner).Coordinates); - _mindSystem.TransferTo(mindContainer.Mind.Value, harvester); - _bodySystem.GibBody(ent); + _mind.TransferTo(mindContainer.Mind.Value, harvester); + _body.GibBody(ent); } return; @@ -132,7 +139,7 @@ private void OnNarsieSummon(BloodCultNarsieSummoned ev) private void OnCultistComponentInit(Entity cultist, ref ComponentInit args) { RaiseLocalEvent(cultist, new MoodEffectEvent("CultFocused")); - _languageSystem.AddLanguage(cultist, cultist.Comp.CultLanguageId); + _language.AddLanguage(cultist, cultist.Comp.CultLanguageId); var query = QueryActiveRules(); while (query.MoveNext(out _, out var cult, out _)) @@ -148,7 +155,7 @@ private void OnCultistComponentRemoved(Entity cultist, re while (query.MoveNext(out _, out var cult, out _)) cult.Cultists.Remove(cultist); - CheckRoundShouldEnd(); + CheckWinCondition(); if (TerminatingOrDeleted(cultist.Owner)) return; @@ -157,7 +164,7 @@ private void OnCultistComponentRemoved(Entity cultist, re RemoveCultistAppearance(cultist); RemoveObjectiveAndRole(cultist.Owner); RaiseLocalEvent(cultist.Owner, new MoodRemoveEffectEvent("CultFocused")); - _languageSystem.RemoveLanguage(cultist.Owner, cultist.Comp.CultLanguageId); + _language.RemoveLanguage(cultist.Owner, cultist.Comp.CultLanguageId); if (!TryComp(cultist, out BloodCultSpellsHolderComponent? powersHolder)) return; @@ -166,16 +173,46 @@ private void OnCultistComponentRemoved(Entity cultist, re _actions.RemoveAction(cultist.Owner, power); } - private void OnCultistsStateChanged(Entity ent, ref MobStateChangedEvent args) + private void OnCultistsStateChanged(Entity cultist, ref MobStateChangedEvent args) { if (args.NewMobState == MobState.Dead) - CheckRoundShouldEnd(); + CheckWinCondition(); } - private void OnClone(Entity ent, ref CloningEvent args) => RemoveObjectiveAndRole(ent); + private void OnClone(Entity cultist, ref CloningEvent args) => + RemoveObjectiveAndRole(cultist); - private void OnGetBriefing(Entity ent, ref GetBriefingEvent args) => + private void OnGetBriefing(Entity cultist, ref GetBriefingEvent args) + { args.Append(Loc.GetString("blood-cult-role-briefing-short")); + var rulesQuery = QueryActiveRules(); + while (rulesQuery.MoveNext(out _, out var rule, out _)) + { + if (!rule.EmergencyMarkersMode) + continue; + + args.Append( + Loc.GetString("blood-cult-role-briefing-emergency-rending", ("amount", rule.EmergencyMarkersCount))); + return; + } + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var marker)) + { + if (!marker.IsActive) + continue; + + var navMapLocation = FormattedMessage.RemoveMarkupPermissive(_navMap.GetNearestBeaconString(uid)); + var coordinates = Transform(uid).Coordinates; + var msg = Loc.GetString( + "blood-cult-role-briefing-rending-locations", + ("location", navMapLocation), + ("coordinates", coordinates.Position)); + args.Append(Loc.GetString(msg)); + } + } + + #endregion public void Convert(EntityUid target) { @@ -190,12 +227,15 @@ public void Convert(EntityUid target) var antagSelectionEnt = (ruleUid, antagSelection); if (!_antagSelection.TryGetNextAvailableDefinition(antagSelectionEnt, out var def)) - continue; + def = antagSelection.Definitions.Last(); _antagSelection.MakeAntag(antagSelectionEnt, actor.PlayerSession, def.Value); } } + public bool IsObjectiveFinished() => + !TryGetTarget(out var target) || !HasComp(target) || _mobState.IsDead(target.Value); + public bool TryGetTarget([NotNullWhen(true)] out EntityUid? target) { target = GetTarget(); @@ -215,77 +255,151 @@ public bool TryGetTarget([NotNullWhen(true)] out EntityUid? target) public bool IsTarget(EntityUid entityUid) { var query = QueryActiveRules(); - while (query.MoveNext(out _, out var bloodCultRule, out _)) - return entityUid == bloodCultRule.OfferingTarget; + while (query.MoveNext(out _, out var rule, out _)) + return entityUid == rule.OfferingTarget; return false; } + public int GetTotalCultists() + { + var query = QueryActiveRules(); + while (query.MoveNext(out _, out var rule, out _)) + return rule.Cultists.Count + rule.Constructs.Count; + + return 0; + } + public void RemoveObjectiveAndRole(EntityUid uid) { - if (!_mindSystem.TryGetMind(uid, out var mindId, out var mind)) + if (!_mind.TryGetMind(uid, out var mindId, out var mind)) return; var objectives = mind.Objectives.FindAll(HasComp); foreach (var obj in objectives) - _mindSystem.TryRemoveObjective(mindId, mind, mind.Objectives.IndexOf(obj)); + _mind.TryRemoveObjective(mindId, mind, mind.Objectives.IndexOf(obj)); + + if (_role.MindHasRole(mindId)) + _role.MindRemoveRole(mindId); + } + + public bool CanDrawRendingRune(EntityUid user) + { + var ruleQuery = QueryActiveRules(); + while (ruleQuery.MoveNext(out _, out var rule, out _)) + if (rule is { EmergencyMarkersMode: true, EmergencyMarkersCount: > 0 }) + { + rule.EmergencyMarkersCount--; + return true; + } + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var marker)) + { + if (!marker.IsActive) + continue; + + var userLocation = Transform(user).Coordinates; + var placementCoordinates = Transform(uid).Coordinates; + if (_transform.InRange(placementCoordinates, userLocation, marker.DrawingRange)) + return true; + } + + return false; + } + + public void SetRandomCultTarget(BloodCultRuleComponent rule) + { + var querry = EntityManager + .EntityQueryEnumerator(); + + var potentialTargets = new List(); + + // Cultists not being excluded from target selection is fully intended. + while (querry.MoveNext(out var uid, out _, out _, out _)) + potentialTargets.Add(uid); - if (_roleSystem.MindHasRole(mindId)) - _roleSystem.MindRemoveRole(mindId); + rule.OfferingTarget = potentialTargets.Count > 0 ? _random.Pick(potentialTargets) : null; } - private void CheckRoundShouldEnd() + public bool TryConsumeNearestMarker(EntityUid user) + { + var ruleQuery = QueryActiveRules(); + while (ruleQuery.MoveNext(out _, out var rule, out _)) + if (rule is { EmergencyMarkersMode: true, EmergencyMarkersCount: > 0 }) + { + rule.EmergencyMarkersCount--; + return true; + } + + var userLocation = Transform(user).Coordinates; + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var markerUid, out var marker)) + { + if (!marker.IsActive) + continue; + + var placementCoordinates = Transform(markerUid).Coordinates; + if (!_transform.InRange(placementCoordinates, userLocation, marker.DrawingRange)) + continue; + + marker.IsActive = false; + break; + } + + return false; + } + + private void CheckWinCondition() { var query = QueryActiveRules(); while (query.MoveNext(out _, out var cult, out _)) { - var aliveCultists = cult.Cultists.Count(cultist => !_mobStateSystem.IsDead(cultist)); + var aliveCultists = cult.Cultists.Count(cultist => !_mobState.IsDead(cultist)); if (aliveCultists != 0) return; cult.WinCondition = CultWinCondition.Failure; - - // Check for all at once gamemode - if (!GameTicker.GetActiveGameRules().Where(HasComp).Any()) - _roundEndSystem.EndRound(); } } private void MakeCultist(EntityUid cultist, Entity rule) { - if (!_mindSystem.TryGetMind(cultist, out var mindId, out var mind)) + if (!_mind.TryGetMind(cultist, out var mindId, out var mind)) return; EnsureComp(cultist); - _factionSystem.RemoveFaction(cultist, rule.Comp.NanoTrasenFaction); - _factionSystem.AddFaction(cultist, rule.Comp.BloodCultFaction); + _faction.RemoveFaction(cultist, rule.Comp.NanoTrasenFaction); + _faction.AddFaction(cultist, rule.Comp.BloodCultFaction); - _mindSystem.TryAddObjective(mindId, mind, "KillTargetCultObjective"); + _mind.TryAddObjective(mindId, mind, "KillTargetCultObjective"); } - private EntityUid? FindTarget(ICollection exclude = null!) + private void GetRandomRunePlacements(BloodCultRuleComponent component) { - var querry = EntityManager - .EntityQueryEnumerator(); + var allMarkers = EntityQuery().ToList(); + if (allMarkers.Count == 0) + { + component.EmergencyMarkersMode = true; + component.EmergencyMarkersCount = component.RendingRunePlacementsAmount; + return; + } - var potentialTargets = new List(); + var maxRunes = component.RendingRunePlacementsAmount; + if (allMarkers.Count < component.RendingRunePlacementsAmount) + maxRunes = allMarkers.Count; - while (querry.MoveNext(out var uid, out var mind, out _, out _)) + for (var i = maxRunes; i > 0; i--) { - var entity = mind.Mind; - if (entity == default || exclude?.Contains(uid) is true || HasComp(uid)) - continue; - - potentialTargets.Add(uid); + var marker = _random.PickAndTake(allMarkers); + marker.IsActive = true; } - - return potentialTargets.Count > 0 ? _random.Pick(potentialTargets) : null; } private void RemoveAllCultItems(Entity cultist) { - if (!_inventorySystem.TryGetContainerSlotEnumerator(cultist.Owner, out var enumerator)) + if (!_inventory.TryGetContainerSlotEnumerator(cultist.Owner, out var enumerator)) return; _bloodSpear.DetachSpearFromMaster(cultist); diff --git a/Content.Server/WhiteDream/BloodCult/Items/VeilShifter/VeilShifterSystem.cs b/Content.Server/WhiteDream/BloodCult/Items/VeilShifter/VeilShifterSystem.cs index 188006e2196..876cccf9ecc 100644 --- a/Content.Server/WhiteDream/BloodCult/Items/VeilShifter/VeilShifterSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Items/VeilShifter/VeilShifterSystem.cs @@ -1,5 +1,6 @@ using Content.Server.Popups; using Content.Shared.Coordinates.Helpers; +using Content.Shared.Examine; using Content.Shared.Interaction.Events; using Content.Shared.Maps; using Content.Shared.Movement.Pulling.Systems; @@ -27,20 +28,23 @@ public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnUseInHand); } + private void OnExamined(Entity veil, ref ExaminedEvent args) => + args.PushMarkup(Loc.GetString("veil-shifter-description", ("charges", veil.Comp.Charges))); + private void OnUseInHand(Entity veil, ref UseInHandEvent args) { - if (veil.Comp.Charges == 0) - return; - - if (!Teleport(veil, args.User)) + if (args.Handled || veil.Comp.Charges == 0 || !Teleport(veil, args.User)) return; veil.Comp.Charges--; if (veil.Comp.Charges == 0) _appearance.SetData(veil, GenericCultVisuals.State, false); + + args.Handled = true; } private bool Teleport(Entity veil, EntityUid user) diff --git a/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultComponent.cs b/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultComponent.cs index 8c500a04328..423252b6e3c 100644 --- a/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultComponent.cs +++ b/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultComponent.cs @@ -7,5 +7,5 @@ public sealed partial class KillTargetCultComponent : Component public string Title = string.Empty; [DataField, ViewVariables(VVAccess.ReadWrite)] - public EntityUid Target; + public EntityUid? Target; } diff --git a/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultSystem.cs b/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultSystem.cs index b2ef487790e..75e21d68003 100644 --- a/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Objectives/KillTargetCultSystem.cs @@ -9,6 +9,7 @@ namespace Content.Server.WhiteDream.BloodCult.Objectives; public sealed class KillTargetCultSystem : EntitySystem { + [Dependency] private readonly BloodCultRuleSystem _cultRule = default!; [Dependency] private readonly JobSystem _job = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly MobStateSystem _mobState = default!; @@ -23,22 +24,35 @@ public override void Initialize() private void OnObjectiveAssigned(Entity ent, ref ObjectiveAssignedEvent args) { var cultistRule = EntityManager.EntityQuery().FirstOrDefault(); - if (cultistRule?.OfferingTarget is { } target) - ent.Comp.Target = target; + if (cultistRule is null) + return; + + if (cultistRule.OfferingTarget is null) + _cultRule.SetRandomCultTarget(cultistRule); + + ent.Comp.Target = cultistRule.OfferingTarget; } private void OnAfterAssign(Entity ent, ref ObjectiveAfterAssignEvent args) { - _metaData.SetEntityName(ent, GetTitle(ent.Comp.Target, ent.Comp.Title), args.Meta); + if (!ent.Comp.Target.HasValue || !ent.Owner.IsValid() || !HasComp(ent)) + return; + + _metaData.SetEntityName(ent, GetTitle(ent.Comp.Target.Value, ent.Comp.Title), args.Meta); } private void OnGetProgress(Entity ent, ref ObjectiveGetProgressEvent args) { var target = ent.Comp.Target; + if (!target.HasValue) + { + args.Progress = 1f; + return; + } - args.Progress = !HasComp(target) || _mobState.IsDead(target) - ? args.Progress = 1f - : args.Progress = 0f; + args.Progress = !HasComp(target) || _mobState.IsDead(target.Value) + ? 1f + : 0f; } private string GetTitle(EntityUid target, string title) diff --git a/Content.Server/WhiteDream/BloodCult/RendingRunePlacement/RendingRunePlacementMarkerComponent.cs b/Content.Server/WhiteDream/BloodCult/RendingRunePlacement/RendingRunePlacementMarkerComponent.cs new file mode 100644 index 00000000000..44d15e88521 --- /dev/null +++ b/Content.Server/WhiteDream/BloodCult/RendingRunePlacement/RendingRunePlacementMarkerComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Server.WhiteDream.BloodCult.RendingRunePlacement; + +[RegisterComponent] +public sealed partial class RendingRunePlacementMarkerComponent : Component +{ + [DataField] + public bool IsActive; + + [DataField] + public float DrawingRange = 10; +} diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Apocalypse/CultRuneApocalypseSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/Apocalypse/CultRuneApocalypseSystem.cs index 60b889e7496..745ea042caf 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/Apocalypse/CultRuneApocalypseSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/Apocalypse/CultRuneApocalypseSystem.cs @@ -54,15 +54,14 @@ private void OnDoAfter(Entity ent, ref ApocalypseRu ent.Comp.Used = true; _appearance.SetData(ent, ApocalypseRuneVisuals.Used, true); - _emp.EmpPulse(_transform.GetMapCoordinates(ent), + _emp.EmpPulse( + _transform.GetMapCoordinates(ent), ent.Comp.EmpRange, ent.Comp.EmpEnergyConsumption, ent.Comp.EmpDuration); foreach (var guaranteedEvent in ent.Comp.GuaranteedEvents) - { _gameTicker.StartGameRule(guaranteedEvent); - } var requiredCultistsThreshold = MathF.Floor(_playerManager.PlayerCount * ent.Comp.CultistsThreshold); var totalCultists = cultRule.Cultists.Count + cultRule.Constructs.Count; @@ -71,8 +70,6 @@ private void OnDoAfter(Entity ent, ref ApocalypseRu var (randomEvent, repeatTimes) = _random.Pick(ent.Comp.PossibleEvents); for (var i = 0; i < repeatTimes; i++) - { _gameTicker.StartGameRule(randomEvent); - } } } diff --git a/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseComponent.cs b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseComponent.cs index 023112a6ef4..fcfe7a65a02 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseComponent.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseComponent.cs @@ -1,4 +1,5 @@ using Content.Shared.Chat; +using Content.Shared.Chemistry.Reagent; using Content.Shared.Damage; using Content.Shared.Humanoid; using Robust.Shared.Prototypes; @@ -26,7 +27,16 @@ public sealed partial class CultRuneBaseComponent : Component [DataField] public DamageSpecifier? ActivationDamage; - public EntProtoId HolyWaterPrototype = "HolyWater"; + /// + /// Will the rune upon activation set nearest Rending Rune Placement Marker to disabled. + /// + [DataField] + public bool TriggerRendingMarkers; + + [DataField] + public bool CanBeErased = true; + + public ProtoId HolyWaterPrototype = "HolyWater"; } public sealed class TryInvokeCultRuneEvent(EntityUid user, HashSet invokers) : CancellableEntityEventArgs diff --git a/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.Helpers.cs b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.Helpers.cs index ec81af67761..3e03ec1b0df 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.Helpers.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.Helpers.cs @@ -27,9 +27,11 @@ public HashSet GatherCultists(EntityUid rune, float range) /// The rune itself. /// Radius for a lookup. /// Filter to exlude from return. - public HashSet> GetTargetsNearRune(EntityUid rune, + public HashSet> GetTargetsNearRune( + EntityUid rune, float range, - Predicate>? exlude = null) + Predicate>? exlude = null + ) { var runeTransform = Transform(rune); var possibleTargets = _lookup.GetEntitiesInRange(runeTransform.Coordinates, range); diff --git a/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.cs index 0ad21e63693..013b8df6cdd 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/CultRuneBaseSystem.cs @@ -7,13 +7,18 @@ using Content.Server.Fluids.Components; using Content.Server.Popups; using Content.Server.WhiteDream.BloodCult.Empower; +using Content.Server.WhiteDream.BloodCult.Gamerule; using Content.Shared.Chemistry.Components.SolutionManager; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Damage; using Content.Shared.DoAfter; +using Content.Shared.Examine; +using Content.Shared.Ghost; using Content.Shared.Interaction; using Content.Shared.Maps; +using Content.Shared.UserInterface; using Content.Shared.WhiteDream.BloodCult.BloodCultist; +using Content.Shared.WhiteDream.BloodCult.Constructs; using Content.Shared.WhiteDream.BloodCult.Runes; using Robust.Server.Audio; using Robust.Server.GameObjects; @@ -28,18 +33,19 @@ public sealed partial class CultRuneBaseSystem : EntitySystem [Dependency] private readonly IPrototypeManager _protoManager = default!; [Dependency] private readonly AudioSystem _audio = default!; [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly BloodCultRuleSystem _cultRule = default!; [Dependency] private readonly DamageableSystem _damageable = default!; [Dependency] private readonly DoAfterSystem _doAfter = default!; [Dependency] private readonly TransformSystem _transform = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly UserInterfaceSystem _ui = default!; public override void Initialize() { - base.Initialize(); - // Drawing rune + SubscribeLocalEvent(BeforeOpenUi); SubscribeLocalEvent(OnRuneSelected); SubscribeLocalEvent(OnDrawRune); @@ -50,6 +56,26 @@ public override void Initialize() // Rune invoking SubscribeLocalEvent(OnRuneActivate); + + SubscribeLocalEvent(OnRuneExaminaAttempt); + } + + #region EventHandlers + + private void BeforeOpenUi(Entity ent, ref BeforeActivatableUIOpenEvent args) + { + var availableRunes = new List>(); + var runeSelectorArray = _protoManager.EnumeratePrototypes().OrderBy(r => r.ID).ToArray(); + foreach (var runeSelector in runeSelectorArray) + { + if (runeSelector.RequireTargetDead && !_cultRule.IsObjectiveFinished() || + runeSelector.RequiredTotalCultists > _cultRule.GetTotalCultists()) + continue; + + availableRunes.Add(runeSelector.ID); + } + + _ui.SetUiState(ent.Owner, RuneDrawerBuiKey.Key, new RuneDrawerMenuState(availableRunes)); } private void OnRuneSelected(Entity ent, ref RuneDrawerSelectedMessage args) @@ -57,6 +83,12 @@ private void OnRuneSelected(Entity ent, ref RuneDrawerSelec if (!_protoManager.TryIndex(args.SelectedRune, out var runeSelector) || !CanDrawRune(args.Actor)) return; + if (runeSelector.RequireTargetDead && !_cultRule.CanDrawRendingRune(args.Actor)) + { + _popup.PopupEntity(Loc.GetString("cult-rune-cant-draw-rending"), args.Actor, args.Actor); + return; + } + var timeToDraw = runeSelector.DrawTime; if (TryComp(args.Actor, out BloodCultEmpoweredComponent? empowered)) timeToDraw *= empowered.RuneTimeMultiplier; @@ -85,18 +117,25 @@ private void OnDrawRune(Entity ent, ref DrawRuneDoAfter a DealDamage(args.User, runeSelector.DrawDamage); _audio.PlayPvs(args.EndDrawingSound, args.User, AudioParams.Default.WithMaxDistance(2f)); - var rune = SpawnRune(args.User, runeSelector.Prototype); + var runeEnt = SpawnRune(args.User, runeSelector.Prototype); + if (TryComp(runeEnt, out CultRuneBaseComponent? rune) + && rune.TriggerRendingMarkers + && !_cultRule.TryConsumeNearestMarker(ent)) + return; var ev = new AfterRunePlaced(args.User); - RaiseLocalEvent(rune, ev); + RaiseLocalEvent(runeEnt, ev); } - private void EraseOnInteractUsing(Entity ent, ref InteractUsingEvent args) + private void EraseOnInteractUsing(Entity rune, ref InteractUsingEvent args) { + if (!rune.Comp.CanBeErased) + return; + // Logic for bible erasing if (TryComp(args.Used, out var bible) && HasComp(args.User)) { - _popup.PopupEntity(Loc.GetString("cult-rune-erased"), ent, args.User); + _popup.PopupEntity(Loc.GetString("cult-rune-erased"), rune, args.User); _audio.PlayPvs(bible.HealSoundPath, args.User); EntityManager.DeleteEntity(args.Target); return; @@ -106,7 +145,7 @@ private void EraseOnInteractUsing(Entity ent, ref Interac return; var argsDoAfterEvent = - new DoAfterArgs(EntityManager, args.User, runeDrawer.EraseTime, new RuneEraseDoAfterEvent(), ent) + new DoAfterArgs(EntityManager, args.User, runeDrawer.EraseTime, new RuneEraseDoAfterEvent(), rune) { BreakOnUserMove = true, BreakOnDamage = true, @@ -114,7 +153,7 @@ private void EraseOnInteractUsing(Entity ent, ref Interac }; if (_doAfter.TryStartDoAfter(argsDoAfterEvent)) - _popup.PopupEntity(Loc.GetString("cult-rune-started-erasing"), ent, args.User); + _popup.PopupEntity(Loc.GetString("cult-rune-started-erasing"), rune, args.User); } private void OnRuneErase(Entity ent, ref RuneEraseDoAfterEvent args) @@ -126,55 +165,67 @@ private void OnRuneErase(Entity ent, ref RuneEraseDoAfter EntityManager.DeleteEntity(ent); } - private void EraseOnCollding(Entity ent, ref StartCollideEvent args) + private void EraseOnCollding(Entity rune, ref StartCollideEvent args) { - if (!TryComp(args.OtherEntity, out var solutionContainer) || + if (!rune.Comp.CanBeErased || + !TryComp(args.OtherEntity, out var solutionContainer) || !HasComp(args.OtherEntity) && !HasComp(args.OtherEntity)) return; if (_solutionContainer.EnumerateSolutions((args.OtherEntity, solutionContainer)) - .Any(solution => solution.Solution.Comp.Solution.ContainsPrototype(ent.Comp.HolyWaterPrototype))) - EntityManager.DeleteEntity(ent); + .Any(solution => solution.Solution.Comp.Solution.ContainsPrototype(rune.Comp.HolyWaterPrototype))) + EntityManager.DeleteEntity(rune); } - private void OnRuneActivate(Entity ent, ref ActivateInWorldEvent args) + private void OnRuneActivate(Entity rune, ref ActivateInWorldEvent args) { - var runeCoordinates = Transform(ent).Coordinates; + var runeCoordinates = Transform(rune).Coordinates; var userCoordinates = Transform(args.User).Coordinates; if (args.Handled || !HasComp(args.User) || !userCoordinates.TryDistance(EntityManager, runeCoordinates, out var distance) || - distance > ent.Comp.RuneActivationRange) + distance > rune.Comp.RuneActivationRange) return; args.Handled = true; - var cultists = GatherCultists(ent, ent.Comp.RuneActivationRange); - if (cultists.Count < ent.Comp.RequiredInvokers) + var cultists = GatherCultists(rune, rune.Comp.RuneActivationRange); + if (cultists.Count < rune.Comp.RequiredInvokers) { - _popup.PopupEntity(Loc.GetString("cult-rune-not-enough-cultists"), ent, args.User); + _popup.PopupEntity(Loc.GetString("cult-rune-not-enough-cultists"), rune, args.User); return; } var tryInvokeEv = new TryInvokeCultRuneEvent(args.User, cultists); - RaiseLocalEvent(ent, tryInvokeEv); + RaiseLocalEvent(rune, tryInvokeEv); if (tryInvokeEv.Cancelled) return; foreach (var cultist in cultists) { - DealDamage(cultist, ent.Comp.ActivationDamage); - _chat.TrySendInGameICMessage(cultist, - ent.Comp.InvokePhrase, - ent.Comp.InvokeChatType, + DealDamage(cultist, rune.Comp.ActivationDamage); + _chat.TrySendInGameICMessage( + cultist, + rune.Comp.InvokePhrase, + rune.Comp.InvokeChatType, false, checkRadioPrefix: false); } } + private void OnRuneExaminaAttempt(Entity rune, ref ExamineAttemptEvent args) + { + if (!HasComp(args.Examiner) && !HasComp(args.Examiner) && + !HasComp(args.Examiner)) + args.Cancel(); + } + + #endregion + private EntityUid SpawnRune(EntityUid user, EntProtoId rune) { var transform = Transform(user); - var snappedLocalPosition = new Vector2(MathF.Floor(transform.LocalPosition.X) + 0.5f, + var snappedLocalPosition = new Vector2( + MathF.Floor(transform.LocalPosition.X) + 0.5f, MathF.Floor(transform.LocalPosition.Y) + 0.5f); var spawnPosition = _transform.GetMapCoordinates(user); var runeEntity = EntityManager.Spawn(rune, spawnPosition); @@ -211,9 +262,7 @@ private void DealDamage(EntityUid user, DamageSpecifier? damage = null) if (TryComp(user, out BloodCultEmpoweredComponent? empowered)) { foreach (var (key, value) in damage.DamageDict) - { damage.DamageDict[key] = value * empowered.RuneDamageMultiplier; - } } _damageable.TryChangeDamage(user, newDamage, true); diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingComponent.cs b/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingComponent.cs index 06d750bfc82..5e594808d98 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingComponent.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingComponent.cs @@ -1,5 +1,6 @@ using Content.Shared.Damage; using Content.Shared.FixedPoint; +using Robust.Shared.Prototypes; namespace Content.Server.WhiteDream.BloodCult.Runes.Offering; @@ -30,10 +31,16 @@ public sealed partial class CultRuneOfferingComponent : Component [DataField] public int ReviveChargesPerOffering = 1; + [DataField] + public EntProtoId SoulShardProto = "SoulShard"; + + [DataField] + public EntProtoId SoulShardGhostProto = "SoulShardGhost"; + [DataField] public DamageSpecifier ConvertHealing = new() { - DamageDict = new Dictionary + DamageDict = new() { ["Brute"] = -40, ["Burn"] = -40 diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingSystem.cs index 19614e20bd9..3556fd9b23e 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/Offering/CultRuneOfferingSystem.cs @@ -8,7 +8,6 @@ using Content.Server.WhiteDream.BloodCult.Runes.Revive; using Content.Shared.Cuffs.Components; using Content.Shared.Damage; -using Content.Shared.Humanoid; using Content.Shared.Mindshield.Components; using Content.Shared.Mobs.Systems; using Content.Shared.StatusEffect; @@ -35,10 +34,11 @@ public override void Initialize() SubscribeLocalEvent(OnOfferingRuneInvoked); } - private void OnOfferingRuneInvoked(Entity ent, ref TryInvokeCultRuneEvent args) + private void OnOfferingRuneInvoked(Entity rune, ref TryInvokeCultRuneEvent args) { - var possibleTargets = _cultRune.GetTargetsNearRune(ent, - ent.Comp.OfferingRange, + var possibleTargets = _cultRune.GetTargetsNearRune( + rune, + rune.Comp.OfferingRange, entity => HasComp(entity)); if (possibleTargets.Count == 0) @@ -48,60 +48,38 @@ private void OnOfferingRuneInvoked(Entity ent, ref Tr } var target = possibleTargets.First(); + if (!TryOffer(rune, target, args.User, args.Invokers.Count)) + args.Cancel(); + } + private bool TryOffer(Entity rune, EntityUid target, EntityUid user, int invokersTotal) + { // if the target is dead we should always sacrifice it. if (_mobState.IsDead(target)) { - Sacrifice(target); - return; + Sacrifice(rune, target); + return true; } - if (!_mind.TryGetMind(target, out _, out _) || - _bloodCultRule.IsTarget(target) || - HasComp(target) || - HasComp(target)) - { - if (!TrySacrifice(target, ent, args.Invokers.Count)) - args.Cancel(); - - return; - } + if (!_mind.TryGetMind(target, out _, out _) || _bloodCultRule.IsTarget(target) || + HasComp(target) || HasComp(target)) + return TrySacrifice(rune, target, invokersTotal); - if (!TryConvert(target, ent, args.User, args.Invokers.Count)) - args.Cancel(); + return TryConvert(rune, target, user, invokersTotal); } - private bool TrySacrifice(Entity target, - Entity rune, - int invokersAmount) + private bool TrySacrifice(Entity rune, EntityUid target, int invokersAmount) { if (invokersAmount < rune.Comp.AliveSacrificeInvokersAmount) return false; - _cultRuneRevive.AddCharges(rune, rune.Comp.ReviveChargesPerOffering); - Sacrifice(target); + Sacrifice(rune, target); return true; } - private void Sacrifice(EntityUid target) - { - var transform = Transform(target); - var shard = Spawn("SoulShard", transform.Coordinates); - _body.GibBody(target); - - if (!_mind.TryGetMind(target, out var mindId, out _)) - return; - - _mind.TransferTo(mindId, shard); - _mind.UnVisit(mindId); - } - - private bool TryConvert(EntityUid target, - Entity rune, - EntityUid user, - int invokersAmount) + private bool TryConvert(Entity rune, EntityUid target, EntityUid user, int invokersTotal) { - if (invokersAmount < rune.Comp.ConvertInvokersAmount) + if (invokersTotal < rune.Comp.ConvertInvokersAmount) return false; _cultRuneRevive.AddCharges(rune, rune.Comp.ReviveChargesPerOffering); @@ -109,6 +87,23 @@ private bool TryConvert(EntityUid target, return true; } + private void Sacrifice(Entity rune, EntityUid target) + { + _cultRuneRevive.AddCharges(rune, rune.Comp.ReviveChargesPerOffering); + var transform = Transform(target); + + if (!_mind.TryGetMind(target, out var mindId, out _)) + Spawn(rune.Comp.SoulShardGhostProto, transform.Coordinates); + else + { + var shard = Spawn(rune.Comp.SoulShardProto, transform.Coordinates); + _mind.TransferTo(mindId, shard); + _mind.UnVisit(mindId); + } + + _body.GibBody(target); + } + private void Convert(Entity rune, EntityUid target, EntityUid user) { _bloodCultRule.Convert(target); diff --git a/Content.Server/WhiteDream/BloodCult/Runes/Rending/CultRuneRendingSystem.cs b/Content.Server/WhiteDream/BloodCult/Runes/Rending/CultRuneRendingSystem.cs index d051d07528f..91347bcdd95 100644 --- a/Content.Server/WhiteDream/BloodCult/Runes/Rending/CultRuneRendingSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Runes/Rending/CultRuneRendingSystem.cs @@ -4,8 +4,6 @@ using Content.Server.Popups; using Content.Server.WhiteDream.BloodCult.Gamerule; using Content.Shared.DoAfter; -using Content.Shared.Mobs.Components; -using Content.Shared.Mobs.Systems; using Content.Shared.WhiteDream.BloodCult.Runes; using Robust.Server.Audio; using Robust.Server.GameObjects; @@ -22,7 +20,6 @@ public sealed class CultRuneRendingSystem : EntitySystem [Dependency] private readonly ChatSystem _chat = default!; [Dependency] private readonly BloodCultRuleSystem _cultRule = default!; [Dependency] private readonly DoAfterSystem _doAfter = default!; - [Dependency] private readonly MobStateSystem _mobState = default!; [Dependency] private readonly NavMapSystem _navMap = default!; [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly TransformSystem _transform = default!; @@ -38,10 +35,12 @@ public override void Initialize() private void OnRendingRunePlaced(Entity rune, ref AfterRunePlaced args) { var position = _transform.GetMapCoordinates(rune); - var message = Loc.GetString("cult-rending-drawing-finished", + var message = Loc.GetString( + "cult-rending-drawing-finished", ("location", FormattedMessage.RemoveMarkupPermissive(_navMap.GetNearestBeaconString(position)))); - _chat.DispatchGlobalAnnouncement(message, + _chat.DispatchGlobalAnnouncement( + message, Loc.GetString("blood-cult-title"), true, rune.Comp.FinishedDrawingAudio, @@ -50,9 +49,7 @@ private void OnRendingRunePlaced(Entity rune, ref Afte private void OnRendingRuneInvoked(Entity rune, ref TryInvokeCultRuneEvent args) { - if (!_cultRule.TryGetTarget(out var target) || - !TryComp(target.Value, out MobStateComponent? _) || - _mobState.IsAlive(target.Value)) + if (!_cultRule.IsObjectiveFinished()) { _popup.PopupEntity(Loc.GetString("cult-rending-target-alive"), rune, args.User); args.Cancel(); @@ -78,7 +75,11 @@ private void OnRendingRuneInvoked(Entity rune, ref Try return; } - _chat.DispatchGlobalAnnouncement(Loc.GetString("cult-rending-started"), + var message = Loc.GetString( + "cult-rending-started", + ("location", FormattedMessage.RemoveMarkupPermissive(_navMap.GetNearestBeaconString(rune.Owner)))); + _chat.DispatchGlobalAnnouncement( + message, Loc.GetString("blood-cult-title"), false, colorOverride: Color.DarkRed); @@ -95,7 +96,8 @@ private void SpawnNarSie(Entity rune, ref RendingRuneD _appearance.SetData(rune, RendingRuneVisuals.Active, false); if (args.Cancelled) { - _chat.DispatchGlobalAnnouncement(Loc.GetString("cult-rending-prevented"), + _chat.DispatchGlobalAnnouncement( + Loc.GetString("cult-rending-prevented"), Loc.GetString("blood-cult-title"), false, colorOverride: Color.DarkRed); diff --git a/Content.Server/WhiteDream/BloodCult/Spells/BloodCultSpellsSystem.cs b/Content.Server/WhiteDream/BloodCult/Spells/BloodCultSpellsSystem.cs index 76697c252a8..c69bf6abd4e 100644 --- a/Content.Server/WhiteDream/BloodCult/Spells/BloodCultSpellsSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Spells/BloodCultSpellsSystem.cs @@ -44,6 +44,7 @@ public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(OnSpellStartup); SubscribeLocalEvent(OnCultTargetEvent); SubscribeLocalEvent(OnActionGettingDisabled); @@ -60,6 +61,12 @@ public override void Initialize() #region BaseHandlers + private void OnSpellStartup(Entity action, ref ComponentStartup args) + { + if (_actions.TryGetActionData(action, out var actionData, false) && actionData is { UseDelay: not null }) + _actions.StartUseDelay(action); + } + private void OnCultTargetEvent(Entity spell, ref EntityTargetActionEvent args) { if (_statusEffects.HasStatusEffect(args.Performer, "Muted")) @@ -83,10 +90,8 @@ private void OnActionGettingDisabled(Entity spell, ref A _actions.RemoveAction(args.Performer, spell); } - private void OnComponentStartup(Entity cultist, ref ComponentStartup args) - { + private void OnComponentStartup(Entity cultist, ref ComponentStartup args) => cultist.Comp.MaxSpells = cultist.Comp.DefaultMaxSpells; - } private void OnGetVerbs(Entity cultist, ref GetVerbsEvent args) { @@ -136,7 +141,8 @@ private void OnSpellSelected(Entity cultist, ref ActionProtoId = args.SelectedItem }; - var doAfter = new DoAfterArgs(EntityManager, + var doAfter = new DoAfterArgs( + EntityManager, cultist.Owner, cultist.Comp.SpellCreationTime, createSpellEvent, @@ -189,7 +195,7 @@ private void OnShackles(BloodCultShacklesEvent ev) return; var shuckles = Spawn(ev.ShacklesProto); - if (!_cuffable.TryAddNewCuffs(ev.Performer, ev.Target, shuckles)) + if (!_cuffable.TryAddNewCuffs(ev.Target, ev.Performer, shuckles)) return; _stun.TryKnockdown(ev.Target, ev.KnockdownDuration, true); diff --git a/Content.Server/WhiteDream/BloodCult/Spells/BloodCultTeleportSpellSystem.cs b/Content.Server/WhiteDream/BloodCult/Spells/BloodCultTeleportSpellSystem.cs index bd605475ede..b0906bc13be 100644 --- a/Content.Server/WhiteDream/BloodCult/Spells/BloodCultTeleportSpellSystem.cs +++ b/Content.Server/WhiteDream/BloodCult/Spells/BloodCultTeleportSpellSystem.cs @@ -22,7 +22,7 @@ public override void Initialize() { SubscribeLocalEvent(OnTeleport); SubscribeLocalEvent(OnTeleportRuneSelected); - SubscribeLocalEvent(OnTeleportDoAfter); + SubscribeLocalEvent(OnTeleportDoAfter); } private void OnTeleport(BloodCultTeleportEvent ev) @@ -30,28 +30,37 @@ private void OnTeleport(BloodCultTeleportEvent ev) if (ev.Handled || !_runeTeleport.TryGetTeleportRunes(ev.Performer, out var runes)) return; - _ui.SetUiState(ev.Performer, ListViewSelectorUiKey.Key, new ListViewSelectorState(runes)); + var metaData = new Dictionary + { + ["target"] = GetNetEntity(ev.Target), + ["duration"] = ev.DoAfterDuration + }; + + _ui.SetUiState(ev.Performer, ListViewSelectorUiKey.Key, new ListViewSelectorState(runes, metaData)); _ui.TryToggleUi(ev.Performer, ListViewSelectorUiKey.Key, ev.Performer); ev.Handled = true; } - private void OnTeleportRuneSelected(Entity ent, - ref ListViewItemSelectedMessage args) + private void OnTeleportRuneSelected( + Entity ent, + ref ListViewItemSelectedMessage args + ) { - if (!args.MetaData.TryGetValue("target", out var rawTarget) || rawTarget is not EntityUid target || + if (!args.MetaData.TryGetValue("target", out var rawTarget) || rawTarget is not NetEntity netTarget || !args.MetaData.TryGetValue("duration", out var rawDuration) || rawDuration is not TimeSpan duration) return; + var target = GetEntity(netTarget); var teleportDoAfter = new TeleportActionDoAfterEvent { - Rune = GetNetEntity(EntityUid.Parse(args.SelectedItem.Id)), + Rune = GetNetEntity(EntityUid.Parse(args.SelectedItem.Id)) }; - var doAfterArgs = new DoAfterArgs(EntityManager, ent.Owner, duration, teleportDoAfter, target); + var doAfterArgs = new DoAfterArgs(EntityManager, ent.Owner, duration, teleportDoAfter, target, target); _doAfter.TryStartDoAfter(doAfterArgs); } - private void OnTeleportDoAfter(TeleportActionDoAfterEvent ev) + private void OnTeleportDoAfter(Entity user, ref TeleportActionDoAfterEvent ev) { if (ev.Target is not { } target) return; diff --git a/Content.Server/WhiteDream/BloodCult/TimedFactory/TimedFactorySystem.cs b/Content.Server/WhiteDream/BloodCult/TimedFactory/TimedFactorySystem.cs index 5dc4ff3d653..b1aa9421140 100644 --- a/Content.Server/WhiteDream/BloodCult/TimedFactory/TimedFactorySystem.cs +++ b/Content.Server/WhiteDream/BloodCult/TimedFactory/TimedFactorySystem.cs @@ -28,12 +28,10 @@ public override void Update(float frameTime) var factoryQuery = EntityQueryEnumerator(); while (factoryQuery.MoveNext(out var uid, out var factory)) - { if (factory.CooldownRemaining > 0) factory.CooldownRemaining -= frameTime; else _appearance.SetData(uid, GenericCultVisuals.State, true); - } } private void OnTryOpenMenu(Entity factory, ref ActivatableUIOpenAttemptEvent args) @@ -53,9 +51,13 @@ private void OnTryOpenMenu(Entity factory, ref Activatabl private void OnPrototypeSelected(Entity factory, ref RadialSelectorSelectedMessage args) { + if (factory.Comp.CooldownRemaining > 0) + return; + var product = Spawn(args.SelectedItem, Transform(args.Actor).Coordinates); _hands.TryPickupAnyHand(args.Actor, product); factory.Comp.CooldownRemaining = factory.Comp.Cooldown; _appearance.SetData(factory, GenericCultVisuals.State, false); + _ui.CloseUi(args.Actor, RadialSelectorUiKey.Key); } } diff --git a/Content.Shared/Chat/Prototypes/EmotePrototype.cs b/Content.Shared/Chat/Prototypes/EmotePrototype.cs index 7ee958ee6a7..34d54bc3600 100644 --- a/Content.Shared/Chat/Prototypes/EmotePrototype.cs +++ b/Content.Shared/Chat/Prototypes/EmotePrototype.cs @@ -68,6 +68,10 @@ public sealed partial class EmotePrototype : IPrototype /// [DataField] public HashSet ChatTriggers = new(); + + // goob edit - animations + [DataField] + public object? Event = null; } /// diff --git a/Content.Shared/Emoting/AnimatedEmotesComponent.cs b/Content.Shared/Emoting/AnimatedEmotesComponent.cs new file mode 100644 index 00000000000..fc8121bbe5a --- /dev/null +++ b/Content.Shared/Emoting/AnimatedEmotesComponent.cs @@ -0,0 +1,28 @@ +using Content.Shared.Chat.Prototypes; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.Emoting; + +// use as a template +//[Serializable, NetSerializable, DataDefinition] public sealed partial class AnimationNameEmoteEvent : EntityEventArgs { } + +[Serializable, NetSerializable, DataDefinition] public sealed partial class AnimationFlipEmoteEvent : EntityEventArgs { } +[Serializable, NetSerializable, DataDefinition] public sealed partial class AnimationSpinEmoteEvent : EntityEventArgs { } +[Serializable, NetSerializable, DataDefinition] public sealed partial class AnimationJumpEmoteEvent : EntityEventArgs { } + +[RegisterComponent, NetworkedComponent] public sealed partial class AnimatedEmotesComponent : Component +{ + [DataField] public ProtoId? Emote; +} + +[Serializable, NetSerializable] public sealed partial class AnimatedEmotesComponentState : ComponentState +{ + public ProtoId? Emote; + + public AnimatedEmotesComponentState(ProtoId? emote) + { + Emote = emote; + } +} diff --git a/Content.Shared/Emoting/EmoteSystem.cs b/Content.Shared/Emoting/EmoteSystem.cs index 1e06d7e982b..fea322e950c 100644 --- a/Content.Shared/Emoting/EmoteSystem.cs +++ b/Content.Shared/Emoting/EmoteSystem.cs @@ -1,4 +1,4 @@ -namespace Content.Shared.Emoting; +namespace Content.Shared.Emoting; public sealed class EmoteSystem : EntitySystem { diff --git a/Content.Shared/Emoting/SharedAnimatedEmotesSystem.cs b/Content.Shared/Emoting/SharedAnimatedEmotesSystem.cs new file mode 100644 index 00000000000..b19e8c26a1e --- /dev/null +++ b/Content.Shared/Emoting/SharedAnimatedEmotesSystem.cs @@ -0,0 +1,18 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Emoting; + +public abstract class SharedAnimatedEmotesSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnGetState); + } + + private void OnGetState(Entity ent, ref ComponentGetState args) + { + args.State = new AnimatedEmotesComponentState(ent.Comp.Emote); + } +} diff --git a/Content.Shared/ListViewSelector/ListViewSelectorEntry.cs b/Content.Shared/ListViewSelector/ListViewSelectorEntry.cs index 1c97108277c..f34e9e3924d 100644 --- a/Content.Shared/ListViewSelector/ListViewSelectorEntry.cs +++ b/Content.Shared/ListViewSelector/ListViewSelectorEntry.cs @@ -14,10 +14,10 @@ public enum ListViewSelectorUiKey [Serializable, NetSerializable] public sealed class ListViewSelectorState( List items, - Dictionary metaData = default!) : BoundUserInterfaceState + Dictionary? metaData = null) : BoundUserInterfaceState { public List Items { get; } = items; - public Dictionary MetaData = metaData; + public Dictionary MetaData = metaData ?? new(); } [Serializable, NetSerializable] diff --git a/Content.Shared/Magic/Events/ProjectileSpellEvent.cs b/Content.Shared/Magic/Events/ProjectileSpellEvent.cs index cf338a6bb43..439b09e7afb 100644 --- a/Content.Shared/Magic/Events/ProjectileSpellEvent.cs +++ b/Content.Shared/Magic/Events/ProjectileSpellEvent.cs @@ -12,6 +12,9 @@ public sealed partial class ProjectileSpellEvent : WorldTargetActionEvent, ISpea [DataField(required: true)] public EntProtoId Prototype; + [DataField] + public float ProjectileSpeed = 20; + [DataField] public string? Speech { get; private set; } diff --git a/Content.Shared/Magic/SharedMagicSystem.cs b/Content.Shared/Magic/SharedMagicSystem.cs index b0a9fef75d0..cae581298a6 100644 --- a/Content.Shared/Magic/SharedMagicSystem.cs +++ b/Content.Shared/Magic/SharedMagicSystem.cs @@ -344,7 +344,7 @@ private void OnProjectileSpell(ProjectileSpellEvent ev) var ent = Spawn(ev.Prototype, spawnCoords); var direction = toCoords.ToMapPos(EntityManager, _transform) - spawnCoords.ToMapPos(EntityManager, _transform); - _gunSystem.ShootProjectile(ent, direction, userVelocity, ev.Performer, ev.Performer); + _gunSystem.ShootProjectile(ent, direction, userVelocity, ev.Performer, ev.Performer, ev.ProjectileSpeed); } // End Projectile Spells #endregion diff --git a/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs b/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs index 16847c3797e..b698728193f 100644 --- a/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs +++ b/Content.Shared/Weapons/Melee/MeleeWeaponComponent.cs @@ -41,6 +41,26 @@ public sealed partial class MeleeWeaponComponent : Component [DataField] public bool ResetOnHandSelected = true; + /// + /// If true, swaps the keybinds for light attacks and heavy attacks. + /// + [DataField] + public bool SwapKeys = false; + + /// + /// If true, disables heavy attacks for this weapon, and prevents the heavy damage values appearing + /// when the damage values are examined. + /// + [DataField] + public bool DisableHeavy = false; + + /// + /// If true, disables single-target attacks for this weapon, and prevents the single-target damage values appearing + /// when the damage values are examined. + /// + [DataField] + public bool DisableClick = false; + /* * Melee combat works based around 2 types of attacks: * 1. Click attacks with left-click. This attacks whatever is under your mnouse diff --git a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs index 7bc817dd24a..aa15ecfb286 100644 --- a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs +++ b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs @@ -62,8 +62,6 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(OnMeleeSelected); - SubscribeLocalEvent(OnMeleeShotAttempted); - SubscribeLocalEvent(OnMeleeShot); SubscribeLocalEvent(OnGetBonusMeleeDamage); SubscribeLocalEvent(OnGetBonusHeavyDamageModifier); SubscribeLocalEvent(OnGetBonusMeleeAttackRate); @@ -86,24 +84,6 @@ private void OnMapInit(EntityUid uid, MeleeWeaponComponent component, MapInitEve #endif } - private void OnMeleeShotAttempted(EntityUid uid, MeleeWeaponComponent comp, ref ShotAttemptedEvent args) - { - if (comp.NextAttack > Timing.CurTime) - args.Cancel(); - } - - private void OnMeleeShot(EntityUid uid, MeleeWeaponComponent component, ref GunShotEvent args) - { - if (!TryComp(uid, out var gun)) - return; - - if (gun.NextFire > component.NextAttack) - { - component.NextAttack = gun.NextFire; - Dirty(uid, component); - } - } - private void OnMeleeSelected(EntityUid uid, MeleeWeaponComponent component, HandSelectedEvent args) { var attackRate = GetAttackRate(uid, args.User, component); @@ -169,29 +149,23 @@ private void OnStopAttack(StopAttackEvent msg, EntitySessionEventArgs args) private void OnLightAttack(LightAttackEvent msg, EntitySessionEventArgs args) { - if (args.SenderSession.AttachedEntity is not {} user) + if (args.SenderSession.AttachedEntity is not {} user || + !TryGetWeapon(user, out var weaponUid, out var weapon) || + weaponUid != GetEntity(msg.Weapon) || + weapon.DisableClick) return; - if (!TryGetWeapon(user, out var weaponUid, out var weapon) || - weaponUid != GetEntity(msg.Weapon)) - { - return; - } - AttemptAttack(user, weaponUid, weapon, msg, args.SenderSession); } private void OnHeavyAttack(HeavyAttackEvent msg, EntitySessionEventArgs args) { - if (args.SenderSession.AttachedEntity is not {} user) + if (args.SenderSession.AttachedEntity is not {} user || + !TryGetWeapon(user, out var weaponUid, out var weapon) || + weaponUid != GetEntity(msg.Weapon) || + weapon.DisableHeavy) return; - if (!TryGetWeapon(user, out var weaponUid, out var weapon) || - weaponUid != GetEntity(msg.Weapon)) - { - return; - } - AttemptAttack(user, weaponUid, weapon, msg, args.SenderSession); } diff --git a/Content.Shared/Weapons/Ranged/Components/GunComponent.cs b/Content.Shared/Weapons/Ranged/Components/GunComponent.cs index 8d7ecae1a81..d522df5395e 100644 --- a/Content.Shared/Weapons/Ranged/Components/GunComponent.cs +++ b/Content.Shared/Weapons/Ranged/Components/GunComponent.cs @@ -208,6 +208,12 @@ public sealed partial class GunComponent : Component [AutoPausedField] public TimeSpan NextFire = TimeSpan.Zero; + /// + /// After dealing a melee attack with this gun, the minimum cooldown in seconds before the gun can shoot again. + /// + [DataField] + public float MeleeCooldown = 0.528f; + /// /// What firemodes can be selected. /// diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs index 2fbb6785e29..7afb41239c6 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs @@ -114,14 +114,18 @@ private void OnMapInit(Entity gun, ref MapInitEvent args) private void OnGunMelee(EntityUid uid, GunComponent component, MeleeHitEvent args) { - if (!TryComp(uid, out var melee)) - return; + var curTime = Timing.CurTime; - if (melee.NextAttack > component.NextFire) - { - component.NextFire = melee.NextAttack; - Dirty(uid, component); - } + if (component.NextFire < curTime) + component.NextFire = curTime; + + var meleeCooldown = TimeSpan.FromSeconds(component.MeleeCooldown); + + component.NextFire += meleeCooldown; + while (component.NextFire <= curTime) + component.NextFire += meleeCooldown; + + Dirty(uid, component); } private void OnShootRequest(RequestShootEvent msg, EntitySessionEventArgs args) diff --git a/Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftedComponent.cs b/Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftedComponent.cs new file mode 100644 index 00000000000..15b026b5144 --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/PhaseShiftedComponent.cs @@ -0,0 +1,39 @@ +using Content.Shared.Physics; +using Content.Shared.StatusEffect; +using Robust.Shared.Audio; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Shared.WhiteDream.BloodCult.Constructs.PhaseShift; + +[RegisterComponent] +public sealed partial class PhaseShiftedComponent : Component +{ + [DataField] + public ProtoId StatusEffectId = "PhaseShifted"; + + [DataField] + public float MovementSpeedBuff = 1.5f; + + [DataField] + public int CollisionMask = (int) CollisionGroup.GhostImpassable; + + [DataField] + public int CollisionLayer; + + [DataField] + public EntProtoId PhaseInEffect = "EffectEmpPulseNoSound"; + + [DataField] + public EntProtoId PhaseOutEffect = "EffectEmpPulseNoSound"; + + [DataField] + public SoundSpecifier PhaseInSound = new SoundPathSpecifier(new ResPath("/Audio/WhiteDream/BloodCult/veilin.ogg")); + + [DataField] + public SoundSpecifier PhaseOutSound = + new SoundPathSpecifier(new ResPath("/Audio/WhiteDream/BloodCult/veilout.ogg")); + + public int StoredMask; + public int StoredLayer; +} diff --git a/Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/SharedPhaseShiftSystem.cs b/Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/SharedPhaseShiftSystem.cs new file mode 100644 index 00000000000..6caf723a8c6 --- /dev/null +++ b/Content.Shared/WhiteDream/BloodCult/Constructs/PhaseShift/SharedPhaseShiftSystem.cs @@ -0,0 +1,95 @@ +using System.Linq; +using Content.Shared.Interaction.Events; +using Content.Shared.Movement.Pulling.Components; +using Content.Shared.Movement.Pulling.Systems; +using Content.Shared.Movement.Systems; +using Content.Shared.StatusEffect; +using Content.Shared.Stealth; +using Content.Shared.Stealth.Components; +using Content.Shared.Throwing; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Physics; +using Robust.Shared.Physics.Systems; + +namespace Content.Shared.WhiteDream.BloodCult.Constructs.PhaseShift; + +public abstract class SharedPhaseShiftSystem : EntitySystem +{ + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly MovementSpeedModifierSystem _movement = default!; + [Dependency] private readonly SharedPhysicsSystem _physics = default!; + [Dependency] private readonly SharedStealthSystem _stealth = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly PullingSystem _pulling = default!; + [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnComponentStartup); + + SubscribeLocalEvent(OnRefresh); + SubscribeLocalEvent(OnAttackAttempt); + SubscribeLocalEvent(OnThrowAttempt); + + SubscribeLocalEvent(OnComponentShutdown); + } + + protected virtual void OnComponentStartup(Entity ent, ref ComponentStartup args) + { + var pos = _transform.GetMapCoordinates(ent); + Spawn(ent.Comp.PhaseInEffect, pos); + _audio.PlayPvs(ent.Comp.PhaseInSound, Transform(ent).Coordinates); + + if (TryComp(ent, out var fixtures) && fixtures.FixtureCount >= 1) + { + var fixture = fixtures.Fixtures.First(); + ent.Comp.StoredMask = fixture.Value.CollisionMask; + ent.Comp.StoredLayer = fixture.Value.CollisionLayer; + _physics.SetCollisionMask(ent, fixture.Key, fixture.Value, ent.Comp.CollisionMask, fixtures); + _physics.SetCollisionLayer(ent, fixture.Key, fixture.Value, ent.Comp.CollisionLayer, fixtures); + } + + var stealth = EnsureComp(ent); + _stealth.SetVisibility(ent, -1, stealth); + + if (TryComp(ent, out PullableComponent? pullable)) + _pulling.TryStopPull(ent, pullable); + + _movement.RefreshMovementSpeedModifiers(ent); + } + + private void OnRefresh(Entity ent, ref RefreshMovementSpeedModifiersEvent args) => + args.ModifySpeed(ent.Comp.MovementSpeedBuff, ent.Comp.MovementSpeedBuff); + + private void OnAttackAttempt(Entity ent, ref AttackAttemptEvent args) + { + if (_statusEffects.HasStatusEffect(ent, ent.Comp.StatusEffectId)) + _statusEffects.TryRemoveStatusEffect(ent, ent.Comp.StatusEffectId); + } + + private void OnThrowAttempt(Entity ent, ref ThrowAttemptEvent args) + { + if (_statusEffects.HasStatusEffect(ent, ent.Comp.StatusEffectId)) + _statusEffects.TryRemoveStatusEffect(ent, ent.Comp.StatusEffectId); + } + + protected virtual void OnComponentShutdown(Entity ent, ref ComponentShutdown args) + { + Spawn(ent.Comp.PhaseOutEffect, _transform.GetMapCoordinates(ent)); + _audio.PlayPvs(ent.Comp.PhaseOutSound, ent); + + if (TryComp(ent, out var fixtures) && fixtures.FixtureCount >= 1) + { + var fixture = fixtures.Fixtures.First(); + + _physics.SetCollisionMask(ent, fixture.Key, fixture.Value, ent.Comp.StoredMask, fixtures); + _physics.SetCollisionLayer(ent, fixture.Key, fixture.Value, ent.Comp.StoredLayer, fixtures); + } + + _stealth.SetVisibility(ent, 1); + RemComp(ent); + + ent.Comp.MovementSpeedBuff = 1; + _movement.RefreshMovementSpeedModifiers(ent); + } +} diff --git a/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs b/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs index a16d8dc9326..13e51214e0a 100644 --- a/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs +++ b/Content.Shared/WhiteDream/BloodCult/Items/CultItemSystem.cs @@ -2,6 +2,7 @@ using Content.Shared.Ghost; using Content.Shared.Hands.EntitySystems; using Content.Shared.Interaction; +using Content.Shared.Interaction.Events; using Content.Shared.Inventory.Events; using Content.Shared.Popups; using Content.Shared.Projectiles; @@ -23,6 +24,7 @@ public sealed class CultItemSystem : EntitySystem public override void Initialize() { SubscribeLocalEvent(OnActivate); + SubscribeLocalEvent(OnUseInHand); SubscribeLocalEvent(OnBeforeGettingThrown); SubscribeLocalEvent(OnEquipAttempt); SubscribeLocalEvent(OnMeleeAttempt); @@ -30,6 +32,15 @@ public override void Initialize() } private void OnActivate(Entity item, ref ActivateInWorldEvent args) + { + if (CanUse(args.User)) + return; + + args.Handled = true; + KnockdownAndDropItem(item, args.User, Loc.GetString("cult-item-component-generic")); + } + + private void OnUseInHand(Entity item, ref UseInHandEvent args) { if (CanUse(args.User) || // Allow non-cultists to remove embedded cultist weapons and getting knocked down afterwards on pickup diff --git a/Content.Shared/WhiteDream/BloodCult/Runes/RuneDrawerComponent.cs b/Content.Shared/WhiteDream/BloodCult/Runes/RuneDrawerComponent.cs index b6dec321e4e..c1388994a4a 100644 --- a/Content.Shared/WhiteDream/BloodCult/Runes/RuneDrawerComponent.cs +++ b/Content.Shared/WhiteDream/BloodCult/Runes/RuneDrawerComponent.cs @@ -25,9 +25,15 @@ public enum RuneDrawerBuiKey } [Serializable, NetSerializable] -public sealed class RuneDrawerSelectedMessage(RuneSelectorPrototype selectedRune) : BoundUserInterfaceMessage +public sealed class RuneDrawerMenuState(List> availalbeRunes) : BoundUserInterfaceState { - public ProtoId SelectedRune { get; private set; } = selectedRune.ID; + public List> AvailalbeRunes { get; private set; } = availalbeRunes; +} + +[Serializable, NetSerializable] +public sealed class RuneDrawerSelectedMessage(ProtoId selectedRune) : BoundUserInterfaceMessage +{ + public ProtoId SelectedRune { get; private set; } = selectedRune; } [Serializable, NetSerializable] diff --git a/Content.Shared/WhiteDream/BloodCult/Runes/RuneSelectorPrototype.cs b/Content.Shared/WhiteDream/BloodCult/Runes/RuneSelectorPrototype.cs index 372ab866f07..12350917d00 100644 --- a/Content.Shared/WhiteDream/BloodCult/Runes/RuneSelectorPrototype.cs +++ b/Content.Shared/WhiteDream/BloodCult/Runes/RuneSelectorPrototype.cs @@ -1,5 +1,4 @@ using Content.Shared.Damage; -using Content.Shared.FixedPoint; using Robust.Shared.Prototypes; namespace Content.Shared.WhiteDream.BloodCult.Runes; @@ -11,20 +10,20 @@ public sealed class RuneSelectorPrototype : IPrototype public string ID { get; } = default!; [DataField(required: true)] - public EntProtoId Prototype { get; } + public EntProtoId Prototype; [DataField] - public float DrawTime { get; } = 4f; + public float DrawTime = 4f; + + [DataField] + public bool RequireTargetDead; + + [DataField] + public int RequiredTotalCultists = 1; /// /// Damage dealt on the rune drawing. /// [DataField] - public DamageSpecifier DrawDamage = new() - { - DamageDict = new Dictionary - { - ["Slash"] = 15, - } - }; + public DamageSpecifier DrawDamage = new() { DamageDict = new() { ["Slash"] = 15 } }; } diff --git a/Content.Shared/WhiteDream/BloodCult/Spells/Events.cs b/Content.Shared/WhiteDream/BloodCult/Spells/Events.cs index 293a32691dc..6b98514d44b 100644 --- a/Content.Shared/WhiteDream/BloodCult/Spells/Events.cs +++ b/Content.Shared/WhiteDream/BloodCult/Spells/Events.cs @@ -2,6 +2,7 @@ using Content.Shared.Chat; using Content.Shared.DoAfter; using Content.Shared.Magic; +using Content.Shared.StatusEffect; using Robust.Shared.Audio; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; @@ -27,6 +28,9 @@ public sealed partial class BloodCultTeleportEvent : EntityTargetActionEvent, IS [DataField] public float Range = 5; + [DataField] + public TimeSpan DoAfterDuration = TimeSpan.FromSeconds(2); + [DataField] public string? Speech { get; set; } @@ -91,6 +95,28 @@ public sealed partial class SummonEquipmentEvent : InstantActionEvent, ISpeakSpe public sealed partial class BloodSpearRecalledEvent : InstantActionEvent; +public sealed partial class PlaceTileEntityEvent : WorldTargetActionEvent +{ + [DataField] + public EntProtoId? Entity; + + [DataField] + public string? TileId; + + [DataField] + public SoundSpecifier? Audio; + +} + +public sealed partial class PhaseShiftEvent : InstantActionEvent +{ + [DataField] + public TimeSpan Duration = TimeSpan.FromSeconds(5); + + [DataField] + public ProtoId StatusEffectId = "PhaseShifted"; +} + [Serializable, NetSerializable] public sealed partial class TwistedConstructionDoAfterEvent : SimpleDoAfterEvent; diff --git a/Resources/Audio/WhiteDream/BloodCult/resonator_blast.ogg b/Resources/Audio/WhiteDream/BloodCult/resonator_blast.ogg new file mode 100644 index 00000000000..c37c9e903de Binary files /dev/null and b/Resources/Audio/WhiteDream/BloodCult/resonator_blast.ogg differ diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 25ed44abaf0..60540bb9f63 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -8543,3 +8543,87 @@ Entries: id: 6569 time: '2024-12-10T19:13:47.0000000+00:00' url: https://github.com/Simple-Station/Einstein-Engines/pull/1331 +- author: VMSolidus + changes: + - type: Add + message: Added a large number of mapping assets from Nuclear14 + id: 6570 + time: '2024-12-11T22:45:57.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1315 +- author: sleepyyapril + changes: + - type: Add + message: Spin, flip, and jump emotes have been added. + id: 6571 + time: '2024-12-11T22:52:53.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1318 +- author: Skubman + changes: + - type: Fix + message: >- + Fixed an issue where players could not craft clown hardsuits and mime + hardsuits on the crafting menu. + - type: Fix + message: >- + Fixed an issue where clowns did not have their signature silly snore + sound when sleeping. + id: 6572 + time: '2024-12-11T23:12:43.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1324 +- author: Remuchi + changes: + - type: Add + message: In-game guide book to kickstart your sinister activities. + - type: Add + message: Constructs now have abilities. + - type: Add + message: >- + Rending rune and apocalypse rune now should only be placed in the + specific spots on maps. Needs to be mapped. + - type: Add + message: Veil Shifter now displays how much charges it has when examining. + - type: Add + message: >- + Cult runes now have descriptions. Also stating how much invokers + required for each rune. + - type: Add + message: Blood rites can now be dropped&deleted. + - type: Add + message: Blood rites now suck... blood in 0.5 tiles radius. + - type: Remove + message: Non-cultists can no longer examine runes. + - type: Fix + message: >- + Fixed Cult Objective Target selection. You can (and should) sacrifice + your own people now. + - type: Fix + message: Non cultists can no longer use veil shifter. + - type: Fix + message: Teleport spell is no more a cheap rip-off and now actually teleports. + - type: Fix + message: Timed Factories can't no more produce infinite number of entities. + - type: Fix + message: Offering rune should now properly convert someone. + - type: Fix + message: >- + Sacrificing body with mind now properly transfers their mind to soul + shard. + - type: Fix + message: Shadow Shackles now cuffs the target instead of the caster (lmao). + id: 6573 + time: '2024-12-11T23:19:30.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1276 +- author: Skubman + changes: + - type: Add + message: >- + Pistol-whipping has been added. You can press right click with a gun to + perform a Light Attack. Most guns will deal Blunt damage, apart from the + Kardashev-Mosin dealing Piercing/Slash damage with its bayonet. Weaving + bullets and melee attacks correctly will give you the upper hand in + combat. + - type: Add + message: Guns can now be thrown to deal the same damage as their melee damage. + id: 6574 + time: '2024-12-11T23:26:33.0000000+00:00' + url: https://github.com/Simple-Station/Einstein-Engines/pull/1335 diff --git a/Resources/Locale/en-US/emotes.ftl b/Resources/Locale/en-US/emotes.ftl new file mode 100644 index 00000000000..8efe738c94a --- /dev/null +++ b/Resources/Locale/en-US/emotes.ftl @@ -0,0 +1,7 @@ +chat-emote-name-flip = Do a flip +chat-emote-name-spin = Spin +chat-emote-name-jump = Jump + +chat-emote-msg-flip = does a flip! +chat-emote-msg-spin = spins! +chat-emote-msg-jump = jumps! \ No newline at end of file diff --git a/Resources/Locale/en-US/guidebook/guides.ftl b/Resources/Locale/en-US/guidebook/guides.ftl index ff812155f69..aefe59920af 100644 --- a/Resources/Locale/en-US/guidebook/guides.ftl +++ b/Resources/Locale/en-US/guidebook/guides.ftl @@ -71,6 +71,7 @@ guide-entry-zombies = Zombies guide-entry-revolutionaries = Revolutionaries guide-entry-minor-antagonists = Minor Antagonists guide-entry-space-ninja = Space Ninja +guide-entry-blood-cult = Blood Cult guide-entry-rules = Server Rules guide-entry-rules-core-only = Core Only Ruleset diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl index 1754bb89d3e..2ac91d171eb 100644 --- a/Resources/Locale/en-US/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/store/uplink-catalog.ftl @@ -9,7 +9,7 @@ uplink-pistol-cobra-name = Cobra uplink-pistol-cobra-desc = A rugged, robust operator handgun with inbuilt silencer. Uses pistol magazines (.25 caseless). uplink-rifle-mosin-name = Surplus Rifle -uplink-rifle-mosin-desc = A bolt action service rifle that has seen many wars. Not modern by any standard, hand loaded, and terrible recoil, but it is cheap. +uplink-rifle-mosin-desc = A bolt action service rifle that has seen many wars. Not modern by any standard, hand loaded, and terrible recoil, but it is cheap. The attached bayonet allows it to be used as an improvised spear. uplink-esword-name = Energy Sword uplink-esword-desc = A very dangerous energy sword that can reflect shots. Can be stored in pockets when turned off. Makes a lot of noise when used or turned on. diff --git a/Resources/Locale/en-US/white-dream/alerts.ftl b/Resources/Locale/en-US/white-dream/alerts.ftl index 5156b31ddb0..b7dac60bfed 100644 --- a/Resources/Locale/en-US/white-dream/alerts.ftl +++ b/Resources/Locale/en-US/white-dream/alerts.ftl @@ -1,5 +1,2 @@ -alerts-blood-spells-name = Blood spells -alerts-blood-spells-desc = Click to create or remove blood spells. - -alerts-blood-cult-buff-name = Empowered -alerts-blood-cult-buff-desc = Blood magic requires much less time to cast and you lose less blood from it. You're also immune to pressure damage. +alerts-blood-cult-empowered-name = Empowered +alerts-blood-cult-empowered-desc = Blood magic and rune scribing requires much less time to cast and you lose less blood from it. diff --git a/Resources/Locale/en-US/white-dream/cult/gamerule.ftl b/Resources/Locale/en-US/white-dream/cult/gamerule.ftl index 0f7872985f0..92fbab3f993 100644 --- a/Resources/Locale/en-US/white-dream/cult/gamerule.ftl +++ b/Resources/Locale/en-US/white-dream/cult/gamerule.ftl @@ -9,6 +9,8 @@ blood-cult-role-greeting = The Geometer of Blood, Nar-Sie, has sent a number of You must work with your brethren to summon an avatar of your eldritch goddess! blood-cult-role-briefing-short = Use '^' to contact other members of your brethren. +blood-cult-role-briefing-rending-locations = The veil can be thorn {$location}, {$coordinates} +blood-cult-role-briefing-emergency-rending = We can draw {$amount} more rending or apocalypse runes! blood-cult-condition-win = The Geometer of Blood has successfully summoned their Eldritch Goddess! blood-cult-condition-draw = Both parties were destroyed. diff --git a/Resources/Locale/en-US/white-dream/cult/items/general.ftl b/Resources/Locale/en-US/white-dream/cult/items/general.ftl index 6ad4938adea..f3702bb66a1 100644 --- a/Resources/Locale/en-US/white-dream/cult/items/general.ftl +++ b/Resources/Locale/en-US/white-dream/cult/items/general.ftl @@ -11,6 +11,10 @@ ghost-role-information-soul-shard-name = Soul Shard ghost-role-information-soul-shard-description = Become the servant of The Blood Cult. ghost-role-information-soul-shard-rules = Take the form of one of the constructs and help your Masters bring their Old Goddess back to the world! +ghost-role-information-soul-shard-holy-name = Blessed Soul Shard +ghost-role-information-soul-shard-holy-description = Become the servant of crew and help them defeat the cult. +ghost-role-information-soul-shard-holy-rules = Take the form of one of the converted constructs and help the crew stop Geometer of Blood from bringing their Old Goddess back to the world! + shuttle-curse-cant-activate = Nar'Sien power doesn't seem to work. shuttle-curse-max-charges = You try to shatter the orb, but it remains as solid as a rock! shuttle-curse-shuttle-arrived = The shuttle has already arived! You can't delay it anymore. @@ -19,4 +23,5 @@ shuttle-curse-shuttle-not-called = The shuttle has not yet been called. shuttle-curse-system-failure = SYSTEM FAILURE shuttle-curse-success-global = The shuttle will be delayed by {$time} minutes. +veil-shifter-description = It has {$charges} charges left. veil-shifter-cant-teleport = Couldn't find a place to teleport you. Try again! diff --git a/Resources/Locale/en-US/white-dream/cult/runes.ftl b/Resources/Locale/en-US/white-dream/cult/runes.ftl index f13e72a3726..7e166e2b689 100644 --- a/Resources/Locale/en-US/white-dream/cult/runes.ftl +++ b/Resources/Locale/en-US/white-dream/cult/runes.ftl @@ -1,4 +1,5 @@ cult-rune-cant-draw = You can not draw rune here! +cult-rune-cant-draw-rending = You have to be near the area where the veil between our Worlds is the thinnest. cult-rune-started-erasing = Started erasing... cult-rune-erased = Rune has been erased. cult-rune-not-enough-cultists = Not enough cultists to perform the ritual! @@ -11,8 +12,8 @@ cult-revive-rune-already-alive = The target is already alive. cult-buff-already-buffed = You are already empowered. -cult-rending-drawing-finished = The Geometer Of Blood has finished drawing the rune of end! Nearby location: {$location}. +cult-rending-drawing-finished = The Geometer Of Blood has finished drawing the rune of end {$location}! cult-rending-target-alive = Can not start the ritual: the target is alive. cult-rending-already-summoning = Can not start the ritual: it's already in progress. -cult-rending-started = The Geometer Of Blood has started the ritual of Dimensional Rending! +cult-rending-started = The Geometer Of Blood has started the ritual of Dimensional Rending {$location}! cult-rending-prevented = Someone has stopped the ritual. diff --git a/Resources/Locale/en-US/white-dream/cult/spells.ftl b/Resources/Locale/en-US/white-dream/cult/spells.ftl index f0934d74cb9..52fa5939fba 100644 --- a/Resources/Locale/en-US/white-dream/cult/spells.ftl +++ b/Resources/Locale/en-US/white-dream/cult/spells.ftl @@ -1,5 +1,5 @@ blood-cult-spells-too-many = Too many spells already selected. blood-cult-no-spells = You have no spells selected. -blood-cult-select-spells-verb = Select blood spells +blood-cult-select-spells-verb = Prepare blood spells blood-cult-remove-spells-verb = Remove blood spells diff --git a/Resources/Prototypes/Actions/emotes.yml b/Resources/Prototypes/Actions/emotes.yml new file mode 100644 index 00000000000..6f34a4dc94d --- /dev/null +++ b/Resources/Prototypes/Actions/emotes.yml @@ -0,0 +1,23 @@ +- type: emote + id: Flip + name: chat-emote-name-flip + chatMessages: ["chat-emote-msg-flip"] + chatTriggers: + - does a flip + event: !type:AnimationFlipEmoteEvent + +- type: emote + id: Spin + name: chat-emote-name-spin + chatMessages: ["chat-emote-msg-spin"] + chatTriggers: + - spins + event: !type:AnimationSpinEmoteEvent + +- type: emote + id: Jump + name: chat-emote-name-jump + chatMessages: ["chat-emote-msg-jump"] + chatTriggers: + - jumps + event: !type:AnimationJumpEmoteEvent diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index f3b41bdbfec..d1251659ece 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -165,6 +165,15 @@ Disabler: { state: mode-disabler } Lethal: { state: mode-lethal } Special: { state: mode-stun } # Unused + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + bluntStaminaDamageFactor: 1.0 + wideAnimationRotation: 135 + - type: DamageOtherOnHit + staminaCost: 5 - type: entity name: miniature energy gun @@ -232,6 +241,15 @@ - Sidearm - type: StaticPrice price: 750 + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + bluntStaminaDamageFactor: 1.0 + wideAnimationRotation: 135 + - type: DamageOtherOnHit + staminaCost: 5 - type: entity name: PDW-9 Energy Pistol diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml index 9fb68453ee3..64fdf76f9a3 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml @@ -1,4 +1,4 @@ -- type: entity +- type: entity name: Experimental L6 SAW parent: BaseItem id: WeaponLightMachineGunL6Borg @@ -38,4 +38,21 @@ # - type: DynamicPrice # price: 500 - type: Appearance - + - type: MeleeWeapon + attackRate: 1.4 + damage: + types: + Blunt: 11 + bluntStaminaDamageFactor: 1.3333 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 3 + - type: DamageOtherOnHit + staminaCost: 12 diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml index d1976329900..a9bb8f1dc77 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml @@ -1043,9 +1043,9 @@ walkModifier: 0.9 sprintModifier: 0.9 - type: HeldSpeedModifier - #- type: Construction # DeltaV - Prevent clowns from making the hardsuit - # graph: ClownHardsuit - # node: clownHardsuit + - type: Construction + graph: ClownHardsuit + node: clownHardsuit - type: ToggleableClothing clothingPrototype: ClothingHeadHelmetHardsuitClown @@ -1060,9 +1060,9 @@ sprite: Clothing/OuterClothing/Hardsuits/mime.rsi - type: Clothing sprite: Clothing/OuterClothing/Hardsuits/mime.rsi -# - type: Construction # DeltaV - Nuh uh -# graph: MimeHardsuit -# node: mimeHardsuit + - type: Construction + graph: MimeHardsuit + node: mimeHardsuit - type: ToggleableClothing clothingPrototype: ClothingHeadHelmetHardsuitMime diff --git a/Resources/Prototypes/Entities/Effects/emp_effects.yml b/Resources/Prototypes/Entities/Effects/emp_effects.yml index d1096b85f5e..e386f902a5d 100644 --- a/Resources/Prototypes/Entities/Effects/emp_effects.yml +++ b/Resources/Prototypes/Entities/Effects/emp_effects.yml @@ -1,5 +1,5 @@ - type: entity - id: EffectEmpPulse + id: EffectEmpPulseNoSound categories: [ HideSpawnMenu ] components: - type: TimedDespawn @@ -8,18 +8,24 @@ drawdepth: Effects noRot: true layers: - - shader: unshaded - map: ["enum.EffectLayers.Unshaded"] - sprite: Effects/emp.rsi - state: emp_pulse + - shader: unshaded + map: [ "enum.EffectLayers.Unshaded" ] + sprite: Effects/emp.rsi + state: emp_pulse - type: EffectVisuals - type: Tag tags: - - HideContextMenu + - HideContextMenu + - type: AnimationPlayer + +- type: entity + parent: EffectEmpPulseNoSound + id: EffectEmpPulse + categories: [ HideSpawnMenu ] + components: - type: EmitSoundOnSpawn - sound: + sound: path: /Audio/Effects/Lightning/lightningbolt.ogg - - type: AnimationPlayer - type: entity id: EffectEmpDisabled @@ -31,12 +37,12 @@ drawdepth: Effects noRot: true layers: - - shader: unshaded - map: ["enum.EffectLayers.Unshaded"] - sprite: Effects/emp.rsi - state: emp_disable + - shader: unshaded + map: [ "enum.EffectLayers.Unshaded" ] + sprite: Effects/emp.rsi + state: emp_disable - type: EffectVisuals - type: Tag tags: - - HideContextMenu + - HideContextMenu - type: AnimationPlayer diff --git a/Resources/Prototypes/Entities/Mobs/base.yml b/Resources/Prototypes/Entities/Mobs/base.yml index 5ab790feeef..da413c339d8 100644 --- a/Resources/Prototypes/Entities/Mobs/base.yml +++ b/Resources/Prototypes/Entities/Mobs/base.yml @@ -46,6 +46,14 @@ - type: LanguageSpeaker # Einstein Engines. This component is required to support speech, although it does not define known languages. - type: RequireProjectileTarget active: False + - type: AnimatedEmotes + +- type: entity + save: false + id: MobPolymorphable + abstract: true + components: + - type: Polymorphable - type: OwnInteractionVerbs allowedVerbs: [] # TODO: define something here, or don't. diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml index 93621bc3a28..4eec74f05a6 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml @@ -48,3 +48,20 @@ - Belt - type: UseDelay delay: 1 + - type: MeleeWeapon + attackRate: 1.3333 + damage: + types: + Blunt: 9.0 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 8 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index 62a98bd5da8..62291cc2714 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -37,6 +37,24 @@ - type: SurgeryTool endSound: path: /Audio/Weapons/Guns/Gunshots/laser.ogg + - type: MeleeWeapon + attackRate: 1.3333 + damage: + types: + Blunt: 8.5 + bluntStaminaDamageFactor: 1.25 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 7 - type: entity id: BaseWeaponPowerCell @@ -78,6 +96,24 @@ - type: SurgeryTool endSound: path: /Audio/Weapons/Guns/Gunshots/laser.ogg + - type: MeleeWeapon + attackRate: 1.3333 + damage: + types: + Blunt: 9.0 + bluntStaminaDamageFactor: 1.25 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 7 - type: entity id: BaseWeaponBatterySmall @@ -98,6 +134,15 @@ slots: - Belt - suitStorage + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + bluntStaminaDamageFactor: 1.0 + wideAnimationRotation: 135 + - type: DamageOtherOnHit + staminaCost: 5 - type: entity id: BaseWeaponPowerCellSmall @@ -114,6 +159,15 @@ quickEquip: false slots: - Belt + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + bluntStaminaDamageFactor: 1.0 + wideAnimationRotation: 135 + - type: DamageOtherOnHit + staminaCost: 5 - type: entity name: svalinn laser pistol @@ -248,6 +302,10 @@ fireCost: 62.5 - type: StaticPrice price: 300 + - type: MeleeWeapon + damage: + types: + Blunt: 4 - type: entity name: pulse pistol @@ -377,6 +435,14 @@ - type: HitscanBatteryAmmoProvider proto: RedHeavyLaser fireCost: 100 + - type: MeleeWeapon + attackRate: 1.4 + damage: + types: + Blunt: 10 + bluntStaminaDamageFactor: 1.3333 + - type: DamageOtherOnHit + staminaCost: 9.5 - type: entity name: portable particle decelerator @@ -408,6 +474,22 @@ - type: Battery maxCharge: 10000 startingCharge: 10000 + - type: MeleeWeapon + attackRate: 1.6 + damage: # This is super expensive, low attack rate, slows down the user and high stam cost so it can be high + types: + Blunt: 34 + Structural: 10 + swapKeys: false + disableHeavy: false + disableClick: true + bluntStaminaDamageFactor: 1.5 + heavyRateModifier: 1.0 + heavyDamageBaseModifier: 1.0 + heavyStaminaCost: 21 + wideAnimationRotation: 270 + - type: DamageOtherOnHit + staminaCost: 48 - type: entity name: x-ray cannon @@ -476,6 +558,12 @@ - type: GuideHelp guides: - Security + - type: MeleeWeapon + damage: + types: + Blunt: 5.0 + bluntStaminaDamageFactor: 2.5 + wideAnimationRotation: 135 - type: entity name: disabler SMG @@ -514,6 +602,12 @@ zeroVisible: true - type: StaticPrice price: 260 + - type: MeleeWeapon + damage: + types: + Blunt: 6.5 + bluntStaminaDamageFactor: 2.5 + wideAnimationRotation: 180 - type: entity name: practice disabler @@ -539,6 +633,11 @@ - type: ProjectileBatteryAmmoProvider proto: BulletDisablerPractice fireCost: 100 + - type: MeleeWeapon + damage: + types: + Blunt: 3 + bluntStaminaDamageFactor: 1.0 - type: entity name: taser @@ -615,6 +714,15 @@ price: 750 - type: StealTarget stealGroup: WeaponCaptain + - type: MeleeWeapon + attackRate: 1.3333 + damage: + types: + Blunt: 9 + bluntStaminaDamageFactor: 1.25 + wideAnimationRotation: 135 + - type: DamageOtherOnHit + staminaCost: 5 - type: entity name: advanced laser pistol @@ -650,6 +758,12 @@ - type: Appearance - type: StaticPrice price: 63 + - type: MeleeWeapon + damage: + types: + Blunt: 8 + - type: DamageOtherOnHit + staminaCost: 6 - type: entity name: C.H.I.M.P. handcannon diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/HMGs/hmgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/HMGs/hmgs.yml index 9d685e1ddc0..72df09ac508 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/HMGs/hmgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/HMGs/hmgs.yml @@ -20,6 +20,20 @@ - type: StaticPrice price: 500 # No chamber because HMG may want its own + - type: MeleeWeapon + attackRate: 1.5 + damage: + types: + Blunt: 16 + bluntStaminaDamageFactor: 1.5 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 16 - type: entity name: minigun diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml index f90cbb6e601..4b6e21a4922 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml @@ -62,6 +62,24 @@ price: 500 - type: UseDelay delay: 1 + - type: MeleeWeapon + attackRate: 1.4 + damage: + types: + Blunt: 11 + bluntStaminaDamageFactor: 1.3333 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 3 + - type: DamageOtherOnHit + staminaCost: 12 - type: entity name: L6 SAW diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml index be4ea534d7d..dc49dce0f3a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml @@ -19,6 +19,20 @@ containers: ballistic-ammo: !type:Container ents: [] + - type: MeleeWeapon + attackRate: 1.5 + damage: + types: + Blunt: 14 + bluntStaminaDamageFactor: 1.5 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 14 - type: entity name: china lake diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml index 73c2231b23a..fefc41ae865 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml @@ -66,6 +66,19 @@ - type: StaticPrice price: 500 - type: AmmoCounter + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 135 + soundHit: + collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 5 - type: entity name: viper diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml index 734b6c4adca..c85ce56974b 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml @@ -50,6 +50,19 @@ path: /Audio/Weapons/Guns/MagIn/revolver_magin.ogg - type: StaticPrice price: 500 + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 135 + soundHit: + collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 5 - type: entity name: Deckard diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml index 61df2b857ea..0aa281b95c0 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml @@ -51,6 +51,24 @@ gun_chamber: !type:ContainerSlot - type: StaticPrice price: 500 + - type: MeleeWeapon + attackRate: 1.3333 + damage: + types: + Blunt: 8.5 + bluntStaminaDamageFactor: 1.25 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 7.5 - type: entity name: AKMS diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml index b448ddea3e4..8d43953a07b 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml @@ -54,6 +54,24 @@ gun_chamber: !type:ContainerSlot - type: StaticPrice price: 500 + - type: MeleeWeapon + attackRate: 1.3333 + damage: + types: + Blunt: 9.0 + bluntStaminaDamageFactor: 1.25 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 8 - type: entity name: Atreides diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml index 44ee4a08c1b..40c85374123 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml @@ -43,6 +43,24 @@ ents: [] - type: StaticPrice price: 500 + - type: MeleeWeapon + attackRate: 1.4 + damage: + types: + Blunt: 10 + bluntStaminaDamageFactor: 1.3333 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 9.5 - type: entity name: Bulldog @@ -102,6 +120,24 @@ - type: Appearance - type: StaticPrice price: 500 + - type: MeleeWeapon + attackRate: 1.4 + damage: + types: + Blunt: 10 + bluntStaminaDamageFactor: 1.3333 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 9.5 - type: entity name: antique Bulldog @@ -136,6 +172,12 @@ graph: ShotgunSawn node: start deconstructionTarget: null + - type: MeleeWeapon + damage: + types: + Blunt: 8.5 + - type: DamageOtherOnHit + staminaCost: 7.5 - type: entity name: double-barreled shotgun @@ -162,6 +204,13 @@ - type: BallisticAmmoProvider - type: Wieldable - type: GunRequiresWield + - type: MeleeWeapon + attackRate: 1.4 + damage: + types: + Blunt: 9 + - type: DamageOtherOnHit + staminaCost: 8.0 - type: entity parent: WeaponShotgunEnforcer @@ -216,6 +265,13 @@ graph: ShotgunSawn node: shotgunsawn deconstructionTarget: null + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + - type: DamageOtherOnHit + staminaCost: 6 - type: entity name: sawn-off shogun @@ -255,6 +311,14 @@ deconstructionTarget: null - type: StaticPrice price: 0 + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + wideAnimationRotation: 135 + - type: DamageOtherOnHit + staminaCost: 5 - type: entity name: blunderbuss diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml index 88c00bedbd5..86b90f2bdea 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml @@ -39,12 +39,30 @@ ents: [] - type: StaticPrice price: 500 + - type: MeleeWeapon + attackRate: 1.3333 + damage: + types: + Blunt: 8.0 + bluntStaminaDamageFactor: 1.25 + swapKeys: true + disableHeavy: true + wideAnimationRotation: 135 + animation: WeaponArcThrust + soundHit: + collection: MetalThud + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 2.5 + - type: DamageOtherOnHit + staminaCost: 7.5 - type: entity name: Kardashev-Mosin parent: [BaseWeaponSniper, BaseGunWieldable] id: WeaponSniperMosin - description: A weapon for hunting, or endless trench warfare. Uses .30 rifle ammo. + description: A weapon for hunting, or endless trench warfare, with a bayonet attached at the barrel. Uses .30 rifle ammo. components: - type: Sprite sprite: Objects/Weapons/Guns/Snipers/bolt_gun_wood.rsi @@ -56,6 +74,30 @@ soundGunshot: path: /Audio/Weapons/Guns/Gunshots/sniper.ogg fireOnDropChance: 1 + - type: MeleeWeapon + range: 1.75 + damage: + types: + Piercing: 5 + Slash: 3.5 + wideAnimationRotation: -135 + soundHit: + path: /Audio/Weapons/bladeslice.ogg + - type: IncreaseDamageOnWield + damage: + types: + Piercing: 4 + Slash: 2 + - type: DamageOtherOnHit + damage: + types: + Piercing: 8 + Slash: 3 + - type: EmbeddableProjectile + removalTime: 3.5 + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 225 - type: entity name: Kardashev-Mosin @@ -114,15 +156,29 @@ capacity: 1 proto: CartridgeAntiMateriel - type: MeleeWeapon - wideAnimationRotation: -135 + range: 1.75 damage: types: - Piercing: 15 #you fucking stab em - Bloodloss: 2 #no way to apply bleed, triangular bayonet wounds are hard to fix(source:that one copypasta) - angle: 0 - animation: WeaponArcThrust + Piercing: 5 + Slash: 3.5 + wideAnimationRotation: -135 soundHit: path: /Audio/Weapons/bladeslice.ogg + - type: IncreaseDamageOnWield + damage: + types: + Piercing: 4 + Slash: 2 + - type: DamageOtherOnHit + damage: + types: + Piercing: 8 + Slash: 3 + - type: EmbeddableProjectile + removalTime: 3.5 + - type: EmbedPassiveDamage + - type: ThrowingAngle + angle: 225 - type: entity name: flintlock pistol @@ -152,4 +208,12 @@ proto: CartridgeAntiMateriel - type: StaticPrice price: 0 - + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 7.5 + bluntStaminaDamageFactor: 1.0 + wideAnimationRotation: 135 + - type: DamageOtherOnHit + staminaCost: 5 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/flare_gun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/flare_gun.yml index 9b046a7aae6..0ad30e9ed6e 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/flare_gun.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/flare_gun.yml @@ -37,3 +37,16 @@ slots: - Belt - suitStorage + - type: MeleeWeapon + attackRate: 1.2 + damage: + types: + Blunt: 6.5 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 135 + soundHit: + collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 4.5 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml index 12511729460..2f1527d3592 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml @@ -61,6 +61,19 @@ storagebase: !type:Container ents: [] gas_tank: !type:ContainerSlot + - type: MeleeWeapon + attackRate: 1.33 + damage: + types: + Blunt: 9 + swapKeys: true + disableHeavy: true + animation: WeaponArcThrust + wideAnimationRotation: 180 + soundHit: + collection: MetalThud + - type: DamageOtherOnHit + staminaCost: 8 - type: entity name: pie cannon diff --git a/Resources/Prototypes/Entities/Structures/Decoration/floordecor.yml b/Resources/Prototypes/Entities/Structures/Decoration/floordecor.yml new file mode 100644 index 00000000000..2ed9c186eeb --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Decoration/floordecor.yml @@ -0,0 +1,720 @@ +- type: entity + id: DecorFloorBase + abstract: true + placement: + mode: SnapgridCenter + components: + - type: Sprite + sprite: Structures/Decoration/cave_decor.rsi + netsync: false + noRot: true + drawdepth: FloorObjects + - type: Damageable + damageModifierSet: Wood + damageContainer: Inorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: WoodDestroy + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: Transform + anchored: true + - type: Physics + bodyType: Static + canCollide: false + - type: Clickable + - type: InteractionOutline +# No fixture on this base, inherit from further down for fixture + +# Cave Decor +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard1 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_ns-1 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard2 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_ns-2 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard3 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_ns-3 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard4 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_ns-4 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard5 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_ns-5 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard6 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_ns-6 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard7 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_we-1 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard8 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_we-2 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard9 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_we-3 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard10 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_we-4 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard11 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_we-5 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard12 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_drought_we-6 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard13 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_ns-1 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard14 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_ns-2 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard15 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_ns-3 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard16 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_ns-4 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard17 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_ns-5 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard18 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_ns-6 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard19 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_we-1 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard20 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_we-2 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard21 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_we-3 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard22 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_we-4 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard23 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_we-5 + +- type: entity + parent: DecorFloorBase + id: DecorFloorBoard24 + name: floor board + description: Keep the mud off your feet. + components: + - type: Sprite + state: boards_mammoth_we-6 + +- type: entity + parent: DecorFloorBase + id: DecorStalagmite1 + name: stalagmite + description: Pointy rocks! Mites go up, tites come... + components: + - type: Sprite + state: stalagmite + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.20 + density: 1000 + mask: + - MachineMask + layer: + - MachineLayer + +- type: entity + parent: DecorStalagmite1 + id: DecorStalagmite2 + components: + - type: Sprite + state: stalagmite1 + +- type: entity + parent: DecorStalagmite1 + id: DecorStalagmite3 + components: + - type: Sprite + state: stalagmite2 + +- type: entity + parent: DecorStalagmite1 + id: DecorStalagmite4 + components: + - type: Sprite + state: stalagmite3 + +- type: entity + parent: DecorStalagmite1 + id: DecorStalagmite5 + components: + - type: Sprite + state: stalagmite4 + +- type: entity + parent: DecorStalagmite1 + id: DecorStalagmite6 + components: + - type: Sprite + state: stalagmite5 + +- type: entity + parent: DecorStalagmite1 + id: DecorMinecart + name: minecrart + description: It seems to have fallen over... + components: + - type: Sprite + state: minecart_fallen + +- type: entity + parent: DecorFloorBase + id: DecorSignLeftMine + name: sign + description: A sign, for a mine, pointing li...left + components: + - type: Sprite + state: sign_left + +- type: entity + parent: DecorFloorBase + id: DecorSignRightMine + name: sign + description: A sign, pointing right. + components: + - type: Sprite + state: sign_right + +# World Decor +- type: entity + parent: DecorFloorBase + id: DecorFloorWorldBase + abstract: true + components: + - type: Sprite + sprite: Structures/Decoration/world.rsi + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorPaper + name: scattered paper + description: A mess of papers + suffix: 8 states + components: + - type: Sprite + sprite: Structures/Decoration/world.rsi + state: scattered_papers + # add destruction drop for materials + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorPaper1 + suffix: 4 states + name: scattered paper + description: A mess of papers + components: + - type: Sprite + state: papers_1 + +- type: entity + parent: DecorFloorPaper1 + id: DecorFloorPaper2 + components: + - type: Sprite + state: papers_2 + +- type: entity + parent: DecorFloorPaper1 + id: DecorFloorPaper3 + components: + - type: Sprite + state: papers_3 + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorScrapwood + name: wood scraps + description: wood scraps + suffix: 6 states + components: + - type: Sprite + state: woodscrap + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorBrickrubble + name: brick rubble + description: brick rubble + suffix: "6 states" + components: + - type: Sprite + state: brickrubble + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorCardboard + name: cardboard boxes + description: cardboard scrap boxes + suffix: "6 states" + components: + - type: Sprite + state: cardboard + # add destruction drop for materials + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorPallet + name: pallet + description: a wooden pallet. + suffix: "2 states" + components: + - type: Sprite + state: pallet + # add destruction drop for materials + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorPalletStack + name: pallet stack + description: a stack of wooden pallets + suffix: "2 states" + components: + - type: Sprite + state: pallet_stack + # add destruction drop for materials + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.20 + density: 1000 + mask: + - MachineMask + layer: + - MachineLayer + +- type: entity + parent: DecorFloorPalletStack + id: DecorFloorBrickStack + name: brick stack + description: a neat stack of bricks + components: + - type: Sprite + state: brickpile + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorBookstack1 + name: book stack + description: a stack of books + components: + - type: Sprite + state: bookstack_1 + # add destruction drop for materials + +- type: entity + parent: DecorFloorBookstack1 + id: DecorFloorBookstack2 + components: + - type: Sprite + state: bookstack_2 + +- type: entity + parent: DecorFloorBookstack1 + id: DecorFloorBookstack3 + components: + - type: Sprite + state: bookstack_3 + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorBookPile1 + name: book pile + description: a pile of books + components: + - type: Sprite + state: bookpile_1 + # add destruction drop for materials + +- type: entity + parent: DecorFloorBookPile1 + id: DecorFloorBookPile2 + components: + - type: Sprite + state: bookpile_2 + +- type: entity + parent: DecorFloorBookPile1 + id: DecorFloorBookPile3 + components: + - type: Sprite + state: bookpile_3 + +- type: entity + parent: DecorFloorBookPile1 + id: DecorFloorBookPile4 + components: + - type: Sprite + state: bookpile_4 + +- type: entity + parent: DecorFloorBookPile1 + id: DecorFloorBookPile5 + components: + - type: Sprite + state: bookpile_5 + +- type: entity + parent: DecorFloorBookPile1 + id: DecorFloorBookPile6 + components: + - type: Sprite + state: bookpile_6 + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorFood1 + name: food stuff + description: some old food stuff + components: + - type: Sprite + state: foodstuff_1 + +- type: entity + parent: DecorFloorFood1 + id: DecorFloorFood2 + components: + - type: Sprite + state: foodstuff_2 + +- type: entity + parent: DecorFloorFood1 + id: DecorFloorFood3 + components: + - type: Sprite + state: foodstuff_3 + +- type: entity + parent: DecorFloorFood1 + id: DecorFloorFood4 + components: + - type: Sprite + state: foodstuff_4 + +- type: entity + parent: DecorFloorFood1 + id: DecorFloorFood5 + components: + - type: Sprite + state: foodstuff_5 + +- type: entity + parent: DecorFloorFood1 + id: DecorFloorFood6 + components: + - type: Sprite + state: foodstuff_6 + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorTrashbags1 + name: trash bags + description: some old trash bags + components: + - type: Sprite + state: trashbags_1 + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.20 + density: 1000 + mask: + - MachineMask + layer: + - MachineLayer + +- type: entity + parent: DecorFloorTrashbags1 + id: DecorFloorTrashbags2 + components: + - type: Sprite + state: trashbags_2 + +- type: entity + parent: DecorFloorTrashbags1 + id: DecorFloorTrashbags3 + components: + - type: Sprite + state: trashbags_3 + +- type: entity + parent: DecorFloorTrashbags1 + id: DecorFloorTrashbags4 + components: + - type: Sprite + state: trashbags_4 + +- type: entity + parent: DecorFloorTrashbags1 + id: DecorFloorTrashbags5 + components: + - type: Sprite + state: trashbags_5 + +- type: entity + parent: DecorFloorTrashbags1 + id: DecorFloorTrashbags6 + components: + - type: Sprite + state: trashbags_6 + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorGlass1 + name: glass bottles + description: some old glass scraps + components: + - type: Sprite + state: glass_1 + # add glass shard destruction + +- type: entity + parent: DecorFloorGlass1 + id: DecorFloorGlass2 + components: + - type: Sprite + state: glass_2 + +- type: entity + parent: DecorFloorGlass1 + id: DecorFloorGlass3 + components: + - type: Sprite + state: glass_3 + +- type: entity + parent: DecorFloorGlass1 + id: DecorFloorGlass4 + components: + - type: Sprite + state: glass_4 + +- type: entity + parent: DecorFloorGlass1 + id: DecorFloorGlass5 + components: + - type: Sprite + state: glass_5 + +- type: entity + parent: DecorFloorGlass1 + id: DecorFloorGlass6 + components: + - type: Sprite + state: glass_6 + +- type: entity + parent: DecorFloorWorldBase + id: DecorSignMines + name: mines + description: danger of mines and death... + components: + - type: Sprite + state: mine_sign + +- type: entity + parent: DecorFloorWorldBase + id: DecorFloorSkeleton + name: skeleton + description: looks a little worse for wear + components: + - type: Sprite + state: skeleton + +- type: entity + parent: DecorFloorWorldBase + id: DecorBarrels + name: barrels + description: a bunch of old rusty barrels. + components: + - type: Sprite + layers: + - state: barrels1 + map: [ "body" ] + - type: RandomSprite + available: + - body: + barrels1: "" + barrels2: "" + barrels3: "" + barrels4: "" + barrels5: "" + barrels6: "" + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.3 + density: 1000 + mask: + - MachineMask + layer: + - MachineLayer + +- type: entity + parent: DecorFloorSkeleton + id: DecorFloorSkeletonOver + suffix: draws over objects + components: + - type: Sprite + drawdepth: Mobs diff --git a/Resources/Prototypes/Entities/Structures/Decoration/rails.yml b/Resources/Prototypes/Entities/Structures/Decoration/rails.yml new file mode 100644 index 00000000000..a41b474622a --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Decoration/rails.yml @@ -0,0 +1,95 @@ +- type: entity + id: Rails + name: railway + placement: + mode: SnapgridCenter + components: + - type: Sprite + sprite: Structures/Decoration/rails64.rsi + state: rails + netsync: false + drawdepth: FloorObjects + - type: Damageable + damageModifierSet: Wood + damageContainer: Inorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 200 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: WoodDestroy + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: Transform + anchored: true + - type: Physics + bodyType: Static + canCollide: false + - type: Clickable + +- type: entity + parent: Rails + id: RailsJunctionRightTop + suffix: junction right top + components: + - type: Sprite + state: junction-right-top + +- type: entity + parent: Rails + id: RailsJunctionLeftTop + suffix: junction left top + components: + - type: Sprite + state: junction-left-top + +- type: entity + parent: Rails + id: RailsJunctionRightBottom + suffix: junction right bottom + components: + - type: Sprite + state: junction-right-bottom + +- type: entity + parent: Rails + id: RailsJunctionLeftBottom + suffix: junction left bottom + components: + - type: Sprite + state: junction-left-bottom + +- type: entity + parent: Rails + id: RailsTurnWS + suffix: turn west-south + components: + - type: Sprite + state: turn-WS + +- type: entity + parent: Rails + id: RailsTurnNW + suffix: turn north-west + components: + - type: Sprite + state: turn-NW + +- type: entity + parent: Rails + id: RailsTurnNE + suffix: turn north-east + components: + - type: Sprite + state: turn-NE + +- type: entity + parent: Rails + id: RailsTurnSE + suffix: turn south-east + components: + - type: Sprite + state: turn-SE diff --git a/Resources/Prototypes/Entities/Structures/Decoration/torches.yml b/Resources/Prototypes/Entities/Structures/Decoration/torches.yml new file mode 100644 index 00000000000..1646ec9f707 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Decoration/torches.yml @@ -0,0 +1,73 @@ +- type: entity + id: Torch2 + name: torch + suffix: floor + description: A flaming torch for lighting an area. + placement: + mode: SnapgridCenter + components: + - type: Transform + anchored: true + - type: Clickable + - type: InteractionOutline + - type: Physics + bodyType: Static + canCollide: false + - type: Sprite + netsync: false + noRot: true + sprite: Structures/Decoration/torches.rsi + state: torch_unlit + - type: Appearance + - type: Reactive + groups: + Flammable: [ Touch ] + Extinguish: [ Touch ] + - type: ExtinguishOnInteract + extinguishAttemptSound: + path: /Audio/Items/candle_blowing.ogg + params: + variation: 0.05 + volume: 10 + - type: UseDelay + - type: Flammable + fireSpread: false + canResistFire: false + alwaysCombustible: true + canExtinguish: true + firestacksOnIgnite: 3.0 + firestackFade: -0.01 + damage: + types: + Heat: 0.1 + - type: FireVisuals + sprite: Structures/Decoration/torches.rsi + normalState: torch_lit + - type: Damageable + damageModifierSet: Wood + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: ToggleableLightVisuals + spriteLayer: null + - type: PointLight + color: "#e39c40" + radius: 5 + power: 16 + +- type: entity + parent: Torch2 + id: TorchWall + suffix: wall + components: + - type: Sprite + noRot: false + state: wall_torch_unlit + - type: FireVisuals + sprite: Structures/Decoration/torches.rsi + normalState: wall_torch_lit diff --git a/Resources/Prototypes/Entities/Structures/Storage/barrels.yml b/Resources/Prototypes/Entities/Structures/Storage/barrels.yml new file mode 100644 index 00000000000..0cbbb2ede8b --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Storage/barrels.yml @@ -0,0 +1,287 @@ +# Barrels +# Base +- type: entity + parent: BaseStructureDynamic + id: BaseBarrel + name: barrel + description: This barrel looks like it could contain something. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: blue-closed + netsync: false + noRot: true + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.2,-0.2,0.2,0.45" + density: 50 + mask: + - MachineMask + layer: + - WallLayer + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTypeTrigger + damageType: Heat + damage: 5 + behaviors: + - !type:SolutionExplosionBehavior + solution: barrel + - trigger: + !type:DamageTypeTrigger + damageType: Piercing + damage: 5 + behaviors: + - !type:SolutionExplosionBehavior + solution: barrel + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:SpillBehavior + solution: barrel + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:DoActsBehavior + acts: ["Destruction"] + +# Base Open +- type: entity + parent: BaseBarrel + id: BaseBarrelOpen + suffix: open + categories: [ HideSpawnMenu ] + components: + - type: SolutionContainerManager + solutions: + barrel: + maxVol: 500 + - type: DrainableSolution + solution: barrel + - type: ReagentTank + +# Closed +- type: entity + parent: BaseBarrel + id: BlackBarrel + name: black barrel + description: A worn out black barrel. The label is torn off. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: black-closed + +- type: entity + parent: BaseBarrel + id: BlueBarrel + name: blue barrel + description: A blue barrel with a warning sign of. Maybe it contains water? + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: blue-closed + +- type: entity + parent: BaseBarrel + id: RedBarrel + name: red barrel + description: A red barrel with an explosive warning sign on. Better be careful. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: red-closed + - type: Explosive + explosionType: Default + totalIntensity: 120 # ~ 5 tile radius + +- type: entity + parent: BaseBarrel + id: YellowBarrel + name: yellow barrel + description: A yellow barrel with a radiation warning sign on. Better be careful. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: yellow-closed + - type: RadiationSource + intensity: 2 + slope: 1 + +# Open +- type: entity + parent: BaseBarrelOpen + id: BlackBarrelOpen + suffix: open + name: black barrel + description: A worn out black barrel. The label is torn off. The lid is off and you can see inside. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: black-open + +- type: entity + parent: BaseBarrelOpen + id: BlueBarrelOpen + suffix: open + name: blue barrel + description: A blue barrel with a warning sign of. The lid is off and you can see inside. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: blue-open + +- type: entity + parent: BaseBarrelOpen + id: RedBarrelOpen + suffix: open + name: red barrel + description: A red barrel with an explosive warning sign on. The lid is off and you can see inside. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: red-open + +- type: entity + parent: BaseBarrelOpen + id: YellowBarrelOpen + suffix: open + name: yellow barrel + description: A yellow barrel with a radiation warning sign on. The lid is off and you can see inside but it still makes you twitch. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: yellow-open + - type: RadiationSource + intensity: 1 + slope: 1 + +# Full barrels +- type: entity + parent: BlackBarrelOpen + id: BlackBarrelFull + suffix: full + description: A worn out black barrel. This one looks full of some dark liquid. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: black-full + # TODO - fill with some sort of waste product? Maybe just dirty water. + +- type: entity + parent: RedBarrelOpen + id: RedBarrelFull + suffix: full + description: A red barrel with an explosive warning sign on. It has a golden liquid inside. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: red-full + - type: SolutionContainerManager + solutions: + barrel: + reagents: + - ReagentId: WeldingFuel + Quantity: 500 + - type: DamageOnToolInteract + tools: + - Welding + weldingDamage: + types: + Heat: 10 + - type: Explosive + explosionType: Default + totalIntensity: 120 # ~ 5 tile radius + +- type: entity + parent: YellowBarrelOpen + id: YellowBarrelFull + suffix: full + description: A yellow barrel with a radiation warning sign on. You can see the glowing goo bubble. + components: + - type: Sprite + sprite: Structures/Storage/barrels.rsi + state: yellow-full + - type: RadiationSource + intensity: 3 + slope: 1 + - type: PointLight + netsync: false + radius: 1.5 + energy: 1.6 + color: "#3db83b" + castShadows: false + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 1000 + behaviors: + - !type:SpillBehavior + solution: barrel + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:DoActsBehavior + acts: ["Destruction"] + # TODO - fill with some sort of radioactive waste reagent. + +# Burning Barrels +- type: entity + parent: BaseStructureDynamic + id: BurningBarrel + name: burnt barrel + description: This barrel looks like it once contained a fire. + components: + - type: Sprite + sprite: Structures/Storage/burningbarrel.rsi + state: burnbarrel + netsync: false + noRot: true + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.2 + density: 50 + mask: + - MachineMask + layer: + - MidImpassable + - LowImpassable + +- type: entity + parent: BurningBarrel + id: BurningBarrelLit + name: burning barrel + description: This barrel is smoldering. Toasty + components: + - type: Sprite + sprite: Structures/Storage/burningbarrel.rsi + state: burnbarrel_lit + netsync: false + - type: PointLight + color: "#E25822" + radius: 1.0 + energy: 5.0 + netsync: false + - type: LightBehaviour + behaviours: + - !type:RandomizeBehaviour # immediately make it bright and flickery + id: burnbarrel_lit + interpolate: Nearest + minDuration: 0.02 + maxDuration: 0.06 + startValue: 6.0 + endValue: 9.0 + property: Energy + isLooped: true diff --git a/Resources/Prototypes/Entities/Structures/Storage/closets.yml b/Resources/Prototypes/Entities/Structures/Storage/closets.yml new file mode 100644 index 00000000000..394840caf48 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Storage/closets.yml @@ -0,0 +1,228 @@ +# TODO:RESET:TIMEDSTORAGEFILL + +# Metal Closets +- type: entity + parent: ClosetBase + id: ClosetBase2 + abstract: true + components: + - type: Sprite + sprite: Structures/Storage/Closets/closet.rsi + layers: + - state: closet + map: ["enum.StorageVisualLayers.Base"] + - state: closet_door + map: ["enum.StorageVisualLayers.Door"] + - type: EntityStorageVisuals + stateBaseClosed: closet + stateDoorOpen: closet_open + stateDoorClosed: closet_door + - type: Transform + anchored: true + noRot: true + - type: Physics + bodyType: Static + - type: Anchorable # Makes the anchoring near impossible due to high time requirement + delay: 3600 + +- type: entity + parent: ClosetBase2 + id: ClosetBaseW + name: closet + description: A basic closet for storing things. + components: + - type: Weldable + - type: Sprite + noRot: true + netsync: false + sprite: Structures/Storage/Closets/closet.rsi + layers: + - state: closet + map: ["enum.StorageVisualLayers.Base"] + - state: closet_door + map: ["enum.StorageVisualLayers.Door"] + - state: welded + visible: false + map: ["enum.WeldableLayers.BaseWelded"] + - type: EntityStorageVisuals + stateBaseClosed: closet + stateDoorOpen: closet_open + stateDoorClosed: closet_door + + +- type: entity + parent: ClosetBaseW + id: ClosetGrey1 + components: + - type: Sprite + sprite: Structures/Storage/Closets/closetgrey.rsi + - type: Weldable + +- type: entity + id: ClosetGrey2 + parent: ClosetBaseW + components: + - type: Sprite + sprite: Structures/Storage/Closets/closetgrey2.rsi + +- type: entity + parent: ClosetBaseW + id: ClosetRusty + name: rusty closet + description: A rusty old closet for storing things. + components: + - type: Sprite + sprite: Structures/Storage/Closets/closetold.rsi + +- type: entity + parent: ClosetBaseW + id: ClosetGunCabinet + name: gun cabinet + description: A secure cabinet for storing guns. + components: + - type: Sprite + sprite: Structures/Storage/Closets/guncabinet.rsi + +- type: entity + parent: ClosetBaseW + id: ClosetFridgeDirty + name: fridge + description: A dirty old fridge for keeping food fresh + components: + - type: Sprite + sprite: Structures/Storage/Closets/fridgedirty.rsi + - type: ExplosionResistance + damageCoefficient: 0.90 + - type: AntiRottingContainer + +- type: entity + parent: ClosetBaseW + id: ClosetFridgeWideDirty + name: fridge + description: A dirty old fridge for keeping food fresh + components: + - type: Sprite + sprite: Structures/Storage/Closets/fridgewidedirty.rsi + - type: ExplosionResistance + damageCoefficient: 0.90 + - type: AntiRottingContainer + +- type: entity + parent: ClosetBaseW + id: ClosetDouble + name: double closet + description: A double closet for holding twice the things. + components: + - type: Sprite + sprite: Structures/Storage/Closets/doublecloset.rsi + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.15,-0.45,0.45,0.45" + density: 145 + mask: + - MachineMask + layer: + - MachineLayer + +# Wooden Closets + +- type: entity + parent: ClosetBase2 + id: ClosetCabinetWood + name: cabinet + description: An old pre-war wooden cabinet. + components: + - type: Sprite + sprite: Structures/Storage/Closets/cabinet.rsi + - type: Damageable + damageModifierSet: Wood + damageContainer: Inorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 30 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: WoodDestroy + - !type:SpawnEntitiesBehavior + spawn: + MaterialWoodPlank: + min: 0 + max: 1 + - !type:DoActsBehavior + acts: ["Destruction"] + - type: Tag + tags: + - Wooden + +- type: entity + parent: ClosetBaseW + id: ClosetGeneric + suffix: generic roller + components: + - type: Sprite + sprite: Structures/Storage/Closets/closetgeneric.rsi + +# Wallmounted Closets +- type: entity + id: ClosetWallMedicabinet + placement: + mode: SnapgridCenter + name: medicabinet + description: A medicabinet mounted on the wall. + components: + - type: InteractionOutline + - type: Clickable + - type: ResistLocker + - type: Weldable + - type: WallMount + arc: 180 + - type: Transform + noRot: false + - type: Sprite + drawdepth: WallMountedItems + netsync: false + noRot: false + sprite: Structures/Storage/Closets/medicabinet.rsi + layers: + - state: closet + - state: closet_door + map: ["enum.StorageVisualLayers.Door"] + - state: welded + visible: false + map: ["enum.WeldableLayers.BaseWelded"] + - type: EntityStorage + isCollidableWhenOpen: true + enteringOffset: 0, -0.75 + closeSound: + path: /Audio/Items/deconstruct.ogg + openSound: + path: /Audio/Items/deconstruct.ogg + - type: ContainerContainer + containers: + entity_storage: !type:Container + ents: [] + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 150 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:SpawnEntitiesBehavior + spawn: + SheetSteel1: + min: 1 + max: 1 diff --git a/Resources/Prototypes/Entities/Structures/Storage/crates.yml b/Resources/Prototypes/Entities/Structures/Storage/crates.yml new file mode 100644 index 00000000000..e6292912b09 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Storage/crates.yml @@ -0,0 +1,227 @@ +- type: entity + parent: CrateGenericSteel + id: CrateFootlocker + name: footlocker + description: A footlocker for someones equipment. + components: + - type: Icon + sprite: Structures/Storage/Crates/footlocker.rsi + - type: Sprite + sprite: Structures/Storage/Crates/footlocker.rsi + - type: Reflect + reflects: + - Energy + reflectProb: 0.2 + spread: 90 + +- type: entity + parent: CrateGenericSteel + id: CrateAluminium + name: aluminium crate + description: An aluminium crate for storing stuff. + components: + - type: Icon + sprite: Structures/Storage/Crates/aluminiumcrate.rsi + - type: Sprite + sprite: Structures/Storage/Crates/aluminiumcrate.rsi + +- type: entity + parent: CrateGenericSteel + id: CrateArmy + name: army crate + description: A crate with a US Army star on. + components: + - type: Icon + sprite: Structures/Storage/Crates/armycrate.rsi + - type: Sprite + sprite: Structures/Storage/Crates/armycrate.rsi + +- type: entity + parent: CrateGenericSteel + id: CrateMedical2 + name: medical crate + description: A metal crate for storing medical equipment. + components: + - type: Icon + sprite: Structures/Storage/Crates/medicalcrate.rsi + - type: Sprite + sprite: Structures/Storage/Crates/medicalcrate.rsi + +- type: entity + parent: CrateGenericSteel + id: CrateRed + name: red crate + description: A faded red crate for storing stuff. + components: + - type: Icon + sprite: Structures/Storage/Crates/redcrate.rsi + - type: Sprite + sprite: Structures/Storage/Crates/redcrate.rsi + +- type: entity + parent: CrateGeneric + id: Trashbin + name: trash bin + description: A trash bin for putting rubbish in. + components: + - type: Icon + sprite: Structures/Storage/Crates/trashbin.rsi + - type: Sprite + sprite: Structures/Storage/Crates/trashbin.rsi + layers: + - state: base + map: ["enum.StorageVisualLayers.Base"] + - state: closed + map: ["enum.StorageVisualLayers.Door"] + +- type: entity + parent: CrateFootlocker + id: CrateTrashcart + name: trash cart + description: A trash cart for transporting waste. + components: + - type: Icon + sprite: Structures/Storage/Crates/trashcart.rsi + - type: Sprite + sprite: Structures/Storage/Crates/trashcart.rsi + - type: TileFrictionModifier + modifier: 0.4 + +- type: entity + parent: CrateGeneric + id: CrateFreezer2 + name: freezer + description: A freezer for keeping things cool. + components: + - type: Icon + sprite: Structures/Storage/Crates/freezer.rsi + - type: Sprite + sprite: Structures/Storage/Crates/freezer.rsi + layers: + - state: base + map: ["enum.StorageVisualLayers.Base"] + - state: closed + map: ["enum.StorageVisualLayers.Door"] + - type: AntiRottingContainer + +# Wooden +- type: entity + parent: CrateGeneric + id: CrateWooden + name: wooden crate + components: + - type: Icon + sprite: Structures/Storage/Crates/cratewooden.rsi + state: icon + - type: Sprite + sprite: Structures/Storage/Crates/cratewooden.rsi + layers: + - state: base + map: ["enum.StorageVisualLayers.Base"] + - state: closed + map: ["enum.StorageVisualLayers.Door"] + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.4,-0.4,0.4,0.29" + density: 50 + mask: + - SmallMobMask #this is so they can go under plastic flaps + layer: + - MachineLayer + +- type: entity + parent: CrateWooden + id: CrateMilitary + name: military crate + description: An old wooden crate. Looks like it might have some supplies in. + components: + - type: Icon + sprite: Structures/Storage/Crates/cratemilitary.rsi + - type: Sprite + sprite: Structures/Storage/Crates/cratemilitary.rsi + +# Breakable Crates (deconstruct or destroy) +- type: entity + parent: BaseStructureDynamic + id: CrateBreakBase + name: wooden crate + description: A wooden crate for storage. + abstract: true + components: + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Wood + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 75 + behaviors: + - !type:DoActsBehavior + acts: ["Destruction"] + - !type:PlaySoundBehavior + sound: + collection: WoodDestroy + - !type:SpawnEntitiesBehavior + spawn: + MaterialWoodPlank: + min: 0 + max: 1 + - !type:EmptyAllContainersBehaviour + - type: Sprite + sprite: Structures/Storage/Crates/woodencrates.rsi + - type: Storage + grid: + - 0,0,6,3 + maxItemSize: Huge + - type: UserInterface + interfaces: + enum.StorageUiKey.Key: + type: StorageBoundUserInterface + - type: ContainerContainer + containers: + storagebase: !type:Container + ents: [] + +- type: entity + parent: CrateBreakBase + id: CrateBreakWood + suffix: wood + components: + - type: Sprite + state: wood_crate + +- type: entity + parent: CrateBreakBase + id: CrateBreakPlain + suffix: plain + components: + - type: Sprite + state: plain_crate + +- type: entity + parent: CrateBreakBase + id: CrateBreakPlainDamaged + suffix: plain damaged + components: + - type: Sprite + state: plain_crate-1 # TODO: Make this random between states -1, -2 and -3 + +- type: entity + parent: CrateBreakBase + id: CrateBreakArmy + name: army crate + components: + - type: Sprite + state: army_crate + +- type: entity + parent: CrateBreakArmy + id: CrateBreakArmyDamaged + suffix: damaged + components: + - type: Sprite + state: army_crate-1 # TODO: Make this random between states -1 and -2 diff --git a/Resources/Prototypes/Entities/Structures/Storage/furniture.yml b/Resources/Prototypes/Entities/Structures/Storage/furniture.yml new file mode 100644 index 00000000000..6ea2a5e5649 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Storage/furniture.yml @@ -0,0 +1,49 @@ +# Washing Machines +- type: entity + parent: ClosetBase + id: FurnitureWashingmachine + name: washing machine + description: wishy washy. + components: + - type: Sprite + sprite: Structures/Storage/Furniture/washingmachine.rsi + layers: + - state: generic + map: ["enum.StorageVisualLayers.Base"] + - state: generic_door + map: ["enum.StorageVisualLayers.Door"] + - type: EntityStorageVisuals + stateBaseClosed: generic + stateDoorOpen: generic_open + stateDoorClosed: generic_door + - type: Transform + anchored: true + noRot: false + - type: Physics + bodyType: Static + +- type: entity + parent: FurnitureWashingmachine + id: FurnitureWashingmachineIndustrial + suffix: Industrial + components: + - type: Sprite + sprite: Structures/Storage/Furniture/washingmachine_industrial.rsi + +# Safes +- type: entity + parent: ClosetBaseW + id: ClosetSafe + name: safe + description: Might be filled with valuables. + components: + - type: Sprite + sprite: Structures/Storage/Furniture/safe.rsi + +- type: entity + parent: ClosetSafe + id: ClosetSafeSpinner + suffix: spinner + components: + - type: Sprite + sprite: Structures/Storage/Furniture/safespinner.rsi diff --git a/Resources/Prototypes/Entities/Structures/Storage/tanks.yml b/Resources/Prototypes/Entities/Structures/Storage/tanks.yml new file mode 100644 index 00000000000..41038fb74d1 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Storage/tanks.yml @@ -0,0 +1,182 @@ +# :TODO: Add the destroyed versions of these as a destruction spawn. + +- type: entity + parent: BaseStructure + id: StorageTankBase + name: storage tank + description: A liquids storage tank. + abstract: true + components: + - type: Sprite + noRot: true + - type: InteractionOutline + - type: Physics + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTypeTrigger + damageType: Heat + damage: 5 + behaviors: + - !type:SolutionExplosionBehavior + solution: tank + - trigger: + !type:DamageTypeTrigger + damageType: Piercing + damage: 5 + behaviors: + - !type:SolutionExplosionBehavior + solution: tank + - trigger: + !type:DamageTrigger + damage: 10 + behaviors: + - !type:SpillBehavior + solution: tank + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:DoActsBehavior + acts: ["Destruction"] + - type: SolutionContainerManager + solutions: + tank: + maxVol: 1500 + - type: DrainableSolution + solution: tank + - type: ReagentTank + - type: Transform + noRot: true + +# In use +- type: entity + id: StorageTankWide + parent: StorageTankBase + name: fuel tank + description: A fuel tank. It's used to store high amounts of fuel. + suffix: Empty + components: + - type: Sprite + sprite: Structures/Storage/tanksx64.rsi + layers: + - state: chemical_container + # - state: chemical_container + # map: ["enum.SolutionContainerLayers.Fill"] + # visible: false + - type: Appearance + # - type: SolutionContainerVisuals + # maxFillLevels: 3 + # fillBaseName: fueltank-2- + - type: ExaminableSolution + solution: tank + - type: ReagentTank + tankType: Fuel + - type: DamageOnToolInteract + tools: + - Welding + weldingDamage: + types: + Heat: 10 + - type: PacifismDangerousAttack + - type: Explosive + explosionType: Default + totalIntensity: 120 # ~ 5 tile radius + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.9,-0.5,0.9,0.2" + density: 155 + mask: + - MachineMask + layer: + - WallLayer + +- type: entity + parent: StorageTankWide + id: StorageTankWideFullFuel + suffix: Full + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: WeldingFuel + Quantity: 2000 + + +- type: entity + parent: StorageTankWide + id: StorageTank2 + suffix: Empty + components: + - type: Sprite + sprite: Structures/Storage/tanksx64.rsi + layers: + - state: largetank_chemical + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.9,-0.7,-0.1,0.4" + density: 155 + mask: + - MachineMask + layer: + - WallLayer + +- type: entity + id: StorageTankFullFuel + parent: StorageTank2 + suffix: Full + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: WeldingFuel + Quantity: 1500 + +- type: entity + id: StorageTankHuge + parent: StorageTankWide + suffix: Empty + components: + - type: Sprite + sprite: Structures/Storage/tanksx64.rsi + layers: + - state: largetank_chemical_huge + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.7,-0.7,0.2,0.6" + density: 155 + mask: + - MachineMask + layer: + - WallLayer + +- type: entity + id: StorageTankHugeFullFuel + parent: StorageTankHuge + suffix: Full + components: + - type: SolutionContainerManager + solutions: + tank: + reagents: + - ReagentId: WeldingFuel + Quantity: 2000 diff --git a/Resources/Prototypes/Entities/Structures/Wallmount/adverts.yml b/Resources/Prototypes/Entities/Structures/Wallmount/adverts.yml new file mode 100644 index 00000000000..53c2cb05f3c --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Wallmount/adverts.yml @@ -0,0 +1,19 @@ +- type: entity + parent: BaseSign + id: SignBase # for non directional signs otherwise remove snapCardinals: true + abstract: true + components: + - type: WallMount + arc: 360 + - type: Sprite + drawdepth: Overdoors + sprite: Structures/Wallmounts/signs_32x32.rsi + state: bar + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] diff --git a/Resources/Prototypes/Entities/Structures/Wallmount/base_lighting.yml b/Resources/Prototypes/Entities/Structures/Wallmount/base_lighting.yml new file mode 100644 index 00000000000..bdbce362f42 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Wallmount/base_lighting.yml @@ -0,0 +1,43 @@ +#Small lights +- type: entity + parent: SmallLight + id: LightSmallAlwayson + name: small light + suffix: Always on + description: "An always powered light." + components: + - type: Sprite + sprite: Structures/Wallmounts/lightbulbcaged.rsi + state: base + drawdepth: Overdoors + offset: 0, 1 # 0.75 is better but breaks for east west placement + - type: PointLight + energy: 1.0 + radius: 6 + softness: 1.1 + enabled: true + - type: WallMount + +- type: entity + parent: PoweredSmallLightEmpty + id: LightSmallEmpty + name: small light + description: "A light fixture. Draws power and produces light when equipped with a light bulb." + suffix: Empty + components: + - type: Sprite + sprite: Structures/Wallmounts/lightbulbcaged.rsi + state: empty + offset: 0, 1 + - type: WallMount + +- type: entity + parent: PoweredSmallLight + id: LightSmall + suffix: "" + components: + - type: Sprite + sprite: Structures/Wallmounts/lightbulbcaged.rsi + state: base + offset: 0, 1 + - type: WallMount diff --git a/Resources/Prototypes/Entities/Structures/Wallmount/monitors_televisions.yml b/Resources/Prototypes/Entities/Structures/Wallmount/monitors_televisions.yml new file mode 100644 index 00000000000..6cda440adae --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Wallmount/monitors_televisions.yml @@ -0,0 +1,54 @@ +- type: entity + parent: BaseComputer + id: ComputerVDU + name: VDU + description: A wall mounted video display unit. + components: + - type: Sprite + drawdepth: Overdoors + sprite: Structures/Wallmounts/vdu.rsi + layers: + - map: ["computerLayerBody"] + state: VDU + - map: ["computerLayerKeyboard"] + state: keyboard + - map: ["computerLayerScreen"] + state: screen + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.20,-0.10,0.25,0.35" + density: 250 + mask: + - FullTileMask + layer: + - WallLayer + - type: WallMount + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 200 + behaviors: #excess damage, don't spawn entities. + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:SpawnEntitiesBehavior + spawn: + SheetSteel1: + min: 1 + max: 1 + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: Transform + anchored: true + +# See terminals for more wall mounted versions diff --git a/Resources/Prototypes/Entities/Structures/Wallmount/noticeboard.yml b/Resources/Prototypes/Entities/Structures/Wallmount/noticeboard.yml new file mode 100644 index 00000000000..c02f56e249c --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Wallmount/noticeboard.yml @@ -0,0 +1,63 @@ +- type: entity + id: NoticeBoard2 + name: notice board + description: Something important to post? + placement: + mode: SnapgridCenter + components: + - type: WallMount + - type: Sprite + sprite: Structures/Wallmounts/noticeboard.rsi + layers: + - state: noticeboard + - state: notice-0 + - map: ["enum.StorageFillLayers.Fill"] + - type: StorageFillVisualizer + maxFillLevels: 6 + fillBaseName: notice + - type: Appearance + - type: InteractionOutline + - type: Clickable + - type: Transform + anchored: true + - type: Damageable + damageModifierSet: Wood + damageContainer: Inorganic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 30 + behaviors: + - !type:PlaySoundBehavior + sound: + collection: WoodDestroy + - !type:SpawnEntitiesBehavior + spawn: + MaterialWoodPlank: + min: 1 + max: 2 + - !type:DoActsBehavior + acts: ["Destruction"] + - type: Storage + grid: + - 0,0,4,3 + maxItemSize: Small + whitelist: + tags: + - Folder + - Document + - Write + - type: UserInterface + interfaces: + enum.StorageUiKey.Key: + type: StorageBoundUserInterface + - type: ContainerContainer + containers: + storagebase: !type:Container + - type: Tag + tags: + - Wooden + - type: Construction + graph: NoticeBoard + node: noticeBoard diff --git a/Resources/Prototypes/Entities/Structures/Wallmount/signs.yml b/Resources/Prototypes/Entities/Structures/Wallmount/signs.yml new file mode 100644 index 00000000000..b7ea2004a67 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Wallmount/signs.yml @@ -0,0 +1,154 @@ +# see adverts for sign base +# see street_furniture for floor signs + +# 32x32 +- type: entity + parent: SignBase + id: SignBar2 + name: bar sign + description: Bar! Get drunk here. + components: + - type: Sprite + sprite: Structures/Wallmounts/signs_32x32.rsi + state: bar + +- type: entity + parent: SignBar2 + id: SignClinic + name: clinic sign + description: A clinic sign. Hopefully they have meds. + components: + - type: Sprite + state: clinic + - type: PointLight + radius: 3 + energy: 1 + color: '#00ff00' + +- type: entity + parent: SignBar2 + id: SignOpen1 + name: open sign + description: Open for business. Maybe. + components: + - type: Sprite + state: open + - type: PointLight + radius: 3 + energy: 1 + color: '#ff0000' + +- type: entity + parent: SignOpen1 + id: SignOpen2 + components: + - type: Sprite + state: open_bar + +- type: entity + parent: SignOpen1 + id: SignOpenOn1 + components: + - type: Sprite + state: open_on + +- type: entity + parent: SignOpen1 + id: SignOpenOn2 + components: + - type: Sprite + state: open_bar_on + +- type: entity + parent: SignBase + id: SignForRent + name: for rent sign + description: A sign advertising a place for rent. + components: + - type: Sprite + sprite: Structures/Wallmounts/signs_32x32.rsi + state: rent + +- type: entity + parent: SignBase + id: SignNotice + name: notice sign + description: NOTICE! + components: + - type: Sprite + sprite: Structures/Wallmounts/walldecor.rsi + state: notice_sign + +- type: entity + parent: SignNotice + id: SignDanger2 + name: danger sign + description: Danger. + components: + - type: Sprite + state: danger_sign + +- type: entity + parent: SignNotice + id: WallDecorExitsign + name: exit sign + description: A sign that says EXIT. I wonder what it means. + components: + - type: Sprite + state: exit + noRot: true + +# 64x32 +- type: entity + parent: SignBar2 + id: SignBazaarOn + name: bazaar sign + description: A sign for a bazaar. How bizarre. + components: + - type: Sprite + sprite: Structures/Wallmounts/signs_64x32.rsi + state: bazaar_on + - type: PointLight + radius: 2 + energy: 1 + color: '#ff8000' + +- type: entity + parent: SignBazaarOn + id: SignHotel + name: hotel sign + description: A sign for a hotel. Get a room! + components: + - type: Sprite + state: hotel + +- type: entity + parent: SignBazaarOn + id: SignPrivateProperty + name: private property sign + description: A private property sign. + components: + - type: Sprite + state: private + +- type: entity + parent: SignBazaarOn + id: SignOpenBig + name: open sign + description: We are open sign. I hope so. + components: + - type: Sprite + state: we_open_open + - type: PointLight + radius: 2 + energy: 1 + color: '#ff0000' + +- type: entity + parent: SignBazaarOn + id: SignWorkersOnly + name: workers only sign + description: No tresspassing! + components: + - type: Sprite + state: workers diff --git a/Resources/Prototypes/Entities/Structures/Wallmount/wallmounts.yml b/Resources/Prototypes/Entities/Structures/Wallmount/wallmounts.yml new file mode 100644 index 00000000000..9946e6b2db5 --- /dev/null +++ b/Resources/Prototypes/Entities/Structures/Wallmount/wallmounts.yml @@ -0,0 +1,45 @@ +# For wallmount things that don't fit in any other file. + +# Safes + +# Vents +- type: entity + parent: BaseSign + id: WallmountVent + name: vent + description: An airvent. Could be a good stash. + components: + - type: WallMount + arc: 360 + - type: Sprite + drawdepth: Overdoors + sprite: Structures/Storage/storage.rsi + state: vent + - type: SecretStash + secretPartName: secret-stash-part-vent + maxItemSize: Normal + - type: ContainerContainer + containers: + stash: !type:ContainerSlot {} + - type: PottedPlantHide # TODO: This needs changed to be generic stash hide? + +- type: entity + parent: WallmountVent + id: WallmountVentDamaged + suffix: damaged + components: + - type: Sprite + sprite: Structures/Storage/storage.rsi + state: vent-damaged + +- type: entity + parent: WallmountVent + id: WallmountVentOpen + suffix: open + components: + - type: Sprite + sprite: Structures/Storage/storage.rsi + state: vent-open + + +# First Aid diff --git a/Resources/Prototypes/Guidebook/antagonist.yml b/Resources/Prototypes/Guidebook/antagonist.yml index 081ff7ef0ab..4b275446800 100644 --- a/Resources/Prototypes/Guidebook/antagonist.yml +++ b/Resources/Prototypes/Guidebook/antagonist.yml @@ -9,6 +9,7 @@ - Revolutionaries - MinorAntagonists - SpaceNinja + - BloodCult - type: guideEntry id: Traitors @@ -39,3 +40,8 @@ id: SpaceNinja name: guide-entry-space-ninja text: "/ServerInfo/Guidebook/Antagonist/SpaceNinja.xml" + +- type: guideEntry + id: BloodCult + name: guide-entry-blood-cult + text: "/ServerInfo/Guidebook/Antagonist/BloodCult.xml" diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/clothing/mime_hardsuit.yml b/Resources/Prototypes/Recipes/Construction/Graphs/clothing/mime_hardsuit.yml index 4d9c55fbc63..a72a5ccc8c8 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/clothing/mime_hardsuit.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/clothing/mime_hardsuit.yml @@ -1,43 +1,43 @@ -#- type: constructionGraph # DeltaV - Nuh uh -# id: MimeHardsuit -# start: start -# graph: -# - node: start -# edges: -# - to: mimeHardsuit -# steps: -# - material: Cloth -# amount: 5 -# doAfter: 1 -# - tag: SuitEVA -# name: An EVA suit -# icon: -# sprite: Clothing/OuterClothing/Suits/eva.rsi -# state: icon -# doAfter: 1 -# - tag: HelmetEVA -# name: An EVA helmet -# icon: -# sprite: Clothing/Head/Helmets/eva.rsi -# state: icon -# doAfter: 1 -# - tag: CrayonRed -# name: red crayon -# icon: -# sprite: Objects/Fun/crayons.rsi -# state: red -# doAfter: 1 -# - tag: CrayonBlack -# name: black crayon -# icon: -# sprite: Objects/Fun/crayons.rsi -# state: black -# doAfter: 1 -# - tag: MimeBelt -# name: suspenders -# icon: -# sprite: Clothing/Belt/suspenders.rsi -# state: icon -# doAfter: 1 -# - node: mimeHardsuit -# entity: ClothingOuterHardsuitMime +- type: constructionGraph + id: MimeHardsuit + start: start + graph: + - node: start + edges: + - to: mimeHardsuit + steps: + - material: Cloth + amount: 5 + doAfter: 1 + - tag: SuitEVA + name: An EVA suit + icon: + sprite: Clothing/OuterClothing/Suits/eva.rsi + state: icon + doAfter: 1 + - tag: HelmetEVA + name: An EVA helmet + icon: + sprite: Clothing/Head/Helmets/eva.rsi + state: icon + doAfter: 1 + - tag: CrayonRed + name: red crayon + icon: + sprite: Objects/Fun/crayons.rsi + state: red + doAfter: 1 + - tag: CrayonBlack + name: black crayon + icon: + sprite: Objects/Fun/crayons.rsi + state: black + doAfter: 1 + - tag: MimeBelt + name: suspenders + icon: + sprite: Clothing/Belt/suspenders.rsi + state: icon + doAfter: 1 + - node: mimeHardsuit + entity: ClothingOuterHardsuitMime diff --git a/Resources/Prototypes/Recipes/Construction/clothing.yml b/Resources/Prototypes/Recipes/Construction/clothing.yml index ba0c0d6c59b..3036463fb03 100644 --- a/Resources/Prototypes/Recipes/Construction/clothing.yml +++ b/Resources/Prototypes/Recipes/Construction/clothing.yml @@ -1,24 +1,24 @@ -# - type: construction # DeltaV - Prevent clowns from making the hardsuit -# name: clown hardsuit -# id: ClownHardsuit -# graph: ClownHardsuit -# startNode: start -# targetNode: clownHardsuit -# category: construction-category-clothing -# description: A modified hardsuit fit for a clown. -# icon: { sprite: Clothing/OuterClothing/Hardsuits/clown.rsi, state: icon } -# objectType: Item +- type: construction + name: clown vacsuit + id: ClownHardsuit + graph: ClownHardsuit + startNode: start + targetNode: clownHardsuit + category: construction-category-clothing + description: A modified vacsuit fit for a clown. + icon: { sprite: Clothing/OuterClothing/Hardsuits/clown.rsi, state: icon } + objectType: Item -#- type: construction # DeltaV - No mimes either -# name: mime hardsuit -# id: MimeHardsuit -# graph: MimeHardsuit -# startNode: start -# targetNode: mimeHardsuit -# category: construction-category-clothing -# description: A modified hardsuit fit for a mime. -# icon: { sprite: Clothing/OuterClothing/Hardsuits/mime.rsi, state: icon } -# objectType: Item +- type: construction + name: mime vacsuit + id: MimeHardsuit + graph: MimeHardsuit + startNode: start + targetNode: mimeHardsuit + category: construction-category-clothing + description: A modified vacsuit fit for a mime. + icon: { sprite: Clothing/OuterClothing/Hardsuits/mime.rsi, state: icon } + objectType: Item - type: construction name: bone armor diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml b/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml index 141f4d39b76..22b8cfd48ac 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/clown.yml @@ -23,10 +23,10 @@ Piercing: 4 groups: Burn: 3 -# DeltaV - Commenting out the clown snore sound because I am not fond of it (it makes me itchy and feral). By "I", I mean Leonardo_DaBepis. -# - type: SleepEmitSound -# snore: /Audio/Voice/Misc/silly_snore.ogg -# interval: 10 + - type: SleepEmitSound + snore: /Audio/Voice/Misc/silly_snore.ogg + interval: 10 + - type: Snoring # Necessary so SleepEmitSound sound effects play - !type:AddImplantSpecial implants: [ SadTromboneImplant ] diff --git a/Resources/Prototypes/WhiteDream/Entities/Actions/cultists.yml b/Resources/Prototypes/WhiteDream/Entities/Actions/cultists.yml index 814b950ead1..45e6217c602 100644 --- a/Resources/Prototypes/WhiteDream/Entities/Actions/cultists.yml +++ b/Resources/Prototypes/WhiteDream/Entities/Actions/cultists.yml @@ -73,7 +73,7 @@ - type: entity id: ActionBloodCultShadowShackles - name: shadow shackles + name: Shadow Shackles description: Empowers your hand to handcuff a victim on contact, and mute them if successful. categories: [ HideSpawnMenu ] components: @@ -100,7 +100,7 @@ - type: entity id: ActionBloodCultTwistedConstruction - name: twisted construction + name: Twisted Construction description: Empowers your hand to corrupt certain metallic objects. categories: [ HideSpawnMenu ] components: @@ -127,7 +127,7 @@ - type: entity id: ActionBloodCultSummonCombatEquipment - name: summon combat equipment + name: Summon Combat Equipment description: Allows you to summon combat cult gear, including cult armor, a cult bola and a cult sword. categories: [ HideSpawnMenu ] components: @@ -151,7 +151,7 @@ - type: entity id: ActionBloodCultSummonRitualDagger - name: summon ritual dagger + name: Summon Ritual Dagger description: Allows you to summon a ritual dagger, in case you've lost the dagger that was given to you. categories: [ HideSpawnMenu ] components: @@ -173,7 +173,7 @@ - type: entity id: ActionBloodCultBloodRites - name: blood rites + name: Blood Rites description: Empowers your hand to absorb blood to be used for advanced rites, or heal a cultist on contact. Use the spell in-hand to cast advanced rites categories: [ HideSpawnMenu ] components: @@ -193,3 +193,180 @@ prototypes: hand1: BloodRitesAura - type: BaseCultSpell + +- type: entity + id: ActionSummonCultFloor + name: Summon Cult Floor + description: This spell constructs a cult floor. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: create_cult_floor + - type: WorldTargetAction + useDelay: 10 + range: 5 + itemIconStyle: BigAction + checkCanAccess: false + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: create_cult_floor + event: !type:PlaceTileEntityEvent + tileId: CultFloor + audio: !type:SoundPathSpecifier + path: /Audio/WhiteDream/BloodCult/curse.ogg + - type: BaseCultSpell + +- type: entity + id: ActionLesserConstruction + name: Lesser Construction + description: This spell constructs a cult wall. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: lesser_construct + - type: WorldTargetAction + useDelay: 20 + range: 5 + itemIconStyle: BigAction + checkCanAccess: false + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: lesser_construct + event: !type:PlaceTileEntityEvent + entity: WallCult + audio: !type:SoundPathSpecifier + path: /Audio/WhiteDream/BloodCult/curse.ogg + - type: BaseCultSpell + +- type: entity + id: ActionSummonCultDoor + name: Summon Cult Door + description: This spell constructs a cult door. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: lesser_construct + - type: WorldTargetAction + useDelay: 30 + range: 5 + itemIconStyle: BigAction + checkCanAccess: false + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: lesser_construct + event: !type:PlaceTileEntityEvent + entity: CultDoor + audio: !type:SoundPathSpecifier + path: /Audio/WhiteDream/BloodCult/curse.ogg + - type: BaseCultSpell + +- type: entity + id: ActionSummonSoulStone + name: Summon Soulshard + description: This spell reaches into Nar'Sie's realm, summoning one of the legendary fragments across time and space. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: create_soul_stone + - type: WorldTargetAction + useDelay: 30 + range: 5 + itemIconStyle: BigAction + checkCanAccess: false + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: create_soul_stone + event: !type:PlaceTileEntityEvent + entity: SoulShardGhost + audio: !type:SoundPathSpecifier + path: /Audio/WhiteDream/BloodCult/curse.ogg + - type: BaseCultSpell + +- type: entity + id: ActionSummonSoulStoneHoly + name: Summon Holy Soulshard + description: This spell reaches into Nar'Sie's realm, summoning one of the legendary fragments across time and space. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: create_soul_stone + - type: WorldTargetAction + useDelay: 30 + range: 5 + itemIconStyle: BigAction + checkCanAccess: false + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: create_soul_stone + event: !type:PlaceTileEntityEvent + entity: SoulShardHolyGhost + audio: !type:SoundPathSpecifier + path: /Audio/WhiteDream/BloodCult/curse.ogg + - type: BaseCultSpell + +- type: entity + id: ActionForceWallCult + name: Shield + description: This spell creates a temporary forcefield to shield yourself and allies from incoming fire. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: summon_force_wall + - type: InstantAction + useDelay: 40 + itemIconStyle: BigAction + sound: !type:SoundPathSpecifier + path: /Audio/Magic/forcewall.ogg + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: summon_force_wall + event: !type:InstantSpawnSpellEvent + prototype: WallForceCult + posData: !type:TargetInFront + - type: BaseCultSpell + +- type: entity + id: ActionPhaseShift + name: Phase Shift + description: This spell allows you to pass through walls. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: WhiteDream/BloodCult/actions.rsi + state: phase_shift + - type: InstantAction + itemIconStyle: BigAction + useDelay: 30 + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: phase_shift + event: !type:PhaseShiftEvent + - type: BaseCultSpell + +- type: entity + id: ActionGauntletEcho + name: Gauntlet Echo + description: Channels energy into your gauntlet - firing its essence forward in a slow moving, yet devastating, attack + categories: [ HideSpawnMenu ] + components: + - type: WorldTargetAction + useDelay: 30 + itemIconStyle: BigAction + checkCanAccess: false + raiseOnUser: true + range: 15 + sound: !type:SoundPathSpecifier + path: /Audio/WhiteDream/BloodCult/resonator_blast.ogg + icon: + sprite: WhiteDream/BloodCult/actions.rsi + state: gauntlet_echo + event: !type:ProjectileSpellEvent + prototype: ProjectileGauntlet + projectileSpeed: 5 + - type: BaseCultSpell diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/constructs.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/constructs.yml index d16f12d5c88..b6bc17a2239 100644 --- a/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/constructs.yml +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/constructs.yml @@ -81,13 +81,8 @@ - type: Speech - type: TypingIndicator proto: guardian - - type: Pullable - type: Puller needsHands: false - - type: ActionsContainer - - type: ContainerContainer - containers: - actions: !type:Container - type: Visibility - type: ContentEye - type: Actions @@ -130,6 +125,9 @@ 0: Alive 100: Dead - type: Construct + actions: + - ActionForceWallCult + - ActionGauntletEcho - type: MeleeWeapon hidden: true angle: 30 @@ -164,6 +162,11 @@ - state: glow_artificer_cult map: [ "enum.ConstructVisualsState.Glow" ] - type: Construct + actions: + - ActionSummonCultFloor + - ActionLesserConstruction + - ActionSummonCultDoor + - ActionSummonSoulStone - type: MovementIgnoreGravity - type: MeleeWeapon hidden: true @@ -183,6 +186,7 @@ enum.ConstructVisualsState.Glow: True: { visible: false } False: { visible: true } + - type: Pullable - type: entity parent: ConstructBase @@ -201,6 +205,9 @@ 0: Alive 65: Dead - type: Construct + actions: + - ActionPhaseShift + - type: MovementIgnoreGravity - type: MovementSpeedModifier baseWalkSpeed: 4 baseSprintSpeed: 4 @@ -222,6 +229,10 @@ enum.ConstructVisualsState.Glow: True: { visible: false } False: { visible: true } + - type: StatusEffects + allowed: + - PhaseShifted + - type: Pullable - type: entity id: ConstructHarvester @@ -310,6 +321,9 @@ map: [ "enum.ConstructVisualsState.Sprite" ] - state: glow_artificer_holy map: [ "enum.ConstructVisualsState.Glow" ] + - type: Construct + actions: + - ActionSummonSoulStoneHoly - type: GenericVisualizer visuals: enum.ConstructVisualsState.Transforming: diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/souls_shards.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/souls_shards.yml index e410a81c753..ad3b2a84728 100644 --- a/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/souls_shards.yml +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Cult/souls_shards.yml @@ -54,3 +54,21 @@ description: ghost-role-information-soul-shard-description rules: ghost-role-information-soul-shard-rules - type: GhostTakeoverAvailable + +- type: entity + parent: SoulShard + id: SoulShardHoly + components: + - type: SoulShard + isBlessed: true + +- type: entity + parent: SoulShardHoly + id: SoulShardHolyGhost + components: + - type: GhostRole + allowMovement: true + name: ghost-role-information-soul-shard-holy-name + description: ghost-role-information-soul-shard-holy-description + rules: ghost-role-information-soul-shard-holy-rules + - type: GhostTakeoverAvailable diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Runes/cult.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Runes/cult.yml index 8195f4773fd..9580d2b224d 100644 --- a/Resources/Prototypes/WhiteDream/Entities/Objects/Runes/cult.yml +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Runes/cult.yml @@ -28,6 +28,7 @@ parent: CultRuneBase id: CultRuneOffering name: rune of offering + description: Offers a noncultist above it to Nar'Sie, either converting them or sacrificing them. One cultists required for dead sacrifice, two for conversion and three for living sacrifices and sacrifice targets. components: - type: Sprite state: "offering" @@ -39,6 +40,7 @@ parent: CultRuneBase id: CultRuneEmpower name: rune of empower + description: Allows cultists to prepare greater amounts of blood magic at far less of a cost. components: - type: Sprite state: strength @@ -50,6 +52,7 @@ parent: CultRuneBase id: CultRuneTeleport name: rune of teleportation + description: Warps everything above it to another chosen teleport rune components: - type: Sprite state: teleport @@ -67,6 +70,7 @@ parent: CultRuneBase id: CultRuneRevive name: rune of rejuvenation + description: Requires a dead, mindless, or inactive cultist placed upon the rune. Provided there have been sufficient sacrifices, they will be given a new life. components: - type: Sprite state: revive @@ -78,6 +82,7 @@ parent: CultRuneBase id: CultRuneBarrier name: rune of barrier + description: When invoked, makes a temporary invisible wall to block passage. components: - type: Sprite state: barrier @@ -93,6 +98,7 @@ parent: CultRuneBase id: CultRuneSummoning name: rune of summoning + description: Summons a single cultist to the rune. Requires 2 invokers. components: - type: Sprite state: summon @@ -109,6 +115,7 @@ parent: CultRuneBase id: CultRuneBloodBoil name: rune of boiling blood + description: Boils the blood of non-believers who can see the rune, rapidly dealing extreme amounts of damage. Requires 3 invokers. components: - type: Sprite state: blood_boil @@ -124,6 +131,7 @@ parent: CultRuneBase id: CultRuneApocalypse name: rune of apocalypse + description: Harbinger of the end times. Grows in strength with the cult's desperation - but at the risk of... side effects. Requires 3 invokers. components: - type: Sprite sprite: WhiteDream/BloodCult/Entities/Runes/apocalypse.rsi @@ -133,6 +141,8 @@ - type: CultRuneBase requiredInvokers: 3 invokePhrase: "Ta'gh fara'qha fel d'amar det!" + triggerRendingMarkers: true + canBeErased: false activationDamage: types: Slash: 35 @@ -147,6 +157,7 @@ parent: CultRuneBase id: CultRuneDimensionalRending name: rune of dimensional rending + description: Tears apart dimensional barriers, calling forth the Geometer. Requires 10 invokers components: - type: Sprite sprite: WhiteDream/BloodCult/Entities/Runes/dimensional_rending.rsi @@ -157,6 +168,8 @@ requiredInvokers: 10 invokeChatType: Speak invokePhrase: "TOK-LYR RQA-NAP G'OLT-ULOFT!!!" + triggerRendingMarkers: true + canBeErased: false - type: CultRuneRending - type: GenericVisualizer visuals: diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/barrier.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/barrier.yml index c8ae0d6b3a3..0fb137a40dc 100644 --- a/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/barrier.yml +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Structures/Cult/barrier.yml @@ -31,24 +31,10 @@ thresholds: - trigger: !type:DamageTrigger - damage: 600 + damage: 200 behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] - - trigger: - !type:DamageTrigger - damage: 300 - behaviors: - - !type:SpawnEntitiesBehavior - spawn: - RunedMetal: - min: 5 - max: 5 - - !type:PlaySoundBehavior - sound: - collection: MetalBreak - - !type:DoActsBehavior - acts: [ "Destruction" ] - type: PointLight enabled: false radius: 3 @@ -69,3 +55,4 @@ - type: Icon sprite: WhiteDream/BloodCult/Entities/Structures/cult_shield.rsi state: icon + - type: Dispellable diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml index 23ff76bbc58..b27e3454213 100644 --- a/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Melee/cult.yml @@ -113,7 +113,7 @@ wideAnimationRotation: -135 damage: types: - Piercing: 36 + Piercing: 26 angle: 0 animation: WeaponArcThrust soundHit: @@ -139,7 +139,7 @@ - type: IncreaseDamageOnWield damage: types: - Piercing: 8 + Piercing: 10 - type: UseDelay - type: DisarmMalus - type: CultItem @@ -160,7 +160,6 @@ Blunt: 0 heavyStaminaCost: 0 maxTargets: 1 - - type: Unremoveable - type: BloodRitesAura - type: UserInterface interfaces: diff --git a/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Projectiles/cult.yml b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Projectiles/cult.yml new file mode 100644 index 00000000000..69a007b90e3 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/Objects/Weapons/Projectiles/cult.yml @@ -0,0 +1,20 @@ +- type: entity + id: ProjectileGauntlet + name: gauntlet + description: Oh no. + parent: BaseBulletTrigger + categories: [ HideSpawnMenu ] + components: + - type: PointLight + color: Red + radius: 2.0 + energy: 5.0 + - type: Projectile + ignoreResistances: true + damage: + types: + Blunt: 50 + - type: Sprite + sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi + layers: + - state: gauntlet_echo diff --git a/Resources/Prototypes/WhiteDream/Entities/markers.yml b/Resources/Prototypes/WhiteDream/Entities/markers.yml new file mode 100644 index 00000000000..fce2225bc78 --- /dev/null +++ b/Resources/Prototypes/WhiteDream/Entities/markers.yml @@ -0,0 +1,13 @@ +- type: entity + id: RendingRunePlacementMarker + name: rending rune placement marker + description: Marker for rending rune placement. 5 should be enough for each map. + parent: MarkerBase + components: + - type: RendingRunePlacementMarker + - type: Sprite + sprite: Markers/jobs.rsi + layers: + - state: green + - sprite: WhiteDream/BloodCult/Entities/Runes/regular.rsi + state: revive diff --git a/Resources/Prototypes/WhiteDream/runeSelectors.yml b/Resources/Prototypes/WhiteDream/rune_selectors.yml similarity index 88% rename from Resources/Prototypes/WhiteDream/runeSelectors.yml rename to Resources/Prototypes/WhiteDream/rune_selectors.yml index d63c81aa8da..5eb0dfc16a6 100644 --- a/Resources/Prototypes/WhiteDream/runeSelectors.yml +++ b/Resources/Prototypes/WhiteDream/rune_selectors.yml @@ -29,6 +29,8 @@ - type: runeSelector id: CultRuneApocalypse prototype: CultRuneApocalypse + requireTargetDead: true + requiredTotalCultists: 10 drawTime: 40 drawDamage: types: @@ -37,6 +39,8 @@ - type: runeSelector id: CultRuneDimensionalRending prototype: CultRuneDimensionalRending + requireTargetDead: true + requiredTotalCultists: 10 drawTime: 40 drawDamage: types: diff --git a/Resources/Prototypes/status_effects.yml b/Resources/Prototypes/status_effects.yml index a991bf4035f..bed635c7026 100644 --- a/Resources/Prototypes/status_effects.yml +++ b/Resources/Prototypes/status_effects.yml @@ -59,3 +59,6 @@ - type: statusEffect id: StaminaModifier + +- type: statusEffect + id: PhaseShifted diff --git a/Resources/ServerInfo/Guidebook/Antagonist/BloodCult.xml b/Resources/ServerInfo/Guidebook/Antagonist/BloodCult.xml new file mode 100644 index 00000000000..a0e8dcb5d87 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/Antagonist/BloodCult.xml @@ -0,0 +1,184 @@ + + Be ware - this document is just almost a full copy of /tg/ station blood cult guide. + + # Blood Cult + + Even in the far future, some things are never quite understood. There are things that lurk in the darkness of space, + unspeakable horrors of ancient power that wish to bring ruin to the universe and to shape it into their image. They + reach out from the void, and turn the minds of mortal men and women in their favor in hopes that one day they shall be + brought once more into this plane of existence. + + The Geometer of Blood, Nar-Sie, has sent a number of her followers to Space Station 14. As a cultist, you have an + abundance of cult magics at your disposal, something for all situations. You must work with your brethren to summon an + avatar of your eldritch goddess! + + ## Objectives + + Your objective requires you to sacrifice a certain crewmember and summon Nar-Sie. + + The general path of action of the cult and those in it: + + - 1. From a discrete location, contact your allies. You can do it by speaking Eldritch language - everyone in the cult + can hear you when you speak it. + - 2. Find an area to convert into a base, usually accessible by one or more members of the cult, but well-hidden + enough that security or crew won't find it easily. + - 3. Setup a teleport rune, so all cultists can access it. + - 4. Setup an empowering rune and then prepare up to 4 blood spells. Stun spells are your bread and butter - but + diversifying with spells like EMP, Teleport, Blood Rites, etc. will ensure you're ready for anything. + - 5. Convert new members, or sacrifice implanted crew, on the offering rune. Combine the filled soul shard from + sacrificed humans to create powerful cult constructs! + - 6. Use teamwork to find your sacrifice target. + - 7. Kill the sacrifice target and place them on an offer rune with 3 cultists nearby. + - 8. Prepare to summon Nar-Sie. She can only be summoned in a few locations and the crew will fight desperately to + stop you! Make sure you have enough cultists and equipment to withstand their assault. + - 9. Gather 10 cultists on the final rune to summon Nar-Sie! + + ## Ritual Dagger + + + + + + Your dagger is your most important tool and has several functions: + + - You can draw runes with it. + - Hitting a non-cultist with it will result in you stabbing them (huh), dealing 15 piercing damage. + - Using it on the rune with erase it. + - Using it on the cult barrier will remove it. + + ## Minor Runes + + These are minor runes cultists can draw anywhere on the station. + + + + + + Can be used to convert or sacrifice targets on it. It takes two cultists to convert someone. + + [bold]REMINDER: One cultist is required to sacrifice a dead body and three for a live one, + standing adjacent to the rune. Each sacrifice will add to the Cult's total number of sacrifices, which are used + to revive deceased bretheren instantly over a Revival Rune.[/bold] + + + + + Grants a buff allowing cultists to prepare greater amounts of blood magic at far less of a cost. While you have + it, the spell count is capped at 4 instead of 1. Additionally, drawing runes takes far less time and you don't + lose as much blood while doing it. + + + + + This rune warps everything above it to another teleport rune when used. Creating a teleport rune will allow you to + set a tag for it. + + + + + Placing a cultist corpse on the rune and activating it will bring them back to life. Consumes one charge on use + and starts with three freebie revivals, so use it sparingly. . + + + + + When invoked, makes a temporary barrier to block passage. + + + + + This rune allows you to instantly summon any living cultist to the rune, consuming it afterward. Does not work on + restrained cultists who are buckled or being pulled. + + + + + When invoked, it saps some health from the invokers to send three damaging pulses to anyone who can see the + rune and ignites them. + + + ## Major runes + + These are the major runes cultists can draw once they meet certain conditions. They need a free 3x3 space, and can only + be summoned in 3 areas around the station (or have 3 global charges). Depleting all of them makes you unable to draw + them anymore. So be careful not to consume all of them with apocalypse runes or you'll never be able to summon + Nar'Sie! + + + + + + A harbinger of the end times. It scales depending on the crew's strength relative to the cult. Effect includes a + massive EMP, total blackout, solar flare and if the cult is doing poorly, certain events. If the cult makes up to + less than 15% of current players, and an apocalypse rune is activated, a random event will + occur: + - Immovable Rod x3 + - Mouse Migration x2 + - Meteor Swarm x2 + - Vent Crickets x3 + - Four Random Anomalies + - Kudzu Growth x2 + - Vendor Mimics x2 + + + + + This rune tears apart dimensional barriers, calling forth the Geometer. To start drawing it the requested target + must have already been sacrificed. Starting to draw this rune alarms the entire station of its location. The caster + must be defended for 45 seconds before it's complete. + After it's drawn, 10 cultists, constructs, or summoned ghosts must stand on the rune, which can then be invoked to + manifest Nar'Sie itself. + + ## Blood Spells + + Blood Spells are limited-use blood magic spells that dissipate after they're spent, and they're your bread and butter + when fighting the crew. Blood Spells can be created at any time via a menu when right clicking your character. + However, blood spells created without an Empowering Rune will take longer, cause significant blood loss, and + will cap your spell count at a measly one + + A good tip is to make sure to try and have a stun spell and a teleport spell with you to escape risky situations. This + will leave only two other options for spells though, so carefully choose what you think might help best for a + particular situation. + + + ## Constructs + + Shades and constructs are slaved to their masters will. They must follow the orders of their master at any cost. They + are capable of grasping intent, unlike synthetic beings. Constructs created by cultists automatically become cultists + themselves, allowing them to identify their team mates, and even count for the escape objective. + + + + + Shades are fragile, but being recaptured into their soul shard heals them. Useful if you quickly need someone to help + you activate a rune. + + + + + The artificer is the "drone" of the cult. It can construct cult-floors, walls and reinforced walls, as well as take + apart the station, but its main purpose is to provide the materials to construct additional constructs. It can create + new soul stones or shells after a certain time. + + + + + The wraith is a tiny bit more fragile than a human but has a strong melee attack. It can become invisible and travel + through closed doors and even walls by using it's phase shift ability. + + + + + Juggernauts are strong, slow and have lots of health. They can destroy any wall by simply punching it and do more + damage than Wraiths. They cannot be pushed or grabbed and even have a force-wall ability similar to the wizard spell. + + ## Tips + - Only cultists can know a rune's name and effects by examining it. + - Always be ready to summon a cultist in trouble. You can't summon them if they're already cuffed. + - Keeping a shade in a Soulstone Shard with you will allow you to use two-person runes by yourself, by releasing and + then recapturing the shade. + - Cultists often find a use for medibots. Having a single bot with a low threshold, backed up by brutepacks or pylons, + can keep your cult in fighting shape. + - The EMP spell and Apocalypse Rune are both incredibly useful. They can give you access almost anywhere, just don't + forget your crowbar! + diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles2.rsi/gauntlet_echo.png b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles2.rsi/gauntlet_echo.png new file mode 100644 index 00000000000..3b09dd4520c Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles2.rsi/gauntlet_echo.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles2.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles2.rsi/meta.json index 87ce717f445..904b746895f 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles2.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles2.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from cev-eris at https://github.com/discordia-space/CEV-Eris/raw/56cbafd6ad8c013ccd5472d6c4a0db790f7f872a, ball made by brainfood1183 (Github) for ss14, the uranium sprite is a modified version of the buckshot pellet by Boaz1111", + "copyright": "Taken from cev-eris at https://github.com/discordia-space/CEV-Eris/raw/56cbafd6ad8c013ccd5472d6c4a0db790f7f872a, ball made by brainfood1183 (Github) for ss14, the uranium sprite is a modified version of the buckshot pellet by Boaz1111, gauntlet_echo taken from BeeStation at https://github.com/BeeStation/BeeStation-Hornet/commit/6c4ff2d3c7e74daa8e874abbb01bddc02fbb67a8", "size": { "x": 32, "y": 32 @@ -13,7 +13,7 @@ { "name": "buckshot-flare" }, - { + { "name": "depleted-uranium" }, { @@ -91,11 +91,21 @@ ] ] }, - { + { "name": "grapeshot" }, - { + { "name": "shard" + }, + { + "name": "gauntlet_echo", + "delays": [ + [ + 0.5, + 0.05, + 0.2 + ] + ] } ] } diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/.png b/Resources/Textures/Structures/Decoration/barrels.rsi/.png new file mode 100644 index 00000000000..d035f711348 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/double_grey_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/double_grey_1.png new file mode 100644 index 00000000000..9ef80fe7193 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/double_grey_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/double_grey_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/double_grey_2.png new file mode 100644 index 00000000000..dbeaea2709e Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/double_grey_2.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/double_red_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/double_red_1.png new file mode 100644 index 00000000000..b9a9973b956 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/double_red_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/double_red_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/double_red_2.png new file mode 100644 index 00000000000..3271703d5c5 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/double_red_2.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/double_toxic_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/double_toxic_1.png new file mode 100644 index 00000000000..b8c450f4e74 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/double_toxic_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/double_waste_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/double_waste_1.png new file mode 100644 index 00000000000..ac2f37c5581 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/double_waste_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/double_waste_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/double_waste_2.png new file mode 100644 index 00000000000..5feb377a9be Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/double_waste_2.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/double_yellow_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/double_yellow_1.png new file mode 100644 index 00000000000..541ea0fe2fa Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/double_yellow_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/double_yellow_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/double_yellow_2.png new file mode 100644 index 00000000000..7c4cbc32af6 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/double_yellow_2.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/flammable_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/flammable_1.png new file mode 100644 index 00000000000..611825a8ea8 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/flammable_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/flammable_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/flammable_2.png new file mode 100644 index 00000000000..91a37aa9e32 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/flammable_2.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/flammable_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/flammable_3.png new file mode 100644 index 00000000000..fb6c2378a45 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/flammable_3.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/grey_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/grey_1.png new file mode 100644 index 00000000000..9b31672d30e Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/grey_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/grey_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/grey_2.png new file mode 100644 index 00000000000..d361fe16d9e Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/grey_2.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/grey_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/grey_3.png new file mode 100644 index 00000000000..3fcbd116538 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/grey_3.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/hazard_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/hazard_1.png new file mode 100644 index 00000000000..31ff5dfa903 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/hazard_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/hazard_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/hazard_2.png new file mode 100644 index 00000000000..292232c6ee6 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/hazard_2.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/hazard_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/hazard_3.png new file mode 100644 index 00000000000..b93a353892a Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/hazard_3.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/label_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/label_1.png new file mode 100644 index 00000000000..33a1a76025f Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/label_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/label_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/label_2.png new file mode 100644 index 00000000000..c81974e8f15 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/label_2.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/label_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/label_3.png new file mode 100644 index 00000000000..23559f19289 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/label_3.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/meta.json b/Resources/Textures/Structures/Decoration/barrels.rsi/meta.json new file mode 100644 index 00000000000..91a7049c538 --- /dev/null +++ b/Resources/Textures/Structures/Decoration/barrels.rsi/meta.json @@ -0,0 +1,191 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Created by INFRARED_BARON for MS13", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "" + }, + { + "name": "grey_1" + }, + { + "name": "grey_2" + }, + { + "name": "grey_3" + }, + { + "name": "red_1" + }, + { + "name": "red_2" + }, + { + "name": "red_3" + }, + { + "name": "yellow_1" + }, + { + "name": "yellow_2" + }, + { + "name": "yellow_3" + }, + { + "name": "label_1" + }, + { + "name": "label_2" + }, + { + "name": "label_3" + }, + { + "name": "hazard_1" + }, + { + "name": "hazard_2" + }, + { + "name": "hazard_3" + }, + { + "name": "red_alt_1" + }, + { + "name": "red_alt_2" + }, + { + "name": "red_alt_3" + }, + { + "name": "toxic_1" + }, + { + "name": "toxic_2" + }, + { + "name": "toxic_3" + }, + { + "name": "toxic_4" + }, + { + "name": "waste_1" + }, + { + "name": "waste_2" + }, + { + "name": "waste_3" + }, + { + "name": "flammable_1" + }, + { + "name": "flammable_2" + }, + { + "name": "flammable_3" + }, + { + "name": "warning_1" + }, + { + "name": "warning_2" + }, + { + "name": "warning_3" + }, + { + "name": "double_grey_1" + }, + { + "name": "double_grey_2" + }, + { + "name": "triple_grey_1" + }, + { + "name": "triple_grey_2" + }, + { + "name": "triple_grey_3" + }, + { + "name": "quad_grey_1" + }, + { + "name": "double_red_1" + }, + { + "name": "double_red_2" + }, + { + "name": "triple_red_1" + }, + { + "name": "triple_red_2" + }, + { + "name": "quad_red_1" + }, + { + "name": "quad_red_2" + }, + { + "name": "double_yellow_1" + }, + { + "name": "double_yellow_2" + }, + { + "name": "triple_yellow_1" + }, + { + "name": "triple_yellow_2" + }, + { + "name": "triple_yellow_3" + }, + { + "name": "quad_yellow_1" + }, + { + "name": "double_toxic_1" + }, + { + "name": "triple_toxic_1" + }, + { + "name": "triple_toxic_2" + }, + { + "name": "quad_toxic_1" + }, + { + "name": "double_waste_1" + }, + { + "name": "double_waste_2" + }, + { + "name": "triple_waste_1" + }, + { + "name": "triple_waste_2" + }, + { + "name": "triple_waste_3" + }, + { + "name": "quad_waste_1" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/quad_grey_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/quad_grey_1.png new file mode 100644 index 00000000000..c7c2a390421 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/quad_grey_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/quad_red_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/quad_red_1.png new file mode 100644 index 00000000000..c3719d30b1e Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/quad_red_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/quad_red_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/quad_red_2.png new file mode 100644 index 00000000000..d7af6fdd68e Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/quad_red_2.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/quad_toxic_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/quad_toxic_1.png new file mode 100644 index 00000000000..c9efa16cfcb Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/quad_toxic_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/quad_waste_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/quad_waste_1.png new file mode 100644 index 00000000000..90e3185ba32 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/quad_waste_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/quad_yellow_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/quad_yellow_1.png new file mode 100644 index 00000000000..56806f2f2bd Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/quad_yellow_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/red_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/red_1.png new file mode 100644 index 00000000000..a04fa07857b Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/red_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/red_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/red_2.png new file mode 100644 index 00000000000..472c50553d0 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/red_2.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/red_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/red_3.png new file mode 100644 index 00000000000..dd414145a0b Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/red_3.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/red_alt_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/red_alt_1.png new file mode 100644 index 00000000000..b4c5d20b982 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/red_alt_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/red_alt_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/red_alt_2.png new file mode 100644 index 00000000000..d3d145a9c1b Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/red_alt_2.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/red_alt_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/red_alt_3.png new file mode 100644 index 00000000000..f46f38a3f92 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/red_alt_3.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_1.png new file mode 100644 index 00000000000..05f1f433c80 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_2.png new file mode 100644 index 00000000000..d1fb0c25f68 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_2.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_3.png new file mode 100644 index 00000000000..4ec1d182233 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_3.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_4.png b/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_4.png new file mode 100644 index 00000000000..b8a915a817f Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/toxic_4.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_grey_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_grey_1.png new file mode 100644 index 00000000000..9b562466a7d Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_grey_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_grey_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_grey_2.png new file mode 100644 index 00000000000..37ea181edc6 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_grey_2.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_grey_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_grey_3.png new file mode 100644 index 00000000000..12d10fc5334 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_grey_3.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_red_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_red_1.png new file mode 100644 index 00000000000..b2cc0cbaafc Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_red_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_red_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_red_2.png new file mode 100644 index 00000000000..4eb8bd45a6a Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_red_2.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_toxic_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_toxic_1.png new file mode 100644 index 00000000000..a3f603bfee6 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_toxic_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_toxic_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_toxic_2.png new file mode 100644 index 00000000000..3afd5eacc3a Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_toxic_2.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_1.png new file mode 100644 index 00000000000..50c40b137ba Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_2.png new file mode 100644 index 00000000000..a8d79361c64 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_2.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_3.png new file mode 100644 index 00000000000..9e255067d24 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_waste_3.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_1.png new file mode 100644 index 00000000000..8b6e6efd856 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_2.png new file mode 100644 index 00000000000..1c3ffcdb6e8 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_2.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_3.png new file mode 100644 index 00000000000..80b4b915fe8 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/triple_yellow_3.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/warning_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/warning_1.png new file mode 100644 index 00000000000..2b6b4bc60a5 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/warning_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/warning_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/warning_2.png new file mode 100644 index 00000000000..2e4814a838e Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/warning_2.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/warning_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/warning_3.png new file mode 100644 index 00000000000..1d788499313 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/warning_3.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/waste_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/waste_1.png new file mode 100644 index 00000000000..88f24bf8f6a Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/waste_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/waste_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/waste_2.png new file mode 100644 index 00000000000..0b59a07ca93 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/waste_2.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/waste_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/waste_3.png new file mode 100644 index 00000000000..08da97f26df Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/waste_3.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/yellow_1.png b/Resources/Textures/Structures/Decoration/barrels.rsi/yellow_1.png new file mode 100644 index 00000000000..c14dd3aaf00 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/yellow_1.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/yellow_2.png b/Resources/Textures/Structures/Decoration/barrels.rsi/yellow_2.png new file mode 100644 index 00000000000..09240c27c23 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/yellow_2.png differ diff --git a/Resources/Textures/Structures/Decoration/barrels.rsi/yellow_3.png b/Resources/Textures/Structures/Decoration/barrels.rsi/yellow_3.png new file mode 100644 index 00000000000..395922b8cb0 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/barrels.rsi/yellow_3.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-1.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-1.png new file mode 100644 index 00000000000..2115cd96548 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-1.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-2.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-2.png new file mode 100644 index 00000000000..947f783128b Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-2.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-3.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-3.png new file mode 100644 index 00000000000..1d06908207d Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-3.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-4.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-4.png new file mode 100644 index 00000000000..04460cdeeda Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-4.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-5.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-5.png new file mode 100644 index 00000000000..70effbf9c9e Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-5.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-6.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-6.png new file mode 100644 index 00000000000..8eded936f9a Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_ns-6.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-1.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-1.png new file mode 100644 index 00000000000..1b937ad6381 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-1.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-2.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-2.png new file mode 100644 index 00000000000..8eade32e2bd Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-2.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-3.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-3.png new file mode 100644 index 00000000000..6d6d9277e94 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-3.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-4.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-4.png new file mode 100644 index 00000000000..096bd817288 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-4.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-5.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-5.png new file mode 100644 index 00000000000..8df1d053507 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-5.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-6.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-6.png new file mode 100644 index 00000000000..6926dfc3a39 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_drought_we-6.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-1.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-1.png new file mode 100644 index 00000000000..3f627352d5f Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-1.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-2.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-2.png new file mode 100644 index 00000000000..319f8266278 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-2.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-3.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-3.png new file mode 100644 index 00000000000..08f725999fc Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-3.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-4.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-4.png new file mode 100644 index 00000000000..d13ab2e0784 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-4.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-5.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-5.png new file mode 100644 index 00000000000..8a10f9ebd97 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-5.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-6.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-6.png new file mode 100644 index 00000000000..b42dd106c68 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_ns-6.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-1.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-1.png new file mode 100644 index 00000000000..5ae42e48fca Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-1.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-2.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-2.png new file mode 100644 index 00000000000..9408c3f76b1 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-2.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-3.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-3.png new file mode 100644 index 00000000000..d0363b61413 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-3.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-4.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-4.png new file mode 100644 index 00000000000..ad6847efdf0 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-4.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-5.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-5.png new file mode 100644 index 00000000000..ae4b6c6bec5 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-5.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-6.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-6.png new file mode 100644 index 00000000000..5d25c6018e3 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/boards_mammoth_we-6.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/meta.json b/Resources/Textures/Structures/Decoration/cave_decor.rsi/meta.json new file mode 100644 index 00000000000..39934426339 --- /dev/null +++ b/Resources/Textures/Structures/Decoration/cave_decor.rsi/meta.json @@ -0,0 +1,122 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/0cbeda29e69293cd3a637fe67576b30b7693d5f6/mojave/icons/structure/cave_decor.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "stalagmite" + }, + { + "name": "stalagmite1" + }, + { + "name": "stalagmite2" + }, + { + "name": "stalagmite3" + }, + { + "name": "stalagmite4" + }, + { + "name": "stalagmite5" + }, + { + "name": "minecart_fallen" + }, + { + "name": "sign_left" + }, + { + "name": "sign_right" + }, + { + "name": "boards_drought_ns-1" + }, + { + "name": "boards_drought_ns-2" + }, + { + "name": "boards_drought_ns-3" + }, + { + "name": "boards_drought_ns-4" + }, + { + "name": "boards_drought_ns-5" + }, + { + "name": "boards_drought_ns-6" + }, + { + "name": "boards_drought_we-1" + }, + { + "name": "boards_drought_we-2" + }, + { + "name": "boards_drought_we-3" + }, + { + "name": "boards_drought_we-4" + }, + { + "name": "boards_drought_we-5" + }, + { + "name": "boards_drought_we-6" + }, + { + "name": "boards_mammoth_ns-1" + }, + { + "name": "boards_mammoth_ns-2" + }, + { + "name": "boards_mammoth_ns-3" + }, + { + "name": "boards_mammoth_ns-4" + }, + { + "name": "boards_mammoth_ns-5" + }, + { + "name": "boards_mammoth_ns-6" + }, + { + "name": "boards_mammoth_we-1" + }, + { + "name": "boards_mammoth_we-2" + }, + { + "name": "boards_mammoth_we-3" + }, + { + "name": "boards_mammoth_we-4" + }, + { + "name": "boards_mammoth_we-5" + }, + { + "name": "boards_mammoth_we-6" + }, + { + "name": "support" + }, + { + "name": "support_beams" + }, + { + "name": "support_wall" + }, + { + "name": "support_wall_broken" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/minecart_fallen.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/minecart_fallen.png new file mode 100644 index 00000000000..b452f212f58 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/minecart_fallen.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/sign_left.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/sign_left.png new file mode 100644 index 00000000000..6b188d94500 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/sign_left.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/sign_right.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/sign_right.png new file mode 100644 index 00000000000..61929ae8786 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/sign_right.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite.png new file mode 100644 index 00000000000..c0a0fd2a259 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite1.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite1.png new file mode 100644 index 00000000000..ffcf3155c8d Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite1.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite2.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite2.png new file mode 100644 index 00000000000..07591aefa47 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite2.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite3.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite3.png new file mode 100644 index 00000000000..c54eb93cbf9 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite3.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite4.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite4.png new file mode 100644 index 00000000000..7a0b84050f3 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite4.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite5.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite5.png new file mode 100644 index 00000000000..1b766541908 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/stalagmite5.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/support.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/support.png new file mode 100644 index 00000000000..7670149e573 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/support.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/support_beams.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/support_beams.png new file mode 100644 index 00000000000..a3d6e3b2d29 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/support_beams.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/support_wall.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/support_wall.png new file mode 100644 index 00000000000..001c3604dba Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/support_wall.png differ diff --git a/Resources/Textures/Structures/Decoration/cave_decor.rsi/support_wall_broken.png b/Resources/Textures/Structures/Decoration/cave_decor.rsi/support_wall_broken.png new file mode 100644 index 00000000000..0ab5916b2d9 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/cave_decor.rsi/support_wall_broken.png differ diff --git a/Resources/Textures/Structures/Decoration/rails64.rsi/junction-left-bottom.png b/Resources/Textures/Structures/Decoration/rails64.rsi/junction-left-bottom.png new file mode 100644 index 00000000000..7238770a79d Binary files /dev/null and b/Resources/Textures/Structures/Decoration/rails64.rsi/junction-left-bottom.png differ diff --git a/Resources/Textures/Structures/Decoration/rails64.rsi/junction-left-top.png b/Resources/Textures/Structures/Decoration/rails64.rsi/junction-left-top.png new file mode 100644 index 00000000000..ec6e93b6273 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/rails64.rsi/junction-left-top.png differ diff --git a/Resources/Textures/Structures/Decoration/rails64.rsi/junction-right-bottom.png b/Resources/Textures/Structures/Decoration/rails64.rsi/junction-right-bottom.png new file mode 100644 index 00000000000..7dd8f8fcbb8 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/rails64.rsi/junction-right-bottom.png differ diff --git a/Resources/Textures/Structures/Decoration/rails64.rsi/junction-right-top.png b/Resources/Textures/Structures/Decoration/rails64.rsi/junction-right-top.png new file mode 100644 index 00000000000..793db233c39 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/rails64.rsi/junction-right-top.png differ diff --git a/Resources/Textures/Structures/Decoration/rails64.rsi/meta.json b/Resources/Textures/Structures/Decoration/rails64.rsi/meta.json new file mode 100644 index 00000000000..813b89a53c7 --- /dev/null +++ b/Resources/Textures/Structures/Decoration/rails64.rsi/meta.json @@ -0,0 +1,39 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Created by INFRARED_BARON for MS13", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "junction-right-top" + }, + { + "name": "turn-WS" + }, + { + "name": "junction-right-bottom" + }, + { + "name": "turn-NW" + }, + { + "name": "junction-left-bottom" + }, + { + "name": "turn-NE" + }, + { + "name": "junction-left-top" + }, + { + "name": "turn-SE" + }, + { + "name": "rails", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Decoration/rails64.rsi/rails.png b/Resources/Textures/Structures/Decoration/rails64.rsi/rails.png new file mode 100644 index 00000000000..96028b3149c Binary files /dev/null and b/Resources/Textures/Structures/Decoration/rails64.rsi/rails.png differ diff --git a/Resources/Textures/Structures/Decoration/rails64.rsi/turn-NE.png b/Resources/Textures/Structures/Decoration/rails64.rsi/turn-NE.png new file mode 100644 index 00000000000..c90bd0e1810 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/rails64.rsi/turn-NE.png differ diff --git a/Resources/Textures/Structures/Decoration/rails64.rsi/turn-NW.png b/Resources/Textures/Structures/Decoration/rails64.rsi/turn-NW.png new file mode 100644 index 00000000000..67197f64e41 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/rails64.rsi/turn-NW.png differ diff --git a/Resources/Textures/Structures/Decoration/rails64.rsi/turn-SE.png b/Resources/Textures/Structures/Decoration/rails64.rsi/turn-SE.png new file mode 100644 index 00000000000..c9ae45f2633 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/rails64.rsi/turn-SE.png differ diff --git a/Resources/Textures/Structures/Decoration/rails64.rsi/turn-WS.png b/Resources/Textures/Structures/Decoration/rails64.rsi/turn-WS.png new file mode 100644 index 00000000000..1099423275f Binary files /dev/null and b/Resources/Textures/Structures/Decoration/rails64.rsi/turn-WS.png differ diff --git a/Resources/Textures/Structures/Decoration/signs_64x64.rsi/bazaar.png b/Resources/Textures/Structures/Decoration/signs_64x64.rsi/bazaar.png new file mode 100644 index 00000000000..9a0c08957a5 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/signs_64x64.rsi/bazaar.png differ diff --git a/Resources/Textures/Structures/Decoration/signs_64x64.rsi/meta.json b/Resources/Textures/Structures/Decoration/signs_64x64.rsi/meta.json new file mode 100644 index 00000000000..7ab03e564e8 --- /dev/null +++ b/Resources/Textures/Structures/Decoration/signs_64x64.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from MS13 at commit https://github.com/Mojave-Sun/mojave-sun-13/commit/6fde5cf64e584727ce66d92d81352801670e172f", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "we_open" + }, + { + "name": "bazaar" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Decoration/signs_64x64.rsi/we_open.png b/Resources/Textures/Structures/Decoration/signs_64x64.rsi/we_open.png new file mode 100644 index 00000000000..141a97768a0 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/signs_64x64.rsi/we_open.png differ diff --git a/Resources/Textures/Structures/Decoration/tires.rsi/junktire1.png b/Resources/Textures/Structures/Decoration/tires.rsi/junktire1.png new file mode 100644 index 00000000000..5ff478ac179 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/tires.rsi/junktire1.png differ diff --git a/Resources/Textures/Structures/Decoration/tires.rsi/junktire2.png b/Resources/Textures/Structures/Decoration/tires.rsi/junktire2.png new file mode 100644 index 00000000000..a8b346516b2 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/tires.rsi/junktire2.png differ diff --git a/Resources/Textures/Structures/Decoration/tires.rsi/junktire3.png b/Resources/Textures/Structures/Decoration/tires.rsi/junktire3.png new file mode 100644 index 00000000000..cb9e52edf37 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/tires.rsi/junktire3.png differ diff --git a/Resources/Textures/Structures/Decoration/tires.rsi/junktire4.png b/Resources/Textures/Structures/Decoration/tires.rsi/junktire4.png new file mode 100644 index 00000000000..09ad4bbcd41 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/tires.rsi/junktire4.png differ diff --git a/Resources/Textures/Structures/Decoration/tires.rsi/junktire5.png b/Resources/Textures/Structures/Decoration/tires.rsi/junktire5.png new file mode 100644 index 00000000000..1c9fd3e3324 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/tires.rsi/junktire5.png differ diff --git a/Resources/Textures/Structures/Decoration/tires.rsi/meta.json b/Resources/Textures/Structures/Decoration/tires.rsi/meta.json new file mode 100644 index 00000000000..67900194216 --- /dev/null +++ b/Resources/Textures/Structures/Decoration/tires.rsi/meta.json @@ -0,0 +1,31 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Created by ladyayla and MaxxOrion for ", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "junktire1", + "directions": 4 + }, + { + "name": "junktire2", + "directions": 4 + }, + { + "name": "junktire3", + "directions": 4 + }, + { + "name": "junktire4", + "directions": 4 + }, + { + "name": "junktire5", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Structures/Decoration/torches.rsi/meta.json b/Resources/Textures/Structures/Decoration/torches.rsi/meta.json new file mode 100644 index 00000000000..caa105acab9 --- /dev/null +++ b/Resources/Textures/Structures/Decoration/torches.rsi/meta.json @@ -0,0 +1,59 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Ported from Nukapop-13", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "torch_unlit" + }, + { + "name": "torch_lit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "wall_torch_unlit", + "directions": 4 + }, + { + "name": "wall_torch_lit", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Decoration/torches.rsi/torch_lit.png b/Resources/Textures/Structures/Decoration/torches.rsi/torch_lit.png new file mode 100644 index 00000000000..4fdd6e03232 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/torches.rsi/torch_lit.png differ diff --git a/Resources/Textures/Structures/Decoration/torches.rsi/torch_unlit.png b/Resources/Textures/Structures/Decoration/torches.rsi/torch_unlit.png new file mode 100644 index 00000000000..f946d282242 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/torches.rsi/torch_unlit.png differ diff --git a/Resources/Textures/Structures/Decoration/torches.rsi/wall_torch_lit.png b/Resources/Textures/Structures/Decoration/torches.rsi/wall_torch_lit.png new file mode 100644 index 00000000000..d629bc00eb5 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/torches.rsi/wall_torch_lit.png differ diff --git a/Resources/Textures/Structures/Decoration/torches.rsi/wall_torch_unlit.png b/Resources/Textures/Structures/Decoration/torches.rsi/wall_torch_unlit.png new file mode 100644 index 00000000000..c508a54ebd4 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/torches.rsi/wall_torch_unlit.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/barrels1.png b/Resources/Textures/Structures/Decoration/world.rsi/barrels1.png new file mode 100644 index 00000000000..323811e137e Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/barrels1.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/barrels2.png b/Resources/Textures/Structures/Decoration/world.rsi/barrels2.png new file mode 100644 index 00000000000..1bff24bd4ac Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/barrels2.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/barrels3.png b/Resources/Textures/Structures/Decoration/world.rsi/barrels3.png new file mode 100644 index 00000000000..20d914ac188 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/barrels3.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/barrels4.png b/Resources/Textures/Structures/Decoration/world.rsi/barrels4.png new file mode 100644 index 00000000000..8d8bea4b031 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/barrels4.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/barrels5.png b/Resources/Textures/Structures/Decoration/world.rsi/barrels5.png new file mode 100644 index 00000000000..da1078bd146 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/barrels5.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/barrels6.png b/Resources/Textures/Structures/Decoration/world.rsi/barrels6.png new file mode 100644 index 00000000000..513795e8961 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/barrels6.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/bookpile_1.png b/Resources/Textures/Structures/Decoration/world.rsi/bookpile_1.png new file mode 100644 index 00000000000..a2cd2612a93 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/bookpile_1.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/bookpile_2.png b/Resources/Textures/Structures/Decoration/world.rsi/bookpile_2.png new file mode 100644 index 00000000000..3afcd2e1e26 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/bookpile_2.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/bookpile_3.png b/Resources/Textures/Structures/Decoration/world.rsi/bookpile_3.png new file mode 100644 index 00000000000..33ec1b6d49d Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/bookpile_3.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/bookpile_4.png b/Resources/Textures/Structures/Decoration/world.rsi/bookpile_4.png new file mode 100644 index 00000000000..33c0400bc23 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/bookpile_4.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/bookpile_5.png b/Resources/Textures/Structures/Decoration/world.rsi/bookpile_5.png new file mode 100644 index 00000000000..fe6dd9648c6 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/bookpile_5.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/bookpile_6.png b/Resources/Textures/Structures/Decoration/world.rsi/bookpile_6.png new file mode 100644 index 00000000000..29a07811b95 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/bookpile_6.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/bookstack_1.png b/Resources/Textures/Structures/Decoration/world.rsi/bookstack_1.png new file mode 100644 index 00000000000..1ba11dea14d Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/bookstack_1.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/bookstack_2.png b/Resources/Textures/Structures/Decoration/world.rsi/bookstack_2.png new file mode 100644 index 00000000000..c2e8d731635 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/bookstack_2.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/bookstack_3.png b/Resources/Textures/Structures/Decoration/world.rsi/bookstack_3.png new file mode 100644 index 00000000000..762f4164a32 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/bookstack_3.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/brickpile.png b/Resources/Textures/Structures/Decoration/world.rsi/brickpile.png new file mode 100644 index 00000000000..5f9bff64e6c Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/brickpile.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/brickrubble.png b/Resources/Textures/Structures/Decoration/world.rsi/brickrubble.png new file mode 100644 index 00000000000..e6608f1928f Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/brickrubble.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/cardboard.png b/Resources/Textures/Structures/Decoration/world.rsi/cardboard.png new file mode 100644 index 00000000000..502c9091c87 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/cardboard.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier.png b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier.png new file mode 100644 index 00000000000..adc809dd334 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_1.png b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_1.png new file mode 100644 index 00000000000..172a253e72f Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_1.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_2.png b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_2.png new file mode 100644 index 00000000000..166a4d8e8d6 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_2.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_3.png b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_3.png new file mode 100644 index 00000000000..3dacbc7b505 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_3.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_4.png b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_4.png new file mode 100644 index 00000000000..152a731a34c Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_4.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_5.png b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_5.png new file mode 100644 index 00000000000..5c9b516dceb Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_5.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_alt.png b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_alt.png new file mode 100644 index 00000000000..d14490858ac Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_alt.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_alt_2.png b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_alt_2.png new file mode 100644 index 00000000000..6f4073d1e55 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/concrete_barrier_alt_2.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_1.png b/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_1.png new file mode 100644 index 00000000000..35e169511a4 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_1.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_2.png b/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_2.png new file mode 100644 index 00000000000..5dd4111cf39 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_2.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_3.png b/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_3.png new file mode 100644 index 00000000000..07a18d4b49b Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_3.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_4.png b/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_4.png new file mode 100644 index 00000000000..ea9f0dc039a Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_4.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_5.png b/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_5.png new file mode 100644 index 00000000000..410d800f79a Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_5.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_6.png b/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_6.png new file mode 100644 index 00000000000..5e5c41c7077 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/foodstuff_6.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/glass_1.png b/Resources/Textures/Structures/Decoration/world.rsi/glass_1.png new file mode 100644 index 00000000000..17ac65cf260 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/glass_1.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/glass_2.png b/Resources/Textures/Structures/Decoration/world.rsi/glass_2.png new file mode 100644 index 00000000000..eb3ab8acaa9 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/glass_2.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/glass_3.png b/Resources/Textures/Structures/Decoration/world.rsi/glass_3.png new file mode 100644 index 00000000000..897e09bd7e5 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/glass_3.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/glass_4.png b/Resources/Textures/Structures/Decoration/world.rsi/glass_4.png new file mode 100644 index 00000000000..be2b99641c2 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/glass_4.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/glass_5.png b/Resources/Textures/Structures/Decoration/world.rsi/glass_5.png new file mode 100644 index 00000000000..ade2587a9ac Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/glass_5.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/glass_6.png b/Resources/Textures/Structures/Decoration/world.rsi/glass_6.png new file mode 100644 index 00000000000..79c5e850d7a Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/glass_6.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/mailbox-open.png b/Resources/Textures/Structures/Decoration/world.rsi/mailbox-open.png new file mode 100644 index 00000000000..c5126efbf88 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/mailbox-open.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/mailbox.png b/Resources/Textures/Structures/Decoration/world.rsi/mailbox.png new file mode 100644 index 00000000000..52b69f7db4d Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/mailbox.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/mailbox_old-open.png b/Resources/Textures/Structures/Decoration/world.rsi/mailbox_old-open.png new file mode 100644 index 00000000000..3c712d2c3d3 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/mailbox_old-open.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/mailbox_old.png b/Resources/Textures/Structures/Decoration/world.rsi/mailbox_old.png new file mode 100644 index 00000000000..d80d352f7d1 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/mailbox_old.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/meta.json b/Resources/Textures/Structures/Decoration/world.rsi/meta.json new file mode 100644 index 00000000000..1920ab8b628 --- /dev/null +++ b/Resources/Textures/Structures/Decoration/world.rsi/meta.json @@ -0,0 +1,249 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/ffcecc82f28c796f8eff92ac46ff0f5e0d9b1ab6/mojave/icons/structure/miscellaneous.dmi", + "size": { + "x": 32, + "y": 48 + }, + "states": [ + { + "name": "mailbox_old" + }, + { + "name": "mailbox_old-open" + }, + { + "name": "mailbox" + }, + { + "name": "mailbox-open" + }, + { + "name": "barrels1" + }, + { + "name": "barrels2" + }, + { + "name": "barrels3" + }, + { + "name": "barrels4" + }, + { + "name": "barrels5" + }, + { + "name": "barrels6" + }, + { + "name": "payphone", + "directions": 4 + }, + { + "name": "payphone_alt", + "directions": 4 + }, + { + "name": "trashbin" + }, + { + "name": "trashbin-1" + }, + { + "name": "trashbin-2" + }, + { + "name": "trashbin-3" + }, + { + "name": "phone_black" + }, + { + "name": "phone_red" + }, + { + "name": "pot_1" + }, + { + "name": "pot_2" + }, + { + "name": "pot_3" + }, + { + "name": "pot_4" + }, + { + "name": "concrete_barrier", + "directions": 4 + }, + { + "name": "concrete_barrier_1", + "directions": 4 + }, + { + "name": "concrete_barrier_2", + "directions": 4 + }, + { + "name": "concrete_barrier_3", + "directions": 4 + }, + { + "name": "concrete_barrier_4", + "directions": 4 + }, + { + "name": "concrete_barrier_5", + "directions": 4 + }, + { + "name": "concrete_barrier_alt", + "directions": 4 + }, + { + "name": "concrete_barrier_alt_2", + "directions": 4 + }, + { + "name": "skeleton" + }, + { + "name": "shower", + "directions": 4 + }, + { + "name": "toilet", + "directions": 4 + }, + { + "name": "sink", + "directions": 4 + }, + { + "name": "scattered_papers", + "directions": 8 + }, + { + "name": "papers_1", + "directions": 4 + }, + { + "name": "papers_2", + "directions": 4 + }, + { + "name": "papers_3", + "directions": 4 + }, + { + "name": "woodscrap", + "directions": 8 + }, + { + "name": "brickrubble", + "directions": 8 + }, + { + "name": "cardboard", + "directions": 8 + }, + { + "name": "pallet", + "directions": 4 + }, + { + "name": "pallet_stack", + "directions": 4 + }, + { + "name": "brickpile" + }, + { + "name": "bookstack_1" + }, + { + "name": "bookstack_2" + }, + { + "name": "bookstack_3" + }, + { + "name": "bookpile_1" + }, + { + "name": "bookpile_2" + }, + { + "name": "bookpile_3" + }, + { + "name": "bookpile_4" + }, + { + "name": "bookpile_5" + }, + { + "name": "bookpile_6" + }, + { + "name": "foodstuff_1" + }, + { + "name": "foodstuff_2" + }, + { + "name": "foodstuff_3" + }, + { + "name": "foodstuff_4" + }, + { + "name": "foodstuff_5" + }, + { + "name": "foodstuff_6" + }, + { + "name": "trashbags_1" + }, + { + "name": "trashbags_2" + }, + { + "name": "trashbags_3" + }, + { + "name": "trashbags_4" + }, + { + "name": "trashbags_5" + }, + { + "name": "trashbags_6" + }, + { + "name": "glass_1" + }, + { + "name": "glass_2" + }, + { + "name": "glass_3" + }, + { + "name": "glass_4" + }, + { + "name": "glass_5" + }, + { + "name": "glass_6" + }, + { + "name": "mine_sign" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Decoration/world.rsi/mine_sign.png b/Resources/Textures/Structures/Decoration/world.rsi/mine_sign.png new file mode 100644 index 00000000000..e67ecc5e370 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/mine_sign.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/pallet.png b/Resources/Textures/Structures/Decoration/world.rsi/pallet.png new file mode 100644 index 00000000000..f1ef027d274 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/pallet.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/pallet_stack.png b/Resources/Textures/Structures/Decoration/world.rsi/pallet_stack.png new file mode 100644 index 00000000000..73d59a10f32 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/pallet_stack.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/papers_1.png b/Resources/Textures/Structures/Decoration/world.rsi/papers_1.png new file mode 100644 index 00000000000..f250f41ecba Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/papers_1.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/papers_2.png b/Resources/Textures/Structures/Decoration/world.rsi/papers_2.png new file mode 100644 index 00000000000..f9aa74fe508 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/papers_2.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/papers_3.png b/Resources/Textures/Structures/Decoration/world.rsi/papers_3.png new file mode 100644 index 00000000000..277a55e12c1 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/papers_3.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/payphone.png b/Resources/Textures/Structures/Decoration/world.rsi/payphone.png new file mode 100644 index 00000000000..928291b65ef Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/payphone.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/payphone_alt.png b/Resources/Textures/Structures/Decoration/world.rsi/payphone_alt.png new file mode 100644 index 00000000000..aa05c3fd31d Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/payphone_alt.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/phone_black.png b/Resources/Textures/Structures/Decoration/world.rsi/phone_black.png new file mode 100644 index 00000000000..87403a190f2 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/phone_black.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/phone_red.png b/Resources/Textures/Structures/Decoration/world.rsi/phone_red.png new file mode 100644 index 00000000000..e925a7f1f4c Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/phone_red.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/pot_1.png b/Resources/Textures/Structures/Decoration/world.rsi/pot_1.png new file mode 100644 index 00000000000..b9ae782f094 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/pot_1.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/pot_2.png b/Resources/Textures/Structures/Decoration/world.rsi/pot_2.png new file mode 100644 index 00000000000..a2e594848a8 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/pot_2.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/pot_3.png b/Resources/Textures/Structures/Decoration/world.rsi/pot_3.png new file mode 100644 index 00000000000..f665ca9125e Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/pot_3.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/pot_4.png b/Resources/Textures/Structures/Decoration/world.rsi/pot_4.png new file mode 100644 index 00000000000..3ae15c9ee50 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/pot_4.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/scattered_papers.png b/Resources/Textures/Structures/Decoration/world.rsi/scattered_papers.png new file mode 100644 index 00000000000..59447400c37 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/scattered_papers.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/shower.png b/Resources/Textures/Structures/Decoration/world.rsi/shower.png new file mode 100644 index 00000000000..ca3f561f9d2 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/shower.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/sink.png b/Resources/Textures/Structures/Decoration/world.rsi/sink.png new file mode 100644 index 00000000000..ab89eea0ad0 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/sink.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/skeleton.png b/Resources/Textures/Structures/Decoration/world.rsi/skeleton.png new file mode 100644 index 00000000000..9742b98dfd7 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/skeleton.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/toilet.png b/Resources/Textures/Structures/Decoration/world.rsi/toilet.png new file mode 100644 index 00000000000..912bd547b0a Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/toilet.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbags_1.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_1.png new file mode 100644 index 00000000000..32c78882f41 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_1.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbags_2.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_2.png new file mode 100644 index 00000000000..a6ebeb9933b Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_2.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbags_3.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_3.png new file mode 100644 index 00000000000..828a44184ee Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_3.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbags_4.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_4.png new file mode 100644 index 00000000000..368852fc235 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_4.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbags_5.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_5.png new file mode 100644 index 00000000000..b878b22d526 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_5.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbags_6.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_6.png new file mode 100644 index 00000000000..236a3b0f1ec Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/trashbags_6.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbin-1.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbin-1.png new file mode 100644 index 00000000000..ab01db6716d Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/trashbin-1.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbin-2.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbin-2.png new file mode 100644 index 00000000000..01ebf1808ec Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/trashbin-2.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbin-3.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbin-3.png new file mode 100644 index 00000000000..0ded7ef6a45 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/trashbin-3.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/trashbin.png b/Resources/Textures/Structures/Decoration/world.rsi/trashbin.png new file mode 100644 index 00000000000..cc6bfcbaf6b Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/trashbin.png differ diff --git a/Resources/Textures/Structures/Decoration/world.rsi/woodscrap.png b/Resources/Textures/Structures/Decoration/world.rsi/woodscrap.png new file mode 100644 index 00000000000..5cdb4e82489 Binary files /dev/null and b/Resources/Textures/Structures/Decoration/world.rsi/woodscrap.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet.png new file mode 100644 index 00000000000..72f5a15231c Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet_door.png new file mode 100644 index 00000000000..2aea809d943 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet_door.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet_open.png new file mode 100644 index 00000000000..04bfdc1aef2 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/closet_open.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/meta.json new file mode 100644 index 00000000000..b4d08e76497 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/cabinet.rsi/meta.json @@ -0,0 +1,20 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/JustLoveBeingAnOwl/Interstate-80-owlTaken at /commit/a6f9e0a6649e89f0aa731f363e07f541654ecb3d", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/closet.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/closet.rsi/closet.png new file mode 100644 index 00000000000..afd232916b6 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/closet.rsi/closet.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/closet.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/closet.rsi/closet_door.png new file mode 100644 index 00000000000..f35c07161b8 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/closet.rsi/closet_door.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/closet.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/closet.rsi/closet_open.png new file mode 100644 index 00000000000..a7551aff598 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/closet.rsi/closet_open.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/closet.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/closet.rsi/meta.json new file mode 100644 index 00000000000..3f29b07f084 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/closet.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "original sprites by Mithrandalf for ", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + }, + { + "name": "welded" + } + ] +} diff --git a/Resources/Textures/Structures/Storage/Closets/closet.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/closet.rsi/welded.png new file mode 100644 index 00000000000..5ba5dcc8962 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/closet.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet.png new file mode 100644 index 00000000000..f172eb6e1a2 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet_door.png new file mode 100644 index 00000000000..cee2ab57863 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet_door.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet_open.png new file mode 100644 index 00000000000..994cabb2715 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/closet_open.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/meta.json new file mode 100644 index 00000000000..a8b78d972ba --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/734c2aba4549814549d0fa7a9aa2e2d03ec1a2da/mojave/icons/structure/storage.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + }, + { + "name": "welded" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/welded.png new file mode 100644 index 00000000000..5ba5dcc8962 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/closetgeneric.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet.png new file mode 100644 index 00000000000..af64f96c3e2 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet_door.png new file mode 100644 index 00000000000..95c3f82c11f Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet_door.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet_open.png new file mode 100644 index 00000000000..3d9b907af64 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/closet_open.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/meta.json new file mode 100644 index 00000000000..6c96f799da0 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/JustLoveBeingAnOwl/Interstate-80-owlTaken at /commit/a6f9e0a6649e89f0aa731f363e07f541654ecb3d", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/welded.png new file mode 100644 index 00000000000..3b3c1afb164 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/closetgrey.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet.png new file mode 100644 index 00000000000..42c8042f278 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet_door.png new file mode 100644 index 00000000000..d358d38b075 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet_door.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet_open.png new file mode 100644 index 00000000000..03fcc057c13 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/closet_open.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/meta.json new file mode 100644 index 00000000000..6c96f799da0 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/JustLoveBeingAnOwl/Interstate-80-owlTaken at /commit/a6f9e0a6649e89f0aa731f363e07f541654ecb3d", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/welded.png new file mode 100644 index 00000000000..3b3c1afb164 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/closetgrey2.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/closetold.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/closetold.rsi/closet.png new file mode 100644 index 00000000000..65432daad84 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/closetold.rsi/closet.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/closetold.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/closetold.rsi/closet_door.png new file mode 100644 index 00000000000..6359b0bf95f Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/closetold.rsi/closet_door.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/closetold.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/closetold.rsi/closet_open.png new file mode 100644 index 00000000000..f9ae6430bbb Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/closetold.rsi/closet_open.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/closetold.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/closetold.rsi/meta.json new file mode 100644 index 00000000000..6c96f799da0 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/closetold.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/JustLoveBeingAnOwl/Interstate-80-owlTaken at /commit/a6f9e0a6649e89f0aa731f363e07f541654ecb3d", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/closetold.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/closetold.rsi/welded.png new file mode 100644 index 00000000000..3b3c1afb164 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/closetold.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet.png new file mode 100644 index 00000000000..4384fc083d4 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet_door.png new file mode 100644 index 00000000000..14e73e6aca0 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet_door.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet_open.png new file mode 100644 index 00000000000..3002352395a Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/closet_open.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/meta.json new file mode 100644 index 00000000000..42ebb30c440 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/JustLoveBeingAnOwl/Interstate-80-owlTaken at /commit/a6f9e0a6649e89f0aa731f363e07f541654ecb3d", + "size": { + "x": 36, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "closet_open" + }, + { + "name": "closet" + }, + { + "name": "closet_door" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/welded.png new file mode 100644 index 00000000000..2626c910f37 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/doublecloset.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet.png new file mode 100644 index 00000000000..0d0446556ab Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet_door.png new file mode 100644 index 00000000000..81d17e6434f Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet_door.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet_open.png new file mode 100644 index 00000000000..68d500a1b9a Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/closet_open.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/meta.json new file mode 100644 index 00000000000..4573bdcf0ed --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/JustLoveBeingAnOwl/Interstate-80-owlTaken at /commit/a6f9e0a6649e89f0aa731f363e07f541654ecb3d", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "closet_door" + }, + { + "name": "closet" + }, + { + "name": "closet_open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/welded.png new file mode 100644 index 00000000000..3b3c1afb164 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/fridgedirty.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet.png new file mode 100644 index 00000000000..7f97f962458 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet_door.png new file mode 100644 index 00000000000..3b405c38888 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet_door.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet_open.png new file mode 100644 index 00000000000..24eae0e5887 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/closet_open.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/meta.json new file mode 100644 index 00000000000..4573bdcf0ed --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/JustLoveBeingAnOwl/Interstate-80-owlTaken at /commit/a6f9e0a6649e89f0aa731f363e07f541654ecb3d", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "closet_door" + }, + { + "name": "closet" + }, + { + "name": "closet_open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/welded.png new file mode 100644 index 00000000000..9854ad9b7cb Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/fridgewidedirty.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/closet.png new file mode 100644 index 00000000000..51f6568bb80 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/closet.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/closet_door.png new file mode 100644 index 00000000000..4fb2a2fe68b Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/closet_door.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/closet_open.png new file mode 100644 index 00000000000..b5fdb260ff6 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/closet_open.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/meta.json new file mode 100644 index 00000000000..df09196536f --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/JustLoveBeingAnOwl/Interstate-80-owlTaken at /commit/a6f9e0a6649e89f0aa731f363e07f541654ecb3d", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + }, + { + "name": "shotgun" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/shotgun.png b/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/shotgun.png new file mode 100644 index 00000000000..2118cdf5f5d Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/shotgun.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/welded.png new file mode 100644 index 00000000000..ae50afa7819 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/guncabinet.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet.png b/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet.png new file mode 100644 index 00000000000..973d3220dfe Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet_door.png new file mode 100644 index 00000000000..43e0e5b04f6 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet_door.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet_open.png new file mode 100644 index 00000000000..ee7343e2836 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/closet_open.png differ diff --git a/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/meta.json b/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/meta.json new file mode 100644 index 00000000000..6c96f799da0 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/JustLoveBeingAnOwl/Interstate-80-owlTaken at /commit/a6f9e0a6649e89f0aa731f363e07f541654ecb3d", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/welded.png b/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/welded.png new file mode 100644 index 00000000000..b0b016fa33d Binary files /dev/null and b/Resources/Textures/Structures/Storage/Closets/medicabinet.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/base.png new file mode 100644 index 00000000000..fd318d112d8 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/base.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/closed.png b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/closed.png new file mode 100644 index 00000000000..2c0ff15bc08 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/closed.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/icon.png new file mode 100644 index 00000000000..6af597137d0 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/icon.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/lock.png b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/lock.png new file mode 100644 index 00000000000..cb3c8e710cc Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/lock.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/meta.json new file mode 100644 index 00000000000..4a70ffccd86 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/b35ff6e7f1b94108e0b934a1caf84d60066840be/mojave/icons/structure/crates.dmi, converted & additional states modified by Peptide90", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base" + }, + { + "name": "icon" + }, + { + "name": "closed" + }, + { + "name": "open" + }, + { + "name": "welded" + }, + { + "name": "lock" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/open.png new file mode 100644 index 00000000000..b6a45eab7ae Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/open.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/welded.png b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/welded.png new file mode 100644 index 00000000000..2af808afb3e Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/aluminiumcrate.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/base.png new file mode 100644 index 00000000000..b7d43e1ee13 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/base.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/closed.png b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/closed.png new file mode 100644 index 00000000000..280feef20ed Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/closed.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/icon.png new file mode 100644 index 00000000000..b4d1e832551 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/icon.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/lock.png b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/lock.png new file mode 100644 index 00000000000..cb3c8e710cc Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/lock.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/meta.json new file mode 100644 index 00000000000..4a70ffccd86 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/b35ff6e7f1b94108e0b934a1caf84d60066840be/mojave/icons/structure/crates.dmi, converted & additional states modified by Peptide90", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base" + }, + { + "name": "icon" + }, + { + "name": "closed" + }, + { + "name": "open" + }, + { + "name": "welded" + }, + { + "name": "lock" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/open.png new file mode 100644 index 00000000000..d7f5122c4ef Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/open.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/welded.png b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/welded.png new file mode 100644 index 00000000000..2af808afb3e Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/armycrate.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/cashregister.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/cashregister.rsi/meta.json new file mode 100644 index 00000000000..2f6f3effc31 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/cashregister.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/b35ff6e7f1b94108e0b934a1caf84d60066840be/mojave/icons/structure/crates.dmi, converted & additional states modified by Peptide90", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "register_cleanopen", + "directions": 4 + }, + { + "name": "register_clean", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/cashregister.rsi/register_clean.png b/Resources/Textures/Structures/Storage/Crates/cashregister.rsi/register_clean.png new file mode 100644 index 00000000000..7e03d84874e Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/cashregister.rsi/register_clean.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/cashregister.rsi/register_cleanopen.png b/Resources/Textures/Structures/Storage/Crates/cashregister.rsi/register_cleanopen.png new file mode 100644 index 00000000000..684ce62f9ff Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/cashregister.rsi/register_cleanopen.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/cashregisterbloody.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/cashregisterbloody.rsi/meta.json new file mode 100644 index 00000000000..7b97a7e7b07 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/cashregisterbloody.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/b35ff6e7f1b94108e0b934a1caf84d60066840be/mojave/icons/structure/crates.dmi, converted & additional states modified by Peptide90", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "register", + "directions": 4 + }, + { + "name": "registeropen", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/cashregisterbloody.rsi/register.png b/Resources/Textures/Structures/Storage/Crates/cashregisterbloody.rsi/register.png new file mode 100644 index 00000000000..ae713d3dbad Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/cashregisterbloody.rsi/register.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/cashregisterbloody.rsi/registeropen.png b/Resources/Textures/Structures/Storage/Crates/cashregisterbloody.rsi/registeropen.png new file mode 100644 index 00000000000..b1f58e204a1 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/cashregisterbloody.rsi/registeropen.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/base.png new file mode 100644 index 00000000000..dbe959cdde5 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/base.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/closed.png b/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/closed.png new file mode 100644 index 00000000000..cde0879b2f1 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/closed.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/icon.png new file mode 100644 index 00000000000..f3a5facaf85 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/icon.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/meta.json new file mode 100644 index 00000000000..30ddccec79c --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "By patogrone for nuclear14.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base" + }, + { + "name": "closed" + }, + { + "name": "icon" + }, + { + "name": "open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/open.png new file mode 100644 index 00000000000..79e4ca0fc68 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/cratemilitary.rsi/open.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/base.png new file mode 100644 index 00000000000..5391f84ca77 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/base.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/closed.png b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/closed.png new file mode 100644 index 00000000000..c4598c55061 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/closed.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/icon.png new file mode 100644 index 00000000000..e5611ffbc77 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/icon.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/meta.json new file mode 100644 index 00000000000..30ddccec79c --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "By patogrone for nuclear14.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base" + }, + { + "name": "closed" + }, + { + "name": "icon" + }, + { + "name": "open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/open.png new file mode 100644 index 00000000000..588072ac79a Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/cratewooden.rsi/open.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/base.png new file mode 100644 index 00000000000..24a824f6582 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/base.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/closed.png b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/closed.png new file mode 100644 index 00000000000..d81f5214556 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/closed.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/icon.png new file mode 100644 index 00000000000..6d3c39fa352 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/icon.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/meta.json new file mode 100644 index 00000000000..ba4bf0a813e --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Base and icon by patogrone. Others modified by Peptide.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "welded" + }, + { + "name": "base" + }, + { + "name": "closed" + }, + { + "name": "icon" + }, + { + "name": "open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/open.png new file mode 100644 index 00000000000..73a2329c8ee Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/open.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/welded.png b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/welded.png new file mode 100644 index 00000000000..a2bc24c5286 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/footlocker.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/freezer.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/freezer.rsi/base.png index 386dd0845da..c0538c846bf 100644 Binary files a/Resources/Textures/Structures/Storage/Crates/freezer.rsi/base.png and b/Resources/Textures/Structures/Storage/Crates/freezer.rsi/base.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/freezer.rsi/closed.png b/Resources/Textures/Structures/Storage/Crates/freezer.rsi/closed.png index e7d29a34793..a94bb6a968a 100644 Binary files a/Resources/Textures/Structures/Storage/Crates/freezer.rsi/closed.png and b/Resources/Textures/Structures/Storage/Crates/freezer.rsi/closed.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/freezer.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/freezer.rsi/icon.png index 039099b3378..6e5483209e0 100644 Binary files a/Resources/Textures/Structures/Storage/Crates/freezer.rsi/icon.png and b/Resources/Textures/Structures/Storage/Crates/freezer.rsi/icon.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/freezer.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/freezer.rsi/open.png index 10129791a7c..e189e1addb6 100644 Binary files a/Resources/Textures/Structures/Storage/Crates/freezer.rsi/open.png and b/Resources/Textures/Structures/Storage/Crates/freezer.rsi/open.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/base.png new file mode 100644 index 00000000000..9917e659f2c Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/base.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/closed.png b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/closed.png new file mode 100644 index 00000000000..67e54227dd1 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/closed.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/icon.png new file mode 100644 index 00000000000..9a9555b7b10 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/icon.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/lock.png b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/lock.png new file mode 100644 index 00000000000..cb3c8e710cc Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/lock.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/meta.json new file mode 100644 index 00000000000..4a70ffccd86 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/b35ff6e7f1b94108e0b934a1caf84d60066840be/mojave/icons/structure/crates.dmi, converted & additional states modified by Peptide90", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base" + }, + { + "name": "icon" + }, + { + "name": "closed" + }, + { + "name": "open" + }, + { + "name": "welded" + }, + { + "name": "lock" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/open.png new file mode 100644 index 00000000000..5eaada83948 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/open.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/welded.png b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/welded.png new file mode 100644 index 00000000000..2af808afb3e Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/medicalcrate.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/base.png new file mode 100644 index 00000000000..1ede687689c Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/base.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/closed.png b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/closed.png new file mode 100644 index 00000000000..226128bed7e Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/closed.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/icon.png new file mode 100644 index 00000000000..c59bb7ae208 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/icon.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/lock.png b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/lock.png new file mode 100644 index 00000000000..cb3c8e710cc Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/lock.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/meta.json new file mode 100644 index 00000000000..4a70ffccd86 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/b35ff6e7f1b94108e0b934a1caf84d60066840be/mojave/icons/structure/crates.dmi, converted & additional states modified by Peptide90", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base" + }, + { + "name": "icon" + }, + { + "name": "closed" + }, + { + "name": "open" + }, + { + "name": "welded" + }, + { + "name": "lock" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/open.png new file mode 100644 index 00000000000..5c44ebd1f3d Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/open.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/welded.png b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/welded.png new file mode 100644 index 00000000000..2af808afb3e Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/redcrate.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/base.png new file mode 100644 index 00000000000..ade5f8427e3 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/base.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/closed.png b/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/closed.png new file mode 100644 index 00000000000..f23806fbd0e Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/closed.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/icon.png new file mode 100644 index 00000000000..c197616dee9 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/icon.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/meta.json new file mode 100644 index 00000000000..3e766f497f3 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from Nukapop13, states created / modified by Peptide90 for ss14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "open" + }, + { + "name": "base" + }, + { + "name": "closed" + }, + { + "name": "icon" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/open.png new file mode 100644 index 00000000000..a99a2cc6b08 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/trashbin.rsi/open.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/base.png b/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/base.png index 85d7c299925..e993cd2c57a 100644 Binary files a/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/base.png and b/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/base.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/closed.png b/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/closed.png index 1c11bc8942e..4e3de205d81 100644 Binary files a/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/closed.png and b/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/closed.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/icon.png b/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/icon.png index 6c212de3288..e3af2c40f52 100644 Binary files a/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/icon.png and b/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/icon.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/open.png b/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/open.png index 58f97286f2c..ef403abeb83 100644 Binary files a/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/open.png and b/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/open.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/welded.png b/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/welded.png index cad0a0f18a1..06b25dfb7e6 100644 Binary files a/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/welded.png and b/Resources/Textures/Structures/Storage/Crates/trashcart.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/army_crate-1.png b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/army_crate-1.png new file mode 100644 index 00000000000..41652078229 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/army_crate-1.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/army_crate-2.png b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/army_crate-2.png new file mode 100644 index 00000000000..c2fd123bcf2 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/army_crate-2.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/army_crate.png b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/army_crate.png new file mode 100644 index 00000000000..a4d20f49920 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/army_crate.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/meta.json new file mode 100644 index 00000000000..cecaa5ed225 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/meta.json @@ -0,0 +1,35 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/b35ff6e7f1b94108e0b934a1caf84d60066840be/mojave/icons/structure/crates.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "wood_crate" + }, + { + "name": "plain_crate" + }, + { + "name": "plain_crate-1" + }, + { + "name": "plain_crate-2" + }, + { + "name": "plain_crate-3" + }, + { + "name": "army_crate" + }, + { + "name": "army_crate-1" + }, + { + "name": "army_crate-2" + } + ] +} diff --git a/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-1.png b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-1.png new file mode 100644 index 00000000000..19aeff684c2 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-1.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-2.png b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-2.png new file mode 100644 index 00000000000..f394aa4f413 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-2.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-3.png b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-3.png new file mode 100644 index 00000000000..40e261ef695 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate-3.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate.png b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate.png new file mode 100644 index 00000000000..5f45c1ec8b4 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/plain_crate.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/wood_crate.png b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/wood_crate.png new file mode 100644 index 00000000000..01ddb55466f Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/woodencrates.rsi/wood_crate.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/woodenfootlocker.rsi/footlocker_wood.png b/Resources/Textures/Structures/Storage/Crates/woodenfootlocker.rsi/footlocker_wood.png new file mode 100644 index 00000000000..2128d861de4 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/woodenfootlocker.rsi/footlocker_wood.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/woodenfootlocker.rsi/footlocker_woodopen.png b/Resources/Textures/Structures/Storage/Crates/woodenfootlocker.rsi/footlocker_woodopen.png new file mode 100644 index 00000000000..d074186536a Binary files /dev/null and b/Resources/Textures/Structures/Storage/Crates/woodenfootlocker.rsi/footlocker_woodopen.png differ diff --git a/Resources/Textures/Structures/Storage/Crates/woodenfootlocker.rsi/meta.json b/Resources/Textures/Structures/Storage/Crates/woodenfootlocker.rsi/meta.json new file mode 100644 index 00000000000..7084feb0b6c --- /dev/null +++ b/Resources/Textures/Structures/Storage/Crates/woodenfootlocker.rsi/meta.json @@ -0,0 +1,19 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/b35ff6e7f1b94108e0b934a1caf84d60066840be/mojave/icons/structure/crates.dmi, converted & additional states modified by Peptide90", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "footlocker_wood", + "directions": 4 + }, + { + "name": "footlocker_woodopen", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Furniture/safe.rsi/closet.png b/Resources/Textures/Structures/Storage/Furniture/safe.rsi/closet.png new file mode 100644 index 00000000000..918d4196224 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Furniture/safe.rsi/closet.png differ diff --git a/Resources/Textures/Structures/Storage/Furniture/safe.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Furniture/safe.rsi/closet_door.png new file mode 100644 index 00000000000..5fe03e1df3e Binary files /dev/null and b/Resources/Textures/Structures/Storage/Furniture/safe.rsi/closet_door.png differ diff --git a/Resources/Textures/Structures/Storage/Furniture/safe.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Furniture/safe.rsi/closet_open.png new file mode 100644 index 00000000000..a141d00a720 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Furniture/safe.rsi/closet_open.png differ diff --git a/Resources/Textures/Structures/Storage/Furniture/safe.rsi/meta.json b/Resources/Textures/Structures/Storage/Furniture/safe.rsi/meta.json new file mode 100644 index 00000000000..a8b78d972ba --- /dev/null +++ b/Resources/Textures/Structures/Storage/Furniture/safe.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/734c2aba4549814549d0fa7a9aa2e2d03ec1a2da/mojave/icons/structure/storage.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + }, + { + "name": "welded" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Furniture/safe.rsi/welded.png b/Resources/Textures/Structures/Storage/Furniture/safe.rsi/welded.png new file mode 100644 index 00000000000..be8c7964677 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Furniture/safe.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/closet.png b/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/closet.png new file mode 100644 index 00000000000..dc80405ac96 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/closet.png differ diff --git a/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/closet_door.png b/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/closet_door.png new file mode 100644 index 00000000000..3d7d3e0a263 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/closet_door.png differ diff --git a/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/closet_open.png b/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/closet_open.png new file mode 100644 index 00000000000..a5e6a362cba Binary files /dev/null and b/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/closet_open.png differ diff --git a/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/meta.json b/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/meta.json new file mode 100644 index 00000000000..a8b78d972ba --- /dev/null +++ b/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/734c2aba4549814549d0fa7a9aa2e2d03ec1a2da/mojave/icons/structure/storage.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "closet" + }, + { + "name": "closet_door" + }, + { + "name": "closet_open" + }, + { + "name": "welded" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/welded.png b/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/welded.png new file mode 100644 index 00000000000..be8c7964677 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Furniture/safespinner.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic.png b/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic.png new file mode 100644 index 00000000000..92ab8b725a9 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic.png differ diff --git a/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic_door.png b/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic_door.png new file mode 100644 index 00000000000..c293a5e76ea Binary files /dev/null and b/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic_door.png differ diff --git a/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic_on.png b/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic_on.png new file mode 100644 index 00000000000..07cd92ff696 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic_on.png differ diff --git a/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic_open.png b/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic_open.png new file mode 100644 index 00000000000..b2aacd3c567 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/generic_open.png differ diff --git a/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/meta.json b/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/meta.json new file mode 100644 index 00000000000..f3e52394406 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Furniture/washingmachine.rsi/meta.json @@ -0,0 +1,43 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/734c2aba4549814549d0fa7a9aa2e2d03ec1a2da/mojave/icons/structure/storage.dmi, additional states modified by Peptide", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "generic", + "directions": 4 + }, + { + "name": "generic_door", + "directions": 4 + }, + { + "name": "generic_open", + "directions": 4 + }, + { + "name": "generic_on", + "delays": [ + [ + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic.png b/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic.png new file mode 100644 index 00000000000..c53f7e21a50 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic.png differ diff --git a/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic_door.png b/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic_door.png new file mode 100644 index 00000000000..f8b9e0c20d0 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic_door.png differ diff --git a/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic_on.png b/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic_on.png new file mode 100644 index 00000000000..6ae719968cf Binary files /dev/null and b/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic_on.png differ diff --git a/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic_open.png b/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic_open.png new file mode 100644 index 00000000000..4f33cbf1eb4 Binary files /dev/null and b/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/generic_open.png differ diff --git a/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/meta.json b/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/meta.json new file mode 100644 index 00000000000..f3e52394406 --- /dev/null +++ b/Resources/Textures/Structures/Storage/Furniture/washingmachine_industrial.rsi/meta.json @@ -0,0 +1,43 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/734c2aba4549814549d0fa7a9aa2e2d03ec1a2da/mojave/icons/structure/storage.dmi, additional states modified by Peptide", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "generic", + "directions": 4 + }, + { + "name": "generic_door", + "directions": 4 + }, + { + "name": "generic_open", + "directions": 4 + }, + { + "name": "generic_on", + "delays": [ + [ + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08, + 0.08 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/black-closed.png b/Resources/Textures/Structures/Storage/barrels.rsi/black-closed.png new file mode 100644 index 00000000000..f5588e0a179 Binary files /dev/null and b/Resources/Textures/Structures/Storage/barrels.rsi/black-closed.png differ diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/black-full.png b/Resources/Textures/Structures/Storage/barrels.rsi/black-full.png new file mode 100644 index 00000000000..23f843bf154 Binary files /dev/null and b/Resources/Textures/Structures/Storage/barrels.rsi/black-full.png differ diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/black-open.png b/Resources/Textures/Structures/Storage/barrels.rsi/black-open.png new file mode 100644 index 00000000000..375e98aacb6 Binary files /dev/null and b/Resources/Textures/Structures/Storage/barrels.rsi/black-open.png differ diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/blue-closed.png b/Resources/Textures/Structures/Storage/barrels.rsi/blue-closed.png new file mode 100644 index 00000000000..f3d79b683f9 Binary files /dev/null and b/Resources/Textures/Structures/Storage/barrels.rsi/blue-closed.png differ diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/blue-open.png b/Resources/Textures/Structures/Storage/barrels.rsi/blue-open.png new file mode 100644 index 00000000000..e1398fe96ba Binary files /dev/null and b/Resources/Textures/Structures/Storage/barrels.rsi/blue-open.png differ diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/meta.json b/Resources/Textures/Structures/Storage/barrels.rsi/meta.json new file mode 100644 index 00000000000..595e2ed350b --- /dev/null +++ b/Resources/Textures/Structures/Storage/barrels.rsi/meta.json @@ -0,0 +1,44 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "Mithrandalf Discord 93652604520767488", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "black-closed" + }, + { + "name": "black-full" + }, + { + "name": "black-open" + }, + { + "name": "blue-closed" + }, + { + "name": "blue-open" + }, + { + "name": "red-closed" + }, + { + "name": "red-full" + }, + { + "name": "red-open" + }, + { + "name": "yellow-closed" + }, + { + "name": "yellow-full" + }, + { + "name": "yellow-open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/red-closed.png b/Resources/Textures/Structures/Storage/barrels.rsi/red-closed.png new file mode 100644 index 00000000000..d2e93a9076a Binary files /dev/null and b/Resources/Textures/Structures/Storage/barrels.rsi/red-closed.png differ diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/red-full.png b/Resources/Textures/Structures/Storage/barrels.rsi/red-full.png new file mode 100644 index 00000000000..d464a1094c5 Binary files /dev/null and b/Resources/Textures/Structures/Storage/barrels.rsi/red-full.png differ diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/red-open.png b/Resources/Textures/Structures/Storage/barrels.rsi/red-open.png new file mode 100644 index 00000000000..fe6acfebacb Binary files /dev/null and b/Resources/Textures/Structures/Storage/barrels.rsi/red-open.png differ diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/yellow-closed.png b/Resources/Textures/Structures/Storage/barrels.rsi/yellow-closed.png new file mode 100644 index 00000000000..3f8f967c9dd Binary files /dev/null and b/Resources/Textures/Structures/Storage/barrels.rsi/yellow-closed.png differ diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/yellow-full.png b/Resources/Textures/Structures/Storage/barrels.rsi/yellow-full.png new file mode 100644 index 00000000000..430139d3382 Binary files /dev/null and b/Resources/Textures/Structures/Storage/barrels.rsi/yellow-full.png differ diff --git a/Resources/Textures/Structures/Storage/barrels.rsi/yellow-open.png b/Resources/Textures/Structures/Storage/barrels.rsi/yellow-open.png new file mode 100644 index 00000000000..34f2c4373f2 Binary files /dev/null and b/Resources/Textures/Structures/Storage/barrels.rsi/yellow-open.png differ diff --git a/Resources/Textures/Structures/Storage/burningbarrel.rsi/burnbarrel.png b/Resources/Textures/Structures/Storage/burningbarrel.rsi/burnbarrel.png new file mode 100644 index 00000000000..769a962390d Binary files /dev/null and b/Resources/Textures/Structures/Storage/burningbarrel.rsi/burnbarrel.png differ diff --git a/Resources/Textures/Structures/Storage/burningbarrel.rsi/burnbarrel_lit.png b/Resources/Textures/Structures/Storage/burningbarrel.rsi/burnbarrel_lit.png new file mode 100644 index 00000000000..f9f7c42808f Binary files /dev/null and b/Resources/Textures/Structures/Storage/burningbarrel.rsi/burnbarrel_lit.png differ diff --git a/Resources/Textures/Structures/Storage/burningbarrel.rsi/meta.json b/Resources/Textures/Structures/Storage/burningbarrel.rsi/meta.json new file mode 100644 index 00000000000..e9ea220d55a --- /dev/null +++ b/Resources/Textures/Structures/Storage/burningbarrel.rsi/meta.json @@ -0,0 +1,51 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "https://github.com/BadDeathclaw/Drymouth-Gulch/commit/63d5cc6913885fd4b481b5ffcc980726c2dedca9", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "burnbarrel" + }, + { + "name": "burnbarrel_lit", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 1, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/storage.rsi/firstaid.png b/Resources/Textures/Structures/Storage/storage.rsi/firstaid.png new file mode 100644 index 00000000000..ddb1dd3887c Binary files /dev/null and b/Resources/Textures/Structures/Storage/storage.rsi/firstaid.png differ diff --git a/Resources/Textures/Structures/Storage/storage.rsi/firstaid_door.png b/Resources/Textures/Structures/Storage/storage.rsi/firstaid_door.png new file mode 100644 index 00000000000..7abcc07275b Binary files /dev/null and b/Resources/Textures/Structures/Storage/storage.rsi/firstaid_door.png differ diff --git a/Resources/Textures/Structures/Storage/storage.rsi/firstaid_open.png b/Resources/Textures/Structures/Storage/storage.rsi/firstaid_open.png new file mode 100644 index 00000000000..e1df54b1528 Binary files /dev/null and b/Resources/Textures/Structures/Storage/storage.rsi/firstaid_open.png differ diff --git a/Resources/Textures/Structures/Storage/storage.rsi/fridge.png b/Resources/Textures/Structures/Storage/storage.rsi/fridge.png new file mode 100644 index 00000000000..56b742cb6d7 Binary files /dev/null and b/Resources/Textures/Structures/Storage/storage.rsi/fridge.png differ diff --git a/Resources/Textures/Structures/Storage/storage.rsi/fridge_door.png b/Resources/Textures/Structures/Storage/storage.rsi/fridge_door.png new file mode 100644 index 00000000000..1df343df516 Binary files /dev/null and b/Resources/Textures/Structures/Storage/storage.rsi/fridge_door.png differ diff --git a/Resources/Textures/Structures/Storage/storage.rsi/fridge_open.png b/Resources/Textures/Structures/Storage/storage.rsi/fridge_open.png new file mode 100644 index 00000000000..6e9d2d3cc88 Binary files /dev/null and b/Resources/Textures/Structures/Storage/storage.rsi/fridge_open.png differ diff --git a/Resources/Textures/Structures/Storage/storage.rsi/locker.png b/Resources/Textures/Structures/Storage/storage.rsi/locker.png new file mode 100644 index 00000000000..7459220d3ce Binary files /dev/null and b/Resources/Textures/Structures/Storage/storage.rsi/locker.png differ diff --git a/Resources/Textures/Structures/Storage/storage.rsi/locker_door.png b/Resources/Textures/Structures/Storage/storage.rsi/locker_door.png new file mode 100644 index 00000000000..d4dbc54117c Binary files /dev/null and b/Resources/Textures/Structures/Storage/storage.rsi/locker_door.png differ diff --git a/Resources/Textures/Structures/Storage/storage.rsi/locker_loot.png b/Resources/Textures/Structures/Storage/storage.rsi/locker_loot.png new file mode 100644 index 00000000000..4715931aa19 Binary files /dev/null and b/Resources/Textures/Structures/Storage/storage.rsi/locker_loot.png differ diff --git a/Resources/Textures/Structures/Storage/storage.rsi/locker_open.png b/Resources/Textures/Structures/Storage/storage.rsi/locker_open.png new file mode 100644 index 00000000000..8298cea36ef Binary files /dev/null and b/Resources/Textures/Structures/Storage/storage.rsi/locker_open.png differ diff --git a/Resources/Textures/Structures/Storage/storage.rsi/meta.json b/Resources/Textures/Structures/Storage/storage.rsi/meta.json new file mode 100644 index 00000000000..0c633b526f2 --- /dev/null +++ b/Resources/Textures/Structures/Storage/storage.rsi/meta.json @@ -0,0 +1,65 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/734c2aba4549814549d0fa7a9aa2e2d03ec1a2da/mojave/icons/structure/storage.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "fridge" + }, + { + "name": "fridge_door" + }, + { + "name": "fridge_open" + }, + { + "name": "safe_wall" + }, + { + "name": "safe_wall-open" + }, + { + "name": "firstaid" + }, + { + "name": "firstaid_door" + }, + { + "name": "firstaid_open" + }, + { + "name": "vent" + }, + { + "name": "vent-damaged" + }, + { + "name": "vent-open" + }, + { + "name": "locker" + }, + { + "name": "locker_door" + }, + { + "name": "locker_open" + }, + { + "name": "toolbox" + }, + { + "name": "toolbox_open" + }, + { + "name": "locker_loot" + }, + { + "name": "toolbox_loot" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Storage/storage.rsi/safe_wall-open.png b/Resources/Textures/Structures/Storage/storage.rsi/safe_wall-open.png new file mode 100644 index 00000000000..78af50ad816 Binary files /dev/null and b/Resources/Textures/Structures/Storage/storage.rsi/safe_wall-open.png differ diff --git a/Resources/Textures/Structures/Storage/storage.rsi/safe_wall.png b/Resources/Textures/Structures/Storage/storage.rsi/safe_wall.png new file mode 100644 index 00000000000..aa13aedfb83 Binary files /dev/null and b/Resources/Textures/Structures/Storage/storage.rsi/safe_wall.png differ diff --git a/Resources/Textures/Structures/Storage/storage.rsi/toolbox.png b/Resources/Textures/Structures/Storage/storage.rsi/toolbox.png new file mode 100644 index 00000000000..ad66f69275c Binary files /dev/null and b/Resources/Textures/Structures/Storage/storage.rsi/toolbox.png differ diff --git a/Resources/Textures/Structures/Storage/storage.rsi/toolbox_loot.png b/Resources/Textures/Structures/Storage/storage.rsi/toolbox_loot.png new file mode 100644 index 00000000000..a6c8df90bc6 Binary files /dev/null and b/Resources/Textures/Structures/Storage/storage.rsi/toolbox_loot.png differ diff --git a/Resources/Textures/Structures/Storage/storage.rsi/toolbox_open.png b/Resources/Textures/Structures/Storage/storage.rsi/toolbox_open.png new file mode 100644 index 00000000000..fcec1e456a7 Binary files /dev/null and b/Resources/Textures/Structures/Storage/storage.rsi/toolbox_open.png differ diff --git a/Resources/Textures/Structures/Storage/storage.rsi/vent-damaged.png b/Resources/Textures/Structures/Storage/storage.rsi/vent-damaged.png new file mode 100644 index 00000000000..72a77a24a4c Binary files /dev/null and b/Resources/Textures/Structures/Storage/storage.rsi/vent-damaged.png differ diff --git a/Resources/Textures/Structures/Storage/storage.rsi/vent-open.png b/Resources/Textures/Structures/Storage/storage.rsi/vent-open.png new file mode 100644 index 00000000000..285ef2a2b04 Binary files /dev/null and b/Resources/Textures/Structures/Storage/storage.rsi/vent-open.png differ diff --git a/Resources/Textures/Structures/Storage/storage.rsi/vent.png b/Resources/Textures/Structures/Storage/storage.rsi/vent.png new file mode 100644 index 00000000000..9d0f46b8121 Binary files /dev/null and b/Resources/Textures/Structures/Storage/storage.rsi/vent.png differ diff --git a/Resources/Textures/Structures/Storage/tanksx64.rsi/chemical_container.png b/Resources/Textures/Structures/Storage/tanksx64.rsi/chemical_container.png new file mode 100644 index 00000000000..c7365021975 Binary files /dev/null and b/Resources/Textures/Structures/Storage/tanksx64.rsi/chemical_container.png differ diff --git a/Resources/Textures/Structures/Storage/tanksx64.rsi/chemical_container_broken.png b/Resources/Textures/Structures/Storage/tanksx64.rsi/chemical_container_broken.png new file mode 100644 index 00000000000..41b8d120b75 Binary files /dev/null and b/Resources/Textures/Structures/Storage/tanksx64.rsi/chemical_container_broken.png differ diff --git a/Resources/Textures/Structures/Storage/tanksx64.rsi/largetank.png b/Resources/Textures/Structures/Storage/tanksx64.rsi/largetank.png new file mode 100644 index 00000000000..93813f60145 Binary files /dev/null and b/Resources/Textures/Structures/Storage/tanksx64.rsi/largetank.png differ diff --git a/Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_chemical.png b/Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_chemical.png new file mode 100644 index 00000000000..58329e55380 Binary files /dev/null and b/Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_chemical.png differ diff --git a/Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_chemical_huge.png b/Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_chemical_huge.png new file mode 100644 index 00000000000..91b49aff422 Binary files /dev/null and b/Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_chemical_huge.png differ diff --git a/Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_pipe.png b/Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_pipe.png new file mode 100644 index 00000000000..22bb887022e Binary files /dev/null and b/Resources/Textures/Structures/Storage/tanksx64.rsi/largetank_pipe.png differ diff --git a/Resources/Textures/Structures/Storage/tanksx64.rsi/meta.json b/Resources/Textures/Structures/Storage/tanksx64.rsi/meta.json new file mode 100644 index 00000000000..77176b72431 --- /dev/null +++ b/Resources/Textures/Structures/Storage/tanksx64.rsi/meta.json @@ -0,0 +1,29 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/aa171b6d7dda4a58168013a60e44f10165f2678d/mojave/icons/structure/tank.dmi", + "size": { + "x": 64, + "y": 64 + }, + "states": [ + { + "name": "largetank" + }, + { + "name": "largetank_chemical" + }, + { + "name": "largetank_pipe" + }, + { + "name": "largetank_chemical_huge" + }, + { + "name": "chemical_container" + }, + { + "name": "chemical_container_broken" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Wallmounts/hydrant.rsi/closed.png b/Resources/Textures/Structures/Wallmounts/hydrant.rsi/closed.png new file mode 100644 index 00000000000..149353076dd Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/hydrant.rsi/closed.png differ diff --git a/Resources/Textures/Structures/Wallmounts/hydrant.rsi/frame.png b/Resources/Textures/Structures/Wallmounts/hydrant.rsi/frame.png new file mode 100644 index 00000000000..504c12ecac9 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/hydrant.rsi/frame.png differ diff --git a/Resources/Textures/Structures/Wallmounts/hydrant.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/hydrant.rsi/meta.json new file mode 100644 index 00000000000..b03441e364e --- /dev/null +++ b/Resources/Textures/Structures/Wallmounts/hydrant.rsi/meta.json @@ -0,0 +1,20 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "By Peptide90 for Nuclear14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "closed" + }, + { + "name": "frame" + }, + { + "name": "open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Wallmounts/hydrant.rsi/open.png b/Resources/Textures/Structures/Wallmounts/hydrant.rsi/open.png new file mode 100644 index 00000000000..dcb8f484ab9 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/hydrant.rsi/open.png differ diff --git a/Resources/Textures/Structures/Wallmounts/hydrantold.rsi/closed.png b/Resources/Textures/Structures/Wallmounts/hydrantold.rsi/closed.png new file mode 100644 index 00000000000..8e44b2457ae Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/hydrantold.rsi/closed.png differ diff --git a/Resources/Textures/Structures/Wallmounts/hydrantold.rsi/frame.png b/Resources/Textures/Structures/Wallmounts/hydrantold.rsi/frame.png new file mode 100644 index 00000000000..c345cb331c0 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/hydrantold.rsi/frame.png differ diff --git a/Resources/Textures/Structures/Wallmounts/hydrantold.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/hydrantold.rsi/meta.json new file mode 100644 index 00000000000..b03441e364e --- /dev/null +++ b/Resources/Textures/Structures/Wallmounts/hydrantold.rsi/meta.json @@ -0,0 +1,20 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "By Peptide90 for Nuclear14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "closed" + }, + { + "name": "frame" + }, + { + "name": "open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Wallmounts/hydrantold.rsi/open.png b/Resources/Textures/Structures/Wallmounts/hydrantold.rsi/open.png new file mode 100644 index 00000000000..eef4e7e0900 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/hydrantold.rsi/open.png differ diff --git a/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/base.png b/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/base.png new file mode 100644 index 00000000000..d4424fe40d1 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/base.png differ diff --git a/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/broken.png b/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/broken.png new file mode 100644 index 00000000000..cd939620239 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/broken.png differ diff --git a/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/burned.png b/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/burned.png new file mode 100644 index 00000000000..7bf5ea45553 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/burned.png differ diff --git a/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/empty.png b/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/empty.png new file mode 100644 index 00000000000..91070999ae9 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/empty.png differ diff --git a/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/glow.png b/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/glow.png new file mode 100644 index 00000000000..da0b0a35ae3 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/glow.png differ diff --git a/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/meta.json new file mode 100644 index 00000000000..c0849a2dc30 --- /dev/null +++ b/Resources/Textures/Structures/Wallmounts/lightbulbcaged.rsi/meta.json @@ -0,0 +1,31 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from Nukapop13, glow by Peptide90", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base", + "directions": 4 + }, + { + "name": "glow", + "directions": 4 + }, + { + "name": "broken", + "directions": 4 + }, + { + "name": "empty", + "directions": 4 + }, + { + "name": "burned", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Wallmounts/noticeboard.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/noticeboard.rsi/meta.json index f5d234d91bc..0e9dc64e4bf 100644 --- a/Resources/Textures/Structures/Wallmounts/noticeboard.rsi/meta.json +++ b/Resources/Textures/Structures/Wallmounts/noticeboard.rsi/meta.json @@ -1,32 +1,32 @@ { - "version": 1, - "size": { - "x": 32, - "y": 32 - }, - "copyright": "Taken from Paradise Station from commit https://github.com/ParadiseSS13/Paradise/commit/137338f4dd3cb33124ab3fbd55a4865dd2bdab81", - "license": "CC-BY-SA-3.0", - "states": [ - { - "name": "noticeboard" + "version": 1, + "size": { + "x": 32, + "y": 32 }, - { - "name": "notice-0" - }, - { - "name": "notice-1" - }, - { - "name": "notice-2" - }, - { - "name": "notice-3" - }, - { - "name": "notice-4" - }, - { - "name": "notice-5" - } - ] -} + "copyright": "created by maxxorion", + "license": "CC-BY-SA-3.0", + "states": [ + { + "name": "noticeboard" + }, + { + "name": "notice-0" + }, + { + "name": "notice-1" + }, + { + "name": "notice-2" + }, + { + "name": "notice-3" + }, + { + "name": "notice-4" + }, + { + "name": "notice-5" + } + ] + } \ No newline at end of file diff --git a/Resources/Textures/Structures/Wallmounts/noticeboard.rsi/noticeboard.png b/Resources/Textures/Structures/Wallmounts/noticeboard.rsi/noticeboard.png index 378577afdcc..72e885c223c 100644 Binary files a/Resources/Textures/Structures/Wallmounts/noticeboard.rsi/noticeboard.png and b/Resources/Textures/Structures/Wallmounts/noticeboard.rsi/noticeboard.png differ diff --git a/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/bar.png b/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/bar.png new file mode 100644 index 00000000000..dd58e640056 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/bar.png differ diff --git a/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/clinic.png b/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/clinic.png new file mode 100644 index 00000000000..02b39be4e5b Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/clinic.png differ diff --git a/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/meta.json new file mode 100644 index 00000000000..0fea77ce0a4 --- /dev/null +++ b/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/meta.json @@ -0,0 +1,48 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from MS13 at commit https://github.com/Mojave-Sun/mojave-sun-13/commit/6fde5cf64e584727ce66d92d81352801670e172f", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "open_on", + "delays": [ + [ + 1, + 1, + 1, + 1 + ] + ] + }, + { + "name": "rent" + }, + { + "name": "bar" + }, + { + "name": "clinic" + }, + { + "name": "open" + }, + { + "name": "open_bar" + }, + { + "name": "open_bar_on", + "delays": [ + [ + 1, + 1, + 1, + 1 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open.png b/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open.png new file mode 100644 index 00000000000..c0253e54007 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open.png differ diff --git a/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open_bar.png b/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open_bar.png new file mode 100644 index 00000000000..a3db90816fc Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open_bar.png differ diff --git a/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open_bar_on.png b/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open_bar_on.png new file mode 100644 index 00000000000..56beba50d3a Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open_bar_on.png differ diff --git a/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open_on.png b/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open_on.png new file mode 100644 index 00000000000..47ca73a0f61 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/open_on.png differ diff --git a/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/rent.png b/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/rent.png new file mode 100644 index 00000000000..640ed4326d2 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/signs_32x32.rsi/rent.png differ diff --git a/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/bazaar_on.png b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/bazaar_on.png new file mode 100644 index 00000000000..d7907e3a419 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/bazaar_on.png differ diff --git a/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/hotel.png b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/hotel.png new file mode 100644 index 00000000000..a1a6d5a5188 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/hotel.png differ diff --git a/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/meta.json new file mode 100644 index 00000000000..bedad018567 --- /dev/null +++ b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from MS13 at commit https://github.com/Mojave-Sun/mojave-sun-13/commit/6fde5cf64e584727ce66d92d81352801670e172f", + "size": { + "x": 64, + "y": 32 + }, + "states": [ + { + "name": "workers" + }, + { + "name": "bazaar_on" + }, + { + "name": "hotel" + }, + { + "name": "private" + }, + { + "name": "we_open_open" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/private.png b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/private.png new file mode 100644 index 00000000000..2e18cb26129 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/private.png differ diff --git a/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/we_open_open.png b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/we_open_open.png new file mode 100644 index 00000000000..adf35156db8 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/we_open_open.png differ diff --git a/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/workers.png b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/workers.png new file mode 100644 index 00000000000..d55d828b608 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/signs_64x32.rsi/workers.png differ diff --git a/Resources/Textures/Structures/Wallmounts/vdu.rsi/VDU.png b/Resources/Textures/Structures/Wallmounts/vdu.rsi/VDU.png new file mode 100644 index 00000000000..8cbddf529a4 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/vdu.rsi/VDU.png differ diff --git a/Resources/Textures/Structures/Wallmounts/vdu.rsi/keyboard.png b/Resources/Textures/Structures/Wallmounts/vdu.rsi/keyboard.png new file mode 100644 index 00000000000..8f27951d9c3 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/vdu.rsi/keyboard.png differ diff --git a/Resources/Textures/Structures/Wallmounts/vdu.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/vdu.rsi/meta.json new file mode 100644 index 00000000000..5dc376d26e3 --- /dev/null +++ b/Resources/Textures/Structures/Wallmounts/vdu.rsi/meta.json @@ -0,0 +1,57 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "By PatoGrone for . Screen by Peptide90", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "keyboard", + "directions": 4 + }, + { + "name": "screen", + "directions": 4, + "delays": [ + [ + 1, + 1, + 1, + 1, + 1, + 1 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1 + ], + [ + 1, + 1, + 1, + 1, + 1, + 1 + ] + ] + }, + { + "name": "VDU", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Structures/Wallmounts/vdu.rsi/screen.png b/Resources/Textures/Structures/Wallmounts/vdu.rsi/screen.png new file mode 100644 index 00000000000..889dc80bab3 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/vdu.rsi/screen.png differ diff --git a/Resources/Textures/Structures/Wallmounts/walldecor.rsi/calendar.png b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/calendar.png new file mode 100644 index 00000000000..a95bb7036f3 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/calendar.png differ diff --git a/Resources/Textures/Structures/Wallmounts/walldecor.rsi/calendar_blank.png b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/calendar_blank.png new file mode 100644 index 00000000000..107156f2872 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/calendar_blank.png differ diff --git a/Resources/Textures/Structures/Wallmounts/walldecor.rsi/clock.png b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/clock.png new file mode 100644 index 00000000000..70928a39f04 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/clock.png differ diff --git a/Resources/Textures/Structures/Wallmounts/walldecor.rsi/cross.png b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/cross.png new file mode 100644 index 00000000000..3ad7875071d Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/cross.png differ diff --git a/Resources/Textures/Structures/Wallmounts/walldecor.rsi/danger_sign.png b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/danger_sign.png new file mode 100644 index 00000000000..f9d715025ff Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/danger_sign.png differ diff --git a/Resources/Textures/Structures/Wallmounts/walldecor.rsi/exit.png b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/exit.png new file mode 100644 index 00000000000..75f3b5a5d07 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/exit.png differ diff --git a/Resources/Textures/Structures/Wallmounts/walldecor.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/meta.json new file mode 100644 index 00000000000..64c4a8da70f --- /dev/null +++ b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/meta.json @@ -0,0 +1,44 @@ +{ + "version": 1, + "license": "CC-BY-NC-SA-3.0", + "copyright": "Taken from mojave-sun-13 at https://github.com/Mojave-Sun/mojave-sun-13/blob/be7a9f24f2bca68f07e4b0b086dc03a3eb9f971f/mojave/icons/structure/wall_decor.dmi. Wanted goose poster by maxxorion", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "clock", + "directions": 4 + }, + { + "name": "calendar" + }, + { + "name": "calendar_blank" + }, + { + "name": "notice_sign" + }, + { + "name": "danger_sign" + }, + { + "name": "wanted_poster" + }, + { + "name": "cross" + }, + { + "name": "exit", + "directions": 4 + }, + { + "name": "wallscreen", + "directions": 4 + }, + { + "name": "wanted_poster_goose" + } + ] +} diff --git a/Resources/Textures/Structures/Wallmounts/walldecor.rsi/notice_sign.png b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/notice_sign.png new file mode 100644 index 00000000000..2fca121f942 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/notice_sign.png differ diff --git a/Resources/Textures/Structures/Wallmounts/walldecor.rsi/wallscreen.png b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/wallscreen.png new file mode 100644 index 00000000000..e18cc520dc2 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/wallscreen.png differ diff --git a/Resources/Textures/Structures/Wallmounts/walldecor.rsi/wanted_poster.png b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/wanted_poster.png new file mode 100644 index 00000000000..9a5d3cb8486 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/wanted_poster.png differ diff --git a/Resources/Textures/Structures/Wallmounts/walldecor.rsi/wanted_poster_goose.png b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/wanted_poster_goose.png new file mode 100644 index 00000000000..afde4b545fa Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/walldecor.rsi/wanted_poster_goose.png differ diff --git a/Resources/Textures/WhiteDream/BloodCult/actions.rsi/gauntlet_echo.png b/Resources/Textures/WhiteDream/BloodCult/actions.rsi/gauntlet_echo.png new file mode 100644 index 00000000000..4987c8a2ad3 Binary files /dev/null and b/Resources/Textures/WhiteDream/BloodCult/actions.rsi/gauntlet_echo.png differ diff --git a/Resources/Textures/WhiteDream/BloodCult/actions.rsi/meta.json b/Resources/Textures/WhiteDream/BloodCult/actions.rsi/meta.json index 57c5432a245..5c9211cca39 100644 --- a/Resources/Textures/WhiteDream/BloodCult/actions.rsi/meta.json +++ b/Resources/Textures/WhiteDream/BloodCult/actions.rsi/meta.json @@ -40,6 +40,9 @@ { "name": "final_reckoning" }, + { + "name": "gauntlet_echo" + }, { "name": "gone" }, diff --git a/Resources/keybinds.yml b/Resources/keybinds.yml index 87df8c1eec8..68b84c7fe2e 100644 --- a/Resources/keybinds.yml +++ b/Resources/keybinds.yml @@ -468,9 +468,6 @@ binds: - function: OpenDecalSpawnWindow type: State key: F8 -- function: OpenScoreboardWindow - type: State - key: F9 - function: OpenSandboxWindow type: State key: B