diff --git a/Content.Client/_White/Cult/HellComponent.cs b/Content.Client/_White/Cult/HellComponent.cs new file mode 100644 index 0000000000..9635272ef4 --- /dev/null +++ b/Content.Client/_White/Cult/HellComponent.cs @@ -0,0 +1,7 @@ +using Content.Shared._White.Cult.Pentagram; +using Robust.Shared.GameStates; + +namespace Content.Client._White.Cult; + +[NetworkedComponent, RegisterComponent] +public sealed partial class HellComponent : SharedHellComponent; diff --git a/Content.Client/_White/Cult/HellSystem.cs b/Content.Client/_White/Cult/HellSystem.cs new file mode 100644 index 0000000000..27fb05a778 --- /dev/null +++ b/Content.Client/_White/Cult/HellSystem.cs @@ -0,0 +1,50 @@ +using System.Numerics; +using Robust.Client.GameObjects; +using Robust.Shared.Utility; + +namespace Content.Client._White.Cult; + +public sealed class HellSystem : EntitySystem +{ + private const string Rsi = "White/Cult/hell.rsi"; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(PentagramAdded); + SubscribeLocalEvent(PentagramRemoved); + } + + private void PentagramAdded(EntityUid uid, HellComponent component, ComponentStartup args) + { + if (!TryComp(uid, out var sprite)) + return; + + if (sprite.LayerMapTryGet(HellKey.Key, out _)) + return; + + var adj = sprite.Bounds.Height / 2 + 1.0f/32 * 6.0f; + + var layer = sprite.AddLayer(new SpriteSpecifier.Rsi(new ResPath(Rsi), "animated")); + + sprite.LayerMapSet(HellKey.Key, layer); + sprite.LayerSetOffset(layer, new Vector2(0.0f, adj)); + sprite.LayerSetShader(layer, "unshaded"); + } + + private void PentagramRemoved(EntityUid uid, HellComponent component, ComponentShutdown args) + { + if (!TryComp(uid, out var sprite)) + return; + + if (!sprite.LayerMapTryGet(HellKey.Key, out var layer)) + return; + + sprite.RemoveLayer(layer); + } + + private enum HellKey + { + Key + } +} diff --git a/Content.Server/_White/Cult/HellComponent.cs b/Content.Server/_White/Cult/HellComponent.cs new file mode 100644 index 0000000000..e18e5f58f9 --- /dev/null +++ b/Content.Server/_White/Cult/HellComponent.cs @@ -0,0 +1,7 @@ +using Content.Shared._White.Cult.Pentagram; +using Robust.Shared.GameStates; + +namespace Content.Server._White.Cult; + +[NetworkedComponent, RegisterComponent] +public sealed partial class HellComponent : SharedHellComponent; diff --git a/Content.Shared/_White/Cult/Pentagram/SharedHellComponent.cs b/Content.Shared/_White/Cult/Pentagram/SharedHellComponent.cs new file mode 100644 index 0000000000..e0ba6f3d3b --- /dev/null +++ b/Content.Shared/_White/Cult/Pentagram/SharedHellComponent.cs @@ -0,0 +1,3 @@ +namespace Content.Shared._White.Cult.Pentagram; + +public abstract partial class SharedHellComponent : Component; diff --git a/Resources/Prototypes/Traits/neutral.yml b/Resources/Prototypes/Traits/neutral.yml index ba9bd8d886..7cfcaefba1 100644 --- a/Resources/Prototypes/Traits/neutral.yml +++ b/Resources/Prototypes/Traits/neutral.yml @@ -23,3 +23,10 @@ description: trait-southern-desc components: - type: SouthernAccent + +- type: trait + id: Hell + name: Hell + description: Hell + components: + - type: Hell diff --git a/Resources/Prototypes/_White/Fluff/serbwo.yml b/Resources/Prototypes/_White/Fluff/serbwo.yml index 4b991bccbd..81e417f370 100644 --- a/Resources/Prototypes/_White/Fluff/serbwo.yml +++ b/Resources/Prototypes/_White/Fluff/serbwo.yml @@ -284,3 +284,9 @@ entity: ClothingOuterParamedicSuitFluff sponsorOnly: true whitelistJobs: [Paramedic] + +- type: loadout + id: CargoLoadoutSerbwoSA + entity: HandTeleporter + sponsorOnly: true + whitelistJobs: [Quartermaster, SalvageSpecialist, CargoTechnician] diff --git a/Resources/Textures/White/Cult/hell.rsi/animated.png b/Resources/Textures/White/Cult/hell.rsi/animated.png new file mode 100644 index 0000000000..bd5dd7253b Binary files /dev/null and b/Resources/Textures/White/Cult/hell.rsi/animated.png differ diff --git a/Resources/Textures/White/Cult/hell.rsi/meta.json b/Resources/Textures/White/Cult/hell.rsi/meta.json new file mode 100644 index 0000000000..4fa9c0a8c3 --- /dev/null +++ b/Resources/Textures/White/Cult/hell.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": 64 + }, + "states": [ + { + "name": "animated", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +}