diff --git a/Content.Client/Chat/Managers/ChatManager.cs b/Content.Client/Chat/Managers/ChatManager.cs index 67b5f5202f..12b91bd4be 100644 --- a/Content.Client/Chat/Managers/ChatManager.cs +++ b/Content.Client/Chat/Managers/ChatManager.cs @@ -2,7 +2,9 @@ using Content.Client.Administration.Managers; using Content.Client.Ghost; using Content.Shared.Administration; using Content.Shared.Chat; +using Content.Shared.White.Cult; using Robust.Client.Console; +using Robust.Client.Player; using Robust.Shared.Utility; namespace Content.Client.Chat.Managers @@ -12,6 +14,9 @@ namespace Content.Client.Chat.Managers [Dependency] private readonly IClientConsoleHost _consoleHost = default!; [Dependency] private readonly IClientAdminManager _adminMgr = default!; [Dependency] private readonly IEntitySystemManager _systems = default!; + [Dependency] private readonly IEntityManager _entities = default!; + [Dependency] private readonly IPlayerManager _player = default!; + private ISawmill _sawmill = default!; @@ -47,6 +52,12 @@ namespace Content.Client.Chat.Managers _consoleHost.ExecuteCommand($"me \"{CommandParsing.Escape(str)}\""); break; + case ChatSelectChannel.Cult: + var localEnt = _player.LocalPlayer != null ? _player.LocalPlayer.ControlledEntity : null; + if (_entities.TryGetComponent(localEnt, out CultistComponent? comp)) + _consoleHost.ExecuteCommand($"csay \"{CommandParsing.Escape(str)}\""); + break; + case ChatSelectChannel.Dead: if (_systems.GetEntitySystemOrNull() is {IsGhost: true}) goto case ChatSelectChannel.Local; diff --git a/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs b/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs index 409b7b886a..1ecde269a4 100644 --- a/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs +++ b/Content.Client/UserInterface/Systems/Chat/ChatUIController.cs @@ -20,6 +20,8 @@ using Content.Shared.Input; using Content.Shared.Radio; using Content.Shared.White; using Content.Shared.White.Utils; +using Content.Shared.White.Cult; +using Content.Shared.White.Cult.Systems; using Robust.Client.Graphics; using Robust.Client.Input; using Robust.Client.Player; @@ -50,6 +52,8 @@ public sealed class ChatUIController : UIController [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly IReplayRecordingManager _replayRecording = default!; [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] private readonly CultistWordGeneratorManager _wordGenerator = default!; + [UISystemDependency] private readonly ExamineSystem? _examine = default; [UISystemDependency] private readonly GhostSystem? _ghost = default; @@ -69,7 +73,8 @@ public sealed class ChatUIController : UIController {SharedChatSystem.EmotesAltPrefix, ChatSelectChannel.Emotes}, {SharedChatSystem.AdminPrefix, ChatSelectChannel.Admin}, {SharedChatSystem.RadioCommonPrefix, ChatSelectChannel.Radio}, - {SharedChatSystem.DeadPrefix, ChatSelectChannel.Dead} + {SharedChatSystem.DeadPrefix, ChatSelectChannel.Dead}, + {SharedChatSystem.CultPrefix, ChatSelectChannel.Cult}, //WD EDIT }; public static readonly Dictionary ChannelPrefixes = new() @@ -82,7 +87,9 @@ public sealed class ChatUIController : UIController {ChatSelectChannel.Emotes, SharedChatSystem.EmotesPrefix}, {ChatSelectChannel.Admin, SharedChatSystem.AdminPrefix}, {ChatSelectChannel.Radio, SharedChatSystem.RadioCommonPrefix}, - {ChatSelectChannel.Dead, SharedChatSystem.DeadPrefix} + {ChatSelectChannel.Dead, SharedChatSystem.DeadPrefix}, + {ChatSelectChannel.Cult, SharedChatSystem.CultPrefix} // WD EDIT + }; /// @@ -195,6 +202,9 @@ public sealed class ChatUIController : UIController _input.SetInputCommand(ContentKeyFunctions.FocusAdminChat, InputCmdHandler.FromDelegate(_ => FocusChannel(ChatSelectChannel.Admin))); + _input.SetInputCommand(ContentKeyFunctions.FocusCultChat, + InputCmdHandler.FromDelegate(_ => FocusChannel(ChatSelectChannel.Cult))); + _input.SetInputCommand(ContentKeyFunctions.FocusRadio, InputCmdHandler.FromDelegate(_ => FocusChannel(ChatSelectChannel.Radio))); @@ -210,11 +220,22 @@ public sealed class ChatUIController : UIController _input.SetInputCommand(ContentKeyFunctions.CycleChatChannelBackward, InputCmdHandler.FromDelegate(_ => CycleChatChannel(false))); + // WD EDIT + SubscribeLocalEvent(OnUpdateCultState); + // WD EDIT END + var gameplayStateLoad = UIManager.GetUIController(); gameplayStateLoad.OnScreenLoad += OnScreenLoad; gameplayStateLoad.OnScreenUnload += OnScreenUnload; } + // WD EDIT + private void OnUpdateCultState(EventCultistComponentState ev) + { + UpdateChannelPermissions(); + } + // WD EDIT END + public void OnScreenLoad() { SetMainChat(true); @@ -512,6 +533,15 @@ public sealed class ChatUIController : UIController CanSendChannels |= ChatSelectChannel.Admin; } + // WD EDIT + var localEnt = _player.LocalPlayer != null ? _player.LocalPlayer.ControlledEntity : null; + if (_entities.TryGetComponent(localEnt, out CultistComponent? comp)) + { + FilterableChannels |= ChatChannel.Cult; + CanSendChannels |= ChatSelectChannel.Cult; + } + // WD EDIT END + SelectableChannels = CanSendChannels; // Necessary so that we always have a channel to fall back to. @@ -801,6 +831,13 @@ public sealed class ChatUIController : UIController AddSpeechBubble(msg, SpeechBubble.SpeechType.Whisper); break; + // WD EDIT + case ChatChannel.Cult: + msg.Message = _wordGenerator.GenerateText(msg.Message); + AddSpeechBubble(msg, SpeechBubble.SpeechType.Whisper); + break; + // WD EDIT END + case ChatChannel.Dead: if (_ghost is not {IsGhost: true}) break; diff --git a/Content.Client/UserInterface/Systems/Chat/Controls/ChannelFilterPopup.xaml.cs b/Content.Client/UserInterface/Systems/Chat/Controls/ChannelFilterPopup.xaml.cs index 4a3b9aa568..185e48aea2 100644 --- a/Content.Client/UserInterface/Systems/Chat/Controls/ChannelFilterPopup.xaml.cs +++ b/Content.Client/UserInterface/Systems/Chat/Controls/ChannelFilterPopup.xaml.cs @@ -22,7 +22,8 @@ public sealed partial class ChannelFilterPopup : Popup ChatChannel.Admin, ChatChannel.AdminAlert, ChatChannel.AdminChat, - ChatChannel.Server + ChatChannel.Server, + ChatChannel.Cult // WD EDIT }; private readonly Dictionary _filterStates = new(); diff --git a/Content.Client/UserInterface/Systems/Chat/Controls/ChannelSelectorButton.cs b/Content.Client/UserInterface/Systems/Chat/Controls/ChannelSelectorButton.cs index 25cf851c7b..455f70918b 100644 --- a/Content.Client/UserInterface/Systems/Chat/Controls/ChannelSelectorButton.cs +++ b/Content.Client/UserInterface/Systems/Chat/Controls/ChannelSelectorButton.cs @@ -64,6 +64,7 @@ public sealed class ChannelSelectorButton : ChatPopupButton Color.LightSkyBlue, ChatSelectChannel.Dead => Color.MediumPurple, ChatSelectChannel.Admin => Color.HotPink, + ChatSelectChannel.Cult => Color.DarkRed, _ => Color.DarkGray }; } diff --git a/Content.Client/UserInterface/Systems/Chat/Controls/ChannelSelectorPopup.cs b/Content.Client/UserInterface/Systems/Chat/Controls/ChannelSelectorPopup.cs index 0852c10bb9..f9ff9f07fa 100644 --- a/Content.Client/UserInterface/Systems/Chat/Controls/ChannelSelectorPopup.cs +++ b/Content.Client/UserInterface/Systems/Chat/Controls/ChannelSelectorPopup.cs @@ -16,7 +16,8 @@ public sealed class ChannelSelectorPopup : Popup ChatSelectChannel.LOOC, ChatSelectChannel.OOC, ChatSelectChannel.Dead, - ChatSelectChannel.Admin + ChatSelectChannel.Admin, + ChatSelectChannel.Cult // WD EDIT // NOTE: Console is not in there and it can never be permanently selected. // You can, however, still submit commands as console by prefixing with /. }; diff --git a/Content.Client/_White/Cult/CultHudOverlay.cs b/Content.Client/_White/Cult/CultHudOverlay.cs new file mode 100644 index 0000000000..a0230e5148 --- /dev/null +++ b/Content.Client/_White/Cult/CultHudOverlay.cs @@ -0,0 +1,86 @@ +using System.Numerics; +using Content.Shared.Humanoid; +using Content.Shared.White.Cult; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Shared.Enums; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Client._White.Cult; + +public sealed class CultHudOverlay : Overlay +{ + + private readonly IEntityManager _entityManager; + private readonly SharedTransformSystem _transformSystem; + + public override OverlaySpace Space => OverlaySpace.WorldSpaceBelowFOV; + + + + protected override void Draw(in OverlayDrawArgs args) + { + var handle = args.WorldHandle; + var rotation = args.Viewport.Eye?.Rotation ?? Angle.Zero; + var spriteQuery = _entityManager.GetEntityQuery(); + var xformQuery = _entityManager.GetEntityQuery(); + + const float scale = 1f; + var scaleMatrix = Matrix3.CreateScale(new Vector2(scale, scale)); + var rotationMatrix = Matrix3.CreateRotation(-rotation); + + foreach (var cultist in _entityManager.EntityQuery(true)) + { + if (!xformQuery.TryGetComponent(cultist.Owner, out var xform) || + xform.MapID != args.MapId) + { + continue; + } + + var worldPosition = _transformSystem.GetWorldPosition(xform); + var worldMatrix = Matrix3.CreateTranslation(worldPosition); + + Matrix3.Multiply(scaleMatrix, worldMatrix, out var scaledWorld); + Matrix3.Multiply(rotationMatrix, scaledWorld, out var matty); + + handle.SetTransform(matty); + + var cultistIcon = new SpriteSpecifier.Rsi(new ResPath("/Textures/White/Cult/cult_hud.rsi"), "cult"); + var iconTexture = _entityManager.EntitySysManager.GetEntitySystem().Frame0(cultistIcon); + + float yOffset; + float xOffset; + + if (spriteQuery.TryGetComponent(cultist.Owner, out var sprite)) + { + yOffset = sprite.Bounds.Height - 10f; //sprite.Bounds.Height + 7f; + xOffset = sprite.Bounds.Width - 40f; //sprite.Bounds.Width + 7f; + } + else + { + yOffset = 1f; + xOffset = 1f; + } + + // Position above the entity (we've already applied the matrix transform to the entity itself) + // Offset by the texture size for every do_after we have. + var position = new Vector2(xOffset / EyeManager.PixelsPerMeter, yOffset / EyeManager.PixelsPerMeter); + + // Draw the underlying bar texture + if (sprite != null && !sprite.ContainerOccluded) + { + handle.DrawTexture(iconTexture, position); + } + } + + handle.UseShader(null); + handle.SetTransform(Matrix3.Identity); + } + + public CultHudOverlay(IEntityManager entityManager) + { + _entityManager = entityManager; + _transformSystem = _entityManager.EntitySysManager.GetEntitySystem(); + } +} diff --git a/Content.Client/_White/Cult/CultPentagramSystem.cs b/Content.Client/_White/Cult/CultPentagramSystem.cs new file mode 100644 index 0000000000..525efa4c37 --- /dev/null +++ b/Content.Client/_White/Cult/CultPentagramSystem.cs @@ -0,0 +1,65 @@ +using System.Numerics; +using Robust.Client.GameObjects; +using Robust.Shared.Random; +using Robust.Shared.Utility; + +namespace Content.Client._White.Cult; + +public sealed class CultPentagramSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _robustRandom = default!; + + private const string Rsi = "White/Cult/pentagram.rsi"; + private static readonly string[] States = + { + "halo1", + "halo2", + "halo3", + "halo4", + "halo5", + "halo6" + }; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(PentagramAdded); + SubscribeLocalEvent(PentagramRemoved); + } + + private void PentagramAdded(EntityUid uid, PentagramComponent component, ComponentStartup args) + { + if (!TryComp(uid, out var sprite)) + return; + + if (sprite.LayerMapTryGet(PentagramKey.Key, out var _)) + return; + + var adj = sprite.Bounds.Height / 2 + ((1.0f/32) * 10.0f); + + var randomIndex = _robustRandom.Next(0, States.Length); + + var randomState = States[randomIndex]; + + var layer = sprite.AddLayer(new SpriteSpecifier.Rsi(new ResPath(Rsi), randomState)); + + sprite.LayerMapSet(PentagramKey.Key, layer); + sprite.LayerSetOffset(layer, new Vector2(0.0f, adj)); + } + + private void PentagramRemoved(EntityUid uid, PentagramComponent component, ComponentShutdown args) + { + if (!TryComp(uid, out var sprite)) + return; + + if (!sprite.LayerMapTryGet(PentagramKey.Key, out var layer)) + return; + + sprite.RemoveLayer(layer); + } + + private enum PentagramKey + { + Key + } +} diff --git a/Content.Client/_White/Cult/Items/VeilShifter/VeilVisualizerSystem.cs b/Content.Client/_White/Cult/Items/VeilShifter/VeilVisualizerSystem.cs new file mode 100644 index 0000000000..b7157399e5 --- /dev/null +++ b/Content.Client/_White/Cult/Items/VeilShifter/VeilVisualizerSystem.cs @@ -0,0 +1,40 @@ +using Content.Shared.White.Cult.Items; +using Robust.Client.GameObjects; + +namespace Content.Client._White.Cult.Items.VeilShifter; + +public sealed class VeilVisualizerSystem : VisualizerSystem +{ + private const string StateOn = "icon-on"; + private const string StateOff = "icon"; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInit); + } + + private void OnInit(EntityUid uid, VoidTeleportComponent component, ComponentInit args) + { + if (!TryComp(uid, out var sprite) + || !AppearanceSystem.TryGetData(uid, VeilVisuals.Activated, out var activated)) + return; + + sprite.LayerSetState(VeilVisualsLayers.Activated, activated ? StateOn : StateOff); + } + + protected override void OnAppearanceChange(EntityUid uid, VeilVisualsComponent component, ref AppearanceChangeEvent args) + { + if (args.Sprite == null + || !AppearanceSystem.TryGetData(uid, VeilVisuals.Activated, out var activated)) + return; + + args.Sprite.LayerSetState(VeilVisualsLayers.Activated, activated ? component.StateOn : component.StateOff); + } +} + +public enum VeilVisualsLayers : byte +{ + Activated +} diff --git a/Content.Client/_White/Cult/Items/VeilShifter/VeilVisualsComponent.cs b/Content.Client/_White/Cult/Items/VeilShifter/VeilVisualsComponent.cs new file mode 100644 index 0000000000..212c538aaf --- /dev/null +++ b/Content.Client/_White/Cult/Items/VeilShifter/VeilVisualsComponent.cs @@ -0,0 +1,13 @@ +namespace Content.Client._White.Cult.Items.VeilShifter; + +[RegisterComponent] +public sealed partial class VeilVisualsComponent : Component +{ + [DataField("stateOn")] + [ViewVariables(VVAccess.ReadWrite)] + public string? StateOn = "icon-on"; + + [DataField("stateOff")] + [ViewVariables(VVAccess.ReadWrite)] + public string? StateOff = "icon"; +} diff --git a/Content.Client/_White/Cult/Items/VoidTorch/VoidTorchVisualizerSystem.cs b/Content.Client/_White/Cult/Items/VoidTorch/VoidTorchVisualizerSystem.cs new file mode 100644 index 0000000000..fd23962e38 --- /dev/null +++ b/Content.Client/_White/Cult/Items/VoidTorch/VoidTorchVisualizerSystem.cs @@ -0,0 +1,23 @@ +using Content.Shared.White.Cult.Items; +using Robust.Client.GameObjects; + +namespace Content.Client._White.Cult.Items.VoidTorch; + +public sealed class VoidTorchVisualizerSystem : VisualizerSystem +{ + protected override void OnAppearanceChange(EntityUid uid, VoidTorchVisualsComponent component, ref AppearanceChangeEvent args) + { + base.OnAppearanceChange(uid, component, ref args); + + if (args.Sprite == null + || !AppearanceSystem.TryGetData(uid, VoidTorchVisuals.Activated, out var activated)) + return; + + args.Sprite.LayerSetState(VoidTorchVisualsLayers.Activated, activated ? component.StateOn : component.StateOff); + } +} + +public enum VoidTorchVisualsLayers : byte +{ + Activated +} diff --git a/Content.Client/_White/Cult/Items/VoidTorch/VoidTorchVisualsComponent.cs b/Content.Client/_White/Cult/Items/VoidTorch/VoidTorchVisualsComponent.cs new file mode 100644 index 0000000000..12df66913a --- /dev/null +++ b/Content.Client/_White/Cult/Items/VoidTorch/VoidTorchVisualsComponent.cs @@ -0,0 +1,13 @@ +namespace Content.Client._White.Cult.Items.VoidTorch; + +[RegisterComponent] +public sealed partial class VoidTorchVisualsComponent : Component +{ + [DataField("stateOn")] + [ViewVariables(VVAccess.ReadWrite)] + public string? StateOn = "icon-on"; + + [DataField("stateOff")] + [ViewVariables(VVAccess.ReadWrite)] + public string? StateOff = "icon"; +} diff --git a/Content.Client/_White/Cult/Narsie/NarsieLayer.cs b/Content.Client/_White/Cult/Narsie/NarsieLayer.cs new file mode 100644 index 0000000000..6607d586ba --- /dev/null +++ b/Content.Client/_White/Cult/Narsie/NarsieLayer.cs @@ -0,0 +1,6 @@ +namespace Content.Client._White.Cult; + +public enum NarsieLayer +{ + Default +} diff --git a/Content.Client/_White/Cult/Narsie/NarsieVisualizer.cs b/Content.Client/_White/Cult/Narsie/NarsieVisualizer.cs new file mode 100644 index 0000000000..08dcb9efc9 --- /dev/null +++ b/Content.Client/_White/Cult/Narsie/NarsieVisualizer.cs @@ -0,0 +1,69 @@ +using Content.Shared.White.Cult; +using Robust.Client.Animations; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; + +namespace Content.Client._White.Cult; + +public sealed class NarsieVisualizer : VisualizerSystem +{ + [Dependency] private readonly AnimationPlayerSystem _animationSystem = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnAnimationCompleted); + } + + private void OnAnimationCompleted(EntityUid uid, NarsieComponent component, AnimationCompletedEvent args) + { + SetDefaultState(Comp(uid)); + } + + protected override void OnAppearanceChange(EntityUid uid, NarsieComponent component, ref AppearanceChangeEvent args) + { + base.OnAppearanceChange(uid, component, ref args); + + if(args.Sprite == null) return; + + if (!args.AppearanceData.TryGetValue(NarsieVisualState.VisualState, out var narsieVisualsObject) || narsieVisualsObject is not NarsieVisuals narsieVisual) + return; + + switch (narsieVisual) + { + case NarsieVisuals.Spawning: + PlaySpawnAnimation(uid); + break; + case NarsieVisuals.Spawned: + if(_animationSystem.HasRunningAnimation(uid, "narsie_spawn")) break; + SetDefaultState(args.Sprite); + break; + } + + } + + private void PlaySpawnAnimation(EntityUid uid) + { + _animationSystem.Play(uid, NarsieSpawnAnimation, "narsie_spawn"); + } + + private void SetDefaultState(SpriteComponent component) + { + component.LayerSetVisible(NarsieLayer.Default, true); + component.LayerSetState(NarsieLayer.Default, new RSI.StateId("narsie")); + component.LayerSetAutoAnimated(NarsieLayer.Default, true); + } + + private static readonly Animation NarsieSpawnAnimation = new() + { + Length = TimeSpan.FromSeconds(3.5), + AnimationTracks = + { + new AnimationTrackSpriteFlick() + { + LayerKey = NarsieLayer.Default, + KeyFrames = {new AnimationTrackSpriteFlick.KeyFrame(new RSI.StateId("narsie_spawn_anim"), 0f)} + } + } + }; +} diff --git a/Content.Client/_White/Cult/PentagramComponent.cs b/Content.Client/_White/Cult/PentagramComponent.cs new file mode 100644 index 0000000000..cb879769ee --- /dev/null +++ b/Content.Client/_White/Cult/PentagramComponent.cs @@ -0,0 +1,9 @@ +using Content.Shared.White.Cult.Pentagram; +using Robust.Shared.GameStates; + +namespace Content.Client._White.Cult; + +[NetworkedComponent, RegisterComponent] +public sealed partial class PentagramComponent : SharedPentagramComponent +{ +} diff --git a/Content.Client/_White/Cult/Pylon/PylonVisualizerSystem.cs b/Content.Client/_White/Cult/Pylon/PylonVisualizerSystem.cs new file mode 100644 index 0000000000..86e13af532 --- /dev/null +++ b/Content.Client/_White/Cult/Pylon/PylonVisualizerSystem.cs @@ -0,0 +1,40 @@ +using Content.Shared.White.Cult.Pylon; +using Robust.Client.GameObjects; + +namespace Content.Client._White.Cult.Pylon; + +public sealed class PylonVisualizerSystem : VisualizerSystem +{ + private const string StateOn = "pylon"; + private const string StateOff = "pylon_off"; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInit); + } + + private void OnInit(EntityUid uid, SharedPylonComponent component, ComponentInit args) + { + if (!TryComp(uid, out var sprite) + || !AppearanceSystem.TryGetData(uid, PylonVisualsLayers.Activated, out var activated)) + return; + + sprite.LayerSetState(PylonVisualsLayers.Activated, activated ? StateOn : StateOff); + } + + protected override void OnAppearanceChange(EntityUid uid, PylonVisualsComponent component, ref AppearanceChangeEvent args) + { + if (args.Sprite == null + || !AppearanceSystem.TryGetData(uid, PylonVisuals.Activated, out var activated)) + return; + + args.Sprite.LayerSetState(PylonVisualsLayers.Activated, activated ? component.StateOn : component.StateOff); + } +} + +public enum PylonVisualsLayers : byte +{ + Activated +} diff --git a/Content.Client/_White/Cult/Pylon/PylonVisualsComponent.cs b/Content.Client/_White/Cult/Pylon/PylonVisualsComponent.cs new file mode 100644 index 0000000000..942e623989 --- /dev/null +++ b/Content.Client/_White/Cult/Pylon/PylonVisualsComponent.cs @@ -0,0 +1,15 @@ +using Content.Client.Storage.Visualizers; + +namespace Content.Client._White.Cult.Pylon; + +[RegisterComponent] +public sealed partial class PylonVisualsComponent : Component +{ + [DataField("stateOn")] + [ViewVariables(VVAccess.ReadWrite)] + public string? StateOn = "pylon"; + + [DataField("stateOff")] + [ViewVariables(VVAccess.ReadWrite)] + public string? StateOff = "pylon_off"; +} diff --git a/Content.Client/_White/Cult/ShowCultHudSystem.cs b/Content.Client/_White/Cult/ShowCultHudSystem.cs new file mode 100644 index 0000000000..6bc503f6c7 --- /dev/null +++ b/Content.Client/_White/Cult/ShowCultHudSystem.cs @@ -0,0 +1,48 @@ +using Content.Shared.White.Cult; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Client.Player; + +namespace Content.Client._White.Cult; + +public sealed class ShowCultHudSystem : EntitySystem +{ + [Dependency] private readonly IPlayerManager _player = default!; + [Dependency] private readonly IOverlayManager _overlayManager = default!; + + private Overlay _overlay = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnComponentInit); + SubscribeLocalEvent(OnComponentRemoved); + SubscribeLocalEvent(OnPlayerAttached); + SubscribeLocalEvent(OnPlayerDetached); + + _overlay = new CultHudOverlay(EntityManager); + } + + private void OnComponentInit(EntityUid uid, CultistComponent component, ComponentInit args) + { + if (_player.LocalPlayer?.ControlledEntity != uid) return; + _overlayManager.AddOverlay(_overlay); + + } + + private void OnComponentRemoved(EntityUid uid, CultistComponent component, ComponentRemove args) + { + if (_player.LocalPlayer?.ControlledEntity != uid) return; + _overlayManager.RemoveOverlay(_overlay); + + } + + private void OnPlayerAttached(EntityUid uid, CultistComponent component, PlayerAttachedEvent args) + { + _overlayManager.AddOverlay(_overlay); + } + + private void OnPlayerDetached(EntityUid uid, CultistComponent component, PlayerDetachedEvent args) + { + _overlayManager.RemoveOverlay(_overlay); + } +} diff --git a/Content.Client/_White/Cult/Structures/CultCraftStructureVisualizerSystem.cs b/Content.Client/_White/Cult/Structures/CultCraftStructureVisualizerSystem.cs new file mode 100644 index 0000000000..4acf0fc5df --- /dev/null +++ b/Content.Client/_White/Cult/Structures/CultCraftStructureVisualizerSystem.cs @@ -0,0 +1,23 @@ +using Content.Shared.White.Cult; +using Robust.Client.GameObjects; + +namespace Content.Client._White.Cult.Structures; + +public sealed class CultCraftStructureVisualizerSystem : VisualizerSystem +{ + protected override void OnAppearanceChange(EntityUid uid, CultCraftStructureVisualsComponent component, ref AppearanceChangeEvent args) + { + base.OnAppearanceChange(uid, component, ref args); + + if (args.Sprite == null + || !AppearanceSystem.TryGetData(uid, CultCraftStructureVisuals.Activated, out var activated)) + return; + + args.Sprite.LayerSetState(CultCraftStructureVisualsLayers.Activated, activated ? component.StateOn : component.StateOff); + } +} + +public enum CultCraftStructureVisualsLayers : byte +{ + Activated +} diff --git a/Content.Client/_White/Cult/Structures/CultCraftStructureVisualsComponent.cs b/Content.Client/_White/Cult/Structures/CultCraftStructureVisualsComponent.cs new file mode 100644 index 0000000000..37f7ac5852 --- /dev/null +++ b/Content.Client/_White/Cult/Structures/CultCraftStructureVisualsComponent.cs @@ -0,0 +1,13 @@ +namespace Content.Client._White.Cult.Structures; + +[RegisterComponent] +public sealed partial class CultCraftStructureVisualsComponent : Component +{ + [DataField("stateOn")] + [ViewVariables(VVAccess.ReadWrite)] + public string? StateOn = "icon"; + + [DataField("stateOff")] + [ViewVariables(VVAccess.ReadWrite)] + public string? StateOff = "icon-off"; +} diff --git a/Content.Client/_White/Cult/UI/Altar/AltarBUI.cs b/Content.Client/_White/Cult/UI/Altar/AltarBUI.cs new file mode 100644 index 0000000000..f807d02447 --- /dev/null +++ b/Content.Client/_White/Cult/UI/Altar/AltarBUI.cs @@ -0,0 +1,56 @@ +using Content.Shared.White.Cult.UI; +using JetBrains.Annotations; +using Robust.Client.GameObjects; +using Robust.Shared.Prototypes; +using Robust.Shared.Timing; + +namespace Content.Client._White.Cult.UI.Altar; + +[UsedImplicitly] +public sealed class AltarBUI : BoundUserInterface +{ + private AltarWindow? _window; + + public AltarBUI(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + IoCManager.InjectDependencies(this); + } + + protected override void Open() + { + base.Open(); + + _window = new AltarWindow(); + + _window.OnClose += Close; + _window.OnItemSelected += OnItemSelected; + } + + private void OnItemSelected(string item) + { + var evt = new AltarBuyRequest(item); + SendMessage(evt); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (!disposing) return; + _window?.Dispose(); + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + + if (state is AltarListingBUIState listingState) + { + _window?.SetListing(listingState.Items); + } + else if(state is AltarTimerBUIState timerState) + { + _window?.SetTimer(timerState.NextTimeUse); + } + } +} diff --git a/Content.Client/_White/Cult/UI/Altar/AltarListingControl.xaml b/Content.Client/_White/Cult/UI/Altar/AltarListingControl.xaml new file mode 100644 index 0000000000..0435387520 --- /dev/null +++ b/Content.Client/_White/Cult/UI/Altar/AltarListingControl.xaml @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/Content.Client/_White/Cult/UI/Altar/AltarListingControl.xaml.cs b/Content.Client/_White/Cult/UI/Altar/AltarListingControl.xaml.cs new file mode 100644 index 0000000000..d41bfea007 --- /dev/null +++ b/Content.Client/_White/Cult/UI/Altar/AltarListingControl.xaml.cs @@ -0,0 +1,21 @@ +using Robust.Client.AutoGenerated; +using Robust.Client.Graphics; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.XAML; +using Robust.Shared.Prototypes; + +namespace Content.Client._White.Cult.UI.Altar; + +[GenerateTypedNameReferences] +public partial class AltarListingControl : Control +{ + public AltarListingControl(EntityPrototype prototype, Texture icon, Action? clickAction) + { + RobustXamlLoader.Load(this); + + ToolTip = $"{prototype.Name}\n{prototype.Description}"; + + BuyListingButton.TextureNormal = icon; + BuyListingButton.OnButtonDown += _ => clickAction?.Invoke(prototype.ID); + } +} diff --git a/Content.Client/_White/Cult/UI/Altar/AltarWindow.xaml b/Content.Client/_White/Cult/UI/Altar/AltarWindow.xaml new file mode 100644 index 0000000000..715cfdfd93 --- /dev/null +++ b/Content.Client/_White/Cult/UI/Altar/AltarWindow.xaml @@ -0,0 +1,7 @@ + + + + + diff --git a/Content.Client/_White/Cult/UI/Altar/AltarWindow.xaml.cs b/Content.Client/_White/Cult/UI/Altar/AltarWindow.xaml.cs new file mode 100644 index 0000000000..9cd397ec79 --- /dev/null +++ b/Content.Client/_White/Cult/UI/Altar/AltarWindow.xaml.cs @@ -0,0 +1,92 @@ +using Content.Client.GameTicking.Managers; +using Content.Client.TextScreen; +using Robust.Client.AutoGenerated; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.CustomControls; +using Robust.Client.UserInterface.XAML; +using Robust.Shared.Prototypes; +using Robust.Shared.Timing; + +namespace Content.Client._White.Cult.UI.Altar; + +[GenerateTypedNameReferences] +public partial class AltarWindow : DefaultWindow +{ + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly SpriteSystem _spriteSystem = default!; + [Dependency] private readonly PrototypeManager _prototypeManager = default!; + + + public event Action? OnItemSelected; + private TimeSpan? _nextTimeUse = null!; + + private List _listingControls = new(); + + public AltarWindow() + { + RobustXamlLoader.Load(this); + IoCManager.InjectDependencies(this); + } + + protected override void FrameUpdate(FrameEventArgs args) + { + base.FrameUpdate(args); + + if (_nextTimeUse == null) return; + + var remainingTime = _nextTimeUse.Value - _gameTiming.CurTime; + + if (remainingTime.TotalSeconds < 0) + { + remainingTime = TimeSpan.Zero; + } + + var remainingTimeText = TextScreenSystem.TimeToString(remainingTime); + + TimerLabel.SetMessage(remainingTimeText); + } + + public void SetListing(List prototypes) + { + foreach (var prototypeId in prototypes) + { + var prototype = _prototypeManager.Index(prototypeId); + if(prototype == null) return; + var prototypeIcon = _spriteSystem.GetPrototypeIcon(prototype).Default; + AddListingControl(prototype); + } + } + + public void AddListingControl(EntityPrototype entityPrototype) + { + var icon = _spriteSystem.GetPrototypeIcon(entityPrototype).Default; + var control = new AltarListingControl(entityPrototype, icon, OnItemSelected); + + ListingContainer.AddChild(control); + _listingControls.Add(control); + } + + public void SetTimer(TimeSpan? timer) + { + _nextTimeUse = timer; + + if (timer == null) + { + TimerLabel.SetMessage("Алтарь готов к использованию"); + SetListingButtonsState(true); + return; + } + + SetListingButtonsState(false); + } + + private void SetListingButtonsState(bool enabled) + { + foreach (var listingControl in _listingControls) + { + listingControl.BuyListingButton.Disabled = enabled; + } + } +} diff --git a/Content.Client/_White/Cult/UI/ConstructSelector/ConstructSelectorBui.cs b/Content.Client/_White/Cult/UI/ConstructSelector/ConstructSelectorBui.cs new file mode 100644 index 0000000000..b68538fe11 --- /dev/null +++ b/Content.Client/_White/Cult/UI/ConstructSelector/ConstructSelectorBui.cs @@ -0,0 +1,52 @@ +using System.Linq; +using Content.Client._White.UserInterface.Radial; +using Content.Shared.White.Cult.Runes.Components; +using Content.Shared.White.Cult.UI; +using Robust.Client.GameObjects; +using Robust.Shared.Prototypes; + +namespace Content.Client._White.Cult.UI.ConstructSelector; + +public sealed class ConstructSelectorBui : BoundUserInterface +{ + + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IEntityManager _entityManager = default!; + private SpriteSystem _spriteSystem = default!; + + private bool _selected; + + public ConstructSelectorBui(EntityUid owner, Enum uiKey) : base(owner, uiKey) { } + + protected override void Open() + { + base.Open(); + + _spriteSystem = _entityManager.EntitySysManager.GetEntitySystem(); + var shellComponent = _entityManager.GetComponent(Owner); + + var shellSelector = new RadialContainer(); + + shellSelector.Closed += () => + { + if(_selected) return; + + SendMessage(new ConstructFormSelectedEvent(shellComponent.ConstructForms.First())); + }; + + foreach (var form in shellComponent.ConstructForms) + { + var formPrototype = _prototypeManager.Index(form); + var button = shellSelector.AddButton(formPrototype.Name, _spriteSystem.GetPrototypeIcon(formPrototype).Default); + + button.Controller.OnPressed += _ => + { + _selected = true; + SendMessage(new ConstructFormSelectedEvent(form)); + shellSelector.Close(); + }; + } + + shellSelector.OpenCentered(); + } +} diff --git a/Content.Client/_White/Cult/UI/CultistFactory/CultistFactoryBUI.cs b/Content.Client/_White/Cult/UI/CultistFactory/CultistFactoryBUI.cs new file mode 100644 index 0000000000..9bc346fdb7 --- /dev/null +++ b/Content.Client/_White/Cult/UI/CultistFactory/CultistFactoryBUI.cs @@ -0,0 +1,89 @@ +using Content.Client._White.UserInterface.Radial; +using Content.Shared.White.Cult; +using Content.Shared.White.Cult.UI; +using Robust.Client.GameObjects; +using Robust.Shared.Prototypes; + +namespace Content.Client._White.Cult.UI.CultistFactory; + +public sealed class CultistFactoryBUI : BoundUserInterface +{ + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + private RadialContainer? _radialContainer; + + private bool _updated = false; + + public CultistFactoryBUI(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + IoCManager.InjectDependencies(this); + } + private void ResetUI() + { + _radialContainer?.Close(); + _radialContainer = null; + _updated = false; + } + + protected override void Open() + { + base.Open(); + + if (_radialContainer != null) + ResetUI(); + + _radialContainer = new RadialContainer(); + + if (State != null) + UpdateState(State); + } + + private void PopulateRadial(IReadOnlyCollection ids) + { + foreach (var id in ids) + { + if (!_prototypeManager.TryIndex(id, out var prototype)) + return; + + if (_radialContainer == null) + continue; + + var button = _radialContainer.AddButton(prototype.Name, prototype.Icon); + button.Controller.OnPressed += _ => + { + Select(id); + }; + } + } + + private void Select(string id) + { + SendMessage(new CultistFactoryItemSelectedMessage(id)); + ResetUI(); + Close(); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + ResetUI(); + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + + if (_updated) + return; + + if (state is CultistFactoryBUIState newState) + { + PopulateRadial(newState.Ids); + } + + if (_radialContainer == null) + return; + + _radialContainer?.OpenAttachedLocalPlayer(); + _updated = true; + } +} diff --git a/Content.Client/_White/Cult/UI/ListViewSelector/ListViewSelectorBUI.cs b/Content.Client/_White/Cult/UI/ListViewSelector/ListViewSelectorBUI.cs new file mode 100644 index 0000000000..93955018f8 --- /dev/null +++ b/Content.Client/_White/Cult/UI/ListViewSelector/ListViewSelectorBUI.cs @@ -0,0 +1,54 @@ +using Content.Shared.White.Cult.UI; +using Robust.Client.GameObjects; +using Robust.Shared.Prototypes; + +namespace Content.Client._White.Cult.UI.ListViewSelector; + + +public sealed class ListViewSelectorBUI : BoundUserInterface +{ + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + + private ListViewSelectorWindow? _window; + + public ListViewSelectorBUI(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + IoCManager.InjectDependencies(this); + } + + protected override void Open() + { + base.Open(); + + _window = new ListViewSelectorWindow(_prototypeManager); + _window.OpenCentered(); + _window.OnClose += Close; + + _window.ItemSelected += (item, index) => + { + var msg = new ListViewItemSelectedMessage(item, index); + SendMessage(msg); + }; + + if(State != null) + UpdateState(State); + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + + if (state is ListViewBUIState newState) + { + _window?.PopulateList(newState.Items, newState.IsUsingPrototypes); + } + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (!disposing) + return; + _window?.Close(); + } +} diff --git a/Content.Client/_White/Cult/UI/ListViewSelector/ListViewSelectorWindow.xaml b/Content.Client/_White/Cult/UI/ListViewSelector/ListViewSelectorWindow.xaml new file mode 100644 index 0000000000..70a1f48416 --- /dev/null +++ b/Content.Client/_White/Cult/UI/ListViewSelector/ListViewSelectorWindow.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/Content.Client/_White/Cult/UI/ListViewSelector/ListViewSelectorWindow.xaml.cs b/Content.Client/_White/Cult/UI/ListViewSelector/ListViewSelectorWindow.xaml.cs new file mode 100644 index 0000000000..8c3a514a8a --- /dev/null +++ b/Content.Client/_White/Cult/UI/ListViewSelector/ListViewSelectorWindow.xaml.cs @@ -0,0 +1,45 @@ +using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.CustomControls; +using Robust.Client.UserInterface.XAML; +using Robust.Shared.Prototypes; + +namespace Content.Client._White.Cult.UI.ListViewSelector; + +[GenerateTypedNameReferences] +public partial class ListViewSelectorWindow : DefaultWindow +{ + public Action? ItemSelected; + + private readonly IPrototypeManager _prototypeManager; + public ListViewSelectorWindow(IPrototypeManager prototypeManager) + { + RobustXamlLoader.Load(this); + _prototypeManager = prototypeManager; + } + + public void PopulateList(List items, bool isPrototypes) + { + ItemsContainer.RemoveAllChildren(); + + foreach (var item in items) + { + var button = new Button(); + var itemName = Loc.GetString($"ent-{item}"); + + if (isPrototypes) + { + if(_prototypeManager.TryIndex(item, out var itemPrototype)) + { + itemName = itemPrototype.Name; + } + } + + button.Text = itemName; + + button.OnPressed += _ => ItemSelected?.Invoke(item, items.IndexOf(item)); + + ItemsContainer.AddChild(button); + } + } +} diff --git a/Content.Client/_White/Cult/UI/NameSelector/NameSelectorBUI.cs b/Content.Client/_White/Cult/UI/NameSelector/NameSelectorBUI.cs new file mode 100644 index 0000000000..13ce8ed2b4 --- /dev/null +++ b/Content.Client/_White/Cult/UI/NameSelector/NameSelectorBUI.cs @@ -0,0 +1,45 @@ +using Content.Shared.White.Cult.UI; +using Robust.Client.GameObjects; + +namespace Content.Client._White.Cult.UI.NameSelector; + +public sealed class NameSelectorBUI : BoundUserInterface +{ + public NameSelectorBUI(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + } + + private NameSelectorWindow? _window; + + protected override void Open() + { + base.Open(); + + _window = new(); + _window.OpenCentered(); + _window.OnNameChange += OnNameSelected; + _window.OnClose += Close; + } + + private void OnNameSelected(string name) + { + SendMessage(new NameSelectorMessage(name)); + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + if (state is not NameSelectorBuiState cast || _window == null) + { + return; + } + + _window.UpdateState(cast.Name); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + _window?.Close(); + } +} diff --git a/Content.Client/_White/Cult/UI/NameSelector/NameSelectorWindow.xaml b/Content.Client/_White/Cult/UI/NameSelector/NameSelectorWindow.xaml new file mode 100644 index 0000000000..34003c46aa --- /dev/null +++ b/Content.Client/_White/Cult/UI/NameSelector/NameSelectorWindow.xaml @@ -0,0 +1,9 @@ + + + Dead = ChatChannel.Dead, + Cult = ChatChannel.Cult, + /// /// Admin chat /// diff --git a/Content.Shared/Chat/SharedChatSystem.cs b/Content.Shared/Chat/SharedChatSystem.cs index 092b6a99a5..d86053c43d 100644 --- a/Content.Shared/Chat/SharedChatSystem.cs +++ b/Content.Shared/Chat/SharedChatSystem.cs @@ -21,6 +21,7 @@ public abstract class SharedChatSystem : EntitySystem public const char AdminPrefix = ']'; public const char WhisperPrefix = ','; public const char DefaultChannelKey = 'h'; + public const char CultPrefix = '^'; // WD EDIT [ValidatePrototypeId] public const string CommonChannel = "Common"; diff --git a/Content.Shared/Doors/DoorEvents.cs b/Content.Shared/Doors/DoorEvents.cs index 08a2c8b18b..283236aaf1 100644 --- a/Content.Shared/Doors/DoorEvents.cs +++ b/Content.Shared/Doors/DoorEvents.cs @@ -37,10 +37,12 @@ namespace Content.Shared.Doors public sealed class BeforeDoorClosedEvent : CancellableEntityEventArgs { public bool PerformCollisionCheck; + public EntityUid? User; // WD ADDED - public BeforeDoorClosedEvent(bool performCollisionCheck) + public BeforeDoorClosedEvent(bool performCollisionCheck, EntityUid? user) { PerformCollisionCheck = performCollisionCheck; + User = user; // WD ADDED } } diff --git a/Content.Shared/Doors/Systems/SharedDoorSystem.cs b/Content.Shared/Doors/Systems/SharedDoorSystem.cs index 74ce120cd0..7f4d03825f 100644 --- a/Content.Shared/Doors/Systems/SharedDoorSystem.cs +++ b/Content.Shared/Doors/Systems/SharedDoorSystem.cs @@ -329,7 +329,7 @@ public abstract class SharedDoorSystem : EntitySystem if (door.State is DoorState.Welded or DoorState.Closed) return false; - var ev = new BeforeDoorClosedEvent(door.PerformCollisionCheck); + var ev = new BeforeDoorClosedEvent(door.PerformCollisionCheck, user); //WD EDIT RaiseLocalEvent(uid, ev, false); if (ev.Cancelled) return false; diff --git a/Content.Shared/Implants/SharedImplanterSystem.cs b/Content.Shared/Implants/SharedImplanterSystem.cs index 36a31bac1d..31cc40b3a0 100644 --- a/Content.Shared/Implants/SharedImplanterSystem.cs +++ b/Content.Shared/Implants/SharedImplanterSystem.cs @@ -14,6 +14,31 @@ using Robust.Shared.Utility; namespace Content.Shared.Implants; +//WD EDIT START +public class SubdermalImplantInserted +{ + public EntityUid Entity; + public SubdermalImplantComponent Component; + public SubdermalImplantInserted(EntityUid entity, SubdermalImplantComponent component) + { + Entity = entity; + Component = component; + } +} + +public class SubdermalImplantRemoved +{ + public EntityUid Entity; + public SubdermalImplantComponent Component; + public SubdermalImplantRemoved(EntityUid entity, SubdermalImplantComponent component) + { + Entity = entity; + Component = component; + } +} + +//WD EDIT END + public abstract class SharedImplanterSystem : EntitySystem { [Dependency] private readonly SharedContainerSystem _container = default!; @@ -68,6 +93,7 @@ public abstract class SharedImplanterSystem : EntitySystem implantComp.ImplantedEntity = target; implantContainer.OccludesLight = false; _container.Insert(implant.Value, implantContainer); + RaiseLocalEvent(new SubdermalImplantInserted(implantComp.ImplantedEntity!.Value, implantComp)); //WD EDIT if (component.CurrentMode == ImplanterToggleMode.Inject && !component.ImplantOnly) DrawMode(implanter, component); @@ -142,6 +168,7 @@ public abstract class SharedImplanterSystem : EntitySystem } _container.Remove(implant, implantContainer); + RaiseLocalEvent(new SubdermalImplantRemoved(implantComp.ImplantedEntity!.Value, implantComp)); // WD EDIT implantComp.ImplantedEntity = null; _container.Insert(implant, implanterContainer); permanentFound = implantComp.Permanent; diff --git a/Content.Shared/Implants/SharedSubdermalImplantSystem.cs b/Content.Shared/Implants/SharedSubdermalImplantSystem.cs index 830d2270aa..8c3aa00561 100644 --- a/Content.Shared/Implants/SharedSubdermalImplantSystem.cs +++ b/Content.Shared/Implants/SharedSubdermalImplantSystem.cs @@ -124,6 +124,7 @@ public abstract class SharedSubdermalImplantSystem : EntitySystem var implantContainer = implantedComp.ImplantContainer; component.ImplantedEntity = target; + RaiseLocalEvent(new SubdermalImplantInserted(target, component)); _container.Insert(implant, implantContainer); } diff --git a/Content.Shared/Input/ContentKeyFunctions.cs b/Content.Shared/Input/ContentKeyFunctions.cs index 474eadf428..02ab921ed7 100644 --- a/Content.Shared/Input/ContentKeyFunctions.cs +++ b/Content.Shared/Input/ContentKeyFunctions.cs @@ -15,6 +15,7 @@ namespace Content.Shared.Input public static readonly BoundKeyFunction FocusLocalChat = "FocusLocalChatWindow"; public static readonly BoundKeyFunction FocusEmote = "FocusEmote"; public static readonly BoundKeyFunction FocusWhisperChat = "FocusWhisperChatWindow"; + public static readonly BoundKeyFunction FocusCultChat = "FocusCultChatWindow"; public static readonly BoundKeyFunction FocusRadio = "FocusRadioWindow"; public static readonly BoundKeyFunction FocusLOOC = "FocusLOOCWindow"; public static readonly BoundKeyFunction FocusOOC = "FocusOOCWindow"; diff --git a/Content.Shared/IoC/SharedContentIoC.cs b/Content.Shared/IoC/SharedContentIoC.cs index c20cdbc111..4a7a59dfcc 100644 --- a/Content.Shared/IoC/SharedContentIoC.cs +++ b/Content.Shared/IoC/SharedContentIoC.cs @@ -1,5 +1,6 @@ using Content.Shared.Humanoid.Markings; using Content.Shared.Localizations; +using Content.Shared.White.Cult.Systems; namespace Content.Shared.IoC { @@ -9,6 +10,10 @@ namespace Content.Shared.IoC { IoCManager.Register(); IoCManager.Register(); + + // WD EDIT + IoCManager.Register(); + // WD EDIT END } } } diff --git a/Content.Shared/Stunnable/SharedStunSystem.cs b/Content.Shared/Stunnable/SharedStunSystem.cs index c447f8c8bc..83d3e2f90d 100644 --- a/Content.Shared/Stunnable/SharedStunSystem.cs +++ b/Content.Shared/Stunnable/SharedStunSystem.cs @@ -252,6 +252,13 @@ public abstract class SharedStunSystem : EntitySystem args.Modifier *= KnockDownModifier; } + //WD EDIT START + public bool IsParalyzed(EntityUid uid) + { + return HasComp(uid) || HasComp(uid); + } + //WD EDIT END + #region Attempt Event Handling private void OnMoveAttempt(EntityUid uid, StunnedComponent stunned, UpdateCanMoveEvent args) diff --git a/Content.Shared/_White/Cult/Actions/CultActions.cs b/Content.Shared/_White/Cult/Actions/CultActions.cs new file mode 100644 index 0000000000..7d36d0be6e --- /dev/null +++ b/Content.Shared/_White/Cult/Actions/CultActions.cs @@ -0,0 +1,26 @@ +using Content.Shared.Actions; + +namespace Content.Shared.White.Cult.Actions; + +public sealed partial class CultTwistedConstructionActionEvent : EntityTargetActionEvent +{ +} + +public sealed partial class CultSummonDaggerActionEvent : InstantActionEvent { } + +public sealed partial class CultStunTargetActionEvent : EntityTargetActionEvent { } + +public sealed partial class CultTeleportTargetActionEvent : EntityTargetActionEvent {} + +public sealed partial class CultElectromagneticPulseTargetActionEvent : EntityTargetActionEvent {} + +public sealed partial class CultShadowShacklesTargetActionEvent : EntityTargetActionEvent {} + +public sealed partial class CultSummonCombatEquipmentTargetActionEvent : EntityTargetActionEvent {} + +public sealed partial class CultConcealPresenceWorldActionEvent : WorldTargetActionEvent {} + +public sealed partial class CultBloodRitesInstantActionEvent : InstantActionEvent {} + + + diff --git a/Content.Shared/_White/Cult/Components/ConstructShellComponent.cs b/Content.Shared/_White/Cult/Components/ConstructShellComponent.cs new file mode 100644 index 0000000000..3503828c1c --- /dev/null +++ b/Content.Shared/_White/Cult/Components/ConstructShellComponent.cs @@ -0,0 +1,17 @@ +using Content.Shared.Containers.ItemSlots; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; + +namespace Content.Shared.White.Cult.Runes.Components; + +[RegisterComponent] +public sealed partial class ConstructShellComponent : Component +{ + [DataField("shardSlot", required: true)] + public ItemSlot ShardSlot = new(); + + public readonly string ShardSlotId = "Shard"; + + [DataField("constructForms", customTypeSerializer: typeof(PrototypeIdListSerializer))] + public List ConstructForms = new(); +} diff --git a/Content.Shared/_White/Cult/Components/CultBuffComponent.cs b/Content.Shared/_White/Cult/Components/CultBuffComponent.cs new file mode 100644 index 0000000000..feaa002faa --- /dev/null +++ b/Content.Shared/_White/Cult/Components/CultBuffComponent.cs @@ -0,0 +1,12 @@ +namespace Content.Shared.White.Cult.Components; + +[RegisterComponent] +public sealed partial class CultBuffComponent : Component +{ + [ViewVariables(VVAccess.ReadOnly), DataField("buffTime")] + public TimeSpan BuffTime = TimeSpan.FromSeconds(60); + + public static float NearbyTilesBuffRadius = 1f; + + public static readonly TimeSpan CultTileBuffTime = TimeSpan.FromSeconds(5); +} diff --git a/Content.Shared/_White/Cult/Components/CultEmpowerComponent.cs b/Content.Shared/_White/Cult/Components/CultEmpowerComponent.cs new file mode 100644 index 0000000000..ed2b7dc319 --- /dev/null +++ b/Content.Shared/_White/Cult/Components/CultEmpowerComponent.cs @@ -0,0 +1,34 @@ +using System.Diagnostics.CodeAnalysis; +using Content.Shared.Actions.ActionTypes; +using Robust.Shared.GameStates; +using Robust.Shared.Serialization; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; + +namespace Content.Shared.White.Cult.Components; + +[RegisterComponent, NetworkedComponent] +public sealed partial class CultEmpowerComponent : Component +{ + [DataField("isRune")] + public bool IsRune; + + public int MaxAllowedCultistActions = 4; + public int MinRequiredCultistActions = 1; +} + +[Serializable, NetSerializable] +public sealed class CultEmpowerSelectedBuiMessage : BoundUserInterfaceMessage +{ + public ActionType ActionType; + + public CultEmpowerSelectedBuiMessage(ActionType actionType) + { + ActionType = actionType; + } +} + +[Serializable, NetSerializable] +public enum CultEmpowerUiKey : byte +{ + Key +} diff --git a/Content.Shared/_White/Cult/Components/CultistComponent.cs b/Content.Shared/_White/Cult/Components/CultistComponent.cs new file mode 100644 index 0000000000..5cb65252da --- /dev/null +++ b/Content.Shared/_White/Cult/Components/CultistComponent.cs @@ -0,0 +1,98 @@ +using System.Threading; +using Content.Shared.Actions.ActionTypes; +using Content.Shared.White.Cult.Actions; +using Content.Shared.Whitelist; +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Utility; + +namespace Content.Shared.White.Cult; + +/// +/// This is used for tagging a mob as a cultist. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class CultistComponent : Component +{ + [DataField("greetSound", customTypeSerializer: typeof(SoundSpecifierTypeSerializer))] + public SoundSpecifier? CultistGreetSound = new SoundPathSpecifier("/Audio/CultSounds/fart.ogg"); + + [ViewVariables(VVAccess.ReadWrite), DataField("holyConvertTime")] + public float HolyConvertTime = 15f; + + public CancellationTokenSource? HolyConvertToken; + + [NonSerialized] + public List SelectedEmpowers = new(); + + public static InstantAction SummonCultDaggerAction = new() + { + UseDelay = TimeSpan.FromSeconds(200), + DisplayName = "Summon cult dagger.", + Description = "Summons a ritual dagger.", + Icon = new SpriteSpecifier.Rsi(new ResPath("/Textures/White/Cult/interface.rsi"), "icon"), + Event = new CultSummonDaggerActionEvent() + }; + + public static InstantAction BloodRitesAction = new() + { + UseDelay = TimeSpan.FromSeconds(35), + DisplayName = "Blood Rites", + Description = "Sucks blood and heals you", + Icon = new SpriteSpecifier.Rsi(new ResPath("/Textures/White/Cult/actions_cult.rsi"), "blood_rites"), + Event = new CultBloodRitesInstantActionEvent() + }; + + public static EntityTargetAction CultTwistedConstructionAction = new() + { + UseDelay = TimeSpan.FromSeconds(50), + DisplayName = "Twisted Construction", + Description = "A sinister spell that is used to turn metal into runic metal.", + Icon = new SpriteSpecifier.Texture(new ResPath("Objects/Materials/Sheets/metal.rsi/steel.png")), + Event = new CultTwistedConstructionActionEvent() + }; + + public static EntityTargetAction CultTeleportAction = new() + { + UseDelay = TimeSpan.FromSeconds(30), + DisplayName = "Teleport", + CanTargetSelf = true, + DeselectOnMiss = true, + Repeat = false, + Description = "A useful spell that teleports cultists to a chosen destination", + Icon = new SpriteSpecifier.Rsi(new ResPath("/Textures/White/Cult/actions_cult.rsi"), "teleport"), + Event = new CultTeleportTargetActionEvent(), + Whitelist = new EntityWhitelist + { + Components = new[] + { + "HumanoidAppearance", "Cultist" + } + } + }; + + public static EntityTargetAction CultSummonCombatEquipmentAction = new() + { + UseDelay = TimeSpan.FromSeconds(300), + DisplayName = "Summon combat equipment", + CanTargetSelf = true, + DeselectOnMiss = true, + Repeat = false, + Description = "A crucial spell that enables you to summon a full set of combat gear", + Icon = new SpriteSpecifier.Rsi(new ResPath("/Textures/White/Cult/actions_cult.rsi"), "armor"), + Event = new CultSummonCombatEquipmentTargetActionEvent(), + Whitelist = new EntityWhitelist + { + Components = new[] + { + "HumanoidAppearance", "Cultist" + } + } + }; + + public static List CultistActions = new() + { + SummonCultDaggerAction, BloodRitesAction, CultTwistedConstructionAction, CultTeleportAction, + CultSummonCombatEquipmentAction + }; +} diff --git a/Content.Shared/_White/Cult/ConstructsEvents.cs b/Content.Shared/_White/Cult/ConstructsEvents.cs new file mode 100644 index 0000000000..0523cc0db9 --- /dev/null +++ b/Content.Shared/_White/Cult/ConstructsEvents.cs @@ -0,0 +1,42 @@ +using Content.Shared.Actions; + +namespace Content.Shared.White.Cult; + +public sealed partial class ArtificerCreateSoulStoneActionEvent : InstantActionEvent +{ + public string SoulStonePrototypeId => "SoulShardGhost"; +} + +public sealed partial class ArtificerCreateConstructShellActionEvent : InstantActionEvent +{ + public string ShellPrototypeId => "ConstructShell"; +} + +public sealed partial class ArtificerConvertCultistFloorActionEvent : InstantActionEvent +{ + public string FloorTileId => "CultFloor"; +} + +public sealed partial class ArtificerCreateCultistWallActionEvent : InstantActionEvent +{ + public string WallPrototypeId => "WallCult"; +} + +public sealed partial class ArtificerCreateCultistAirlockActionEvent : InstantActionEvent +{ + public string AirlockPrototypeId => "AirlockGlassCult"; +} + +public sealed partial class WraithPhaseActionEvent : InstantActionEvent +{ + [DataField("duration")] + public float Duration = 5f; + + public string StatusEffectId => "Incorporeal"; +} + +public sealed partial class JuggernautCreateWallActionEvent : InstantActionEvent +{ + public string WallPrototypeId = "WallInvisible"; +} + diff --git a/Content.Shared/_White/Cult/CultistFactoryProductionPrototype.cs b/Content.Shared/_White/Cult/CultistFactoryProductionPrototype.cs new file mode 100644 index 0000000000..b693b163d3 --- /dev/null +++ b/Content.Shared/_White/Cult/CultistFactoryProductionPrototype.cs @@ -0,0 +1,26 @@ +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.White.Cult; + +[Prototype("cultistFactoryProduction")] +public sealed class CultistFactoryProductionPrototype : IPrototype +{ + [IdDataField] + public string ID { get; } = default!; + + [DataField("item", required: true)] + public List Item = default!; + + [DataField("icon", required: true)] + public string Icon = default!; + + [DataField("name", required: true)] + public string Name = default!; +} + +[Serializable, NetSerializable] +public enum CultCraftStructureVisuals : byte +{ + Activated +} diff --git a/Content.Shared/_White/Cult/Items/SharedSoulShard.cs b/Content.Shared/_White/Cult/Items/SharedSoulShard.cs new file mode 100644 index 0000000000..c202b6b62b --- /dev/null +++ b/Content.Shared/_White/Cult/Items/SharedSoulShard.cs @@ -0,0 +1,9 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.White.Cult.Items; + +[Serializable, NetSerializable] +public enum SoulShardVisualState : byte +{ + State +} diff --git a/Content.Shared/_White/Cult/Items/TorchWindowSerializables.cs b/Content.Shared/_White/Cult/Items/TorchWindowSerializables.cs new file mode 100644 index 0000000000..608f8f4cc8 --- /dev/null +++ b/Content.Shared/_White/Cult/Items/TorchWindowSerializables.cs @@ -0,0 +1,39 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.White.Cult.Items; + +[NetSerializable, Serializable] +public enum CultTeleporterUiKey +{ + Key, +} + +[Serializable, NetSerializable] +public class TorchWindowItemSelectedMessage : BoundUserInterfaceMessage +{ + public string SelectedItem { get; private set; } + public string EntUid { get; private set; } + + public TorchWindowItemSelectedMessage(string entUid, string selectedItem) + { + SelectedItem = selectedItem; + EntUid = entUid; + } +} + +[Serializable, NetSerializable] +public class TorchWindowBUIState : BoundUserInterfaceState +{ + public Dictionary Items { get; set; } + + public TorchWindowBUIState(Dictionary items) + { + Items = items; + } +} + +[Serializable, NetSerializable] +public enum VoidTorchVisuals : byte +{ + Activated +} diff --git a/Content.Shared/_White/Cult/Items/VoidTeleportComponent.cs b/Content.Shared/_White/Cult/Items/VoidTeleportComponent.cs new file mode 100644 index 0000000000..8ccccf771b --- /dev/null +++ b/Content.Shared/_White/Cult/Items/VoidTeleportComponent.cs @@ -0,0 +1,49 @@ +using System.Threading; +using Robust.Shared.Audio; +using Robust.Shared.Serialization; + +namespace Content.Shared.White.Cult.Items; + +[RegisterComponent] +public sealed partial class VoidTeleportComponent : Component +{ + [ViewVariables(VVAccess.ReadWrite), DataField("usesLeft")] + public int UsesLeft = 4; + + [ViewVariables(VVAccess.ReadWrite), DataField("minRange")] + public int MinRange = 5; + + [ViewVariables(VVAccess.ReadWrite), DataField("maxRange")] + public int MaxRange = 15; + + [ViewVariables(VVAccess.ReadOnly)] + public bool Active = true; + + [ViewVariables(VVAccess.ReadWrite), DataField("cooldown")] + public TimeSpan Cooldown = TimeSpan.FromSeconds(5); + + public CancellationTokenSource Token = new(); + + public TimeSpan TimerDelay = TimeSpan.FromSeconds(0.5); + + [ViewVariables(VVAccess.ReadOnly)] + public TimeSpan NextUse = TimeSpan.Zero; + + [ViewVariables(VVAccess.ReadWrite), DataField("teleportInSound")] + public SoundSpecifier TeleportInSound = new SoundPathSpecifier("/Audio/White/Cult/veilin.ogg"); + + [ViewVariables(VVAccess.ReadWrite), DataField("teleportOutSound")] + public SoundSpecifier TeleportOutSound = new SoundPathSpecifier("/Audio/White/Cult/veilout.ogg"); + + [ViewVariables(VVAccess.ReadOnly), DataField("teleportInEffect")] + public string? TeleportInEffect = "CultTeleportInEffect"; + + [ViewVariables(VVAccess.ReadOnly), DataField("teleportOutEffect")] + public string? TeleportOutEffect = "CultTeleportOutEffect"; +} + +[Serializable, NetSerializable] +public enum VeilVisuals : byte +{ + Activated +} diff --git a/Content.Shared/_White/Cult/Pentagram/SharedPentagramComponent.cs b/Content.Shared/_White/Cult/Pentagram/SharedPentagramComponent.cs new file mode 100644 index 0000000000..96bfb9dde5 --- /dev/null +++ b/Content.Shared/_White/Cult/Pentagram/SharedPentagramComponent.cs @@ -0,0 +1,3 @@ +namespace Content.Shared.White.Cult.Pentagram; + +public abstract partial class SharedPentagramComponent : Component { } diff --git a/Content.Shared/_White/Cult/Pylon/SharedPylonComponent.cs b/Content.Shared/_White/Cult/Pylon/SharedPylonComponent.cs new file mode 100644 index 0000000000..8d69b92d60 --- /dev/null +++ b/Content.Shared/_White/Cult/Pylon/SharedPylonComponent.cs @@ -0,0 +1,73 @@ +using Content.Shared.Damage; +using Robust.Shared.Audio; +using Robust.Shared.Serialization; + +namespace Content.Shared.White.Cult.Pylon; + +[RegisterComponent] +public sealed partial class SharedPylonComponent : Component +{ + [ViewVariables(VVAccess.ReadWrite), DataField("healingAuraRange")] + public float HealingAuraRange = 5f; + + [ViewVariables(VVAccess.ReadOnly), DataField("healingAuraDamage", required: true)] + public DamageSpecifier HealingAuraDamage = default!; + + [ViewVariables(VVAccess.ReadOnly), DataField("burnDamageOnInteract", required: true)] + public DamageSpecifier BurnDamageOnInteract = default!; + + [DataField("burnHandSound")] + public SoundSpecifier BurnHandSound = new SoundPathSpecifier("/Audio/Effects/lightburn.ogg"); + + [ViewVariables(VVAccess.ReadWrite), DataField("healingAuraCooldown")] + public float HealingAuraCooldown = 5f; + + public TimeSpan NextHealTime = TimeSpan.Zero; + + [ViewVariables(VVAccess.ReadOnly), DataField("activated")] + public bool Activated = true; + + [ViewVariables(VVAccess.ReadWrite), DataField("tilesConvertRange")] + public float TileConvertRange = 5f; + + [ViewVariables(VVAccess.ReadOnly), DataField("tileId")] + public string TileId = "CultFloor"; + + [ViewVariables(VVAccess.ReadWrite), DataField("tileConvertCooldown")] + public float TileConvertCooldown = 15f; + + public TimeSpan NextTileConvert = TimeSpan.Zero; + + [DataField("convertTileSound")] + public SoundSpecifier ConvertTileSound = new SoundPathSpecifier("/Audio/White/Cult/curse.ogg"); + + [ViewVariables(VVAccess.ReadOnly), DataField("tileConvertEffect")] + public string TileConvertEffect = "CultTileSpawnEffect"; + + [ViewVariables(VVAccess.ReadOnly), DataField("bleedReductionAmount")] + public float BleedReductionAmount = 1.0f; + + [ViewVariables(VVAccess.ReadOnly), DataField("bloodRefreshAmount")] + public float BloodRefreshAmount = 1.0f; + + [ViewVariables(VVAccess.ReadOnly), DataField("convertEverything")] + public bool ConvertEverything; + + [ViewVariables(VVAccess.ReadOnly), DataField("wallId")] + public string WallId = "WallCult"; + + [ViewVariables(VVAccess.ReadOnly), DataField("airlockId")] + public string AirlockId = "AirlockGlassCult"; + + [DataField("airlockConvertEffect")] + public string AirlockConvertEffect = "CultAirlockGlow"; + + [DataField("wallConvertEffect")] + public string WallConvertEffect = "CultWallGlow"; +} + +[Serializable, NetSerializable] +public enum PylonVisuals : byte +{ + Activated +} diff --git a/Content.Shared/_White/Cult/Runes/CultDrawEvent.cs b/Content.Shared/_White/Cult/Runes/CultDrawEvent.cs new file mode 100644 index 0000000000..9a7426c9ba --- /dev/null +++ b/Content.Shared/_White/Cult/Runes/CultDrawEvent.cs @@ -0,0 +1,10 @@ +using Content.Shared.DoAfter; +using Robust.Shared.Serialization; + +namespace Content.Shared.White.Cult.Runes; + +[Serializable, NetSerializable] +public sealed partial class CultDrawEvent : SimpleDoAfterEvent +{ + public string? Rune; +} diff --git a/Content.Shared/_White/Cult/Runes/CultEraseEvent.cs b/Content.Shared/_White/Cult/Runes/CultEraseEvent.cs new file mode 100644 index 0000000000..6e742b6c8c --- /dev/null +++ b/Content.Shared/_White/Cult/Runes/CultEraseEvent.cs @@ -0,0 +1,10 @@ +using Content.Shared.DoAfter; +using Robust.Shared.Serialization; + +namespace Content.Shared.White.Cult.Runes; + +[Serializable, NetSerializable] +public sealed partial class CultEraseEvent : SimpleDoAfterEvent +{ + public EntityUid TargetEntityId; +} diff --git a/Content.Shared/_White/Cult/Runes/CultRuneInvokeEvent.cs b/Content.Shared/_White/Cult/Runes/CultRuneInvokeEvent.cs new file mode 100644 index 0000000000..2be48a376a --- /dev/null +++ b/Content.Shared/_White/Cult/Runes/CultRuneInvokeEvent.cs @@ -0,0 +1,16 @@ +namespace Content.Shared.White.Cult.Runes; + +public sealed class CultRuneInvokeEvent : EntityEventArgs +{ + public EntityUid Rune { get; set; } + public EntityUid User { get; set; } + public HashSet Cultists { get; } + public bool Result { get; set; } + + public CultRuneInvokeEvent(EntityUid rune, EntityUid user, HashSet cultists) + { + Rune = rune; + User = user; + Cultists = cultists; + } +} diff --git a/Content.Shared/_White/Cult/Runes/SummonNarsieDoAfterEvent.cs b/Content.Shared/_White/Cult/Runes/SummonNarsieDoAfterEvent.cs new file mode 100644 index 0000000000..f9c52bdae5 --- /dev/null +++ b/Content.Shared/_White/Cult/Runes/SummonNarsieDoAfterEvent.cs @@ -0,0 +1,9 @@ +using Content.Shared.DoAfter; +using Robust.Shared.Serialization; + +namespace Content.Shared.White.Cult.Runes; + +[Serializable, NetSerializable] +public sealed partial class SummonNarsieDoAfterEvent : SimpleDoAfterEvent +{ +} diff --git a/Content.Shared/_White/Cult/SharedNarsie.cs b/Content.Shared/_White/Cult/SharedNarsie.cs new file mode 100644 index 0000000000..344131d15f --- /dev/null +++ b/Content.Shared/_White/Cult/SharedNarsie.cs @@ -0,0 +1,24 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Serialization; + +namespace Content.Shared.White.Cult; + +[Serializable, NetSerializable] +public enum NarsieVisualState : byte +{ + VisualState +} + +[Serializable, NetSerializable] +public enum NarsieVisuals : byte +{ + Spawning, + Spawned +} + + +[RegisterComponent, NetworkedComponent] +public partial class NarsieComponent : Component +{ +} + diff --git a/Content.Shared/_White/Cult/Structures/CultAnchorDoAfterEvent.cs b/Content.Shared/_White/Cult/Structures/CultAnchorDoAfterEvent.cs new file mode 100644 index 0000000000..bc13f6ab56 --- /dev/null +++ b/Content.Shared/_White/Cult/Structures/CultAnchorDoAfterEvent.cs @@ -0,0 +1,15 @@ +using Content.Shared.DoAfter; +using Robust.Shared.Serialization; + +namespace Content.Shared.White.Cult.Structures; + +[Serializable, NetSerializable] +public sealed partial class CultAnchorDoAfterEvent : SimpleDoAfterEvent +{ + public bool IsAnchored; + + public CultAnchorDoAfterEvent(bool isAnchored) + { + IsAnchored = isAnchored; + } +} diff --git a/Content.Shared/_White/Cult/Structures/CultStructurePrototype.cs b/Content.Shared/_White/Cult/Structures/CultStructurePrototype.cs new file mode 100644 index 0000000000..c6e9d5fce2 --- /dev/null +++ b/Content.Shared/_White/Cult/Structures/CultStructurePrototype.cs @@ -0,0 +1,21 @@ +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.White.Cult.Structures; + +[Prototype("cultStructure")] +public sealed class CultStructurePrototype : IPrototype +{ + [IdDataField] + public string ID { get; } = default!; + + [DataField("name", required:true)] + public string StructureName = string.Empty; + + [DataField("structureId", customTypeSerializer: typeof(PrototypeIdSerializer), required: true)] + public string StructureId = string.Empty; + + [DataField("icon", required: true)] + public string Icon { get; } = default!; +} diff --git a/Content.Shared/_White/Cult/Structures/CultStructureSerializables.cs b/Content.Shared/_White/Cult/Structures/CultStructureSerializables.cs new file mode 100644 index 0000000000..16fe6a8073 --- /dev/null +++ b/Content.Shared/_White/Cult/Structures/CultStructureSerializables.cs @@ -0,0 +1,9 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.White.Cult.Structures; + +[NetSerializable, Serializable] +public enum CultStructureCraftUiKey : byte +{ + Key, +} diff --git a/Content.Shared/_White/Cult/Systems/CultistSystem.cs b/Content.Shared/_White/Cult/Systems/CultistSystem.cs new file mode 100644 index 0000000000..2760dc0a5e --- /dev/null +++ b/Content.Shared/_White/Cult/Systems/CultistSystem.cs @@ -0,0 +1,34 @@ +namespace Content.Shared.White.Cult.Systems; + +/// +/// Thats need for chat perms update +/// +public sealed class CultistSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnRemove); + } + + private void OnInit(EntityUid uid, CultistComponent component, ComponentStartup args) + { + RaiseLocalEvent(new EventCultistComponentState(true)); + } + + private void OnRemove(EntityUid uid, CultistComponent component, ComponentShutdown args) + { + RaiseLocalEvent(new EventCultistComponentState(false)); + } +} + +public sealed class EventCultistComponentState +{ + public bool Created { get; } + public EventCultistComponentState(bool state) + { + Created = state; + } +} diff --git a/Content.Shared/_White/Cult/Systems/CultistWordGeneratorManager.cs b/Content.Shared/_White/Cult/Systems/CultistWordGeneratorManager.cs new file mode 100644 index 0000000000..74aaab5071 --- /dev/null +++ b/Content.Shared/_White/Cult/Systems/CultistWordGeneratorManager.cs @@ -0,0 +1,55 @@ +using Robust.Shared.Random; + +namespace Content.Shared.White.Cult.Systems; + +/// +/// Words generator for whisper +/// +public sealed class CultistWordGeneratorManager +{ + private const string Vowels = "aeiou"; + private const string Consonants = "bcdfghjklmnpqrstvwxyz"; + + [Dependency] private readonly IRobustRandom _random = default!; + + public string GenerateText(string text) + { + var content = text.Split(' '); + var wordsAmount = content.Length; + + if (wordsAmount <= 0) + return ""; + + for (var i = 0; i < wordsAmount; i++) + { + content[i] = GenerateWord(content[i].Length) + " "; + } + + return string.Join("", content); + } + + private string GenerateWord(int length) + { + if (length <= 0) + throw new ArgumentException("Word length must be greater than zero."); + + var word = ""; + + for (var i = 0; i < length; i++) + { + var isVowel = (i % 2 == 0); // Alternate between vowels and consonants + + var randomChar = GetRandomChar(isVowel ? Vowels : Consonants); + + word += randomChar; + } + + return word; + } + + private char GetRandomChar(string characters) + { + var index = _random.Next(characters.Length); + return characters[index]; + } +} diff --git a/Content.Shared/_White/Cult/UI/AltarBUIState.cs b/Content.Shared/_White/Cult/UI/AltarBUIState.cs new file mode 100644 index 0000000000..643a9f7b0d --- /dev/null +++ b/Content.Shared/_White/Cult/UI/AltarBUIState.cs @@ -0,0 +1,42 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.White.Cult.UI; + +[Serializable, NetSerializable] +public enum CultistAltarUiKey +{ + Key +} + +[Serializable, NetSerializable] +public sealed class AltarListingBUIState : BoundUserInterfaceState +{ + public List Items = new(); + + public AltarListingBUIState(List items) + { + Items = items; + } +} + +[Serializable, NetSerializable] +public sealed class AltarTimerBUIState : BoundUserInterfaceState +{ + public TimeSpan? NextTimeUse; + + public AltarTimerBUIState(TimeSpan? nextTimeUse) + { + NextTimeUse = nextTimeUse; + } +} + +[Serializable, NetSerializable] +public sealed class AltarBuyRequest : BoundUserInterfaceMessage +{ + public string Item = default!; + + public AltarBuyRequest(string item) + { + Item = item; + } +} diff --git a/Content.Shared/_White/Cult/UI/ConstructUi.cs b/Content.Shared/_White/Cult/UI/ConstructUi.cs new file mode 100644 index 0000000000..01d02787c2 --- /dev/null +++ b/Content.Shared/_White/Cult/UI/ConstructUi.cs @@ -0,0 +1,19 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.White.Cult.UI; + +[Serializable, NetSerializable] +public enum SelectConstructUi +{ + Key +} + +[Serializable, NetSerializable] +public class ConstructFormSelectedEvent : BoundUserInterfaceMessage +{ + public string SelectedForm; + public ConstructFormSelectedEvent(string form) + { + SelectedForm = form; + } +} diff --git a/Content.Shared/_White/Cult/UI/CultistFactoryBUIState.cs b/Content.Shared/_White/Cult/UI/CultistFactoryBUIState.cs new file mode 100644 index 0000000000..36f74543e6 --- /dev/null +++ b/Content.Shared/_White/Cult/UI/CultistFactoryBUIState.cs @@ -0,0 +1,25 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.White.Cult.UI; + +[Serializable, NetSerializable] +public class CultistFactoryBUIState : BoundUserInterfaceState +{ + public IReadOnlyCollection Ids { get; set; } + + public CultistFactoryBUIState(IReadOnlyCollection ids) + { + Ids = ids; + } +} + +[Serializable, NetSerializable] +public class CultistFactoryItemSelectedMessage : BoundUserInterfaceMessage +{ + public string Item { get; private set; } + + public CultistFactoryItemSelectedMessage(string item) + { + Item = item; + } +} diff --git a/Content.Shared/_White/Cult/UI/ListViewSelectorBUIState.cs b/Content.Shared/_White/Cult/UI/ListViewSelectorBUIState.cs new file mode 100644 index 0000000000..4fce370707 --- /dev/null +++ b/Content.Shared/_White/Cult/UI/ListViewSelectorBUIState.cs @@ -0,0 +1,36 @@ +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.White.Cult.UI; + +[Serializable, NetSerializable] +public enum ListViewSelectorUiKey +{ + Key +} + +[Serializable, NetSerializable] +public class ListViewBUIState : BoundUserInterfaceState +{ + public List Items { get; set; } + public bool IsUsingPrototypes { get; set; } + + public ListViewBUIState(List items, bool isUsingPrototypes) + { + Items = items; + IsUsingPrototypes = isUsingPrototypes; + } +} + +[Serializable, NetSerializable] +public class ListViewItemSelectedMessage : BoundUserInterfaceMessage +{ + public string SelectedItem { get; private set; } + public int Index { get; private set; } + + public ListViewItemSelectedMessage(string selectedItem, int index) + { + SelectedItem = selectedItem; + Index = index; + } +} diff --git a/Content.Shared/_White/Cult/UI/NameSelector.cs b/Content.Shared/_White/Cult/UI/NameSelector.cs new file mode 100644 index 0000000000..c8ab7a19eb --- /dev/null +++ b/Content.Shared/_White/Cult/UI/NameSelector.cs @@ -0,0 +1,127 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.White.Cult.UI; + + +[Serializable, NetSerializable] +public enum NameSelectorUIKey : byte +{ + Key +} + +[Serializable, NetSerializable] +public sealed class NameSelectorBuiState : BoundUserInterfaceState +{ + public string Name { get; set; } + + public NameSelectorBuiState(string name) + { + Name = name; + } +} + +[Serializable, NetSerializable] +public sealed class NameSelectorMessage : BoundUserInterfaceMessage +{ + public string Name { get; set; } + + public NameSelectorMessage(string name) + { + Name = name; + } +} + + +[NetSerializable, Serializable] +public enum RuneTeleporterUiKey +{ + Key +} + +[Serializable, NetSerializable] +public class TeleportRunesListWindowItemSelectedMessage : BoundUserInterfaceMessage +{ + public int SelectedItem { get; private set; } + public int Index { get; private set; } + + public TeleportRunesListWindowItemSelectedMessage(int selectedItem, int index) + { + SelectedItem = selectedItem; + Index = index; + } +} + +[Serializable, NetSerializable] +public class TeleportRunesListWindowBUIState : BoundUserInterfaceState +{ + public List Items { get; set; } + public List Label { get; set; } + + public TeleportRunesListWindowBUIState(List items, List labels) + { + Items = items; + Label = labels; + } +} + + +[NetSerializable, Serializable] +public enum SummonCultistUiKey +{ + Key +} + +[Serializable, NetSerializable] +public class SummonCultistListWindowItemSelectedMessage : BoundUserInterfaceMessage +{ + public int SelectedItem { get; private set; } + public int Index { get; private set; } + + public SummonCultistListWindowItemSelectedMessage(int selectedItem, int index) + { + SelectedItem = selectedItem; + Index = index; + } +} + +[Serializable, NetSerializable] +public class SummonCultistListWindowBUIState : BoundUserInterfaceState +{ + public List Items { get; set; } + public List Label { get; set; } + + public SummonCultistListWindowBUIState(List items, List labels) + { + Items = items; + Label = labels; + } +} + + +[Serializable, NetSerializable] +public enum SinguloCallUIKey : byte +{ + Key +} + +[Serializable, NetSerializable] +public sealed class SinguloCallBuiState : BoundUserInterfaceState +{ + public string Name { get; set; } + + public SinguloCallBuiState(string name) + { + Name = name; + } +} + +[Serializable, NetSerializable] +public sealed class SinguloCallMessage : BoundUserInterfaceMessage +{ + public string Name { get; set; } + + public SinguloCallMessage(string name) + { + Name = name; + } +} diff --git a/Content.Shared/_White/Cult/UI/TeleportSpellEuiState.cs b/Content.Shared/_White/Cult/UI/TeleportSpellEuiState.cs new file mode 100644 index 0000000000..d4a3429e7b --- /dev/null +++ b/Content.Shared/_White/Cult/UI/TeleportSpellEuiState.cs @@ -0,0 +1,16 @@ +using Content.Shared.Eui; +using Robust.Shared.Serialization; + +namespace Content.Shared.White.Cult.UI; + +[Serializable, NetSerializable] +public sealed class TeleportSpellEuiState : EuiStateBase +{ + public Dictionary Runes = new(); +} + +[Serializable, NetSerializable] +public sealed class TeleportSpellTargetRuneSelected : EuiMessageBase +{ + public int RuneUid; +} diff --git a/Content.Shared/_White/WhiteCVars.cs b/Content.Shared/_White/WhiteCVars.cs new file mode 100644 index 0000000000..e80d889164 --- /dev/null +++ b/Content.Shared/_White/WhiteCVars.cs @@ -0,0 +1,16 @@ +using Robust.Shared.Configuration; + +namespace Content.Shared._White; + +[CVarDefs] +public class WhiteCVars +{ + public static readonly CVarDef CultMinPlayers = + CVarDef.Create("white.cult_min_players", 20, CVar.SERVERONLY | CVar.ARCHIVE); + + public static readonly CVarDef CultMaxStartingPlayers = + CVarDef.Create("white.cult_max_starting_players", 4, CVar.SERVERONLY | CVar.ARCHIVE); + + public static readonly CVarDef CultMinStartingPlayers = + CVarDef.Create("white.cult_min_starting_players", 2, CVar.SERVERONLY | CVar.ARCHIVE); +} diff --git a/Resources/Audio/White/Cult/40sec.ogg b/Resources/Audio/White/Cult/40sec.ogg new file mode 100644 index 0000000000..00416855f6 Binary files /dev/null and b/Resources/Audio/White/Cult/40sec.ogg differ diff --git a/Resources/Audio/White/Cult/blood.ogg b/Resources/Audio/White/Cult/blood.ogg new file mode 100644 index 0000000000..f6024a5ff6 Binary files /dev/null and b/Resources/Audio/White/Cult/blood.ogg differ diff --git a/Resources/Audio/White/Cult/blood_cult_greeting.ogg b/Resources/Audio/White/Cult/blood_cult_greeting.ogg new file mode 100644 index 0000000000..9fa22df51d Binary files /dev/null and b/Resources/Audio/White/Cult/blood_cult_greeting.ogg differ diff --git a/Resources/Audio/White/Cult/butcher.ogg b/Resources/Audio/White/Cult/butcher.ogg new file mode 100644 index 0000000000..2e4a0d2ddc Binary files /dev/null and b/Resources/Audio/White/Cult/butcher.ogg differ diff --git a/Resources/Audio/White/Cult/curse.ogg b/Resources/Audio/White/Cult/curse.ogg new file mode 100644 index 0000000000..c495f0e439 Binary files /dev/null and b/Resources/Audio/White/Cult/curse.ogg differ diff --git a/Resources/Audio/White/Cult/enter_blood.ogg b/Resources/Audio/White/Cult/enter_blood.ogg new file mode 100644 index 0000000000..fb1666e48c Binary files /dev/null and b/Resources/Audio/White/Cult/enter_blood.ogg differ diff --git a/Resources/Audio/White/Cult/finisheddraw.ogg b/Resources/Audio/White/Cult/finisheddraw.ogg new file mode 100644 index 0000000000..bfca2abf2c Binary files /dev/null and b/Resources/Audio/White/Cult/finisheddraw.ogg differ diff --git a/Resources/Audio/White/Cult/magic.ogg b/Resources/Audio/White/Cult/magic.ogg new file mode 100644 index 0000000000..c107743d80 Binary files /dev/null and b/Resources/Audio/White/Cult/magic.ogg differ diff --git a/Resources/Audio/White/Cult/narsie_summoned.ogg b/Resources/Audio/White/Cult/narsie_summoned.ogg new file mode 100644 index 0000000000..fb35af598e Binary files /dev/null and b/Resources/Audio/White/Cult/narsie_summoned.ogg differ diff --git a/Resources/Audio/White/Cult/startdraw.ogg b/Resources/Audio/White/Cult/startdraw.ogg new file mode 100644 index 0000000000..e905409357 Binary files /dev/null and b/Resources/Audio/White/Cult/startdraw.ogg differ diff --git a/Resources/Audio/White/Cult/veilin.ogg b/Resources/Audio/White/Cult/veilin.ogg new file mode 100644 index 0000000000..d14cf85c5d Binary files /dev/null and b/Resources/Audio/White/Cult/veilin.ogg differ diff --git a/Resources/Audio/White/Cult/veilout.ogg b/Resources/Audio/White/Cult/veilout.ogg new file mode 100644 index 0000000000..bf69f3c408 Binary files /dev/null and b/Resources/Audio/White/Cult/veilout.ogg differ diff --git a/Resources/Audio/White/Cult/wraith_phase.ogg b/Resources/Audio/White/Cult/wraith_phase.ogg new file mode 100644 index 0000000000..a5672ed7cc Binary files /dev/null and b/Resources/Audio/White/Cult/wraith_phase.ogg differ diff --git a/Resources/Locale/ru-RU/White/cult.ftl b/Resources/Locale/ru-RU/White/cult.ftl new file mode 100644 index 0000000000..ef296c999b --- /dev/null +++ b/Resources/Locale/ru-RU/White/cult.ftl @@ -0,0 +1,58 @@ +cult-role-greeting = + Вы - член культа! + Ваши цели перечислены в меню персонажа. + В ваш рюкзак были добавлены предметы, которые помогут вам. + И помните - вы не единственный. + Слава Нар`си! + +cult-cond-cultwin = Культ одержал победу +cult-cond-cultfailure = Экипаж уничтожил культ + +cultists-list-start = Культистами были: +cultists-list-name = - [color=White]{ $name }[/color] ([color=gray]{ $user }[/color]) +soul-shard-name = Душа { $soul } +soul-shard-description = В этом камне заключена душа { $soul } +cult-too-much-empowers = Слишком много способностей + +cult-started-drawing-rune-end = Культ начал рисовать руну призыва! +cult-started-erasing-rune = Вы начали стирать руну. +cult-erased-rune = Вы стёрли руну. +not-enough-cultists = Недостаточно культистов. +cult-convert-not-enough-cultists = Невозможно обратить, недостаточно культистов. +cult-sacrifice-not-enough-cultists = Недостаточно культистов для пожертвования. +cult-offering-rune-not-enough = Недостаточно культистов для обращения! Необходимо минимум 2. +cult-buff-already-buffed = Уже усилен! +cult-teleport-rune-not-found = Руна телепортации не обнаружена. +cult-narsie-not-completed-tasks = Выполните все задания. Необходимо минимум 10 культистов. +cult-narsie-summon-not-enough = Необходимо минимум 10 культистов. +cult-narsie-already-summoning = Кто-то уже призывает Нар'си. +cult-narsie-summon-do-after = Вы уже чем-то заняты. +cult-stay-still = Вам нужно стоять на месте! +cult-ritual-started = Культисты приступили к ритуалу! У вас есть 40 секунд, чтобы предотвратить это. +cult-ritual-prevented = Кто-то прервал ритуал. +cult-narsie-summoned = НАР'СИ ВОССТАЛ! +cult-revive-rune-already-alive = Он уже живой. +cult-revive-rune-no-charges = У рун воскрешения кончились заряды. +cult-summon-rune-need-minimum-cultists = Необходимо минимум 2 культиста. +cult-cultists-not-found = Культисты не обнаружены. +cult-blood-boil-rune-need-minimum = Необходимо минимум 3 культиста. +cult-blood-boil-rune-no-targets = Нет целей. +cult-teleport-rune-default-label = безымянная метка +cult-narsie-summon-drawn-position = Культ закончил рисовать руну ритуала разрыва измерений! Координаты: { $posText } +cult-cant-draw-rune = Нельзя рисовать руну в космосе. + +ent-SoulShard = камень душ + .desc = Мистический светящийся осколок. + +ent-SoulShardGhost = камень душ + .desc = Мистический светящийся осколок. + +ent-WetStone = точильный камень + .desc = Используется для заточки кромок стальных инструментов. + +ent-CultSharpener = древний точильный камень + .desc = Используется для заточки кромок стальных инструментов. + +chat-manager-cult-channel-name = Культ +chat-manager-send-cult-chat-wrap-message = \[{ $channelName }\] { $player }: { $message } +hud-chatbox-select-channel-Cult = Культ diff --git a/Resources/Locale/ru-RU/White/stuff.ftl/abilities.ftl b/Resources/Locale/ru-RU/White/stuff.ftl/abilities.ftl new file mode 100644 index 0000000000..6f2533ab9b --- /dev/null +++ b/Resources/Locale/ru-RU/White/stuff.ftl/abilities.ftl @@ -0,0 +1,14 @@ +artificer-create-soul-stone-action-name = Создать камень души. +artificer-create-soul-stone-action-description = Это заклинание проникает в царство Нар-Си, вызывая один из легендарных фрагментов через время и пространство. +artificer-create-construct-shell-action-name = Создать оболочку конструкта. +artificer-create-construct-shell-action-description = Это заклинание проникает в царство Нар-Си, вызывая один из легендарных фрагментов через время и пространство. +artificer-convert-cultist-floor-action-name = Создать культистский пол. +convert-cultist-floor-action-description = Это заклинание возводит под вами культистский пол. +artificer-create-cultist-wall-action-name = Создать стену культа. +artificer-create-cultist-wall-action-description = Это заклинание возводит стену культа. +artificer-create-cultist-airlock-action-name = Создать шлюз культа. +artificer-create-cultist-airlock-action-description = Это заклинание возводит шлюз культа. +wraith-phase-action-name = Фазовый Сдвиг +wraith-phase-action-description = Это заклинание позволяет проходить сквозь стены, подобно бесплотному полету волшебника. +juggernaut-create-wall-action-name = Щит +juggernaut-create-wall-action-description = Это заклинание создает временное, невидимое, силовое поле для защиты себя и союзников от подавляющего огня. diff --git a/Resources/Locale/ru-RU/White/stuff.ftl/archives.ftl b/Resources/Locale/ru-RU/White/stuff.ftl/archives.ftl new file mode 100644 index 0000000000..2819715dbb --- /dev/null +++ b/Resources/Locale/ru-RU/White/stuff.ftl/archives.ftl @@ -0,0 +1,2 @@ +ent-CultClothingBlindfold = повязка Зилота + .desc = Повязка, наделенная странной силой. diff --git a/Resources/Locale/ru-RU/White/stuff.ftl/construct.ftl b/Resources/Locale/ru-RU/White/stuff.ftl/construct.ftl new file mode 100644 index 0000000000..1e8f78fd32 --- /dev/null +++ b/Resources/Locale/ru-RU/White/stuff.ftl/construct.ftl @@ -0,0 +1,3 @@ +ghost-role-information-soul-shard-name = Осколок Души +ghost-role-information-soul-shard-description = Станьте слугой кровавого культа! +ghost-role-information-soul-shard-rules = Примите форму одной из конструкций культа и помогите вашим Хозяевам вернуть Нар'Си в этот мир! diff --git a/Resources/Locale/ru-RU/White/stuff.ftl/constructs.ftl b/Resources/Locale/ru-RU/White/stuff.ftl/constructs.ftl new file mode 100644 index 0000000000..8ead17cd65 --- /dev/null +++ b/Resources/Locale/ru-RU/White/stuff.ftl/constructs.ftl @@ -0,0 +1,8 @@ +ent-JuggernautConstruct = Джаггернаут + .desc = "" +ent-ArtificerConstruct = Ремесленник + .desc = "" +ent-WraithConstruct = Фантом + .desc = "" +ent-ReaperConstruct = Жнец + .desc = "" diff --git a/Resources/Locale/ru-RU/White/stuff.ftl/cult-structure.ftl b/Resources/Locale/ru-RU/White/stuff.ftl/cult-structure.ftl new file mode 100644 index 0000000000..7246b6dca5 --- /dev/null +++ b/Resources/Locale/ru-RU/White/stuff.ftl/cult-structure.ftl @@ -0,0 +1,21 @@ +ent-CultRunicMetal = рунический металл + .desc = Необычный лист металла с пульсирующей руной. + .suffix = Полный +ent-CultRunicMetal1 = рунический металл + .desc = Необычный лист металла с пульсирующей руной. + .suffix = Один +ent-CultRunicMetal20 = рунический металл + .desc = Необычный лист металла с пульсирующей руной. + .suffix = 20 +ent-CultBloodAltar = алтарь + .desc = Кровавый алтарь, посвященный какому-то существу. +ent-CultForge = кузница + .desc = Кузница, в которой изготавливается нечестивое оружие. +ent-CultGirder = руническая балка + .desc = Большой конструктивный элемент, изготовленный из металла. На этом есть руна. +ent-AirlockGlassCult = рунический шлюз + .desc = Странный стеклянный шлюз с руной. +cult-structure-craft-not-enough-metal = Недостаточно металла. +cult-structure-craft-craft-failed = Не удалось начать постройку. +cult-structure-craft-blocked = Что-то мешает построить. +cult-structure-craft-another-structure-nearby = Слишком близко к другой такой постройке. diff --git a/Resources/Locale/ru-RU/White/stuff.ftl/cultist-factory.ftl b/Resources/Locale/ru-RU/White/stuff.ftl/cultist-factory.ftl new file mode 100644 index 0000000000..7be764e835 --- /dev/null +++ b/Resources/Locale/ru-RU/White/stuff.ftl/cultist-factory.ftl @@ -0,0 +1,11 @@ +cultist-factory-charging = { $name } будут заряжаться ещё { $seconds } секунд +cultist-factory-create = Создать { $itemName } +cultist-factory-too-far = Слишком далеко +ent-AltarTome = архивы + .desc = Стол, заваленный тайными рукописями и книгами на неизвестных языках. +ent-CultRobeModify = одеяние флагелланта + .desc = Какая-то религиозная роба. +ent-CultMirrorShield = зеркальный щит + .desc = Щит с зеркалом на лицевой стороне, на котором изображен какой-то религиозный знак. +ent-CultOuterArmor = бронированная мантия + .desc = С первого взгляда кажется, что это простая мантия, но на ней имеется элементы брони. diff --git a/Resources/Locale/ru-RU/White/stuff.ftl/effects.ftl b/Resources/Locale/ru-RU/White/stuff.ftl/effects.ftl new file mode 100644 index 0000000000..3d8f722cca --- /dev/null +++ b/Resources/Locale/ru-RU/White/stuff.ftl/effects.ftl @@ -0,0 +1 @@ +reagent-effect-guidebook-deconvert-cultist = Деконвертирует культиста diff --git a/Resources/Locale/ru-RU/White/stuff.ftl/holy-water.ftl b/Resources/Locale/ru-RU/White/stuff.ftl/holy-water.ftl new file mode 100644 index 0000000000..b12ade2dc6 --- /dev/null +++ b/Resources/Locale/ru-RU/White/stuff.ftl/holy-water.ftl @@ -0,0 +1,2 @@ +holy-water-converted = Вы освятили воду в этой ёмкости. +holy-water-started-converting = { $target } упал в припадке и начал шипеть. diff --git a/Resources/Locale/ru-RU/White/stuff.ftl/pylon.ftl b/Resources/Locale/ru-RU/White/stuff.ftl/pylon.ftl new file mode 100644 index 0000000000..b00cdb1f00 --- /dev/null +++ b/Resources/Locale/ru-RU/White/stuff.ftl/pylon.ftl @@ -0,0 +1,4 @@ +pylon-toggle-on = Кристалл воспаряет над пьедесталом, начиная пульсировать +pylon-toggle-off = Кристалл перестаёт пульсировать, опускаясь на пьедестал +ent-CultPylon = пилон + .desc = Мистический конструкция. diff --git a/Resources/Locale/ru-RU/White/stuff.ftl/runes-entities.ftl b/Resources/Locale/ru-RU/White/stuff.ftl/runes-entities.ftl new file mode 100644 index 0000000000..35a97e75af --- /dev/null +++ b/Resources/Locale/ru-RU/White/stuff.ftl/runes-entities.ftl @@ -0,0 +1,11 @@ +ent-OfferingRune = руна предпонесения +ent-BuffRune = руна усиления +ent-EmpoweringRune = руна могущества +ent-TeleportRune = руна телепортации +ent-SummoningRune = руна призыва +ent-ReviveRune = руна воскрешения +ent-BarrierRune = руна барьера +ent-BloodBoilRune = руна кипящей крови +ent-ApocalypseRune = ритуал пространственного разрыва + +runes-window-title = Руны diff --git a/Resources/Locale/ru-RU/White/stuff.ftl/shuttle-curse.ftl b/Resources/Locale/ru-RU/White/stuff.ftl/shuttle-curse.ftl new file mode 100644 index 0000000000..f9f0254fac --- /dev/null +++ b/Resources/Locale/ru-RU/White/stuff.ftl/shuttle-curse.ftl @@ -0,0 +1,8 @@ +shuttle-curse-not-cultist = Сфера выпадает из ваших рук +shuttle-curse-shuttle-not-called = Сфера доносит вам, что шаттл не вызван +shuttle-curse-max-curses = Сфера доносит, что шаттл больше нельзя проклясть +shuttle-curse-cooldown = Сфера доносит, что ей нужно собрать силы на прокльяте +shuttle-curse-shuttle-arrived = Сфера доносит, что уже слишком поздно +shuttle-curse-shuttle-delayed = Сфера доносит, что прокльяте наложено +ent-CultShuttleCurse = сфера проклятия + .desc = Cтранная каменная сфера, пульсирующая красным светом. diff --git a/Resources/Locale/ru-RU/White/stuff.ftl/tile.ftl b/Resources/Locale/ru-RU/White/stuff.ftl/tile.ftl new file mode 100644 index 0000000000..062f688a2b --- /dev/null +++ b/Resources/Locale/ru-RU/White/stuff.ftl/tile.ftl @@ -0,0 +1 @@ +tiles-cult-floor = гравированный пол diff --git a/Resources/Locale/ru-RU/White/stuff.ftl/veil-shifter.ftl b/Resources/Locale/ru-RU/White/stuff.ftl/veil-shifter.ftl new file mode 100644 index 0000000000..8427b5176c --- /dev/null +++ b/Resources/Locale/ru-RU/White/stuff.ftl/veil-shifter.ftl @@ -0,0 +1,5 @@ +void-teleport-not-cultist = Посох выпадает у вас из рук. +void-teleport-drained = В этом посохе больше нет энергии. +void-teleport-cooldown = Посох накапливает заряд. +ent-CultVeilShifter = преобразователь покрова + .desc = Посох, излучающий странную энергию. diff --git a/Resources/Locale/ru-RU/White/stuff.ftl/void-torch.ftl b/Resources/Locale/ru-RU/White/stuff.ftl/void-torch.ftl new file mode 100644 index 0000000000..48cfdd7625 --- /dev/null +++ b/Resources/Locale/ru-RU/White/stuff.ftl/void-torch.ftl @@ -0,0 +1,9 @@ +cult-torch-window-title = Отправить предмет +cult-torch-not-cultist = Факел выпадает из ваших рук +cult-torch-drained = Факел опустошён +cult-torch-cooldown = Факел накапливает энергию +cult-torch-cultists-not-found = Факел не обнаружил приспешников +cult-torch-no-cultist = Факел потерял связь с приспешником +cult-torch-item-send = Факел отправил предмет +ent-CultTorch = факел пустоты + .desc = Странный факел. diff --git a/Resources/Locale/ru-RU/reagents/meta/consumable/drink/drinks.ftl b/Resources/Locale/ru-RU/reagents/meta/consumable/drink/drinks.ftl index 6c05c80764..3a9706b5e3 100644 --- a/Resources/Locale/ru-RU/reagents/meta/consumable/drink/drinks.ftl +++ b/Resources/Locale/ru-RU/reagents/meta/consumable/drink/drinks.ftl @@ -40,6 +40,8 @@ reagent-name-tonic-water = тоник reagent-desc-tonic-water = Вкус у него странный, но, по крайней мере, хинин препятствует распространению космической малярии. reagent-name-water = вода reagent-desc-water = Бесцветная жидкость, необходимая человекам для выживания. +reagent-name-holy-water = святая вода +reagent-desc-holy-water = Бесцветная жидкость, необходимая человекам для выживания. Эта освящена. reagent-name-ice = лёд reagent-desc-ice = Застывшая вода. reagent-name-dry-ramen = сухой рамэн diff --git a/Resources/Prototypes/Alerts/alerts.yml b/Resources/Prototypes/Alerts/alerts.yml index 38380e3309..11b9beec3b 100644 --- a/Resources/Prototypes/Alerts/alerts.yml +++ b/Resources/Prototypes/Alerts/alerts.yml @@ -469,6 +469,12 @@ name: Debug6 description: Debug +- type: alert + id: CultBuffed + icons: [ /Textures/Interface/Alerts/buff.png ] + name: alerts-cult-buff-name + description: alerts-cult-buff-desc + # WD-EDIT - type: alert id: Bleeding diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index e2e75ad485..2aa85a86a6 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -201,6 +201,14 @@ type: HumanoidMarkingModifierBoundUserInterface - key: enum.StrippingUiKey.Key type: StrippableBoundUserInterface + # WD-EDIT + - key: enum.NameSelectorUIKey.Key + type: NameSelectorBUI + - key: enum.RuneTeleporterUiKey.Key + type: TeleportRunesListWindowBUI + - key: enum.SummonCultistUiKey.Key + type: SummonCultistListWindowBUI + # WD-EDIT END - type: Puller - type: Butcherable butcheringType: Spike # TODO human. diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml index bc4da9359d..9ff76557bc 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml @@ -23,6 +23,20 @@ slots: - back - type: DisarmMalus + - type: RuneDrawerProvider + runePrototypes: [ OfferingRune, + EmpoweringRune, + BuffRune, + TeleportRune, + ReviveRune, + BarrierRune, + SummoningRune, + BloodBoilRune, + ApocalypseRune ] + - type: UserInterface + interfaces: + - key: enum.ListViewSelectorUiKey.Key + type: ListViewSelectorBUI - type: entity name: eldritch blade diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml index ca3edf68c0..a488524b05 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml @@ -48,3 +48,15 @@ canThrowTrigger: true canMoveBreakout: true +- type: entity + parent: Bola + id: CultBola + name: Bola + description: Linked together with some spare cuffs and metal. + components: + - type: Ensnaring + freeTime: 2.0 + breakoutTime: 3.5 #all bola should generally be fast to remove + walkSpeed: 0.5 + sprintSpeed: 0.5 + canThrowTrigger: true diff --git a/Resources/Prototypes/GameRules/roundstart.yml b/Resources/Prototypes/GameRules/roundstart.yml index 7d1128a416..b35615b4cf 100644 --- a/Resources/Prototypes/GameRules/roundstart.yml +++ b/Resources/Prototypes/GameRules/roundstart.yml @@ -123,3 +123,14 @@ noSpawn: true components: - type: RampingStationEventScheduler + +# WD EDIT +- type: entity + id: Cult + parent: BaseGameRule + noSpawn: true + components: + - type: CultRule + cultistStartingItems: + - RitualDagger + - CultRunicMetal20 diff --git a/Resources/Prototypes/Objectives/cultObjectives.yml b/Resources/Prototypes/Objectives/cultObjectives.yml new file mode 100644 index 0000000000..8472033859 --- /dev/null +++ b/Resources/Prototypes/Objectives/cultObjectives.yml @@ -0,0 +1,5 @@ +- type: objective + id: CultistKillObjective + issuer: Cult + conditions: + - !type:KillCultistTarget {} diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml b/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml index 0d319de313..1a1491ccd3 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml @@ -457,3 +457,20 @@ effects: - !type:SatiateThirst factor: 0.6 + +#WD start +- type: reagent + id: HolyWater + name: reagent-name-holy-water + parent: Water + desc: reagent-desc-holy-water + metabolisms: + Drink: + effects: + - !type:SatiateThirst + factor: 4 + - !type:DeconvertCultist + conditions: + - !type:ReagentThreshold + min: 25 +#WD end diff --git a/Resources/Prototypes/Reagents/Materials/metals.yml b/Resources/Prototypes/Reagents/Materials/metals.yml index affeb9427e..c27496243e 100644 --- a/Resources/Prototypes/Reagents/Materials/metals.yml +++ b/Resources/Prototypes/Reagents/Materials/metals.yml @@ -30,3 +30,11 @@ icon: { sprite: Objects/Materials/Sheets/metal.rsi, state: plasteel } color: "#696969" #Okay, this is epic price: 0.28 # 1-1 mix of plasma and steel. + +- type: material + id: CultRunicMetal + stackEntity: CultRunicMetal1 + name: materials-runic-metal + icon: { sprite: /Textures/White/Cult/Entities/runic_metal.rsi, state: runic } + color: "#9d2b39" + price: 0.05 diff --git a/Resources/Prototypes/Roles/Antags/cult.yml b/Resources/Prototypes/Roles/Antags/cult.yml new file mode 100644 index 0000000000..627dece012 --- /dev/null +++ b/Resources/Prototypes/Roles/Antags/cult.yml @@ -0,0 +1,6 @@ +- type: antag + id: Cultist + name: Cultist + antagonist: true + setPreference: true + objective: Summon narsie diff --git a/Resources/Prototypes/Stacks/Materials/materials.yml b/Resources/Prototypes/Stacks/Materials/materials.yml index 2f53e52c37..5f9aaef17a 100644 --- a/Resources/Prototypes/Stacks/Materials/materials.yml +++ b/Resources/Prototypes/Stacks/Materials/materials.yml @@ -85,3 +85,11 @@ spawn: MaterialBones1 maxCount: 30 itemSize: 1 + +- type: stack + id: RunicMetalSheets + name: runic metal + icon: { sprite: /Textures/White/Cult/Entities/runic_metal.rsi, state: runic} + spawn: CultRunicMetal1 + maxCount: 30 + itemSize: 1 diff --git a/Resources/Prototypes/_White/Actions/constuct_actions.yml b/Resources/Prototypes/_White/Actions/constuct_actions.yml new file mode 100644 index 0000000000..efef40f44c --- /dev/null +++ b/Resources/Prototypes/_White/Actions/constuct_actions.yml @@ -0,0 +1,82 @@ +- type: instantAction + id: ArtificerCreateSoulStone + name: artificer-create-soul-stone-action-name + description: artificer-create-soul-stone-action-description + + icon: + sprite: White/Cult/actions_cult.rsi + state: phaseshift + sound: /Audio/White/Cult/curse.ogg + useDelay: 300 + event: !type:ArtificerCreateSoulStoneActionEvent + +- type: instantAction + id: ArtificerCreateConstructShell + name: artificer-create-construct-shell-action-name + description: artificer-create-construct-shell-action-description + itemIconStyle: NoItem + icon: + sprite: White/Cult/actions_cult.rsi + state: artificer + sound: /Audio/White/Cult/curse.ogg + useDelay: 180 + event: !type:ArtificerCreateConstructShellActionEvent + +- type: instantAction + id: ArtificerConvertCultistFloor + name: artificer-convert-cultist-floor-action-name + description: artificer-convert-cultist-floor-action-description + itemIconStyle: NoItem + icon: + sprite: White/Cult/actions_cult.rsi + state: floorconstruct + sound: /Audio/White/Cult/curse.ogg + useDelay: 2 + event: !type:ArtificerConvertCultistFloorActionEvent + +- type: instantAction + id: ArtificerCreateCultistWall + name: artificer-create-cultist-wall-action-name + description: artificer-create-cultist-wall-action-description + itemIconStyle: NoItem + icon: + sprite: White/Cult/actions_cult.rsi + state: lesserconstruct + sound: /Audio/White/Cult/curse.ogg + useDelay: 20 + event: !type:ArtificerCreateCultistWallActionEvent + +- type: instantAction + id: ArtificerCreateCultistAirlock + name: artificer-create-cultist-airlock-action-name + description: artificer-create-cultist-airlock-action-description + itemIconStyle: NoItem + icon: + sprite: White/Cult/actions_cult.rsi + state: lesserconstruct + sound: /Audio/White/Cult/curse.ogg + useDelay: 60 + event: !type:ArtificerCreateCultistAirlockActionEvent + +- type: instantAction + id: WraithPhase + name: wraith-phase-action-name + description: wraith-phase-action-description + itemIconStyle: NoItem + icon: + sprite: White/Cult/actions_cult.rsi + state: phaseshift + sound: /Audio/White/Cult/wraith_phase.ogg + useDelay: 20 + event: !type:WraithPhaseActionEvent + +- type: instantAction + id: JuggernautCreateWall + name: juggernaut-create-wall-action-name + description: juggernaut-create-wall-action-description + itemIconStyle: NoItem + icon: + sprite: White/Cult/actions_cult.rsi + state: cultforcewall + useDelay: 35 + event: !type:JuggernautCreateWallActionEvent diff --git a/Resources/Prototypes/_White/Actions/cult_actions.yml b/Resources/Prototypes/_White/Actions/cult_actions.yml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Resources/Prototypes/_White/Construction/Cult/graphs.yml b/Resources/Prototypes/_White/Construction/Cult/graphs.yml new file mode 100644 index 0000000000..1c6d35405f --- /dev/null +++ b/Resources/Prototypes/_White/Construction/Cult/graphs.yml @@ -0,0 +1,134 @@ +- type: constructionGraph + id: CultGirder + start: start + graph: + - node: start + edges: + - to: girder + completed: + - !type:SnapToGrid + southRotation: true + steps: + - material: RunicMetalSheets + amount: 1 + doAfter: 1 + - node: girder + entity: CultGirder + edges: + - to: start + completed: + - !type:SpawnPrototype + prototype: CultRunicMetal1 + amount: 1 + - !type:DeleteEntity { } + conditions: + - !type:EntityAnchored + steps: + - tool: Screwing + doAfter: 2 + - to: wall + completed: + - !type:SnapToGrid + southRotation: true + conditions: + - !type:EntityAnchored { } + steps: + - material: RunicMetalSheets + amount: 1 + doAfter: 2 + - node: wall + entity: WallCult + edges: + - to: girder + completed: + - !type:GivePrototype + prototype: CultRunicMetal1 + amount: 1 + steps: + - tool: Welding + doAfter: 10 + +- type: constructionGraph + id: AirlockGlassCult + start: start + graph: + - node: start + edges: + - to: airlock + completed: + - !type:SnapToGrid + southRotation: true + steps: + - material: RunicMetalSheets + amount: 1 + doAfter: 1 + - node: airlock + entity: AirlockGlassCult + +- type: constructionGraph + id: CultPylon + start: start + graph: + - node: start + edges: + - to: pylon + completed: + - !type:SnapToGrid + southRotation: true + steps: + - material: RunicMetalSheets + amount: 4 + doAfter: 1 + - node: pylon + entity: CultPylon + +- type: constructionGraph + id: AltarTome + start: start + graph: + - node: start + edges: + - to: tome + completed: + - !type:SnapToGrid + southRotation: true + steps: + - material: RunicMetalSheets + amount: 3 + doAfter: 1 + - node: tome + entity: AltarTome + +- type: constructionGraph + id: CultBloodAltar + start: start + graph: + - node: start + edges: + - to: altar + completed: + - !type:SnapToGrid + southRotation: true + steps: + - material: RunicMetalSheets + amount: 3 + doAfter: 1 + - node: altar + entity: CultBloodAltar + +- type: constructionGraph + id: CultForge + start: start + graph: + - node: start + edges: + - to: forge + completed: + - !type:SnapToGrid + southRotation: true + steps: + - material: RunicMetalSheets + amount: 3 + doAfter: 1 + - node: forge + entity: CultForge diff --git a/Resources/Prototypes/_White/Construction/Cult/structures.yml b/Resources/Prototypes/_White/Construction/Cult/structures.yml new file mode 100644 index 0000000000..212fa632ee --- /dev/null +++ b/Resources/Prototypes/_White/Construction/Cult/structures.yml @@ -0,0 +1,107 @@ +- type: construction + id: CultGirder + name: руническая балка + description: Большой конструктивный элемент, изготовленный из металла. На этом есть руна. + graph: CultGirder + startNode: start + targetNode: girder + hide: true + category: construction-category-structures + icon: + sprite: /Textures/White/Cult/Structures/cult_girder.rsi + state: cultgirder + objectType: Structure + placementMode: SnapgridCenter + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked + +- type: construction + id: AirlockGlassCult + name: рунический шлюз + description: Странный стеклянный шлюз с руной. + graph: AirlockGlassCult + startNode: start + targetNode: airlock + hide: true + category: construction-category-structures + icon: + sprite: /Textures/White/Cult/Structures/cult_airlock.rsi + state: closed + objectType: Structure + placementMode: SnapgridCenter + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked + +- type: construction + id: CultPylon + name: пилон + description: Мистический конструкция. + graph: CultPylon + startNode: start + targetNode: pylon + hide: true + category: construction-category-structures + icon: + sprite: /Textures/White/Cult/Structures/pylon.rsi + state: pylon_off + objectType: Structure + placementMode: SnapgridCenter + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked + +- type: construction + id: AltarTome + name: архивы + description: Стол, заваленный тайными рукописями и книгами на неизвестных языках. + graph: AltarTome + startNode: start + targetNode: tome + hide: true + category: construction-category-structures + icon: + sprite: /Textures/White/Cult/Structures/tome_altar.rsi + state: icon-off + objectType: Structure + placementMode: SnapgridCenter + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked + +- type: construction + id: CultBloodAltar + name: алтарь + description: Кровавый алтарь, посвященный какому-то существу. + graph: CultBloodAltar + startNode: start + targetNode: altar + hide: true + category: construction-category-structures + icon: + sprite: /Textures/White/Cult/Structures/blood_altar.rsi + state: icon-off + objectType: Structure + placementMode: SnapgridCenter + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked + +- type: construction + id: CultForge + name: кузница + description: Кузница, в которой изготавливается нечестивое оружие. + graph: CultForge + startNode: start + targetNode: forge + hide: true + category: construction-category-structures + icon: + sprite: /Textures/White/Cult/Structures/forge.rsi + state: icon-off + objectType: Structure + placementMode: SnapgridCenter + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked diff --git a/Resources/Prototypes/_White/Entities/Cult/Altars/cult_altars.yml b/Resources/Prototypes/_White/Entities/Cult/Altars/cult_altars.yml new file mode 100644 index 0000000000..d8a2b84b60 --- /dev/null +++ b/Resources/Prototypes/_White/Entities/Cult/Altars/cult_altars.yml @@ -0,0 +1,284 @@ +- type: entity + id: CultPylon + parent: BaseStructure + name: pylon + description: A mysterious structure. + components: + - type: Transform + noRot: true + - type: Physics + bodyType: Static + - type: Fixtures + fixtures: + pylonFix: + shape: + !type:PhysShapeAabb + bounds: "-0.1,-0.3,0.1,0.3" + density: 190 + mask: + - TabletopMachineMask + layer: + - TabletopMachineLayer + - type: Sprite + netsync: false + noRot: true + drawdepth: SmallObjects + sprite: /Textures/White/Cult/Structures/pylon.rsi + layers: + - state: pylon + map: [ "enum.PylonVisualsLayers.Activated" ] + - type: PylonVisuals + - type: InteractionOutline + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Glass + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 50 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:PlaySoundBehavior + sound: + collection: GlassBreak + - !type:SpawnEntitiesBehavior + spawn: + ShardGlass: + min: 1 + max: 2 + - type: Appearance + - type: Pylon + healingAuraDamage: + groups: + Brute: -10 + Burn: -10 + Toxin: -6 + Genetic: -5 + Airloss: -20 + burnDamageOnInteract: + groups: + Burn: 5 + - type: PointLight + color: "#FF0000" + radius: 2 + energy: 2 + enabled: true + - type: Construction + graph: CultPylon + node: pylon + +- type: entity + id: AltarTome + parent: BaseStructure + name: archives + description: A table littered with secret manuscripts and books in unknown languages. + components: + - type: Transform + noRot: true + - type: Physics + bodyType: Static + - type: Fixtures + fixtures: + tomeFix: + shape: + !type:PhysShapeAabb + bounds: "-0.1,-0.3,0.1,0.3" + density: 190 + mask: + - TableMask + layer: + - TableLayer + - type: Sprite + netsync: false + noRot: true + drawdepth: SmallObjects + sprite: /Textures/White/Cult/Structures/tome_altar.rsi + layers: + - state: icon + map: [ "enum.CultCraftStructureVisualsLayers.Activated" ] + - type: InteractionOutline + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/metalbreak.ogg + - type: Appearance + - type: CultCraftStructureVisuals + - type: CultistFactory + products: + - FactoryCultShuttleCurse + - FactoryCultClothingBlindfold + - FactoryCultVeilShifter + - type: UserInterface + interfaces: + - key: enum.CultistAltarUiKey.Key + type: CultistFactoryBUI + - type: Construction + graph: AltarTome + node: tome + +- type: entity + id: CultBloodAltar + parent: BaseStructure + name: altar + description: A bloody altar dedicated to some creature. + components: + - type: Transform + noRot: true + - type: Physics + bodyType: Static + - type: Fixtures + fixtures: + tomeFix: + shape: + !type:PhysShapeAabb + bounds: "-0.1,-0.3,0.1,0.3" + density: 190 + mask: + - TableMask + layer: + - TableLayer + - type: Sprite + netsync: false + noRot: true + drawdepth: SmallObjects + sprite: /Textures/White/Cult/Structures/blood_altar.rsi + layers: + - state: icon + map: [ "enum.CultCraftStructureVisualsLayers.Activated" ] + - type: InteractionOutline + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/metalbreak.ogg + - type: Appearance + - type: CultCraftStructureVisuals + - type: CultistFactory + products: + - FactoryWhetstone + - FactoryConstructShell + - type: UserInterface + interfaces: + - key: enum.CultistAltarUiKey.Key + type: CultistFactoryBUI + - type: Construction + graph: CultBloodAltar + node: altar + +- type: entity + id: CultForge + parent: BaseStructure + name: forge + description: A forge where unholy weapons are made. + components: + - type: Transform + noRot: true + - type: Physics + bodyType: Static + - type: Fixtures + fixtures: + tomeFix: + shape: + !type:PhysShapeAabb + bounds: "-0.1,-0.3,0.1,0.3" + density: 190 + mask: + - TableMask + layer: + - TableLayer + - type: Sprite + netsync: false + noRot: true + drawdepth: SmallObjects + sprite: /Textures/White/Cult/Structures/forge.rsi + layers: + - state: icon + map: [ "enum.CultCraftStructureVisualsLayers.Activated" ] + - type: InteractionOutline + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/metalbreak.ogg + - type: Appearance + - type: CultCraftStructureVisuals + - type: CultistFactory + products: + - FactoryEldritchBlade + - FactoryArmorCult + - FactoryCultRobeModify + - FactoryCultMirrorShield + - type: UserInterface + interfaces: + - key: enum.CultistAltarUiKey.Key + type: CultistFactoryBUI + - type: Construction + graph: CultForge + node: forge + +- type: cultStructure + id: CultStructureAltarTome + name: Архивы + structureId: AltarTome + icon: "/Textures/White/Cult/Structures/tome_altar.rsi/icon-off.png" + +- type: cultStructure + id: CultStructureCultPylon + name: Пилон + structureId: CultPylon + icon: "/Textures/White/Cult/Structures/pylon.rsi/pylon_off.png" + +- type: cultStructure + id: CultStructureCultBloodAltar + name: Алтарь + structureId: CultBloodAltar + icon: "/Textures/White/Cult/Structures/blood_altar.rsi/icon-off.png" + +- type: cultStructure + id: CultStructureCultForge + name: Кузница + structureId: CultForge + icon: "/Textures/White/Cult/Structures/forge.rsi/icon-off.png" + +- type: cultStructure + id: CultStructureAirlockGlassCult + name: Шлюз + structureId: AirlockGlassCult + icon: "/Textures/White/Cult/Structures/cult_airlock.rsi/closed.png" + +- type: cultStructure + id: CultStructureCultGirder + name: Балка + structureId: CultGirder + icon: "/Textures/White/Cult/Structures/cult_girder.rsi/cultgirder.png" + diff --git a/Resources/Prototypes/_White/Entities/Cult/Effects/effects.yml b/Resources/Prototypes/_White/Entities/Cult/Effects/effects.yml new file mode 100644 index 0000000000..5b6a66c0c1 --- /dev/null +++ b/Resources/Prototypes/_White/Entities/Cult/Effects/effects.yml @@ -0,0 +1,105 @@ +- type: entity + id: CultTileSpawnEffect + name: Sparkle + placement: + mode: SnapgridCenter + components: + # Animation is like 3 something seconds so we just need to despawn it before then. + - type: TimedDespawn + lifetime: 0.5 + - type: EvaporationSparkle + - type: Transform + noRot: true + anchored: true + - type: Sprite + layers: + - sprite: White/Cult/Effects/tiles_spawn.rsi + state: floorglow + shader: unshaded + netsync: false + drawdepth: FloorObjects + color: "#FF0000" + - type: PointLight + color: "#FF0000" + +- type: entity + id: CultTeleportInEffect + name: Teleport in + components: + # Animation is like 3 something seconds so we just need to despawn it before then. + - type: TimedDespawn + lifetime: 0.8 + - type: EvaporationSparkle + - type: Transform + noRot: true + anchored: true + - type: Sprite + layers: + - sprite: White/Cult/Effects/cult_inout.rsi + state: cultin + shader: unshaded + netsync: false + drawdepth: Effects + - type: PointLight + color: "#FF0000" + +- type: entity + id: CultTeleportOutEffect + name: Teleport out + components: + # Animation is like 3 something seconds so we just need to despawn it before then. + - type: TimedDespawn + lifetime: 0.8 + - type: EvaporationSparkle + - type: Transform + noRot: true + anchored: true + - type: Sprite + layers: + - sprite: White/Cult/Effects/cult_inout.rsi + state: cultout + shader: unshaded + netsync: false + drawdepth: Effects + - type: PointLight + color: "#FF0000" + +- type: entity + id: CultWallGlow + name: wall glow + components: + - type: TimedDespawn + lifetime: 1 + - type: EvaporationSparkle + - type: Transform + noRot: true + anchored: true + - type: Sprite + layers: + - sprite: White/Cult/Effects/wall_glow.rsi + state: wallglow + shader: unshaded + netsync: false + drawdepth: Effects + - type: PointLight + color: "#FF0000" + +- type: entity + id: CultAirlockGlow + name: airlock glow + components: + - type: TimedDespawn + lifetime: 1 + - type: EvaporationSparkle + - type: Transform + noRot: true + anchored: true + - type: Sprite + layers: + - sprite: White/Cult/Effects/airlock_glow.rsi + state: doorglow + shader: unshaded + netsync: false + drawdepth: Effects + - type: PointLight + color: "#FF0000" diff --git a/Resources/Prototypes/_White/Entities/Cult/Effects/shield.yml b/Resources/Prototypes/_White/Entities/Cult/Effects/shield.yml new file mode 100644 index 0000000000..95684a4934 --- /dev/null +++ b/Resources/Prototypes/_White/Entities/Cult/Effects/shield.yml @@ -0,0 +1,59 @@ +- type: entity + name: cult barrier + description: Можно уничтожить ритуальным кинжалом. + id: CultBarrier + parent: BaseStructure + components: + - type: Transform + noRot: true + - type: Sprite + layers: + - sprite: White/Cult/Effects/shield.rsi + state: shield-cult + shader: unshaded + - type: Appearance + - type: InteractionOutline + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeCircle + radius: 0.45 + density: 75 + mask: + - MachineMask + layer: + - WallLayer + - type: Damageable + damageContainer: Inorganic + damageModifierSet: Metallic + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 600 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - trigger: + !type:DamageTrigger + damage: 300 + behaviors: + - !type:SpawnEntitiesBehavior + spawn: + CultRunicMetal: + min: 5 + max: 5 + - !type:PlaySoundBehavior + sound: + path: /Audio/Effects/metalbreak.ogg + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: PointLight + enabled: false + radius: 3 + color: red + - type: CultBarrier + activated: true + - type: Airtight + noAirWhenFullyAirBlocked: false diff --git a/Resources/Prototypes/_White/Entities/Cult/Items/altar_craft.yml b/Resources/Prototypes/_White/Entities/Cult/Items/altar_craft.yml new file mode 100644 index 0000000000..8cf838987e --- /dev/null +++ b/Resources/Prototypes/_White/Entities/Cult/Items/altar_craft.yml @@ -0,0 +1,13 @@ +- type: cultistFactoryProduction + id: FactoryWhetstone + icon: "/Textures/White/Items/Misc/wetstone.rsi/sharpener.png" + name: Точильный камень + item: + - CultSharpener + +- type: cultistFactoryProduction + id: FactoryConstructShell + icon: "/Textures/White/Cult/soulstone.rsi/soulstone.png" + name: Оболочка Конструкта + item: + - ConstructShell diff --git a/Resources/Prototypes/_White/Entities/Cult/Items/forge_craft.yml b/Resources/Prototypes/_White/Entities/Cult/Items/forge_craft.yml new file mode 100644 index 0000000000..90ea4b74a1 --- /dev/null +++ b/Resources/Prototypes/_White/Entities/Cult/Items/forge_craft.yml @@ -0,0 +1,69 @@ +- type: entity + id: CultRobeModify + parent: ClothingOuterRobesCult + name: flagellant's attire + description: Some religious clothes. + components: + - type: CultRobeModifier + +- type: entity + id: CultMirrorShield + parent: BaseShield + name: mirror shield + description: Shield with a mirror on a front side, which has some religious sign. + components: + - type: Sprite + sprite: White/Cult/Entities/mirror_shield.rsi + state: icon + - type: Item + sprite: White/Cult/Entities/mirror_shield.rsi + heldPrefix: "mirror" + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 300 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - type: Reflect + reflectProb: 0.5 + passiveReflect: true + reflects: + - Energy + - type: ReturnItemOnThrow + + +- type: entity + id: CultOuterArmor + parent: ClothingOuterArmorCult + name: armored mantle + description: At first glance, it seems that this is a simple robe, but it has elements of armor on it. + +- type: cultistFactoryProduction + id: FactoryEldritchBlade + name: Жуткий клинок + icon: "/Textures/Objects/Weapons/Melee/cult_blade.rsi/icon.png" + item: + - EldritchBlade + +- type: cultistFactoryProduction + id: FactoryArmorCult + name: Бронированная мантия + icon: "/Textures/Clothing/OuterClothing/Armor/cult_armour.rsi/icon.png" + item: + - CultOuterArmor + +- type: cultistFactoryProduction + id: FactoryCultRobeModify + name: Одеяние флагелланта + icon: "/Textures/Clothing/OuterClothing/Misc/cultrobes.rsi/icon.png" + item: + - CultRobeModify + +- type: cultistFactoryProduction + id: FactoryCultMirrorShield + name: Зеркальный щит + icon: "/Textures/White/Cult/Entities/mirror_shield.rsi/icon-off.png" + item: + - CultMirrorShield diff --git a/Resources/Prototypes/_White/Entities/Cult/Items/soul_shard.yml b/Resources/Prototypes/_White/Entities/Cult/Items/soul_shard.yml new file mode 100644 index 0000000000..58a4d115d7 --- /dev/null +++ b/Resources/Prototypes/_White/Entities/Cult/Items/soul_shard.yml @@ -0,0 +1,39 @@ +- type: entity + name: soul shard + description: Mysterious glowing shard. + parent: BaseItem + id: SoulShard + components: + - type: Sprite + state: icon + layers: + - state: soulstone + map: ["hasSoul"] + sprite: White/Cult/soulstone.rsi + - type: MindContainer + - type: SoulShard + - type: PointLight + color: Red + radius: 2 + softness: 1 + enabled: false + - type: Appearance + - type: GenericVisualizer + visuals: + enum.SoulShardVisualState.State: + hasSoul: + True: { state: "soulstone2" } + False: { state: "soulstone" } + - type: Speech + +- type: entity + parent: SoulShard + id: SoulShardGhost + suffix: Ghost Role + components: + - type: GhostRole + allowMovement: true + name: ghost-role-information-soul-shard-name + description: ghost-role-information-soul-shard-description + rules: ghost-role-information-soul-shard-rules + - type: GhostTakeoverAvailable diff --git a/Resources/Prototypes/_White/Entities/Cult/Items/tome_craft.yml b/Resources/Prototypes/_White/Entities/Cult/Items/tome_craft.yml new file mode 100644 index 0000000000..eb5b1c96f1 --- /dev/null +++ b/Resources/Prototypes/_White/Entities/Cult/Items/tome_craft.yml @@ -0,0 +1,184 @@ +- type: entity + name: curse orb + description: Strange stone orb that pulsates with red light. + parent: BaseItem + id: CultShuttleCurse + components: + - type: Sprite + sprite: White/Cult/Entities/shuttle_curse.rsi + state: icon + - type: Physics + bodyType: Dynamic + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.2,-0.2,0.2,0.2" + density: 30 + mask: + - ItemMask + - type: ShuttleCurse + - type: PointLight + color: red + range: 2 + +- type: entity + parent: ClothingEyesBase + id: CultClothingBlindfold + name: zealot's blindfold + description: A blindfold endowed with a strange power. + components: + - type: Sprite + sprite: Clothing/Eyes/Misc/blindfold.rsi + - type: Clothing + sprite: Clothing/Eyes/Misc/blindfold.rsi + - type: FlashImmunity + - type: EyeProtection + +- type: entity + name: veil shifter + description: A staff that radiates strange energy. + parent: BaseItem + id: CultVeilShifter + components: + - type: Sprite + sprite: White/Cult/Entities/veil_shifter.rsi + layers: + - state: icon-on + map: ["enum.VeilVisualsLayers.Activated"] + - type: VeilVisuals + - type: Appearance + - type: Physics + bodyType: Dynamic + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.2,-0.2,0.2,0.2" + density: 30 + mask: + - ItemMask + - type: PointLight + color: red + range: 2 + - type: VoidTeleport + +- type: entity + name: void torch + description: Strange torch. + parent: BaseItem + id: CultTorch + components: + - type: Sprite + sprite: White/Cult/Entities/void_torch.rsi + layers: + - state: icon-on + map: ["enum.VoidTorchVisualsLayers.Activated"] + color: red + - type: VoidTorchVisuals + - type: Appearance + - type: Physics + bodyType: Dynamic + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.2,-0.2,0.2,0.2" + density: 30 + mask: + - ItemMask + - type: PointLight + color: red + range: 2 + - type: TorchCultistsProvider + - type: UserInterface + interfaces: + - key: enum.CultTeleporterUiKey.Key + type: TorchWindowBUI + +- type: cultistFactoryProduction + id: FactoryCultShuttleCurse + icon: "/Textures/White/Cult/Entities/shuttle_curse.rsi/icon-off.png" + name: Проклятие шаттла + item: + - CultShuttleCurse + +- type: cultistFactoryProduction + id: FactoryCultClothingBlindfold + icon: "/Textures/Clothing/Eyes/Misc/blindfold.rsi/icon.png" + name: Повязка Зилота + item: + - CultClothingBlindfold + +- type: cultistFactoryProduction + id: FactoryCultVeilShifter + icon: "/Textures/White/Cult/Entities/veil_shifter.rsi/icon.png" + name: Идущий по покрову + item: + - CultVeilShifter + - CultTorch + +- type: entity + parent: SheetOtherBase + id: CultRunicMetal + name: runic metal + description: An unusual sheet of metal with a pulsating rune. + suffix: Full + components: + - type: Sprite + sprite: "White/Cult/Entities/runic_metal.rsi" + layers: + - state: runic_3 + map: [ "base" ] + - type: Tag + tags: + - Sheet + - DroneUsable + - type: Material + - type: PhysicalComposition + materialComposition: + CultRunicMetal: 100 + - type: Stack + stackType: RunicMetalSheets + baseLayer: base + layerStates: + - runic + - runic_2 + - runic_3 + sizeMultiplier: 0.17 + - type: Appearance + - type: RunicMetal + - type: UserInterface + interfaces: + - key: enum.CultStructureCraftUiKey.Key + type: StructureCraftBoundUserInterface + - type: Item + +- type: entity + parent: CultRunicMetal + id: CultRunicMetal1 + suffix: Single + components: + - type: Sprite + state: runic + - type: Stack + count: 1 + sizeMultiplier: 0.17 + - type: Item + size: 1 + +- type: entity + parent: CultRunicMetal + id: CultRunicMetal20 + suffix: 20 + components: + - type: Sprite + state: runic + - type: Stack + count: 20 + sizeMultiplier: 0.17 + - type: Item + size: 3 diff --git a/Resources/Prototypes/_White/Entities/Cult/Runes/cult_runes.yml b/Resources/Prototypes/_White/Entities/Cult/Runes/cult_runes.yml new file mode 100644 index 0000000000..c84684b97e --- /dev/null +++ b/Resources/Prototypes/_White/Entities/Cult/Runes/cult_runes.yml @@ -0,0 +1,150 @@ +- type: entity + parent: CollideRune + id: OfferingRune + name: "Offering Rune" + components: + - type: Sprite + sprite: White/Cult/rune.rsi + netsync: false + layers: + - state: offering + color: '#F80000' + - type: Appearance + - type: CultRuneBase + invokePhrase: "Mah'weyh pleggh at e'ntrath!" + - type: CultRuneOffering + +- type: entity + parent: CollideRune + id: BuffRune + name: "Buff Rune" + components: + - type: Sprite + sprite: White/Cult/rune.rsi + netsync: false + layers: + - state: empower + color: '#008080' + - type: Appearance + - type: CultRuneBase + invokePhrase: "Qu'laris ver'don, thal'sorin mik'thar!" + - type: CultRuneBuff + +- type: entity + parent: CollideRune + id: EmpoweringRune + name: "Empower Rune" + components: + - type: Sprite + sprite: White/Cult/rune.rsi + netsync: false + layers: + - state: empower + color: '#F80000' + - type: Appearance + - type: CultRuneBase + - type: CultEmpower + isRune: true + - type: UserInterface + interfaces: + - key: enum.CultEmpowerUiKey.Key + type: SpellSelectorBUI + +- type: entity + parent: CollideRune + id: TeleportRune + name: "Teleport Rune" + components: + - type: Sprite + sprite: White/Cult/rune.rsi + netsync: false + layers: + - state: teleport + color: '#F80000' + - type: Appearance + - type: CultRuneBase + invokePhrase: "Sas'so c'arta forbici!" + gatherInvokers: false + - type: CultRuneTeleport + label: "безымянная метка" + +- type: entity + parent: CollideRune + id: SummoningRune + name: "Summoning Rune" + components: + - type: Sprite + sprite: White/Cult/rune.rsi + netsync: false + layers: + - state: summon + color: '#F80000' + - type: Appearance + - type: CultRuneBase + invokePhrase: "N'ath reth sh'yro eth d'rekkathnor!" + gatherInvokers: true + - type: CultRuneSummoning + +- type: entity + parent: CollideRune + id: ReviveRune + name: "Revive Rune" + components: + - type: Sprite + sprite: White/Cult/rune.rsi + netsync: false + layers: + - state: revive + color: '#F80000' + - type: Appearance + - type: CultRuneBase + invokePhrase: "Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!" + - type: CultRuneRevive + +- type: entity + parent: CollideRune + id: BarrierRune + name: "Barrier Rune" + components: + - type: Sprite + sprite: White/Cult/rune.rsi + netsync: false + layers: + - state: barrier + color: '#F80000' + - type: Appearance + - type: CultRuneBase + invokePhrase: "Khari'd! Eske'te tannin!" + - type: CultRuneBarrier + +- type: entity + parent: CollideRune + id: BloodBoilRune + name: "Blood Boil" + components: + - type: Sprite + sprite: White/Cult/rune.rsi + netsync: false + layers: + - state: blood_boil + color: '#F80000' + - type: Appearance + - type: CultRuneBase + invokePhrase: "Dedo ol'btoh!" + - type: CultRuneBloodBoil + projectilePrototype: ProjectileCult + +- type: entity + parent: BaseRune + id: ApocalypseRune + name: "Ritual of Dimensional Rending" + components: + - type: Sprite + sprite: White/Cult/apocalypse.rsi + layers: + - state: apoc + color: '#F80000' + - type: Appearance + - type: CultRuneBase + invokePhrase: "TOK-LYR RQA-NAP G'OLT-ULOFT!" + - type: CultRuneApocalypse diff --git a/Resources/Prototypes/_White/Entities/Cult/constructs.yml b/Resources/Prototypes/_White/Entities/Cult/constructs.yml new file mode 100644 index 0000000000..524e89a9ac --- /dev/null +++ b/Resources/Prototypes/_White/Entities/Cult/constructs.yml @@ -0,0 +1,205 @@ +- type: entity + id: BaseConstruct + abstract: true + noSpawn: true + components: + - type: Input + context: "human" + - type: InputMover + - type: MovementSpeedModifier + baseWalkSpeed: 2.5 + baseSprintSpeed: 2.5 + - type: DamageOnHighSpeedImpact + damage: + types: + Blunt: 5 + soundHit: + path: /Audio/Effects/hit_kick.ogg + - type: Sprite + drawdepth: Mobs + sprite: White/Cult/mobs.rsi + noRot: true + - type: Clickable + - type: InteractionOutline + - type: Physics + bodyType: KinematicController + - type: Construct + - type: Fixtures + fixtures: + fix1: + shape: !type:PhysShapeCircle + radius: 0.35 + density: 300 + mask: + - FlyingMobMask + layer: + - FlyingMobLayer + - type: Damageable + damageContainer: Biological + - type: BecomeDustOnDeath + - type: MobThresholds + thresholds: + 0: Alive + 60: Dead + - type: MobState + allowedStates: + - Alive + - Dead + - type: HeatResistance + - type: CombatMode + canDisarm: false + - type: Internals + - type: Examiner + - type: Speech + - type: Visibility + - type: TypingIndicator + proto: guardian + - type: Pullable + - type: Actions + - type: Tag + tags: + - CannotSuicide + - DoorBumpOpener + +- type: entity + id: JuggernautConstruct + parent: BaseConstruct + name: juggernaut + description: big and scary + components: + - type: Sprite + state: golem + - type: MobThresholds + thresholds: + 0: Alive + 150: Dead + - type: MovementSpeedModifier + baseWalkSpeed: 2 + baseSprintSpeed: 2 + - type: Construct + actions: [JuggernautCreateWall] + - type: MeleeWeapon + hidden: true + angle: 30 + animation: WeaponArcFist + attackRate: 0.25 + damage: + types: + Structural: 90 + Blunt: 25 + +- type: entity + id: ArtificerConstruct + parent: BaseConstruct + name: artificer + description: create some shit + components: + - type: MobThresholds + thresholds: + 0: Alive + 50: Dead + - type: Sprite + state: boneshaper + - type: Construct + actions: + [ + ArtificerCreateSoulStone, + ArtificerCreateConstructShell, + ArtificerConvertCultistFloor, + ArtificerCreateCultistWall, + ArtificerCreateCultistAirlock, + ] + - type: Puller + needsHands: false + - type: MeleeWeapon + hidden: true + angle: 30 + animation: WeaponArcFist + attackRate: 0.85 + damage: + types: + Blunt: 5 + Structural: 60 + +- type: entity + id: WraithConstruct + parent: BaseConstruct + name: wraith + description: run... + components: + - type: MovementSpeedModifier + baseWalkSpeed: 3.0 + baseSprintSpeed: 3.0 + - type: MobThresholds + thresholds: + 0: Alive + 65: Dead + - type: Sprite + state: envoy_of_death + - type: StatusEffects + allowed: + - Incorporeal + - type: Construct + actions: [WraithPhase] + - type: MovementIgnoreGravity + - type: MeleeWeapon + hidden: true + angle: 30 + animation: WeaponArcFist + attackRate: 0.5 + damage: + types: + Blunt: 10 + Slash: 10 + +- type: entity + id: ReaperConstruct + parent: BaseConstruct + name: reaper + description: run... + components: + - type: MovementSpeedModifier + baseWalkSpeed: 3.0 + baseSprintSpeed: 3.0 + - type: MobThresholds + thresholds: + 0: Alive + 150: Dead + - type: Sprite + state: harvester + - type: Puller + needsHands: false + - type: MeleeWeapon + hidden: true + angle: 30 + animation: WeaponArcFist + attackRate: 0.9 + damage: + types: + Blunt: 20 + Slash: 20 + Structural: 80 + +- type: entity + id: ConstructShell + name: construct shell + description: empty construct shell + parent: BaseItem + components: + - type: Sprite + sprite: White/Cult/Entities/construct_cult.rsi + state: construct_cult + - type: ConstructShell + shardSlot: + ejectOnBreak: true + whitelist: + components: + - SoulShard + constructForms: [ArtificerConstruct, JuggernautConstruct, WraithConstruct] + - type: UserInterface + interfaces: + - key: enum.SelectConstructUi.Key + type: ConstructSelectorBui + - type: ContainerContainer + containers: + Shard: !type:ContainerSlot diff --git a/Resources/Prototypes/_White/Entities/Cult/other_structures.yml b/Resources/Prototypes/_White/Entities/Cult/other_structures.yml new file mode 100644 index 0000000000..4b79ff6ded --- /dev/null +++ b/Resources/Prototypes/_White/Entities/Cult/other_structures.yml @@ -0,0 +1,92 @@ +- type: entity + id: AirlockGlassCult + parent: Airlock + name: runic airlock + description: Strange glass airlock with a rune. + components: + - type: MeleeSound + soundGroups: + Brute: + path: + "/Audio/Effects/glass_hit.ogg" + - type: Door + occludes: false + - type: Occluder + enabled: false + - type: Sprite + sprite: /Textures/White/Cult/Structures/cult_airlock.rsi + - type: Fixtures + fixtures: + airlockFix: + shape: + !type:PhysShapeAabb + bounds: "-0.49,-0.49,0.49,0.49" # don't want this colliding with walls or they won't close + density: 100 + mask: + - FullTileMask + layer: #removed opaque from the layer, allowing lasers to pass through glass airlocks + - GlassAirlockLayer + - type: LayerChangeOnWeld + unWeldedLayer: GlassAirlockLayer + weldedLayer: GlassLayer + - type: RadiationBlocker + resistance: 2 + - type: RunicDoor + - type: Construction + graph: AirlockGlassCult + node: airlock + +- type: entity + id: CultGirder + parent: BaseStructureDynamic + name: runic girder + description: A large structural assembly made out of metal. This one have a rune on it. + components: + - type: Transform + anchored: true + noRot: true + - type: Physics + bodyType: Static + - type: Fixtures + fixtures: + fix1: + shape: + !type:PhysShapeAabb + bounds: "-0.45,-0.45,0.45,0.45" + density: 60 + mask: + - MachineMask + layer: + - GlassAirlockLayer + - type: InteractionOutline + - type: Sprite + sprite: /Textures/White/Cult/Structures/cult_girder.rsi + state: cultgirder + - 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: StaticPrice + price: 10 + - type: Construction + graph: CultGirder + node: girder + - type: RunicGirder diff --git a/Resources/Prototypes/_White/Object/wetstone.yml b/Resources/Prototypes/_White/Object/wetstone.yml new file mode 100644 index 0000000000..8089b23302 --- /dev/null +++ b/Resources/Prototypes/_White/Object/wetstone.yml @@ -0,0 +1,28 @@ +- type: entity + id: WetStone + parent: BaseItem + name: wet stone + description: wet stone + components: + - type: Sharpener + damageModifier: 5 + - type: Sprite + sprite: White/Items/Misc/wetstone.rsi + size: 1 + state: sharpener + - type: Item + size: 10 + sprite: White/Items/Misc/wetstone.rsi + +- type: entity + id: CultSharpener + parent: BaseItem + name: eldritch whetstone + description: wet stone + components: + - type: Sharpener + damageModifier: 15 + - type: Sprite + sprite: White/Items/Misc/wetstone.rsi + size: 1 + state: cult_sharpener diff --git a/Resources/Prototypes/_White/Tiles/cult.yml b/Resources/Prototypes/_White/Tiles/cult.yml new file mode 100644 index 0000000000..8e735e076d --- /dev/null +++ b/Resources/Prototypes/_White/Tiles/cult.yml @@ -0,0 +1,12 @@ +- type: tile + id: CultFloor + name: tiles-cult-floor + sprite: /Textures/White/Cult/Tiles/cult_tile.rsi/cult.png + variants: 1 + baseTurf: Plating + isSubfloor: false + canCrowbar: true + footstepSounds: + collection: FootstepFloor + itemDrop: FloorTileItemSteel + heatCapacity: 10000 diff --git a/Resources/Prototypes/_White/narsie.yml b/Resources/Prototypes/_White/narsie.yml new file mode 100644 index 0000000000..050227eb65 --- /dev/null +++ b/Resources/Prototypes/_White/narsie.yml @@ -0,0 +1,46 @@ +- type: entity + id: Narsie + name: Nar'si + components: + - type: Sprite + layers: + - map: [ "enum.NarsieLayer.Default" ] + state: narsie_spawn_anim + sprite: White/Cult/narsie.rsi + drawdepth: 100 + shader: unshaded + scale: 0.6, 0.6 + - type: RandomWalk + - type: Appearance + - type: Narsie + - type: Physics + bodyType: Dynamic + - type: Fixtures + fixtures: + Penis: + shape: + !type:PhysShapeCircle + radius: 0.35 + restitution: 0.8 + density: 1 + mask: + - None + layer: + - None + - type: Clickable + - type: MovementIgnoreGravity + - type: Pylon + tileConvertCooldown: 0.1 + convertEverything: true + tilesConvertRange: 15 + healingAuraRange: 100 + healingAuraDamage: + groups: + Brute: -5 + Burn: -5 + Toxin: -3 + Genetic: -1 + burnDamageOnInteract: + groups: + Burn: 5 + diff --git a/Resources/Prototypes/ai_factions.yml b/Resources/Prototypes/ai_factions.yml index 3dfb35c7a6..ad86e6852e 100644 --- a/Resources/Prototypes/ai_factions.yml +++ b/Resources/Prototypes/ai_factions.yml @@ -83,3 +83,14 @@ - Zombie - SimpleHostile - Dragon + +# WD EDIT STARt +- type: npcFaction + id: Cultist + hostile: + - NanoTrasen + - SimpleHostile + - Xeno + - PetsNT + - Syndicate +# WD EDIT END diff --git a/Resources/Prototypes/game_presets.yml b/Resources/Prototypes/game_presets.yml index 0cc753b856..dbdeebb627 100644 --- a/Resources/Prototypes/game_presets.yml +++ b/Resources/Prototypes/game_presets.yml @@ -123,3 +123,32 @@ rules: - Pirates - BasicStationEventScheduler + +- type: gamePreset + id: PeaceAndTranquility + alias: + - Peace + name: peace-and-tranquility-title + description: peace-and-tranquility-desc + showInVote: true + +- type: gamePreset + id: EventsMode + alias: + - Events + name: event-mode-title + description: event-mode-desc + showInVote: false + +#WD EDIT START +- type: gamePreset + id: Cult + alias: + - cult + name: CULT + description: CULT + showInVote: true + rules: + - Cult + - BasicStationEventScheduler +#WD EDIT END diff --git a/Resources/Prototypes/status_effects.yml b/Resources/Prototypes/status_effects.yml index a991bf4035..bc84dfbaf1 100644 --- a/Resources/Prototypes/status_effects.yml +++ b/Resources/Prototypes/status_effects.yml @@ -59,3 +59,8 @@ - type: statusEffect id: StaminaModifier + +#WD EDIT +- type: statusEffect + id: Incorporeal + diff --git a/Resources/Textures/Interface/Alerts/buff.png b/Resources/Textures/Interface/Alerts/buff.png new file mode 100644 index 0000000000..26ddf7fb0a Binary files /dev/null and b/Resources/Textures/Interface/Alerts/buff.png differ diff --git a/Resources/Textures/White/Cult/Effects/airlock_glow.rsi/doorglow.png b/Resources/Textures/White/Cult/Effects/airlock_glow.rsi/doorglow.png new file mode 100644 index 0000000000..1b255cc2cb Binary files /dev/null and b/Resources/Textures/White/Cult/Effects/airlock_glow.rsi/doorglow.png differ diff --git a/Resources/Textures/White/Cult/Effects/airlock_glow.rsi/meta.json b/Resources/Textures/White/Cult/Effects/airlock_glow.rsi/meta.json new file mode 100644 index 0000000000..ccbb4cbb8c --- /dev/null +++ b/Resources/Textures/White/Cult/Effects/airlock_glow.rsi/meta.json @@ -0,0 +1,28 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "doorglow", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/White/Cult/Effects/cult_inout.rsi/cultin.png b/Resources/Textures/White/Cult/Effects/cult_inout.rsi/cultin.png new file mode 100644 index 0000000000..5d937d4dbd Binary files /dev/null and b/Resources/Textures/White/Cult/Effects/cult_inout.rsi/cultin.png differ diff --git a/Resources/Textures/White/Cult/Effects/cult_inout.rsi/cultout.png b/Resources/Textures/White/Cult/Effects/cult_inout.rsi/cultout.png new file mode 100644 index 0000000000..cba5e50ddb Binary files /dev/null and b/Resources/Textures/White/Cult/Effects/cult_inout.rsi/cultout.png differ diff --git a/Resources/Textures/White/Cult/Effects/cult_inout.rsi/meta.json b/Resources/Textures/White/Cult/Effects/cult_inout.rsi/meta.json new file mode 100644 index 0000000000..f17f7ba628 --- /dev/null +++ b/Resources/Textures/White/Cult/Effects/cult_inout.rsi/meta.json @@ -0,0 +1,103 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "cultout", + "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 + ], + [ + 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 + ] + ] + }, + { + "name": "cultin", + "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 + ], + [ + 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/White/Cult/Effects/shield.rsi/meta.json b/Resources/Textures/White/Cult/Effects/shield.rsi/meta.json new file mode 100644 index 0000000000..ba8d998794 --- /dev/null +++ b/Resources/Textures/White/Cult/Effects/shield.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "shield-cult", + "delays": [ + [ + 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/White/Cult/Effects/shield.rsi/shield-cult.png b/Resources/Textures/White/Cult/Effects/shield.rsi/shield-cult.png new file mode 100644 index 0000000000..a4f75f45b7 Binary files /dev/null and b/Resources/Textures/White/Cult/Effects/shield.rsi/shield-cult.png differ diff --git a/Resources/Textures/White/Cult/Effects/tiles_spawn.rsi/floorglow.png b/Resources/Textures/White/Cult/Effects/tiles_spawn.rsi/floorglow.png new file mode 100644 index 0000000000..82e1c67ded Binary files /dev/null and b/Resources/Textures/White/Cult/Effects/tiles_spawn.rsi/floorglow.png differ diff --git a/Resources/Textures/White/Cult/Effects/tiles_spawn.rsi/meta.json b/Resources/Textures/White/Cult/Effects/tiles_spawn.rsi/meta.json new file mode 100644 index 0000000000..42c4c2f063 --- /dev/null +++ b/Resources/Textures/White/Cult/Effects/tiles_spawn.rsi/meta.json @@ -0,0 +1,28 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "floorglow", + "delays": [ + [ + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05, + 0.05 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/White/Cult/Effects/wall_glow.rsi/meta.json b/Resources/Textures/White/Cult/Effects/wall_glow.rsi/meta.json new file mode 100644 index 0000000000..d8f5c268ad --- /dev/null +++ b/Resources/Textures/White/Cult/Effects/wall_glow.rsi/meta.json @@ -0,0 +1,28 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "wallglow", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/White/Cult/Effects/wall_glow.rsi/wallglow.png b/Resources/Textures/White/Cult/Effects/wall_glow.rsi/wallglow.png new file mode 100644 index 0000000000..120ab642d6 Binary files /dev/null and b/Resources/Textures/White/Cult/Effects/wall_glow.rsi/wallglow.png differ diff --git a/Resources/Textures/White/Cult/Entities/construct_cult.rsi/construct_cult.png b/Resources/Textures/White/Cult/Entities/construct_cult.rsi/construct_cult.png new file mode 100644 index 0000000000..cdbc51ef66 Binary files /dev/null and b/Resources/Textures/White/Cult/Entities/construct_cult.rsi/construct_cult.png differ diff --git a/Resources/Textures/White/Cult/Entities/construct_cult.rsi/meta.json b/Resources/Textures/White/Cult/Entities/construct_cult.rsi/meta.json new file mode 100644 index 0000000000..92179919f6 --- /dev/null +++ b/Resources/Textures/White/Cult/Entities/construct_cult.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "construct_cult", + "delays": [ + [ + 0.5, + 0.3, + 0.5, + 0.3 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/White/Cult/Entities/mirror_shield.rsi/icon-off.png b/Resources/Textures/White/Cult/Entities/mirror_shield.rsi/icon-off.png new file mode 100644 index 0000000000..42872ed07d Binary files /dev/null and b/Resources/Textures/White/Cult/Entities/mirror_shield.rsi/icon-off.png differ diff --git a/Resources/Textures/White/Cult/Entities/mirror_shield.rsi/icon.png b/Resources/Textures/White/Cult/Entities/mirror_shield.rsi/icon.png new file mode 100644 index 0000000000..22ff0de071 Binary files /dev/null and b/Resources/Textures/White/Cult/Entities/mirror_shield.rsi/icon.png differ diff --git a/Resources/Textures/White/Cult/Entities/mirror_shield.rsi/meta.json b/Resources/Textures/White/Cult/Entities/mirror_shield.rsi/meta.json new file mode 100644 index 0000000000..d25e20f209 --- /dev/null +++ b/Resources/Textures/White/Cult/Entities/mirror_shield.rsi/meta.json @@ -0,0 +1,85 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.5, + 0.05, + 0.1, + 0.1 + ] + ] + }, + { + "name": "mirror-inhand-left", + "directions": 4, + "delays": [ + [ + 0.5, + 0.05, + 0.1, + 0.1 + ], + [ + 0.5, + 0.05, + 0.1, + 0.1 + ], + [ + 0.5, + 0.05, + 0.1, + 0.1 + ], + [ + 0.5, + 0.05, + 0.1, + 0.1 + ] + ] + }, + { + "name": "mirror-inhand-right", + "directions": 4, + "delays": [ + [ + 0.5, + 0.05, + 0.1, + 0.1 + ], + [ + 0.5, + 0.05, + 0.1, + 0.1 + ], + [ + 0.5, + 0.05, + 0.1, + 0.1 + ], + [ + 0.5, + 0.05, + 0.1, + 0.1 + ] + ] + }, + { + "name": "icon-off" + } + ] +} diff --git a/Resources/Textures/White/Cult/Entities/mirror_shield.rsi/mirror-inhand-left.png b/Resources/Textures/White/Cult/Entities/mirror_shield.rsi/mirror-inhand-left.png new file mode 100644 index 0000000000..23e00c0734 Binary files /dev/null and b/Resources/Textures/White/Cult/Entities/mirror_shield.rsi/mirror-inhand-left.png differ diff --git a/Resources/Textures/White/Cult/Entities/mirror_shield.rsi/mirror-inhand-right.png b/Resources/Textures/White/Cult/Entities/mirror_shield.rsi/mirror-inhand-right.png new file mode 100644 index 0000000000..0ce6509226 Binary files /dev/null and b/Resources/Textures/White/Cult/Entities/mirror_shield.rsi/mirror-inhand-right.png differ diff --git a/Resources/Textures/White/Cult/Entities/runic_metal.rsi/meta.json b/Resources/Textures/White/Cult/Entities/runic_metal.rsi/meta.json new file mode 100644 index 0000000000..ae7d0de07c --- /dev/null +++ b/Resources/Textures/White/Cult/Entities/runic_metal.rsi/meta.json @@ -0,0 +1,65 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "runic", + "delays": [ + [ + 5, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "runic_2", + "delays": [ + [ + 5, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "runic_3", + "delays": [ + [ + 5, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/White/Cult/Entities/runic_metal.rsi/runic.png b/Resources/Textures/White/Cult/Entities/runic_metal.rsi/runic.png new file mode 100644 index 0000000000..90e837d4b9 Binary files /dev/null and b/Resources/Textures/White/Cult/Entities/runic_metal.rsi/runic.png differ diff --git a/Resources/Textures/White/Cult/Entities/runic_metal.rsi/runic_2.png b/Resources/Textures/White/Cult/Entities/runic_metal.rsi/runic_2.png new file mode 100644 index 0000000000..90e837d4b9 Binary files /dev/null and b/Resources/Textures/White/Cult/Entities/runic_metal.rsi/runic_2.png differ diff --git a/Resources/Textures/White/Cult/Entities/runic_metal.rsi/runic_3.png b/Resources/Textures/White/Cult/Entities/runic_metal.rsi/runic_3.png new file mode 100644 index 0000000000..90e837d4b9 Binary files /dev/null and b/Resources/Textures/White/Cult/Entities/runic_metal.rsi/runic_3.png differ diff --git a/Resources/Textures/White/Cult/Entities/shuttle_curse.rsi/icon-off.png b/Resources/Textures/White/Cult/Entities/shuttle_curse.rsi/icon-off.png new file mode 100644 index 0000000000..b54ca0f671 Binary files /dev/null and b/Resources/Textures/White/Cult/Entities/shuttle_curse.rsi/icon-off.png differ diff --git a/Resources/Textures/White/Cult/Entities/shuttle_curse.rsi/icon.png b/Resources/Textures/White/Cult/Entities/shuttle_curse.rsi/icon.png new file mode 100644 index 0000000000..90530abc9f Binary files /dev/null and b/Resources/Textures/White/Cult/Entities/shuttle_curse.rsi/icon.png differ diff --git a/Resources/Textures/White/Cult/Entities/shuttle_curse.rsi/meta.json b/Resources/Textures/White/Cult/Entities/shuttle_curse.rsi/meta.json new file mode 100644 index 0000000000..d51ede7823 --- /dev/null +++ b/Resources/Textures/White/Cult/Entities/shuttle_curse.rsi/meta.json @@ -0,0 +1,24 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "icon-off" + } + ] +} diff --git a/Resources/Textures/White/Cult/Entities/veil_shifter.rsi/icon-on.png b/Resources/Textures/White/Cult/Entities/veil_shifter.rsi/icon-on.png new file mode 100644 index 0000000000..ade6a2bdd1 Binary files /dev/null and b/Resources/Textures/White/Cult/Entities/veil_shifter.rsi/icon-on.png differ diff --git a/Resources/Textures/White/Cult/Entities/veil_shifter.rsi/icon.png b/Resources/Textures/White/Cult/Entities/veil_shifter.rsi/icon.png new file mode 100644 index 0000000000..080e3da598 Binary files /dev/null and b/Resources/Textures/White/Cult/Entities/veil_shifter.rsi/icon.png differ diff --git a/Resources/Textures/White/Cult/Entities/veil_shifter.rsi/meta.json b/Resources/Textures/White/Cult/Entities/veil_shifter.rsi/meta.json new file mode 100644 index 0000000000..5d6ddae63b --- /dev/null +++ b/Resources/Textures/White/Cult/Entities/veil_shifter.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon-on", + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "icon" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/White/Cult/Entities/void_torch.rsi/icon-on.png b/Resources/Textures/White/Cult/Entities/void_torch.rsi/icon-on.png new file mode 100644 index 0000000000..3040ae6a83 Binary files /dev/null and b/Resources/Textures/White/Cult/Entities/void_torch.rsi/icon-on.png differ diff --git a/Resources/Textures/White/Cult/Entities/void_torch.rsi/icon.png b/Resources/Textures/White/Cult/Entities/void_torch.rsi/icon.png new file mode 100644 index 0000000000..6cfbbb737e Binary files /dev/null and b/Resources/Textures/White/Cult/Entities/void_torch.rsi/icon.png differ diff --git a/Resources/Textures/White/Cult/Entities/void_torch.rsi/meta.json b/Resources/Textures/White/Cult/Entities/void_torch.rsi/meta.json new file mode 100644 index 0000000000..545d9e054f --- /dev/null +++ b/Resources/Textures/White/Cult/Entities/void_torch.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon-on", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/White/Cult/Structures/blood_altar.rsi/icon-off.png b/Resources/Textures/White/Cult/Structures/blood_altar.rsi/icon-off.png new file mode 100644 index 0000000000..515967ba7e Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/blood_altar.rsi/icon-off.png differ diff --git a/Resources/Textures/White/Cult/Structures/blood_altar.rsi/icon.png b/Resources/Textures/White/Cult/Structures/blood_altar.rsi/icon.png new file mode 100644 index 0000000000..7930dff95c Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/blood_altar.rsi/icon.png differ diff --git a/Resources/Textures/White/Cult/Structures/blood_altar.rsi/meta.json b/Resources/Textures/White/Cult/Structures/blood_altar.rsi/meta.json new file mode 100644 index 0000000000..641b59bb8e --- /dev/null +++ b/Resources/Textures/White/Cult/Structures/blood_altar.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "icon-off" + } + ] +} diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/assembly.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/assembly.png new file mode 100644 index 0000000000..7777aaa31e Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/assembly.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/bolted_open_unlit.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/bolted_open_unlit.png new file mode 100644 index 0000000000..4c59d3a28c Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/bolted_open_unlit.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/bolted_unlit.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/bolted_unlit.png new file mode 100644 index 0000000000..da1ae6172a Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/bolted_unlit.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/closed.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/closed.png new file mode 100644 index 0000000000..e9626ba15f Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/closed.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/closed_unlit.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/closed_unlit.png new file mode 100644 index 0000000000..4c59d3a28c Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/closed_unlit.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/closing.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/closing.png new file mode 100644 index 0000000000..3054d5f6a9 Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/closing.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/closing_unlit.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/closing_unlit.png new file mode 100644 index 0000000000..1da0bc0e54 Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/closing_unlit.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/deny_unlit.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/deny_unlit.png new file mode 100644 index 0000000000..23c6522a47 Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/deny_unlit.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/emergency_open_unlit.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/emergency_open_unlit.png new file mode 100644 index 0000000000..4c59d3a28c Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/emergency_open_unlit.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/emergency_unlit.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/emergency_unlit.png new file mode 100644 index 0000000000..e4cc5b0212 Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/emergency_unlit.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/meta.json b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/meta.json new file mode 100644 index 0000000000..c48f5e427e --- /dev/null +++ b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/meta.json @@ -0,0 +1,197 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "open" + }, + { + "name": "closed" + }, + { + "name": "closing", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "opening", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "assembly" + }, + { + "name": "bolted_unlit" + }, + { + "name": "welded" + }, + { + "name": "closing_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "deny_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "emergency_unlit", + "delays": [ + [ + 1.2, + 1.2 + ] + ] + }, + { + "name": "opening_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "panel_closed" + }, + { + "name": "panel_open" + }, + { + "name": "panel_opening", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "panel_closing", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_damaged", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 1.7 + ] + ] + }, + { + "name": "sparks_open", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_broken", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "bolted_open_unlit" + }, + { + "name": "closed_unlit" + }, + { + "name": "emergency_open_unlit" + }, + { + "name": "open_unlit" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/open.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/open.png new file mode 100644 index 0000000000..92c2f27a09 Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/open.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/open_unlit.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/open_unlit.png new file mode 100644 index 0000000000..4c59d3a28c Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/open_unlit.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/opening.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/opening.png new file mode 100644 index 0000000000..8b792e6bcd Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/opening.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/opening_unlit.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/opening_unlit.png new file mode 100644 index 0000000000..18d485b999 Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/opening_unlit.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/panel_closed.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/panel_closed.png new file mode 100644 index 0000000000..3191156971 Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/panel_closed.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/panel_closing.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/panel_closing.png new file mode 100644 index 0000000000..9ff520d4e1 Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/panel_closing.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/panel_open.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/panel_open.png new file mode 100644 index 0000000000..4c59d3a28c Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/panel_open.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/panel_opening.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/panel_opening.png new file mode 100644 index 0000000000..7f24d5bf2a Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/panel_opening.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/sparks.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/sparks.png new file mode 100644 index 0000000000..e95f427277 Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/sparks.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/sparks_broken.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/sparks_broken.png new file mode 100644 index 0000000000..96424a7689 Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/sparks_broken.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/sparks_damaged.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/sparks_damaged.png new file mode 100644 index 0000000000..c577e9d436 Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/sparks_damaged.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/sparks_open.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/sparks_open.png new file mode 100644 index 0000000000..c79c5a7710 Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/sparks_open.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/welded.png b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/welded.png new file mode 100644 index 0000000000..274ad20898 Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_airlock.rsi/welded.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_girder.rsi/cultgirder.png b/Resources/Textures/White/Cult/Structures/cult_girder.rsi/cultgirder.png new file mode 100644 index 0000000000..70ec581c81 Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/cult_girder.rsi/cultgirder.png differ diff --git a/Resources/Textures/White/Cult/Structures/cult_girder.rsi/meta.json b/Resources/Textures/White/Cult/Structures/cult_girder.rsi/meta.json new file mode 100644 index 0000000000..7ea2c16749 --- /dev/null +++ b/Resources/Textures/White/Cult/Structures/cult_girder.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "cultgirder" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/White/Cult/Structures/forge.rsi/icon-off.png b/Resources/Textures/White/Cult/Structures/forge.rsi/icon-off.png new file mode 100644 index 0000000000..e0f4ac23c1 Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/forge.rsi/icon-off.png differ diff --git a/Resources/Textures/White/Cult/Structures/forge.rsi/icon.png b/Resources/Textures/White/Cult/Structures/forge.rsi/icon.png new file mode 100644 index 0000000000..debd45476f Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/forge.rsi/icon.png differ diff --git a/Resources/Textures/White/Cult/Structures/forge.rsi/meta.json b/Resources/Textures/White/Cult/Structures/forge.rsi/meta.json new file mode 100644 index 0000000000..d51ede7823 --- /dev/null +++ b/Resources/Textures/White/Cult/Structures/forge.rsi/meta.json @@ -0,0 +1,24 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "icon-off" + } + ] +} diff --git a/Resources/Textures/White/Cult/Structures/pylon.rsi/meta.json b/Resources/Textures/White/Cult/Structures/pylon.rsi/meta.json new file mode 100644 index 0000000000..593e468db4 --- /dev/null +++ b/Resources/Textures/White/Cult/Structures/pylon.rsi/meta.json @@ -0,0 +1,33 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "pylon", + "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 + ] + ] + }, + { + "name": "pylon_off" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/White/Cult/Structures/pylon.rsi/pylon.png b/Resources/Textures/White/Cult/Structures/pylon.rsi/pylon.png new file mode 100644 index 0000000000..01bb1282d1 Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/pylon.rsi/pylon.png differ diff --git a/Resources/Textures/White/Cult/Structures/pylon.rsi/pylon_off.png b/Resources/Textures/White/Cult/Structures/pylon.rsi/pylon_off.png new file mode 100644 index 0000000000..b1f3932dcb Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/pylon.rsi/pylon_off.png differ diff --git a/Resources/Textures/White/Cult/Structures/tome_altar.rsi/icon-off.png b/Resources/Textures/White/Cult/Structures/tome_altar.rsi/icon-off.png new file mode 100644 index 0000000000..f422120320 Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/tome_altar.rsi/icon-off.png differ diff --git a/Resources/Textures/White/Cult/Structures/tome_altar.rsi/icon.png b/Resources/Textures/White/Cult/Structures/tome_altar.rsi/icon.png new file mode 100644 index 0000000000..e6af3e3603 Binary files /dev/null and b/Resources/Textures/White/Cult/Structures/tome_altar.rsi/icon.png differ diff --git a/Resources/Textures/White/Cult/Structures/tome_altar.rsi/meta.json b/Resources/Textures/White/Cult/Structures/tome_altar.rsi/meta.json new file mode 100644 index 0000000000..d51ede7823 --- /dev/null +++ b/Resources/Textures/White/Cult/Structures/tome_altar.rsi/meta.json @@ -0,0 +1,24 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "icon-off" + } + ] +} diff --git a/Resources/Textures/White/Cult/Tiles/cult_tile.rsi/cult.png b/Resources/Textures/White/Cult/Tiles/cult_tile.rsi/cult.png new file mode 100644 index 0000000000..da8f798242 Binary files /dev/null and b/Resources/Textures/White/Cult/Tiles/cult_tile.rsi/cult.png differ diff --git a/Resources/Textures/White/Cult/Tiles/cult_tile.rsi/meta.json b/Resources/Textures/White/Cult/Tiles/cult_tile.rsi/meta.json new file mode 100644 index 0000000000..fb9e6e7af6 --- /dev/null +++ b/Resources/Textures/White/Cult/Tiles/cult_tile.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "cult" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/abyssal_gaze.png b/Resources/Textures/White/Cult/actions_cult.rsi/abyssal_gaze.png new file mode 100644 index 0000000000..21e6aa2fa6 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/abyssal_gaze.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/areaconvert.png b/Resources/Textures/White/Cult/actions_cult.rsi/areaconvert.png new file mode 100644 index 0000000000..d97d8d1c6b Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/areaconvert.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/armor.png b/Resources/Textures/White/Cult/actions_cult.rsi/armor.png new file mode 100644 index 0000000000..b005a51ca4 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/armor.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/artificer.png b/Resources/Textures/White/Cult/actions_cult.rsi/artificer.png new file mode 100644 index 0000000000..3f1f0919b0 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/artificer.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/back.png b/Resources/Textures/White/Cult/actions_cult.rsi/back.png new file mode 100644 index 0000000000..ad552cd873 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/back.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/barrier.png b/Resources/Textures/White/Cult/actions_cult.rsi/barrier.png new file mode 100644 index 0000000000..5371583bc9 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/barrier.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/blood_barrage.png b/Resources/Textures/White/Cult/actions_cult.rsi/blood_barrage.png new file mode 100644 index 0000000000..50800e7490 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/blood_barrage.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/blood_charge.png b/Resources/Textures/White/Cult/actions_cult.rsi/blood_charge.png new file mode 100644 index 0000000000..65a018b436 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/blood_charge.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/blood_dagger.png b/Resources/Textures/White/Cult/actions_cult.rsi/blood_dagger.png new file mode 100644 index 0000000000..9159067b56 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/blood_dagger.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/blood_rites.png b/Resources/Textures/White/Cult/actions_cult.rsi/blood_rites.png new file mode 100644 index 0000000000..ef8df7780a Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/blood_rites.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/bloodspear.png b/Resources/Textures/White/Cult/actions_cult.rsi/bloodspear.png new file mode 100644 index 0000000000..2cc9f62555 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/bloodspear.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/carve.png b/Resources/Textures/White/Cult/actions_cult.rsi/carve.png new file mode 100644 index 0000000000..970c0d6831 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/carve.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/cuff.png b/Resources/Textures/White/Cult/actions_cult.rsi/cuff.png new file mode 100644 index 0000000000..149b197549 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/cuff.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/cult_comms.png b/Resources/Textures/White/Cult/actions_cult.rsi/cult_comms.png new file mode 100644 index 0000000000..174fd65668 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/cult_comms.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/cult_mark.png b/Resources/Textures/White/Cult/actions_cult.rsi/cult_mark.png new file mode 100644 index 0000000000..0d8d149326 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/cult_mark.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/cultfist.png b/Resources/Textures/White/Cult/actions_cult.rsi/cultfist.png new file mode 100644 index 0000000000..3a04302179 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/cultfist.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/cultforcewall.png b/Resources/Textures/White/Cult/actions_cult.rsi/cultforcewall.png new file mode 100644 index 0000000000..7a15af1b30 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/cultforcewall.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/cultvote.png b/Resources/Textures/White/Cult/actions_cult.rsi/cultvote.png new file mode 100644 index 0000000000..250c045e7c Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/cultvote.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/death_dagger.png b/Resources/Textures/White/Cult/actions_cult.rsi/death_dagger.png new file mode 100644 index 0000000000..43058c0206 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/death_dagger.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/deathtome.png b/Resources/Textures/White/Cult/actions_cult.rsi/deathtome.png new file mode 100644 index 0000000000..b43e63b011 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/deathtome.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/dominate.png b/Resources/Textures/White/Cult/actions_cult.rsi/dominate.png new file mode 100644 index 0000000000..222bdb8ee0 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/dominate.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/draw.png b/Resources/Textures/White/Cult/actions_cult.rsi/draw.png new file mode 100644 index 0000000000..af7a893144 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/draw.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/emp.png b/Resources/Textures/White/Cult/actions_cult.rsi/emp.png new file mode 100644 index 0000000000..4c3baaddfc Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/emp.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/equip.png b/Resources/Textures/White/Cult/actions_cult.rsi/equip.png new file mode 100644 index 0000000000..1d2f7bfc2b Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/equip.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/firetome.png b/Resources/Textures/White/Cult/actions_cult.rsi/firetome.png new file mode 100644 index 0000000000..55728803c3 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/firetome.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/floorconstruct.png b/Resources/Textures/White/Cult/actions_cult.rsi/floorconstruct.png new file mode 100644 index 0000000000..68d59ee95f Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/floorconstruct.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/gone.png b/Resources/Textures/White/Cult/actions_cult.rsi/gone.png new file mode 100644 index 0000000000..869eba7ffd Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/gone.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/hell_dagger.png b/Resources/Textures/White/Cult/actions_cult.rsi/hell_dagger.png new file mode 100644 index 0000000000..843b0fef94 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/hell_dagger.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/helltome.png b/Resources/Textures/White/Cult/actions_cult.rsi/helltome.png new file mode 100644 index 0000000000..c2d4091d1d Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/helltome.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/horror.png b/Resources/Textures/White/Cult/actions_cult.rsi/horror.png new file mode 100644 index 0000000000..7f0e189a0b Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/horror.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/lesserconstruct.png b/Resources/Textures/White/Cult/actions_cult.rsi/lesserconstruct.png new file mode 100644 index 0000000000..465b992605 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/lesserconstruct.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/manip.png b/Resources/Textures/White/Cult/actions_cult.rsi/manip.png new file mode 100644 index 0000000000..76993c2021 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/manip.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/meta.json b/Resources/Textures/White/Cult/actions_cult.rsi/meta.json new file mode 100644 index 0000000000..e6ea9f56d4 --- /dev/null +++ b/Resources/Textures/White/Cult/actions_cult.rsi/meta.json @@ -0,0 +1,160 @@ +{ + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "artificer" + }, + { + "name": "summonsoulstone" + }, + { + "name": "cult_comms" + }, + { + "name": "cultforcewall" + }, + { + "name": "telerune" + }, + { + "name": "phaseshift" + }, + { + "name": "lesserconstruct" + }, + { + "name": "floorconstruct" + }, + { + "name": "areaconvert" + }, + { + "name": "cultvote" + }, + { + "name": "abyssal_gaze" + }, + { + "name": "dominate" + }, + { + "name": "cult_mark" + }, + { + "name": "sintouch" + }, + { + "name": "emp" + }, + { + "name": "cuff" + }, + { + "name": "transmute" + }, + { + "name": "blood_barrage" + }, + { + "name": "carve" + }, + { + "name": "teleport" + }, + { + "name": "horror" + }, + { + "name": "blood_rites" + }, + { + "name": "veiling" + }, + { + "name": "revealing" + }, + { + "name": "equip" + }, + { + "name": "shackles" + }, + { + "name": "stun" + }, + { + "name": "armor" + }, + { + "name": "gone" + }, + { + "name": "back" + }, + { + "name": "draw" + }, + { + "name": "revive" + }, + { + "name": "barrier" + }, + { + "name": "cultfist" + }, + { + "name": "manip" + }, + { + "name": "bloodspear" + }, + { + "name": "blood_dagger" + }, + { + "name": "hell_dagger" + }, + { + "name": "death_dagger" + }, + { + "name": "tome" + }, + { + "name": "firetome" + }, + { + "name": "deathtome", + "delays": [ + [ + 5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5 + ] + ] + }, + { + "name": "helltome", + "delays": [ + [ + 1, + 1, + 1 + ] + ] + }, + { + "name": "blood_charge" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/phaseshift.png b/Resources/Textures/White/Cult/actions_cult.rsi/phaseshift.png new file mode 100644 index 0000000000..b50beeb5cc Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/phaseshift.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/revealing.png b/Resources/Textures/White/Cult/actions_cult.rsi/revealing.png new file mode 100644 index 0000000000..c6b68d8f47 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/revealing.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/revive.png b/Resources/Textures/White/Cult/actions_cult.rsi/revive.png new file mode 100644 index 0000000000..df2e844ed4 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/revive.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/shackles.png b/Resources/Textures/White/Cult/actions_cult.rsi/shackles.png new file mode 100644 index 0000000000..279836bd3a Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/shackles.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/sintouch.png b/Resources/Textures/White/Cult/actions_cult.rsi/sintouch.png new file mode 100644 index 0000000000..4011cefe99 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/sintouch.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/stun.png b/Resources/Textures/White/Cult/actions_cult.rsi/stun.png new file mode 100644 index 0000000000..d19d7ff797 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/stun.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/summonsoulstone.png b/Resources/Textures/White/Cult/actions_cult.rsi/summonsoulstone.png new file mode 100644 index 0000000000..647e1928d4 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/summonsoulstone.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/teleport.png b/Resources/Textures/White/Cult/actions_cult.rsi/teleport.png new file mode 100644 index 0000000000..387eb28800 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/teleport.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/telerune.png b/Resources/Textures/White/Cult/actions_cult.rsi/telerune.png new file mode 100644 index 0000000000..4f9dd15375 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/telerune.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/tome.png b/Resources/Textures/White/Cult/actions_cult.rsi/tome.png new file mode 100644 index 0000000000..d7f799be31 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/tome.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/transmute.png b/Resources/Textures/White/Cult/actions_cult.rsi/transmute.png new file mode 100644 index 0000000000..8bbcf43762 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/transmute.png differ diff --git a/Resources/Textures/White/Cult/actions_cult.rsi/veiling.png b/Resources/Textures/White/Cult/actions_cult.rsi/veiling.png new file mode 100644 index 0000000000..e551d65cb9 Binary files /dev/null and b/Resources/Textures/White/Cult/actions_cult.rsi/veiling.png differ diff --git a/Resources/Textures/White/Cult/apocalypse.rsi/apoc.png b/Resources/Textures/White/Cult/apocalypse.rsi/apoc.png new file mode 100644 index 0000000000..4821cc1d81 Binary files /dev/null and b/Resources/Textures/White/Cult/apocalypse.rsi/apoc.png differ diff --git a/Resources/Textures/White/Cult/apocalypse.rsi/meta.json b/Resources/Textures/White/Cult/apocalypse.rsi/meta.json new file mode 100644 index 0000000000..74b9e8a0a4 --- /dev/null +++ b/Resources/Textures/White/Cult/apocalypse.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "version": 1, + "size": { + "x": 96, + "y": 96 + }, + "states": [ + { + "name": "apoc" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/White/Cult/cult_hud.rsi/cult.png b/Resources/Textures/White/Cult/cult_hud.rsi/cult.png new file mode 100644 index 0000000000..c88eb674c9 Binary files /dev/null and b/Resources/Textures/White/Cult/cult_hud.rsi/cult.png differ diff --git a/Resources/Textures/White/Cult/cult_hud.rsi/cultmaster.png b/Resources/Textures/White/Cult/cult_hud.rsi/cultmaster.png new file mode 100644 index 0000000000..679f0caace Binary files /dev/null and b/Resources/Textures/White/Cult/cult_hud.rsi/cultmaster.png differ diff --git a/Resources/Textures/White/Cult/cult_hud.rsi/meta.json b/Resources/Textures/White/Cult/cult_hud.rsi/meta.json new file mode 100644 index 0000000000..10fff1ba76 --- /dev/null +++ b/Resources/Textures/White/Cult/cult_hud.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "cult" + }, + { + "name": "cultmaster", + "delays": [ + [ + 1, + 1 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/White/Cult/interface.rsi/icon.png b/Resources/Textures/White/Cult/interface.rsi/icon.png new file mode 100644 index 0000000000..3dc00c1054 Binary files /dev/null and b/Resources/Textures/White/Cult/interface.rsi/icon.png differ diff --git a/Resources/Textures/White/Cult/interface.rsi/meta.json b/Resources/Textures/White/Cult/interface.rsi/meta.json new file mode 100644 index 0000000000..9d022a974c --- /dev/null +++ b/Resources/Textures/White/Cult/interface.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + } + ] +} diff --git a/Resources/Textures/White/Cult/mobs.rsi/artificer.png b/Resources/Textures/White/Cult/mobs.rsi/artificer.png new file mode 100644 index 0000000000..d759f59974 Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/artificer.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/banshee.png b/Resources/Textures/White/Cult/mobs.rsi/banshee.png new file mode 100644 index 0000000000..5d4f9207ce Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/banshee.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/behemoth.png b/Resources/Textures/White/Cult/mobs.rsi/behemoth.png new file mode 100644 index 0000000000..0f8ec8b6c7 Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/behemoth.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/boneshaper.png b/Resources/Textures/White/Cult/mobs.rsi/boneshaper.png new file mode 100644 index 0000000000..722e14d881 Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/boneshaper.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/envoy_of_death.png b/Resources/Textures/White/Cult/mobs.rsi/envoy_of_death.png new file mode 100644 index 0000000000..5954d62763 Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/envoy_of_death.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/floating.png b/Resources/Textures/White/Cult/mobs.rsi/floating.png new file mode 100644 index 0000000000..1faadf2744 Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/floating.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/ghost-narsie.png b/Resources/Textures/White/Cult/mobs.rsi/ghost-narsie.png new file mode 100644 index 0000000000..a97a6944f4 Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/ghost-narsie.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/golem.png b/Resources/Textures/White/Cult/mobs.rsi/golem.png new file mode 100644 index 0000000000..5fd7268066 Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/golem.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/harvester.png b/Resources/Textures/White/Cult/mobs.rsi/harvester.png new file mode 100644 index 0000000000..20c58cc73c Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/harvester.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/hell_knight.png b/Resources/Textures/White/Cult/mobs.rsi/hell_knight.png new file mode 100644 index 0000000000..ffd62b467f Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/hell_knight.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/ifrit.png b/Resources/Textures/White/Cult/mobs.rsi/ifrit.png new file mode 100644 index 0000000000..95382477f2 Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/ifrit.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/incarnation_of_pain.png b/Resources/Textures/White/Cult/mobs.rsi/incarnation_of_pain.png new file mode 100644 index 0000000000..6604e1d8e0 Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/incarnation_of_pain.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/infernal_rift_in.png b/Resources/Textures/White/Cult/mobs.rsi/infernal_rift_in.png new file mode 100644 index 0000000000..49724b2c76 Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/infernal_rift_in.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/infernal_rift_out.png b/Resources/Textures/White/Cult/mobs.rsi/infernal_rift_out.png new file mode 100644 index 0000000000..4ef0579f50 Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/infernal_rift_out.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/lost_soul.png b/Resources/Textures/White/Cult/mobs.rsi/lost_soul.png new file mode 100644 index 0000000000..a1aea1365c Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/lost_soul.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/meta.json b/Resources/Textures/White/Cult/mobs.rsi/meta.json new file mode 100644 index 0000000000..d9e5448c93 --- /dev/null +++ b/Resources/Textures/White/Cult/mobs.rsi/meta.json @@ -0,0 +1,632 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Paradise Station", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "artificer", + "directions": 4 + }, + { + "name": "behemoth", + "directions": 4 + }, + { + "name": "floating", + "directions": 4, + "delays": [ + [ + 1, + 1, + 1, + 1 + ], + [ + 1, + 1, + 1, + 1 + ], + [ + 1, + 1, + 1, + 1 + ], + [ + 1, + 1, + 1, + 1 + ] + ] + }, + { + "name": "phase_shift", + "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, + 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, + 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 + ] + ] + }, + { + "name": "phase_shift2", + "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, + 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, + 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 + ] + ] + }, + { + "name": "harvester", + "directions": 4 + }, + { + "name": "summoner", + "directions": 4, + "delays": [ + [ + 0.5, + 0.5, + 0.5, + 0.5 + ], + [ + 0.5, + 0.5, + 0.5, + 0.5 + ], + [ + 0.5, + 0.5, + 0.5, + 0.5 + ], + [ + 0.5, + 0.5, + 0.5, + 0.5 + ] + ] + }, + { + "name": "incarnation_of_pain", + "directions": 4, + "delays": [ + [ + 0.4, + 0.4 + ], + [ + 0.4, + 0.4 + ], + [ + 0.4, + 0.4 + ], + [ + 0.4, + 0.4 + ] + ] + }, + { + "name": "hell_knight", + "directions": 4, + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "infernal_rift_out", + "delays": [ + [ + 0.15, + 0.15, + 0.15, + 0.15, + 0.15, + 0.15 + ] + ] + }, + { + "name": "infernal_rift_in", + "directions": 4, + "delays": [ + [ + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13 + ], + [ + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13 + ], + [ + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13 + ], + [ + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13 + ] + ] + }, + { + "name": "lost_soul", + "directions": 4, + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "boneshaper", + "directions": 4 + }, + { + "name": "golem", + "directions": 4 + }, + { + "name": "envoy_of_death", + "directions": 4, + "delays": [ + [ + 1, + 1, + 1, + 1 + ], + [ + 1, + 1, + 1, + 1 + ], + [ + 1, + 1, + 1, + 1 + ], + [ + 1, + 1, + 1, + 1 + ] + ] + }, + { + "name": "shadowstep_out", + "directions": 4, + "delays": [ + [ + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13 + ], + [ + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13 + ], + [ + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13 + ], + [ + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13 + ] + ] + }, + { + "name": "shadowstep_in", + "directions": 4, + "delays": [ + [ + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13 + ], + [ + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13 + ], + [ + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13 + ], + [ + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13, + 0.13 + ] + ] + }, + { + "name": "necrophage", + "directions": 4, + "delays": [ + [ + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075 + ], + [ + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075 + ], + [ + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075 + ], + [ + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075, + 0.075 + ] + ] + }, + { + "name": "shade", + "directions": 4 + }, + { + "name": "shade_angelic", + "directions": 4 + }, + { + "name": "shade2", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "ghost-narsie", + "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 + ] + ] + }, + { + "name": "ifrit", + "directions": 4, + "delays": [ + [ + 0.1, + 0.2, + 0.2, + 0.2, + 0.1 + ], + [ + 0.1, + 0.2, + 0.2, + 0.2, + 0.1 + ], + [ + 0.1, + 0.2, + 0.2, + 0.2, + 0.1 + ], + [ + 0.1, + 0.2, + 0.2, + 0.2, + 0.1 + ] + ] + }, + { + "name": "banshee", + "directions": 4 + }, + { + "name": "shade_dead" + } + ] +} diff --git a/Resources/Textures/White/Cult/mobs.rsi/necrophage.png b/Resources/Textures/White/Cult/mobs.rsi/necrophage.png new file mode 100644 index 0000000000..44b5dffef9 Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/necrophage.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/phase_shift.png b/Resources/Textures/White/Cult/mobs.rsi/phase_shift.png new file mode 100644 index 0000000000..25862857c4 Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/phase_shift.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/phase_shift2.png b/Resources/Textures/White/Cult/mobs.rsi/phase_shift2.png new file mode 100644 index 0000000000..8891a768be Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/phase_shift2.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/shade.png b/Resources/Textures/White/Cult/mobs.rsi/shade.png new file mode 100644 index 0000000000..848c30ee16 Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/shade.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/shade2.png b/Resources/Textures/White/Cult/mobs.rsi/shade2.png new file mode 100644 index 0000000000..db3106ae2d Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/shade2.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/shade_angelic.png b/Resources/Textures/White/Cult/mobs.rsi/shade_angelic.png new file mode 100644 index 0000000000..448324cbd6 Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/shade_angelic.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/shade_dead.png b/Resources/Textures/White/Cult/mobs.rsi/shade_dead.png new file mode 100644 index 0000000000..db4f7ef867 Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/shade_dead.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/shadowstep_in.png b/Resources/Textures/White/Cult/mobs.rsi/shadowstep_in.png new file mode 100644 index 0000000000..cd09a46e58 Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/shadowstep_in.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/shadowstep_out.png b/Resources/Textures/White/Cult/mobs.rsi/shadowstep_out.png new file mode 100644 index 0000000000..3f308c2b4b Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/shadowstep_out.png differ diff --git a/Resources/Textures/White/Cult/mobs.rsi/summoner.png b/Resources/Textures/White/Cult/mobs.rsi/summoner.png new file mode 100644 index 0000000000..3feeaf1de4 Binary files /dev/null and b/Resources/Textures/White/Cult/mobs.rsi/summoner.png differ diff --git a/Resources/Textures/White/Cult/narsie.rsi/meta.json b/Resources/Textures/White/Cult/narsie.rsi/meta.json new file mode 100644 index 0000000000..8fd3919ba1 --- /dev/null +++ b/Resources/Textures/White/Cult/narsie.rsi/meta.json @@ -0,0 +1,57 @@ +{ + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "version": 1, + "size": { + "x": 504, + "y": 532 + }, + "states": [ + { + "name": "narsie", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "narsie_spawn_anim", + "delays": [ + [ + 0.3, + 0.1, + 0.1, + 0.1, + 0.1, + 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, + 0.1, + 0.2 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/White/Cult/narsie.rsi/narsie.png b/Resources/Textures/White/Cult/narsie.rsi/narsie.png new file mode 100644 index 0000000000..e5643681cc Binary files /dev/null and b/Resources/Textures/White/Cult/narsie.rsi/narsie.png differ diff --git a/Resources/Textures/White/Cult/narsie.rsi/narsie_spawn_anim.png b/Resources/Textures/White/Cult/narsie.rsi/narsie_spawn_anim.png new file mode 100644 index 0000000000..6bec577310 Binary files /dev/null and b/Resources/Textures/White/Cult/narsie.rsi/narsie_spawn_anim.png differ diff --git a/Resources/Textures/White/Cult/pentagram.rsi/halo1.png b/Resources/Textures/White/Cult/pentagram.rsi/halo1.png new file mode 100644 index 0000000000..5d73c095cb Binary files /dev/null and b/Resources/Textures/White/Cult/pentagram.rsi/halo1.png differ diff --git a/Resources/Textures/White/Cult/pentagram.rsi/halo2.png b/Resources/Textures/White/Cult/pentagram.rsi/halo2.png new file mode 100644 index 0000000000..3b2860a726 Binary files /dev/null and b/Resources/Textures/White/Cult/pentagram.rsi/halo2.png differ diff --git a/Resources/Textures/White/Cult/pentagram.rsi/halo3.png b/Resources/Textures/White/Cult/pentagram.rsi/halo3.png new file mode 100644 index 0000000000..439ef1005c Binary files /dev/null and b/Resources/Textures/White/Cult/pentagram.rsi/halo3.png differ diff --git a/Resources/Textures/White/Cult/pentagram.rsi/halo4.png b/Resources/Textures/White/Cult/pentagram.rsi/halo4.png new file mode 100644 index 0000000000..9221a45b7a Binary files /dev/null and b/Resources/Textures/White/Cult/pentagram.rsi/halo4.png differ diff --git a/Resources/Textures/White/Cult/pentagram.rsi/halo5.png b/Resources/Textures/White/Cult/pentagram.rsi/halo5.png new file mode 100644 index 0000000000..8ce4342321 Binary files /dev/null and b/Resources/Textures/White/Cult/pentagram.rsi/halo5.png differ diff --git a/Resources/Textures/White/Cult/pentagram.rsi/halo6.png b/Resources/Textures/White/Cult/pentagram.rsi/halo6.png new file mode 100644 index 0000000000..1457a6e3c6 Binary files /dev/null and b/Resources/Textures/White/Cult/pentagram.rsi/halo6.png differ diff --git a/Resources/Textures/White/Cult/pentagram.rsi/meta.json b/Resources/Textures/White/Cult/pentagram.rsi/meta.json new file mode 100644 index 0000000000..5a7e1a6389 --- /dev/null +++ b/Resources/Textures/White/Cult/pentagram.rsi/meta.json @@ -0,0 +1,419 @@ +{ + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "version": 1, + "size": { + "x": 32, + "y": 64 + }, + "states": [ + { + "name": "halo1", + "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, + 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, + 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, + 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 + ] + ] + }, + { + "name": "halo2", + "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, + 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, + 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, + 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 + ] + ] + }, + { + "name": "halo3", + "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, + 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, + 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, + 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 + ] + ] + }, + { + "name": "halo4", + "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, + 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, + 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, + 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 + ] + ] + }, + { + "name": "halo5", + "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, + 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, + 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, + 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 + ] + ] + }, + { + "name": "halo6", + "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, + 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, + 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, + 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/White/Cult/rune.rsi/barrier.png b/Resources/Textures/White/Cult/rune.rsi/barrier.png new file mode 100644 index 0000000000..41386c59cc Binary files /dev/null and b/Resources/Textures/White/Cult/rune.rsi/barrier.png differ diff --git a/Resources/Textures/White/Cult/rune.rsi/blood_boil.png b/Resources/Textures/White/Cult/rune.rsi/blood_boil.png new file mode 100644 index 0000000000..cc2a6cd5b7 Binary files /dev/null and b/Resources/Textures/White/Cult/rune.rsi/blood_boil.png differ diff --git a/Resources/Textures/White/Cult/rune.rsi/empower.png b/Resources/Textures/White/Cult/rune.rsi/empower.png new file mode 100644 index 0000000000..b88065614a Binary files /dev/null and b/Resources/Textures/White/Cult/rune.rsi/empower.png differ diff --git a/Resources/Textures/White/Cult/rune.rsi/meta.json b/Resources/Textures/White/Cult/rune.rsi/meta.json new file mode 100644 index 0000000000..d56472b16d --- /dev/null +++ b/Resources/Textures/White/Cult/rune.rsi/meta.json @@ -0,0 +1,35 @@ +{ + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Paradise Station 13", + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "barrier" + }, + { + "name": "blood_boil" + }, + { + "name": "empower" + }, + { + "name": "offering" + }, + { + "name": "revive" + }, + { + "name": "spirit_realm" + }, + { + "name": "summon" + }, + { + "name": "teleport" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/White/Cult/rune.rsi/offering.png b/Resources/Textures/White/Cult/rune.rsi/offering.png new file mode 100644 index 0000000000..0bb71724a3 Binary files /dev/null and b/Resources/Textures/White/Cult/rune.rsi/offering.png differ diff --git a/Resources/Textures/White/Cult/rune.rsi/revive.png b/Resources/Textures/White/Cult/rune.rsi/revive.png new file mode 100644 index 0000000000..7136064c4b Binary files /dev/null and b/Resources/Textures/White/Cult/rune.rsi/revive.png differ diff --git a/Resources/Textures/White/Cult/rune.rsi/spirit_realm.png b/Resources/Textures/White/Cult/rune.rsi/spirit_realm.png new file mode 100644 index 0000000000..e85945141f Binary files /dev/null and b/Resources/Textures/White/Cult/rune.rsi/spirit_realm.png differ diff --git a/Resources/Textures/White/Cult/rune.rsi/summon.png b/Resources/Textures/White/Cult/rune.rsi/summon.png new file mode 100644 index 0000000000..7a047d94fa Binary files /dev/null and b/Resources/Textures/White/Cult/rune.rsi/summon.png differ diff --git a/Resources/Textures/White/Cult/rune.rsi/teleport.png b/Resources/Textures/White/Cult/rune.rsi/teleport.png new file mode 100644 index 0000000000..364bef555c Binary files /dev/null and b/Resources/Textures/White/Cult/rune.rsi/teleport.png differ diff --git a/Resources/Textures/White/Cult/soulstone.rsi/meta.json b/Resources/Textures/White/Cult/soulstone.rsi/meta.json new file mode 100644 index 0000000000..06414dd38e --- /dev/null +++ b/Resources/Textures/White/Cult/soulstone.rsi/meta.json @@ -0,0 +1,24 @@ +{ + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "soulstone" + }, + { + "name": "soulstone2", + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/White/Cult/soulstone.rsi/soulstone.png b/Resources/Textures/White/Cult/soulstone.rsi/soulstone.png new file mode 100644 index 0000000000..950d8a0f68 Binary files /dev/null and b/Resources/Textures/White/Cult/soulstone.rsi/soulstone.png differ diff --git a/Resources/Textures/White/Cult/soulstone.rsi/soulstone2.png b/Resources/Textures/White/Cult/soulstone.rsi/soulstone2.png new file mode 100644 index 0000000000..568456066e Binary files /dev/null and b/Resources/Textures/White/Cult/soulstone.rsi/soulstone2.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/altar.png b/Resources/Textures/White/Cult/stuff.rsi/altar.png new file mode 100644 index 0000000000..7930dff95c Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/altar.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/altar_off.png b/Resources/Textures/White/Cult/stuff.rsi/altar_off.png new file mode 100644 index 0000000000..515967ba7e Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/altar_off.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/amulet.png b/Resources/Textures/White/Cult/stuff.rsi/amulet.png new file mode 100644 index 0000000000..013e44faff Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/amulet.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/archives.png b/Resources/Textures/White/Cult/stuff.rsi/archives.png new file mode 100644 index 0000000000..e6af3e3603 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/archives.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/archives_off.png b/Resources/Textures/White/Cult/stuff.rsi/archives_off.png new file mode 100644 index 0000000000..f422120320 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/archives_off.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/blood_blade.png b/Resources/Textures/White/Cult/stuff.rsi/blood_blade.png new file mode 100644 index 0000000000..cf4e424bc8 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/blood_blade.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/blood_dagger.png b/Resources/Textures/White/Cult/stuff.rsi/blood_dagger.png new file mode 100644 index 0000000000..9159067b56 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/blood_dagger.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/bloodspear0.png b/Resources/Textures/White/Cult/stuff.rsi/bloodspear0.png new file mode 100644 index 0000000000..8a1814a9bb Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/bloodspear0.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/bloodspear1.png b/Resources/Textures/White/Cult/stuff.rsi/bloodspear1.png new file mode 100644 index 0000000000..8a1814a9bb Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/bloodspear1.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/cultgirder.png b/Resources/Textures/White/Cult/stuff.rsi/cultgirder.png new file mode 100644 index 0000000000..70ec581c81 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/cultgirder.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/cultstone.png b/Resources/Textures/White/Cult/stuff.rsi/cultstone.png new file mode 100644 index 0000000000..72d8219609 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/cultstone.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/death_blade.png b/Resources/Textures/White/Cult/stuff.rsi/death_blade.png new file mode 100644 index 0000000000..092ec42258 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/death_blade.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/death_dagger.png b/Resources/Textures/White/Cult/stuff.rsi/death_dagger.png new file mode 100644 index 0000000000..43058c0206 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/death_dagger.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/forge.png b/Resources/Textures/White/Cult/stuff.rsi/forge.png new file mode 100644 index 0000000000..debd45476f Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/forge.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/forge_off.png b/Resources/Textures/White/Cult/stuff.rsi/forge_off.png new file mode 100644 index 0000000000..e0f4ac23c1 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/forge_off.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/hell_altar.png b/Resources/Textures/White/Cult/stuff.rsi/hell_altar.png new file mode 100644 index 0000000000..7d9d2aaa4c Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/hell_altar.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/hell_altar_off.png b/Resources/Textures/White/Cult/stuff.rsi/hell_altar_off.png new file mode 100644 index 0000000000..3c31d0f05b Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/hell_altar_off.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/hell_archives.png b/Resources/Textures/White/Cult/stuff.rsi/hell_archives.png new file mode 100644 index 0000000000..aa2033e0b5 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/hell_archives.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/hell_archives_off.png b/Resources/Textures/White/Cult/stuff.rsi/hell_archives_off.png new file mode 100644 index 0000000000..71eeeb8466 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/hell_archives_off.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/hell_blade.png b/Resources/Textures/White/Cult/stuff.rsi/hell_blade.png new file mode 100644 index 0000000000..ffdf32ef40 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/hell_blade.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/hell_dagger.png b/Resources/Textures/White/Cult/stuff.rsi/hell_dagger.png new file mode 100644 index 0000000000..843b0fef94 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/hell_dagger.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/hell_forge.png b/Resources/Textures/White/Cult/stuff.rsi/hell_forge.png new file mode 100644 index 0000000000..1088e3132d Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/hell_forge.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/hell_forge_off.png b/Resources/Textures/White/Cult/stuff.rsi/hell_forge_off.png new file mode 100644 index 0000000000..0a5b283e1f Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/hell_forge_off.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/hell_girder.png b/Resources/Textures/White/Cult/stuff.rsi/hell_girder.png new file mode 100644 index 0000000000..f259b06d1f Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/hell_girder.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/hell_pylon.png b/Resources/Textures/White/Cult/stuff.rsi/hell_pylon.png new file mode 100644 index 0000000000..4b88f4baf4 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/hell_pylon.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/hell_pylon_off.png b/Resources/Textures/White/Cult/stuff.rsi/hell_pylon_off.png new file mode 100644 index 0000000000..8ad5f8ce7a Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/hell_pylon_off.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/hole.png b/Resources/Textures/White/Cult/stuff.rsi/hole.png new file mode 100644 index 0000000000..bbab022fc0 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/hole.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/meta.json b/Resources/Textures/White/Cult/stuff.rsi/meta.json new file mode 100644 index 0000000000..c2a9586d6c --- /dev/null +++ b/Resources/Textures/White/Cult/stuff.rsi/meta.json @@ -0,0 +1,295 @@ +{ + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "hole", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "altar", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "altar_off" + }, + { + "name": "archives", + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "archives_off" + }, + { + "name": "forge", + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "forge_off" + }, + { + "name": "pylon", + "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 + ] + ] + }, + { + "name": "pylon_off" + }, + { + "name": "cultgirder" + }, + { + "name": "reaper_altar" + }, + { + "name": "reaper_altar_off" + }, + { + "name": "reaper_archives_off" + }, + { + "name": "reaper_archives", + "delays": [ + [ + 0.15, + 0.15, + 0.15, + 0.15 + ] + ] + }, + { + "name": "reaper_forge", + "delays": [ + [ + 0.4, + 0.4, + 0.4, + 0.4 + ] + ] + }, + { + "name": "reaper_forge_off" + }, + { + "name": "reaper_pylon", + "delays": [ + [ + 0.5, + 0.5, + 0.5, + 0.5 + ] + ] + }, + { + "name": "reaper_pylon_off" + }, + { + "name": "reaper_cultgirder" + }, + { + "name": "hell_altar", + "delays": [ + [ + 1, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "hell_altar_off" + }, + { + "name": "hell_archives", + "delays": [ + [ + 0.5, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "hell_archives_off" + }, + { + "name": "hell_forge", + "delays": [ + [ + 0.5, + 0.2, + 0.2, + 0.2 + ] + ] + }, + { + "name": "hell_forge_off" + }, + { + "name": "hell_pylon", + "delays": [ + [ + 0.4, + 0.4, + 0.4, + 0.4 + ] + ] + }, + { + "name": "hell_pylon_off" + }, + { + "name": "hell_girder" + }, + { + "name": "bloodspear1" + }, + { + "name": "bloodspear0" + }, + { + "name": "blood_dagger" + }, + { + "name": "hell_dagger" + }, + { + "name": "death_dagger" + }, + { + "name": "blood_blade" + }, + { + "name": "hell_blade" + }, + { + "name": "death_blade" + }, + { + "name": "mirror_shield", + "delays": [ + [ + 0.5, + 0.05, + 0.1, + 0.1 + ] + ] + }, + { + "name": "shifter", + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "shifter_drained" + }, + { + "name": "shuttlecurse", + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "cultstone" + }, + { + "name": "summoning_orb", + "delays": [ + [ + 0.3, + 0.1, + 0.1, + 0.1, + 0.2 + ] + ] + }, + { + "name": "amulet", + "delays": [ + [ + 8, + 0.2, + 0.2, + 0.2, + 0.8, + 0.2, + 0.2, + 0.2 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/White/Cult/stuff.rsi/mirror_shield.png b/Resources/Textures/White/Cult/stuff.rsi/mirror_shield.png new file mode 100644 index 0000000000..22ff0de071 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/mirror_shield.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/pylon.png b/Resources/Textures/White/Cult/stuff.rsi/pylon.png new file mode 100644 index 0000000000..23de8776b3 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/pylon.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/pylon_off.png b/Resources/Textures/White/Cult/stuff.rsi/pylon_off.png new file mode 100644 index 0000000000..b1f3932dcb Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/pylon_off.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/reaper_altar.png b/Resources/Textures/White/Cult/stuff.rsi/reaper_altar.png new file mode 100644 index 0000000000..af113b3502 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/reaper_altar.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/reaper_altar_off.png b/Resources/Textures/White/Cult/stuff.rsi/reaper_altar_off.png new file mode 100644 index 0000000000..4fe6b02eab Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/reaper_altar_off.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/reaper_archives.png b/Resources/Textures/White/Cult/stuff.rsi/reaper_archives.png new file mode 100644 index 0000000000..ebd0710405 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/reaper_archives.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/reaper_archives_off.png b/Resources/Textures/White/Cult/stuff.rsi/reaper_archives_off.png new file mode 100644 index 0000000000..9de2acf4c8 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/reaper_archives_off.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/reaper_cultgirder.png b/Resources/Textures/White/Cult/stuff.rsi/reaper_cultgirder.png new file mode 100644 index 0000000000..49cb064ed5 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/reaper_cultgirder.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/reaper_forge.png b/Resources/Textures/White/Cult/stuff.rsi/reaper_forge.png new file mode 100644 index 0000000000..afa0b5f5d5 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/reaper_forge.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/reaper_forge_off.png b/Resources/Textures/White/Cult/stuff.rsi/reaper_forge_off.png new file mode 100644 index 0000000000..59387c3c7d Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/reaper_forge_off.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/reaper_pylon.png b/Resources/Textures/White/Cult/stuff.rsi/reaper_pylon.png new file mode 100644 index 0000000000..978d51806c Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/reaper_pylon.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/reaper_pylon_off.png b/Resources/Textures/White/Cult/stuff.rsi/reaper_pylon_off.png new file mode 100644 index 0000000000..1e7c08d304 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/reaper_pylon_off.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/shifter.png b/Resources/Textures/White/Cult/stuff.rsi/shifter.png new file mode 100644 index 0000000000..ade6a2bdd1 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/shifter.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/shifter_drained.png b/Resources/Textures/White/Cult/stuff.rsi/shifter_drained.png new file mode 100644 index 0000000000..080e3da598 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/shifter_drained.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/shuttlecurse.png b/Resources/Textures/White/Cult/stuff.rsi/shuttlecurse.png new file mode 100644 index 0000000000..90530abc9f Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/shuttlecurse.png differ diff --git a/Resources/Textures/White/Cult/stuff.rsi/summoning_orb.png b/Resources/Textures/White/Cult/stuff.rsi/summoning_orb.png new file mode 100644 index 0000000000..c27dce0071 Binary files /dev/null and b/Resources/Textures/White/Cult/stuff.rsi/summoning_orb.png differ diff --git a/Resources/Textures/White/Cult/suka.rsi/bullet.png b/Resources/Textures/White/Cult/suka.rsi/bullet.png new file mode 100644 index 0000000000..5ef822c73c Binary files /dev/null and b/Resources/Textures/White/Cult/suka.rsi/bullet.png differ diff --git a/Resources/Textures/White/Cult/suka.rsi/meta.json b/Resources/Textures/White/Cult/suka.rsi/meta.json new file mode 100644 index 0000000000..feb496e725 --- /dev/null +++ b/Resources/Textures/White/Cult/suka.rsi/meta.json @@ -0,0 +1,21 @@ +{ + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/frosty-dev/white", + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "bullet", + "delays": [ + [ + 0.07, + 0.07, + 0.07 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/White/Items/Misc/wetstone.rsi/cult_sharpener.png b/Resources/Textures/White/Items/Misc/wetstone.rsi/cult_sharpener.png new file mode 100644 index 0000000000..92a533b391 Binary files /dev/null and b/Resources/Textures/White/Items/Misc/wetstone.rsi/cult_sharpener.png differ diff --git a/Resources/Textures/White/Items/Misc/wetstone.rsi/cult_sharpener_used.png b/Resources/Textures/White/Items/Misc/wetstone.rsi/cult_sharpener_used.png new file mode 100644 index 0000000000..24b146a929 Binary files /dev/null and b/Resources/Textures/White/Items/Misc/wetstone.rsi/cult_sharpener_used.png differ diff --git a/Resources/Textures/White/Items/Misc/wetstone.rsi/meta.json b/Resources/Textures/White/Items/Misc/wetstone.rsi/meta.json new file mode 100644 index 0000000000..b75c4b59a2 --- /dev/null +++ b/Resources/Textures/White/Items/Misc/wetstone.rsi/meta.json @@ -0,0 +1,36 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "sharpener" + }, + { + "name": "sharpener_used" + }, + { + "name": "cult_sharpener", + "delays": [[ + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2, + 0.2 + ]] + }, + { + "name": "cult_sharpener_used" + } + ] +} diff --git a/Resources/Textures/White/Items/Misc/wetstone.rsi/sharpener.png b/Resources/Textures/White/Items/Misc/wetstone.rsi/sharpener.png new file mode 100644 index 0000000000..289d924d38 Binary files /dev/null and b/Resources/Textures/White/Items/Misc/wetstone.rsi/sharpener.png differ diff --git a/Resources/Textures/White/Items/Misc/wetstone.rsi/sharpener_used.png b/Resources/Textures/White/Items/Misc/wetstone.rsi/sharpener_used.png new file mode 100644 index 0000000000..289d924d38 Binary files /dev/null and b/Resources/Textures/White/Items/Misc/wetstone.rsi/sharpener_used.png differ