From a21909c6d049c3e5f18f03427777df869b2d0a9b Mon Sep 17 00:00:00 2001 From: Kandiyaki Date: Tue, 25 Mar 2025 10:20:46 -0400 Subject: [PATCH 01/11] fixez --- .../Heretic/Components/HellVictimComponent.cs | 3 ++ .../Heretic/EntitySystems/HellWorldSystem.cs | 34 +++++++------------ .../Ritual/CustomBehavior.Sacrifice.cs | 15 +++++++- 3 files changed, 29 insertions(+), 23 deletions(-) diff --git a/Content.Server/_Goobstation/Heretic/Components/HellVictimComponent.cs b/Content.Server/_Goobstation/Heretic/Components/HellVictimComponent.cs index 3c743e47e8b68..659d1e0c75e24 100644 --- a/Content.Server/_Goobstation/Heretic/Components/HellVictimComponent.cs +++ b/Content.Server/_Goobstation/Heretic/Components/HellVictimComponent.cs @@ -34,6 +34,9 @@ public sealed partial class HellVictimComponent : Component [DataField] public EntityUid Mind; + [DataField] + public Boolean HasMind = false; + [DataField, AutoNetworkedField] public TimeSpan HellDuration = TimeSpan.FromSeconds(15); diff --git a/Content.Server/_Goobstation/Heretic/EntitySystems/HellWorldSystem.cs b/Content.Server/_Goobstation/Heretic/EntitySystems/HellWorldSystem.cs index 5107b5204d814..a77a13c69a12a 100644 --- a/Content.Server/_Goobstation/Heretic/EntitySystems/HellWorldSystem.cs +++ b/Content.Server/_Goobstation/Heretic/EntitySystems/HellWorldSystem.cs @@ -22,6 +22,7 @@ using Robust.Server.GameObjects; using Content.Shared.Eye.Blinding.Systems; using Content.Shared.Eye.Blinding.Components; +using Content.Server.StationEvents; //this is kind of badly named since we're doing infinite archives stuff now but i dont feel like changing it :) @@ -102,6 +103,7 @@ public void AddVictimComponent(EntityUid victim) { return; } + victimComp.HasMind = true; victimComp.Mind = mindContainer.Mind.Value; } @@ -121,6 +123,10 @@ public void SendToHell(EntityUid target, RitualData args, SpeciesPrototype speci var spawnTgt = Transform(newSpawn.Uid).Coordinates; //spawn your hellsona + if (victimComp.Mind.Equals( null)) + { + return; + } MindComponent? mindComp = Comp(victimComp.Mind); mindComp.PreventGhosting = true; //don't have to change this one's blood because nobody's bringing a forensic scanner to hell @@ -140,30 +146,14 @@ public void SendToHell(EntityUid target, RitualData args, SpeciesPrototype speci //returning the mind to the original body happens in Update() } - //ported from funkystation - public void TeleportRandomly(RitualData args, EntityUid uid) // start le teleporting loop -space + public void TeleportRandomly(RitualData args, EntityUid uid) { - var maxrandomtp = 40; // this is how many attempts it will try before breaking the loop -space - var maxrandomradius = 20; // this is the max range it will do -space - - - if (!args.EntityManager.TryGetComponent(uid, out var xform)) - return; - var coords = xform.Coordinates; - var newCoords = coords.Offset(_random.NextVector2(maxrandomradius)); - for (var i = 0; i < maxrandomtp; i++) //start of the loop -space - { - var randVector = _random.NextVector2(maxrandomradius); - newCoords = coords.Offset(randVector); - if (!args.EntityManager.TryGetComponent(uid, out var trans)) - continue; - if (trans.GridUid != null && !_lookup.GetEntitiesIntersecting(newCoords.ToMap(_ent, _xform), LookupFlags.Static).Any()) // if they're not in space and not in wall, it will choose these coords and end the loop -space - { - break; - } - } + //get all possible spawn points, choose one, then get the place + var spawnPoints = EntityManager.GetAllComponents(typeof(MidRoundAntagSpawnLocationComponent)).ToImmutableList(); + var newSpawn = _random.Pick(spawnPoints); + var spawnTgt = Transform(newSpawn.Uid).Coordinates; - _xform.SetCoordinates(uid, newCoords); + _xform.SetCoordinates(uid, spawnTgt); } private void TransformVictim(EntityUid ent) diff --git a/Content.Server/_Goobstation/Heretic/Ritual/CustomBehavior.Sacrifice.cs b/Content.Server/_Goobstation/Heretic/Ritual/CustomBehavior.Sacrifice.cs index 0971106da162e..91be4a7905e78 100644 --- a/Content.Server/_Goobstation/Heretic/Ritual/CustomBehavior.Sacrifice.cs +++ b/Content.Server/_Goobstation/Heretic/Ritual/CustomBehavior.Sacrifice.cs @@ -173,8 +173,21 @@ public override void Finalize(RitualData args) //send the target to hell world _hellworld.AddVictimComponent(uids[i]); + + + //teleport the body to a midround antag spawn spot so it's not just tossed into space _hellworld.TeleportRandomly(args, uids[i]); - _hellworld.SendToHell(uids[i], args, speciesPrototype); + + //make sure that my shitty AddVictimComponent thing actually worked before trying to use a mind that isn't there + if (args.EntityManager.TryGetComponent(uids[i], out var hellVictim)) + { + //i'm so sorry to all of my computer science professors. i've failed you + if(hellVictim.HasMind) + { + _hellworld.SendToHell(uids[i], args, speciesPrototype); + } + + } //update the heretic's knowledge if (args.EntityManager.TryGetComponent(args.Performer, out var hereticComp)) From dad0c47552a7cf91a915a4b00690e9d036f92cfb Mon Sep 17 00:00:00 2001 From: Kandiyaki Date: Tue, 25 Mar 2025 10:23:32 -0400 Subject: [PATCH 02/11] oopz --- .../_Goobstation/Heretic/EntitySystems/HellWorldSystem.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Content.Server/_Goobstation/Heretic/EntitySystems/HellWorldSystem.cs b/Content.Server/_Goobstation/Heretic/EntitySystems/HellWorldSystem.cs index a77a13c69a12a..d873706706c23 100644 --- a/Content.Server/_Goobstation/Heretic/EntitySystems/HellWorldSystem.cs +++ b/Content.Server/_Goobstation/Heretic/EntitySystems/HellWorldSystem.cs @@ -123,8 +123,9 @@ public void SendToHell(EntityUid target, RitualData args, SpeciesPrototype speci var spawnTgt = Transform(newSpawn.Uid).Coordinates; //spawn your hellsona - if (victimComp.Mind.Equals( null)) + if (!victimComp.HasMind) { + victimComp.AlreadyHelled = true; return; } MindComponent? mindComp = Comp(victimComp.Mind); From a5d858fc3d9374df5a5b2dc320528e4a67b65dfa Mon Sep 17 00:00:00 2001 From: Kandiyaki Date: Mon, 31 Mar 2025 15:24:17 -0400 Subject: [PATCH 03/11] only heretics can open the codex --- .../ItemToggleUserRestrictComponent.cs | 38 ++++++++++ .../ItemToggleUserRestrictSystem.cs | 71 +++++++++++++++++++ .../_Goobstation/Heretic/heretic/loc.ftl | 2 + .../Entities/Objects/Specific/heretic.yml | 13 +++- 4 files changed, 121 insertions(+), 3 deletions(-) create mode 100644 Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictComponent.cs create mode 100644 Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictSystem.cs diff --git a/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictComponent.cs b/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictComponent.cs new file mode 100644 index 0000000000000..773026da594e5 --- /dev/null +++ b/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictComponent.cs @@ -0,0 +1,38 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._Impstation.Item.ItemToggle.Components; + +/// +/// Makes it so only entities that have the specified component can toggle an item +/// +[RegisterComponent, NetworkedComponent, Access(typeof(ItemToggleUserRestrictSystem)), AutoGenerateComponentState] +public sealed partial class ItemToggleUserRestrictComponent : Component +{ + /// + /// the component required to toggle the item + /// + [DataField(required: true)] + public ComponentRegistry Components = new(); + //itemtoggleactivateattemptevent + //itemtoggledeactivateattemptevent + //itemtoggledevent + + /// + /// the message a person unable to toggle it on will get if they try. null for no message + /// + [ViewVariables(VVAccess.ReadWrite), DataField("restrictmessage"), AutoNetworkedField] + public LocId RestrictMessage; + + /// + /// can only restricted people toggle it on? + /// + [ViewVariables(VVAccess.ReadWrite), DataField("openrestrict"), AutoNetworkedField] + public bool OpenRestrict = true; + + /// + /// can only restricted people toggle it off? + /// + [ViewVariables(VVAccess.ReadWrite), DataField("closerestrict"), AutoNetworkedField] + public bool CloseRestrict = true; +} diff --git a/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictSystem.cs b/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictSystem.cs new file mode 100644 index 0000000000000..45f4469f75915 --- /dev/null +++ b/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictSystem.cs @@ -0,0 +1,71 @@ +using Content.Shared.Item.ItemToggle.Components; +using Content.Shared.Popups; +using System.Collections.Immutable; +using Robust.Shared.Prototypes; + +namespace Content.Shared._Impstation.Item.ItemToggle.Components +{ + public sealed class ItemToggleUserRestrictSystem : EntitySystem + { + + [Dependency] private readonly IPrototypeManager _prot = default!; + [Dependency] private readonly IEntityManager _ent = default!; + [Dependency] private readonly IComponentFactory _componentFactory = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + private ISawmill _sawmill = default!; + + + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnActivateAttempt); + SubscribeLocalEvent(OnDeactivateAttempt); + + } + + private void OnActivateAttempt(Entity ent, ref ItemToggleActivateAttemptEvent args) + { + if (ent.Comp.OpenRestrict) + { + //there has to be an easier way to do this but i can't find it! + var requiredComps = ent.Comp.Components.Keys.ToImmutableList(); + foreach (var requiredComp in requiredComps) + { + var registration = _componentFactory.GetRegistration(requiredComp); + if (registration != null && args.User != null) + { + if (!_ent.HasComponent(args.User.Value, registration)) + { + args.Cancelled = true; + args.Popup = Loc.GetString(ent.Comp.RestrictMessage); + break; + } + } + } + } + } + + private void OnDeactivateAttempt(Entity ent, ref ItemToggleDeactivateAttemptEvent args) + { + if (ent.Comp.CloseRestrict) + { + var requiredComps = ent.Comp.Components.Keys.ToImmutableList(); + foreach (var requiredComp in requiredComps) + { + var registration = _componentFactory.GetRegistration(requiredComp); + if (registration != null && args.User != null) + { + if (!_ent.HasComponent(args.User.Value, registration)) + { + args.Cancelled = true; + //idk why itemtoggledeactivatedattemptevent doesn't have a popup and i'm tired of trying to give it one + break; + } + } + } + } + } + } +} diff --git a/Resources/Locale/en-US/_Goobstation/Heretic/heretic/loc.ftl b/Resources/Locale/en-US/_Goobstation/Heretic/heretic/loc.ftl index 921107fd90be5..94839725f9606 100644 --- a/Resources/Locale/en-US/_Goobstation/Heretic/heretic/loc.ftl +++ b/Resources/Locale/en-US/_Goobstation/Heretic/heretic/loc.ftl @@ -4,3 +4,5 @@ heretic-ritualrune-examine = Current selected ritual: [color=yellow]{$rit}[/colo heretic-knowledge-gain = You've learned something heretic-knowledge-loss = You're forgotten something + +heretic-book-open-failure = It won't budge... \ No newline at end of file diff --git a/Resources/Prototypes/_Goobstation/Heretic/Entities/Objects/Specific/heretic.yml b/Resources/Prototypes/_Goobstation/Heretic/Entities/Objects/Specific/heretic.yml index ad0cbf8d42018..4607b8b8709f9 100644 --- a/Resources/Prototypes/_Goobstation/Heretic/Entities/Objects/Specific/heretic.yml +++ b/Resources/Prototypes/_Goobstation/Heretic/Entities/Objects/Specific/heretic.yml @@ -1,8 +1,8 @@ - type: entity - parent: [ BaseItem, TierXContraband ] + parent: [ BaseItem ] id: CodexCicatrix name: codex cicatrix - description: An ominous book you've never seen before. The letters seem to be contantly rearranging themselves. + description: An ominous book you've never seen before. The letters seem to be constantly rearranging themselves. components: - type: Sprite sprite: _Goobstation/Heretic/book.rsi @@ -24,14 +24,21 @@ enabled: false radius: 2 energy: 1 - color: "#6e7500" + color: "#6e7500" netsync: false - type: Appearance - type: ItemToggle predictable: false + - type: ItemToggleUserRestrict + restrictmessage: heretic-book-open-failure + closerestrict: false + components: + - type: Heretic - type: ComponentToggler components: - type: HereticMagicItem + - type: Contraband + severity: TierXContraband - type: ItemTogglePointLight - type: ToggleableLightVisuals - type: ItemToggleSize From 9b45ce9f0048e1a4182c4d01dd7cf39419accc60 Mon Sep 17 00:00:00 2001 From: Kandiyaki Date: Mon, 31 Mar 2025 15:38:35 -0400 Subject: [PATCH 04/11] ritual change & guidebook rewrite --- .../_Goobstation/Heretic/Heretic/heretic_rituals.yml | 2 +- .../ServerInfo/_Goobstation/Guidebook/Antagonist/Heretics.xml | 1 + .../_Goobstation/Guidebook/Antagonist/HereticsSpells.xml | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/_Goobstation/Heretic/Heretic/heretic_rituals.yml b/Resources/Prototypes/_Goobstation/Heretic/Heretic/heretic_rituals.yml index 810e6774e33b0..2db6cccde952c 100644 --- a/Resources/Prototypes/_Goobstation/Heretic/Heretic/heretic_rituals.yml +++ b/Resources/Prototypes/_Goobstation/Heretic/Heretic/heretic_rituals.yml @@ -32,7 +32,7 @@ sprite: _Goobstation/Heretic/book.rsi state: icon-on requiredTags: - Eyes: 1 + Heart: 1 Book: 1 Write: 1 output: diff --git a/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/Heretics.xml b/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/Heretics.xml index 159cfc0c98d15..319d2b1c3c335 100644 --- a/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/Heretics.xml +++ b/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/Heretics.xml @@ -79,4 +79,5 @@ - Your Mansus Grasp will temporarily garble the speech of people who you use it on. This can let you get away with murder while comms are online, but be careful - it's not foolproof. - [color=purple]Influences[/color] can spawn in almost any location on the station, ranging from the main hallways and public restrooms to [color=cyan]Command staff offices[/color] and [color=red]restricted security areas[/color] in the Brig. It's best to check every area you can access, public and department. - Monkeys and other animals make for great, usually non-suspicious sources of organs or corpses for your heretical rituals. + - Your Codex Cicatrix can only be opened by a heretic, and it's only marked as contraband when open. Keep it closed when you aren't using it. diff --git a/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsSpells.xml b/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsSpells.xml index 03e9ed8e0b4d6..f6b6582bbd860 100644 --- a/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsSpells.xml +++ b/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsSpells.xml @@ -15,9 +15,9 @@ ## Focus is Necessary To cast more advanced spells, you must focus by equipping a [color=orange]Magic Focus[/color]. - Your Codex Cicatrix will function as a focus when it is open and in your hand. + Your Codex Cicatrix will function as a focus when it is open and in your hand. It's only marked as contraband when open, and non-heretics cannot open it, so try to keep it closed. - You can acquire an Amber Focus using the eponymous ritual. It will act as a focus when worn around your neck. + You can acquire an Amber Focus using the eponymous ritual. It will act as a focus when worn around your neck, but it cannot be hidden like the codex. Some more powerful heretical equipment also functions as a focus - namely, the Ominous Armor from the Armorer's Ritual (when the hood is flipped up). From f2bee755a65bb2cd5726468d632a3c2c13031967 Mon Sep 17 00:00:00 2001 From: Kandiyaki Date: Mon, 31 Mar 2025 15:42:18 -0400 Subject: [PATCH 05/11] cleanup --- .../ItemToggle/Components/ItemToggleUserRestrictComponent.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictComponent.cs b/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictComponent.cs index 773026da594e5..1aa92e9a12837 100644 --- a/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictComponent.cs +++ b/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictComponent.cs @@ -14,9 +14,6 @@ public sealed partial class ItemToggleUserRestrictComponent : Component /// [DataField(required: true)] public ComponentRegistry Components = new(); - //itemtoggleactivateattemptevent - //itemtoggledeactivateattemptevent - //itemtoggledevent /// /// the message a person unable to toggle it on will get if they try. null for no message From 965899a40c76cb2f38b0fb8fadcb3436ddc9e449 Mon Sep 17 00:00:00 2001 From: Kandiyaki Date: Fri, 4 Apr 2025 10:38:48 -0400 Subject: [PATCH 06/11] im kind of a dumbass ngl --- .../ItemToggleUserRestrictComponent.cs | 8 +-- .../ItemToggleUserRestrictSystem.cs | 56 ++++++++----------- .../Entities/Objects/Specific/heretic.yml | 4 +- 3 files changed, 29 insertions(+), 39 deletions(-) diff --git a/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictComponent.cs b/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictComponent.cs index 1aa92e9a12837..5d509b47e8baf 100644 --- a/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictComponent.cs +++ b/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictComponent.cs @@ -18,18 +18,18 @@ public sealed partial class ItemToggleUserRestrictComponent : Component /// /// the message a person unable to toggle it on will get if they try. null for no message /// - [ViewVariables(VVAccess.ReadWrite), DataField("restrictmessage"), AutoNetworkedField] - public LocId RestrictMessage; + [DataField, AutoNetworkedField] + public LocId? RestrictMessage; /// /// can only restricted people toggle it on? /// - [ViewVariables(VVAccess.ReadWrite), DataField("openrestrict"), AutoNetworkedField] + [DataField, AutoNetworkedField] public bool OpenRestrict = true; /// /// can only restricted people toggle it off? /// - [ViewVariables(VVAccess.ReadWrite), DataField("closerestrict"), AutoNetworkedField] + [DataField, AutoNetworkedField] public bool CloseRestrict = true; } diff --git a/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictSystem.cs b/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictSystem.cs index 45f4469f75915..601aef6dcc450 100644 --- a/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictSystem.cs +++ b/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictSystem.cs @@ -1,20 +1,13 @@ using Content.Shared.Item.ItemToggle.Components; -using Content.Shared.Popups; using System.Collections.Immutable; -using Robust.Shared.Prototypes; namespace Content.Shared._Impstation.Item.ItemToggle.Components { public sealed class ItemToggleUserRestrictSystem : EntitySystem { - [Dependency] private readonly IPrototypeManager _prot = default!; [Dependency] private readonly IEntityManager _ent = default!; [Dependency] private readonly IComponentFactory _componentFactory = default!; - [Dependency] private readonly SharedPopupSystem _popup = default!; - private ISawmill _sawmill = default!; - - public override void Initialize() { @@ -22,48 +15,45 @@ public override void Initialize() SubscribeLocalEvent(OnActivateAttempt); SubscribeLocalEvent(OnDeactivateAttempt); - } private void OnActivateAttempt(Entity ent, ref ItemToggleActivateAttemptEvent args) { - if (ent.Comp.OpenRestrict) + if (!ent.Comp.OpenRestrict || args.Cancelled) + { + return; + } + + foreach (var reg in ent.Comp.Components.Values) { - //there has to be an easier way to do this but i can't find it! - var requiredComps = ent.Comp.Components.Keys.ToImmutableList(); - foreach (var requiredComp in requiredComps) + var type = reg.Component.GetType(); + if (!HasComp(args.User, type)) { - var registration = _componentFactory.GetRegistration(requiredComp); - if (registration != null && args.User != null) + args.Cancelled = true; + if(ent.Comp.RestrictMessage != null) { - if (!_ent.HasComponent(args.User.Value, registration)) - { - args.Cancelled = true; - args.Popup = Loc.GetString(ent.Comp.RestrictMessage); - break; - } + args.Popup = Loc.GetString(ent.Comp.RestrictMessage); } + break; } } } private void OnDeactivateAttempt(Entity ent, ref ItemToggleDeactivateAttemptEvent args) { - if (ent.Comp.CloseRestrict) + if (!ent.Comp.CloseRestrict || args.Cancelled) { - var requiredComps = ent.Comp.Components.Keys.ToImmutableList(); - foreach (var requiredComp in requiredComps) + return; + } + + foreach (var reg in ent.Comp.Components.Values) + { + var type = reg.Component.GetType(); + if (!HasComp(args.User, type)) { - var registration = _componentFactory.GetRegistration(requiredComp); - if (registration != null && args.User != null) - { - if (!_ent.HasComponent(args.User.Value, registration)) - { - args.Cancelled = true; - //idk why itemtoggledeactivatedattemptevent doesn't have a popup and i'm tired of trying to give it one - break; - } - } + args.Cancelled = true; + //don't feel like adding popups to deactivateAttemptEvents so this stays + break; } } } diff --git a/Resources/Prototypes/_Goobstation/Heretic/Entities/Objects/Specific/heretic.yml b/Resources/Prototypes/_Goobstation/Heretic/Entities/Objects/Specific/heretic.yml index 4607b8b8709f9..f80eb9c146162 100644 --- a/Resources/Prototypes/_Goobstation/Heretic/Entities/Objects/Specific/heretic.yml +++ b/Resources/Prototypes/_Goobstation/Heretic/Entities/Objects/Specific/heretic.yml @@ -30,8 +30,8 @@ - type: ItemToggle predictable: false - type: ItemToggleUserRestrict - restrictmessage: heretic-book-open-failure - closerestrict: false + restrictMessage: heretic-book-open-failure + closeRestrict: false components: - type: Heretic - type: ComponentToggler From e3623d454fa1d105b6f1a96434281fdc069813c7 Mon Sep 17 00:00:00 2001 From: Kandiyaki Date: Mon, 7 Apr 2025 11:21:00 -0400 Subject: [PATCH 07/11] me when darkmajia tell me to do something --- .../ItemToggle/Components/ItemToggleUserRestrictSystem.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictSystem.cs b/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictSystem.cs index 601aef6dcc450..eda7db10ff5b6 100644 --- a/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictSystem.cs +++ b/Content.Shared/_Impstation/Item/ItemToggle/Components/ItemToggleUserRestrictSystem.cs @@ -1,14 +1,10 @@ using Content.Shared.Item.ItemToggle.Components; -using System.Collections.Immutable; namespace Content.Shared._Impstation.Item.ItemToggle.Components { public sealed class ItemToggleUserRestrictSystem : EntitySystem { - [Dependency] private readonly IEntityManager _ent = default!; - [Dependency] private readonly IComponentFactory _componentFactory = default!; - public override void Initialize() { base.Initialize(); From a27b1c51dc725c243bc357a63f0c6a38998dd29e Mon Sep 17 00:00:00 2001 From: Kandiyaki Date: Mon, 13 Jul 2026 15:25:30 -0400 Subject: [PATCH 08/11] sight, sprite, and functions --- .../HereticSoulFragmentComponent.cs | 10 +++++++ .../HereticSoulFragmentSystem.cs | 24 +++++++++++++++++ .../_Impstation/Heretic/heretic/fragments.ftl | 7 +++++ .../Entities/Objects/Specific/soulparts.yml | 25 ++++++++++++++++++ .../Heretic/soul_fragments.rsi/meta.json | 22 +++++++++++++++ .../Heretic/soul_fragments.rsi/sight.png | Bin 0 -> 900 bytes 6 files changed, 88 insertions(+) create mode 100644 Content.Server/_Impstation/Heretic/Components/HereticSoulFragmentComponent.cs create mode 100644 Content.Server/_Impstation/Heretic/EntitySystems/HereticSoulFragmentSystem.cs create mode 100644 Resources/Locale/en-US/_Impstation/Heretic/heretic/fragments.ftl create mode 100644 Resources/Prototypes/_Impstation/Heretic/Entities/Objects/Specific/soulparts.yml create mode 100644 Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/meta.json create mode 100644 Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/sight.png diff --git a/Content.Server/_Impstation/Heretic/Components/HereticSoulFragmentComponent.cs b/Content.Server/_Impstation/Heretic/Components/HereticSoulFragmentComponent.cs new file mode 100644 index 0000000000000..970e724c7e5c7 --- /dev/null +++ b/Content.Server/_Impstation/Heretic/Components/HereticSoulFragmentComponent.cs @@ -0,0 +1,10 @@ +using Content.Server.Heretic.EntitySystems; + +namespace Content.Server.Heretic.Components; + +[RegisterComponent, Access(typeof(HereticSoulFragmentSystem))] +public sealed partial class HereticSoulFragmentComponent : Component +{ + [DataField] + public LocId Message { get; private set; } = string.Empty; +} diff --git a/Content.Server/_Impstation/Heretic/EntitySystems/HereticSoulFragmentSystem.cs b/Content.Server/_Impstation/Heretic/EntitySystems/HereticSoulFragmentSystem.cs new file mode 100644 index 0000000000000..76fcf8158ee80 --- /dev/null +++ b/Content.Server/_Impstation/Heretic/EntitySystems/HereticSoulFragmentSystem.cs @@ -0,0 +1,24 @@ +using Content.Server.Heretic.Components; +using Content.Shared.Examine; +using Content.Shared.Heretic; + + +namespace Content.Server.Heretic.EntitySystems; + +public sealed partial class HereticSoulFragmentSystem : EntitySystem +{ + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnExamined); + } + +private void OnExamined(Entity ent, ref ExaminedEvent args) + { + if(TryComp(args.Examiner, out _)) + { + args.PushMarkup(markup: Loc.GetString(ent.Comp.Message)); + } + } +} diff --git a/Resources/Locale/en-US/_Impstation/Heretic/heretic/fragments.ftl b/Resources/Locale/en-US/_Impstation/Heretic/heretic/fragments.ftl new file mode 100644 index 0000000000000..5ecf135901c1a --- /dev/null +++ b/Resources/Locale/en-US/_Impstation/Heretic/heretic/fragments.ftl @@ -0,0 +1,7 @@ +heretic-soul-fragment-sight = [color=purple]This can be used as Eyes in a ritual.[/color] +heretic-soul-fragment-hunger = [color=purple]This can be used as a Stomach in a ritual.[/color] +heretic-soul-fragment-dreams = [color=purple]This can be used as a Brain in a ritual.[/color] +heretic-soul-fragment-speech = [color=purple]This can be used as Lungs in a ritual.[/color] +heretic-soul-fragment-sword = [color=purple]This can be used as Kidneys in a ritual.[/color] +heretic-soul-fragment-shield = [color=purple]This can be used as a Liver in a ritual.[/color] +heretic-soul-fragment-rhythm = [color=purple]This can be used as a Heart in a ritual.[/color] \ No newline at end of file diff --git a/Resources/Prototypes/_Impstation/Heretic/Entities/Objects/Specific/soulparts.yml b/Resources/Prototypes/_Impstation/Heretic/Entities/Objects/Specific/soulparts.yml new file mode 100644 index 0000000000000..f7352699592e4 --- /dev/null +++ b/Resources/Prototypes/_Impstation/Heretic/Entities/Objects/Specific/soulparts.yml @@ -0,0 +1,25 @@ +- type: entity + parent: [ BaseItem, TierXContraband ] + id: SoulFragmentSight + name: sight fragment + description: The Archivist's gifts. + components: + - type: Item + size: Tiny + - type: Sprite + sprite: _Impstation/Heretic/soul_fragments.rsi + state: sight + - type: Icon + sprite: _Impstation/Heretic/soul_fragments.rsi + state: sight + - type: PointLight + radius: 1.5 + energy: 3 + color: "#f7ff1c" + - type: Tag + tags: + - Meat + - Organ + - Eyes + - type: HereticSoulFragment + message: heretic-soul-fragment-sight \ No newline at end of file diff --git a/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/meta.json b/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/meta.json new file mode 100644 index 0000000000000..fa15b49d50c58 --- /dev/null +++ b/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-4.0", + "copyright": "created by Sha-Sheng & Kandiyaki for Impstation", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "sight", + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + } + ] +} diff --git a/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/sight.png b/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/sight.png new file mode 100644 index 0000000000000000000000000000000000000000..324207cab5da93fa44dfd6645d94fa4e0a5cd162 GIT binary patch literal 900 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3-qd{%H_rU|?*@baoE#baqwWn z&^SMJqPK=ipvMQ7JNfzEQs=v7HMy1do-ce}E9>|{Q18v8`lSqq z-!ICax@8@6#=VBkrzfSoIq*|$i|vyV_wP#=oN+MXT(ADgxA;O4FE97edv)I|_ciY* zF|A~+{(WKcq&G*o-mlYt|Mt9bU46@b#`G&iiwp#%_W&b>Kfou%^}sQP@Bd}K|F8J| z{|it|Eo<^zAjMh|IesvJDxT7zBZI6cA^&vw+2OfNT)pDQ9GO0ZdXb8r@a~2A~NO*cn)WY7LBx z4Hy?d%msP{46Kay@whC%5e?+*^>lFziEw{A@t{zP0*`a_ga7+03y*tWUMlHwt@*6$ z+$9f1m)fpj@o4aDu&&5uH`&DerN(X6YX^ohCiMU&2HqLdD(2k~XVQ~1_lRWE;bCA3 z%aarFFW<>)aNa*+kK&qghBb{026b!~m^W)nY^*$=Z}0k&O((!a>4O>52kr>2irdU9 zdbsOu2f5hYu6}_nWzx4NCjlbfm h4ooTsZZk&xX2@@_KD(Z2=?##tJYD@<);T3K0RW;nRlNWJ literal 0 HcmV?d00001 From fc0205bb19a30f7f52c67edcb63599f3dd932920 Mon Sep 17 00:00:00 2001 From: Kandiyaki Date: Mon, 13 Jul 2026 17:34:47 -0400 Subject: [PATCH 09/11] rest of em + sacrifice edits --- .../Heretic/EntitySystems/HellWorldSystem.cs | 31 +++- .../Entities/Objects/Specific/soulparts.yml | 162 +++++++++++++++++- .../Heretic/soul_fragments.rsi/dreams.png | Bin 0 -> 900 bytes .../Heretic/soul_fragments.rsi/hunger.png | Bin 0 -> 900 bytes .../Heretic/soul_fragments.rsi/meta.json | 68 +++++++- .../Heretic/soul_fragments.rsi/rhythm.png | Bin 0 -> 900 bytes .../Heretic/soul_fragments.rsi/shield.png | Bin 0 -> 900 bytes .../Heretic/soul_fragments.rsi/speech.png | Bin 0 -> 900 bytes .../Heretic/soul_fragments.rsi/sword.png | Bin 0 -> 900 bytes 9 files changed, 251 insertions(+), 10 deletions(-) create mode 100644 Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/dreams.png create mode 100644 Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/hunger.png create mode 100644 Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/rhythm.png create mode 100644 Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/shield.png create mode 100644 Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/speech.png create mode 100644 Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/sword.png diff --git a/Content.Server/_Impstation/Heretic/EntitySystems/HellWorldSystem.cs b/Content.Server/_Impstation/Heretic/EntitySystems/HellWorldSystem.cs index 7cd35176b4af5..913cd9509b85a 100644 --- a/Content.Server/_Impstation/Heretic/EntitySystems/HellWorldSystem.cs +++ b/Content.Server/_Impstation/Heretic/EntitySystems/HellWorldSystem.cs @@ -19,6 +19,7 @@ using Robust.Shared.Audio; using Robust.Shared.EntitySerialization; using Robust.Shared.EntitySerialization.Systems; +using Robust.Shared.Physics.Systems; using Robust.Shared.Player; using Robust.Shared.Prototypes; using Robust.Shared.Random; @@ -45,6 +46,7 @@ public sealed class HellWorldSystem : EntitySystem [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly MapLoaderSystem _mapLoader = default!; + [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] private readonly SharedMapSystem _map = default!; [Dependency] private readonly SharedMindSystem _mind = default!; [Dependency] private readonly SharedTransformSystem _xform = default!; @@ -55,6 +57,16 @@ public sealed class HellWorldSystem : EntitySystem private readonly ResPath _mapPath = new("Maps/_Impstation/Nonstations/InfiniteArchives.yml"); private readonly ProtoId _cloneSettings = "HellClone"; + private readonly List _soulParts = new() + { + "SoulFragmentSight", + "SoulFragmentHunger", + "SoulFragmentDreams", + "SoulFragmentSpeech", + "SoulFragmentSword", + "SoulFragmentShield", + "SoulFragmentRhythm" + }; public override void Initialize() { @@ -96,12 +108,12 @@ public override void Update(float frameTime) /// private void BeforeSend(Entity uid, ref HereticBeforeHellEvent args) { - //spawn a clone of the victim - _cloning.TryCloning(uid, _transform.GetMapCoordinates(uid), uid.Comp.CloneSettings, out var clone); - - //gib clone to get matching organs. - if (clone != null) - _gibbing.Gib(clone.Value); + //spawn victims soul parts for use in rituals + foreach(var part in _soulParts) + { + var partEnt = Spawn(part, _xform.GetMapCoordinates(uid)); + FlingDroppedEntity(partEnt); + } //set original body to put the mind back in later uid.Comp.OriginalBody = uid; @@ -114,6 +126,13 @@ private void BeforeSend(Entity uid, ref HereticBeforeHellEvent uid.Comp.Mind = mindContainer.Mind.Value; } + private void FlingDroppedEntity(EntityUid target) //this code is direct from GibbingSystem, but inside another system so i can't get to it >:( + { + var impulse = 25 + _random.NextFloat(5); + var scatterVec = _random.NextAngle().ToVec() * impulse; + _physics.ApplyLinearImpulse(target, scatterVec); + } + /// /// handles creation of the hell clone and moving the mind into it /// diff --git a/Resources/Prototypes/_Impstation/Heretic/Entities/Objects/Specific/soulparts.yml b/Resources/Prototypes/_Impstation/Heretic/Entities/Objects/Specific/soulparts.yml index f7352699592e4..4cac110c45d2d 100644 --- a/Resources/Prototypes/_Impstation/Heretic/Entities/Objects/Specific/soulparts.yml +++ b/Resources/Prototypes/_Impstation/Heretic/Entities/Objects/Specific/soulparts.yml @@ -1,7 +1,7 @@ - type: entity parent: [ BaseItem, TierXContraband ] id: SoulFragmentSight - name: sight fragment + name: soul fragment - sight description: The Archivist's gifts. components: - type: Item @@ -9,6 +9,7 @@ - type: Sprite sprite: _Impstation/Heretic/soul_fragments.rsi state: sight + noRot: true - type: Icon sprite: _Impstation/Heretic/soul_fragments.rsi state: sight @@ -18,8 +19,163 @@ color: "#f7ff1c" - type: Tag tags: - - Meat - Organ - Eyes - type: HereticSoulFragment - message: heretic-soul-fragment-sight \ No newline at end of file + message: heretic-soul-fragment-sight + +- type: entity + parent: SoulFragmentSight + id: SoulFragmentHunger + name: soul fragment - hunger + description: The Doe's gifts. + components: + - type: Item + size: Tiny + - type: Sprite + sprite: _Impstation/Heretic/soul_fragments.rsi + state: hunger + noRot: true #doe in shambles + - type: Icon + sprite: _Impstation/Heretic/soul_fragments.rsi + state: hunger + - type: PointLight + radius: 1.5 + energy: 3 + color: "#ff4423" + - type: Tag + tags: + - Organ + - Stomach + - type: HereticSoulFragment + message: heretic-soul-fragment-hunger + +- type: entity + parent: SoulFragmentSight + id: SoulFragmentDreams + name: soul fragment - dreams + description: A gift to ourselves. + components: + - type: Item + size: Tiny + - type: Sprite + sprite: _Impstation/Heretic/soul_fragments.rsi + state: dreams + noRot: true + - type: Icon + sprite: _Impstation/Heretic/soul_fragments.rsi + state: dreams + - type: PointLight + radius: 1.5 + energy: 3 + color: "#68d8d6" + - type: Tag + tags: + - Organ + - Brain + - type: HereticSoulFragment + message: heretic-soul-fragment-dreams + +- type: entity + parent: SoulFragmentSight + id: SoulFragmentRhythm + name: soul fragment - rhythm + description: The Note's gifts. + components: + - type: Item + size: Tiny + - type: Sprite + sprite: _Impstation/Heretic/soul_fragments.rsi + state: rhythm + noRot: true + - type: Icon + sprite: _Impstation/Heretic/soul_fragments.rsi + state: rhythm + - type: PointLight + radius: 1.5 + energy: 3 + color: "#ff7c6d" + - type: Tag + tags: + - Organ + - Heart + - type: HereticSoulFragment + message: heretic-soul-fragment-rhythm + +- type: entity + parent: SoulFragmentSight + id: SoulFragmentSpeech + name: soul fragment - speech + description: The Alchemist's gifts. + components: + - type: Item + size: Tiny + - type: Sprite + sprite: _Impstation/Heretic/soul_fragments.rsi + state: speech + noRot: true + - type: Icon + sprite: _Impstation/Heretic/soul_fragments.rsi + state: speech + - type: PointLight + radius: 1.5 + energy: 3 + color: "#de50e5" + - type: Tag + tags: + - Organ + - Lungs + - type: HereticSoulFragment + message: heretic-soul-fragment-speech + +- type: entity + parent: SoulFragmentSight + id: SoulFragmentSword + name: soul fragment - sword + description: The Fugitive's gifts. + components: + - type: Item + size: Tiny + - type: Sprite + sprite: _Impstation/Heretic/soul_fragments.rsi + state: sword + noRot: true + - type: Icon + sprite: _Impstation/Heretic/soul_fragments.rsi + state: sword + - type: PointLight + radius: 1.5 + energy: 3 + color: "#d6dd49" + - type: Tag + tags: + - Organ + - Kidneys + - type: HereticSoulFragment + message: heretic-soul-fragment-sword + +- type: entity + parent: SoulFragmentSight + id: SoulFragmentShield + name: soul fragment - shield + description: The Warden's gifts. + components: + - type: Item + size: Tiny + - type: Sprite + sprite: _Impstation/Heretic/soul_fragments.rsi + state: shield + noRot: true + - type: Icon + sprite: _Impstation/Heretic/soul_fragments.rsi + state: shield + - type: PointLight + radius: 1.5 + energy: 3 + color: "#ef6007" + - type: Tag + tags: + - Organ + - Liver + - type: HereticSoulFragment + message: heretic-soul-fragment-shield \ No newline at end of file diff --git a/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/dreams.png b/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/dreams.png new file mode 100644 index 0000000000000000000000000000000000000000..e2ea73a7a54702376145c4f8ba64e0586c19a1b4 GIT binary patch literal 900 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3-qd{%H_rU|?*@baoE#baqwWn z&^SMJqPK=ipvMQ7JNfzEQs=v7HMy1do-ce}E9>|{Q18v8`lSqq z-!ICax@8@6#=VBkrzfSoIq*|$i|vyV_wP#=oN+MXT(ADgxA;O4FE97edv)I|_ciY* zF|A~+{(WKcq&G*o-mlYt|Mt9bU46@b#`G&iiwp#%_W&b>Kfou%m3`i9uLJL`R^G_C zaSbR|bMo>@AjMh|IesvJDxT7zBZI6cA^&vw+2OfNT)pDQ9GO0ZdXb8r@a~2A~NO*cn)WY7LBx z4Hy?d%msP{46Kay@whC%5e?+*^>lFziEw{A@t{zP0*`a_ga7+03y*tWUMlHwt@*6$ z+$9f1m)fpj@o4aDu&&5uH`&DerN(X6YX^ohCiMU&2HqLdD(2k~XVQ~1_lRWE;bCA3 z%aarFFW<>)aNa*+kK&qghBb{026b!~m^W)nY^*$=Z}0k&O((!a>4O>52kr>2irdU9 zdbsOu2f5hYu6}_nWzx4NCjlbfm h4ooTsZZk&xX2@@_KD(Z2=?##tJYD@<);T3K0RT3ORQLb@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/hunger.png b/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/hunger.png new file mode 100644 index 0000000000000000000000000000000000000000..ef83aaeaf7ea7384d44cebb76ab3e616eec9df47 GIT binary patch literal 900 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3-qd{%H_rU|?*@baoE#baqwWn z&^SMJqPK=ipvMQ7JNfzEQs=v7HMy1do-ce}E9>|{Q18v8`lSqq z-!ICax@8@6#=VBkrzfSoIq*|$i|vyV_wP#=oN+MXT(ADgxA;O4FE97edv)I|_ciY* zF|A~+{(WKcq&G*o-mlYt|Mt9bU46@b#`G&iiwp#%_W&b>Kfou%)mTEJoq^%Mi}L@O zK$;={Yu!~K#aa^N7yKUx7=CZ#3kC{s7I;J!GcfQS0b$0e+I-SLLCF%=h?3y^w370~ zqEv=}#LT=BJwMkF1yemkJwqd5M)wk+qQ2A!&ooa@Ed~ydxeQW_tPG4mmKP99L)oCT zqQS@v7H0yo4H=mj1c7uE5NEctfW>owY!KinXJmK*Oj0l!-Btz$pa~P$8CZa74UCKp z7#Bdy1$qSxtc>>YxGcXB4dm?gba4!caDO}Tpiqkfk8|{c|NAQok9%KUD(P~q`K;^Q zB@acH+OA>oXz*;XuE=FK*~I*%#%=G_oy(vvgyh-A~@VPFc& zlN0eT-^pum-alfG;+k@XHH{1gb!-=yH)~65tURA@@A{HWC%{DMgBjBY?g*}m+srF^ zxcj&}%%<^$t`D^bU_-+T~0kXF6u|Kf{(#N-bZy{P%W^!Hzlzv8M6 gOezO%Ge-Sp$ZxPdyPj$34Un%qUHx3vIVCg!07)oPGXMYp literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/meta.json b/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/meta.json index fa15b49d50c58..468367201da09 100644 --- a/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/meta.json +++ b/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-4.0", - "copyright": "created by Sha-Sheng & Kandiyaki for Impstation", + "copyright": "created by Kandiyaki for Impstation", "size": { "x": 32, "y": 32 @@ -17,6 +17,72 @@ 0.3 ] ] + }, + { + "name": "hunger", + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "rhythm", + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "sword", + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "shield", + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "speech", + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "dreams", + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] } ] } diff --git a/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/rhythm.png b/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/rhythm.png new file mode 100644 index 0000000000000000000000000000000000000000..9ae55e6c85f8f327afe301594ca1768d71093ef6 GIT binary patch literal 900 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3-qd{%H_rU|?*@baoE#baqwWn z&^SMJqPK=ipvMQ7JNfzEQs=v7HMy1do-ce}E9>|{Q18v8`lSqq z-!ICax@8@6#=VBkrzfSoIq*|$i|vyV_wP#=oN+MXT(ADgxA;O4FE97edv)I|_ciY* zF|A~+{(WKcq&G*o-mlYt|Mt9bU46@b#`G&iiwp#%_W&b>Kfou%b%nM5|C-$Y^Ctg4 zxCdHJ^2z zyX2whQrk5w9u1xi))l$zCYzYQ)VR%h?Z8mRq#nS;z&m4F#k?EhOnP$W9+7N1JPb@> zd2%BD(W4eK2GCz#YL=ahrKX z4|gAThuM_;gsgjYCHq;_-+W+Pa3$)v_L~pF2hyq+{a<|XkC^mdKI;Vst0J*VKg#Z8m literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/shield.png b/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/shield.png new file mode 100644 index 0000000000000000000000000000000000000000..7cf4e7818fb79d01941dc74e91d4ada4d0d3abc0 GIT binary patch literal 900 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3-qd{%H_rU|?*@baoE#baqwWn z&^SMJqPK=ipvMQ7JNfzEQs=v7HMy1do-ce}E9>|{Q18v8`lSqq z-!ICax@8@6#=VBkrzfSoIq*|$i|vyV_wP#=oN+MXT(ADgxA;O4FE97edv)I|_ciY* zF|A~+{(WKcq&G*o-mlYt|Mt9bU46@b#`G&iiwp#%_W&b>Kfou%b-NqG`vms){SNQv z#RJ8{I;OV*Db|u8zu^Bs!0>w;UocRBv%n*=n1O-s2naJy)#j513QCr^MwA5SrKPgdGrE@m74@Y?c&2%JYB6wt%w>>bWMyCkvb=y;8p;Nx z6%9saus9QtZOF*PAPA(RfHArU}dzA$7T7AXdq{=r;B4qg!|ix2ZdS`c$}jj{NG<$c-;H)Qc0I<&1YTb zE_o=r)OHPvM}udBbww__$tLD6HEy$BJ1~?nsRuAI@XnZ4G4F;rlb)QpMFVdQ&MBb@0Lpq(1ONa4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/speech.png b/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/speech.png new file mode 100644 index 0000000000000000000000000000000000000000..5482849143722556e591d5c8d4dc7d43adfd2bae GIT binary patch literal 900 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3-qd{%H_rU|?*@baoE#baqwWn z&^SMJqPK=ipvMQ7JNfzEQs=v7HMy1do-ce}E9>|{Q18v8`lSqq z-!ICax@8@6#=VBkrzfSoIq*|$i|vyV_wP#=oN+MXT(ADgxA;O4FE97edv)I|_ciY* zF|A~+{(WKcq&G*o-mlYt|Mt9bU46@b#`G&iiwp#%_W&b>Kfou%b#ltIdjU^3*>C%` z>OWA-;hMGvkYX(f@(cbC1Ps5o@dX0~I14-?iy0XBj({-ZRBb+KprB-lYeY$Kep*R+ zVo@qXKw@TIiJqTph=Qq}p`M|UFr#}3P*GoMglC$krxpVT$Xo^~Mpgz!Aj=DgrJ-z4 zTG3!+28%NR*@lcv41z#93Wzh?S-|2sKsE^Qlru8C046CIjczLg1JHyC>hz4@@db&7h#ck#l zJ=}fV9cEMV6SD5rmF#CxfAfKH!Ih}v+HXDxA4scS^ndZiKVtHSieA+GU;6v6#$Rz& g2PTyRw;7{;Gvqf|pIy(i^ajXRp00i_>zopr06KY8U;qFB literal 0 HcmV?d00001 diff --git a/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/sword.png b/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/sword.png new file mode 100644 index 0000000000000000000000000000000000000000..b67d20a26a3a920c9a2660186af08794c01a6f97 GIT binary patch literal 900 zcmeAS@N?(olHy`uVBq!ia0vp^4M42G!3-qd{%H_rU|?*@baoE#baqwWn z&^SMJqPK=ipvMQ7JNfzEQs=v7HMy1do-ce}E9>|{Q18v8`lSqq z-!ICax@8@6#=VBkrzfSoIq*|$i|vyV_wP#=oN+MXT(ADgxA;O4FE97edv)I|_ciY* zF|A~+{(WKcq&G*o-mlYt|Mt9bU46@b#`G&iiwp#%_W&b>Kfou%b^bxUYj-`j+%~!R z-xeq)=)dnDkYX(f@(cbC1Ps5o@dX0~I14-?iy0XBj({-ZRBb+KprB-lYeY$Kep*R+ zVo@qXKw@TIiJqTph=Qq}p`M|UFr#}3P*GoMglC$krxpVT$Xo^~Mpgz!Aj=DgrJ-z4 zTG3!+28%NR*@lcv41z#93Wzh?S-|2sKsE^Qlru8C046CIjczLg1JHyC>hz4@@db&7h#ck#l zJ=}fV9cEMV6SD5rmF#CxfAfKH!Ih}v+HXDxA4scS^ndZiKVtHSieA+GU;6v6#$Rz& g2PTyRw;7{;Gvqf|pIy(i^ajXRp00i_>zopr0CRd&g8%>k literal 0 HcmV?d00001 From e7424177dc04f687b1fea4795b541e9618b1593f Mon Sep 17 00:00:00 2001 From: Kandiyaki Date: Mon, 13 Jul 2026 17:56:45 -0400 Subject: [PATCH 10/11] cleanup --- .../_Impstation/Heretic/EntitySystems/HellWorldSystem.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/Content.Server/_Impstation/Heretic/EntitySystems/HellWorldSystem.cs b/Content.Server/_Impstation/Heretic/EntitySystems/HellWorldSystem.cs index 913cd9509b85a..30e93cae31536 100644 --- a/Content.Server/_Impstation/Heretic/EntitySystems/HellWorldSystem.cs +++ b/Content.Server/_Impstation/Heretic/EntitySystems/HellWorldSystem.cs @@ -51,9 +51,7 @@ public sealed class HellWorldSystem : EntitySystem [Dependency] private readonly SharedMindSystem _mind = default!; [Dependency] private readonly SharedTransformSystem _xform = default!; [Dependency] private readonly CloningSystem _cloning = default!; - [Dependency] private readonly TransformSystem _transform = default!; [Dependency] private readonly AntagSelectionSystem _antag = default!; - [Dependency] private readonly GibbingSystem _gibbing = default!; private readonly ResPath _mapPath = new("Maps/_Impstation/Nonstations/InfiniteArchives.yml"); private readonly ProtoId _cloneSettings = "HellClone"; From 01f0f33242532960fa4f4103e9c439da920742d6 Mon Sep 17 00:00:00 2001 From: Kandiyaki Date: Thu, 16 Jul 2026 00:28:38 -0400 Subject: [PATCH 11/11] soul differentiations --- .../Heretic/soul_fragments.rsi/dreams.png | Bin 900 -> 915 bytes .../Heretic/soul_fragments.rsi/hunger.png | Bin 900 -> 909 bytes .../Heretic/soul_fragments.rsi/rhythm.png | Bin 900 -> 920 bytes .../Heretic/soul_fragments.rsi/shield.png | Bin 900 -> 909 bytes .../Heretic/soul_fragments.rsi/sight.png | Bin 900 -> 915 bytes .../Heretic/soul_fragments.rsi/speech.png | Bin 900 -> 917 bytes .../Heretic/soul_fragments.rsi/sword.png | Bin 900 -> 916 bytes 7 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/dreams.png b/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/dreams.png index e2ea73a7a54702376145c4f8ba64e0586c19a1b4..689802dd29a2e20b3c0ab355b0b14526b3794d63 100644 GIT binary patch delta 280 zcmV+z0q6dN2a^Y|vH>j;P)t-s2cDZs!0$S#*Z=?kXxP>O0052Ozv%z~00wkYPE-H? z|Ns90v%jRjliLB;f5=HhK~z{r?UKO`!Y~X&la~GeFVmr2;()Ev00-*JHra7ss@d^l zZGa6h2~fcsJD^b=;MbFBt^)zo37WtK05o9Q_`I;+2&6b~u(k}?6aWOG(maSy52Xz- zuTNOKA*@dTszCrKeg!ZBvnvFt`OF_b&E*Cv(3}xu8v*nMUMvN&odMil7n~QsHnc}z zYCe8=@130R2_FG&Bf<*GeFW$u!V1cL0BB-^dOv1IqVb=o+=sB8y566u-e>8rXaj73 e4e;*($8iUoH%gN{x4p*z0000X%P)t-s2cDZs!0$S#*l5_+0001d${XSq3Z&00LHS9u!Y^xeYMSPguMm ztakvcfdDXm2G9euD;TkP&u>3P=>{xNG$Qae0`Lo1Qwn(71E`D(jthu3ly6{a-hOny z1Sjn90ie`c$1Cjc6ToJBqW`1O{1zX=a_D^jrThIT{TC%b0wloO0b2V2Z-6_^uL7mm P00000NkvXXu0mjf-eqss diff --git a/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/hunger.png b/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/hunger.png index ef83aaeaf7ea7384d44cebb76ab3e616eec9df47..805a45ecc2b3cdd60d5a78914611fbc730def2d9 100644 GIT binary patch delta 274 zcmV+t0qy>T2aN}?vH>j;P)t-sGZ+|$0093)BLDyZ|CxsX0049aYmWc`00wkYPE-H? z|Ns90v%jRjliLB;f5J&bK~z{r?T|qhgdhwd2n>oRGP;Cx)`!iUefT3!KmZs&11N#k6^z)t=eI{ux&aF$jR?Gr0Q>>ESOVVm04nu@;{l=#vROhGo5SByN|DDGBQTh=rfCaDs{v9Ca Y4<#>3gXENBu>b%707*qoM6N<$g3PUOMF0Q* delta 265 zcmV+k0rvil2ZRT(vH>X%P)t-sGZ+|$0093)BmbF)0001Q^?ua=000GaQchF<|Ns90 z`?d~KlivZ?f4xaWK~z{r?UBI}gdhw{XSq3Z&00LHS9u!Y^xeYMSPguMm ztakvcfdDXm2G9euD;TkP&u>3P=>{xNG$Qae0`Lo1Qwn(71E`D(jthu3ly6{a-hOny z1Sjn90ie`c$1Cjc6ToJBqW`1O{1zX=a_D^jrThIT{TC%b0wloO0b2V2Z-6_^uL7mm P00000NkvXXu0mjfEzWHW diff --git a/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/rhythm.png b/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/rhythm.png index 9ae55e6c85f8f327afe301594ca1768d71093ef6..3dd35338946f018e88d04f945a7332aee8164aa3 100644 GIT binary patch delta 285 zcmV+&0pk9I2bc%2vH>j;P)t-ss5>wJd~N@plK=n!|G~Nd002>TXM+F$00wkYPE-H? z|Ns90v%jRjliLB;f6YlmK~z{r?U36J!ypVpbAkW=<Zq z18@Ka0aozZ4%dhd;QO6vtiuDK6EFb-0N3Etl+OeEK_JBQ29jw&K>#jb73Q7t>87xO z&*Kv&Z^+jN0Mq~g5I+KFfzcI=(0t^#zr=6@6cEk`qU{0jV+BkFq8$O4`UTeoWE;{u zFf?y}SVcs;4Lf`bprWNc-GU9i1z=It{vGb{JwVZt7A*H|wk4!Lzr}Z9x^#bk(t1Bj je?B6sAHq00000NkvXXu0mjf-35DR delta 265 zcmV+k0rviw2ZRT(vH>X%P)t-ss5>wJd~N@plmEfG0000#1~^v$000GaQchF<|Ns90 z`?d~KlivZ?f4xaWK~z{r?UBI}gdhw{XSq3Z&00LHS9u!Y^xeYMSPguMm ztakvcfdDXm2G9euD;TkP&u>3P=>{xNG$Qae0`Lo1Qwn(71E`D(jthu3ly6{a-hOny z1Sjn90ie`c$1Cjc6ToJBqW`1O{1zX=a_D^jrThIT{TC%b0wloO0b2V2Z-6_^uL7mm P00000NkvXXu0mjfmAP(d diff --git a/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/shield.png b/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/shield.png index 7cf4e7818fb79d01941dc74e91d4ada4d0d3abc0..6e4f5b5000af516e1cc1d486176c98ccbbfa4786 100644 GIT binary patch delta 274 zcmV+t0qy>T2aN}?vH>j;P)t-sw?+W(UtlpaIj8&lCHNK#1oJV$*=e03hHM=0W*%Q`i9W z{D#RF!ukNf8VCU6X8pyegJ4n3s(ET1@KIC=P&UgEQikjS6c69>5pgwY=8~$?*O&l Y0m5%eo0eRhi~s-t07*qoM6N<$f}x*#jQ{`u delta 265 zcmV+k0rvil2ZRT(vH>X%P)t-sw?+W(U{XSq3Z&00LHS9u!Y^xeYMSPguMm ztakvcfdDXm2G9euD;TkP&u>3P=>{xNG$Qae0`Lo1Qwn(71E`D(jthu3ly6{a-hOny z1Sjn90ie`c$1Cjc6ToJBqW`1O{1zX=a_D^jrThIT{TC%b0wloO0b2V2Z-6_^uL7mm P00000NkvXXu0mjf1b=Pa diff --git a/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/sight.png b/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/sight.png index 324207cab5da93fa44dfd6645d94fa4e0a5cd162..8ef6c6022a4575bb6575f758149c8ae8644d72cd 100644 GIT binary patch delta 280 zcmV+z0q6dN2a^Y|vH>j;P)t-sz{UXg{~Y)KcmMzZ_y6<&0045Eda3{b00wkYPE-H? z|Ns90v%jRjliLB;f5=HhK~z{r?UBI}gdhwzzLK9KmxiY?kD9x49*@WNE!xA3;+zZTt6u8E^-r~ zpWiUJA&hqbEP((peg;qsy(3g&{hq%*iqZ*~A!$V5%Lu?1UNB_vWe=dz4mcJNO(>_K ztG_;|rSdcrR@4C?nOS>;6?FhG`&c-^^f~}Myn!s|KWg}ht delta 265 zcmV+k0rvir2ZRT(vH>X%P)t-sz{UXg{~Y)Kc=!MG0000cYLlG+000GaQchF<|Ns90 z`?d~KlivZ?f4xaWK~z{r?UBI}gdhw{XSq3Z&00LHS9u!Y^xeYMSPguMm ztakvcfdDXm2G9euD;TkP&u>3P=>{xNG$Qae0`Lo1Qwn(71E`D(jthu3ly6{a-hOny z1Sjn90ie`c$1Cjc6ToJBqW`1O{1zX=a_D^jrThIT{TC%b0wloO0b2V2Z-6_^uL7mm P00000NkvXXu0mjfsXcI< diff --git a/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/speech.png b/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/speech.png index 5482849143722556e591d5c8d4dc7d43adfd2bae..d7ea8d88c8e331db5e57b46d3e45adc197fc7db6 100644 GIT binary patch delta 282 zcmV+#0pj;P)t-slVq0OQ01~ewg3PC`l|l`001f{2TK3|00wkYPE-H? z|Ns90v%jRjliLB;f67TjK~z{r?U6we!ypU;jcNY><(f_|mWwqMXb(k~BqLd@iCjO{ z0XP7I04sQX2Q;z+%KgkV)`0-*1Wr&005o7)@_Ax^5D4+SL3A2W82|*l!aOLSHiZo^ z&rg`VA*>GotbqV9egX%P)t-slVq0OQ01~ew)(370000$)+;Cg000GaQchF<|Ns90 z`?d~KlivZ?f4xaWK~z{r?UBI}gdhw{XSq3Z&00LHS9u!Y^xeYMSPguMm ztakvcfdDXm2G9euD;TkP&u>3P=>{xNG$Qae0`Lo1Qwn(71E`D(jthu3ly6{a-hOny z1Sjn90ie`c$1Cjc6ToJBqW`1O{1zX=a_D^jrThIT{TC%b0wloO0b2V2Z-6_^uL7mm P00000NkvXXu0mjfV2p1; diff --git a/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/sword.png b/Resources/Textures/_Impstation/Heretic/soul_fragments.rsi/sword.png index b67d20a26a3a920c9a2660186af08794c01a6f97..19e30c1a4002e232df3b0a7873e8018fd81d0bd4 100644 GIT binary patch delta 281 zcmV+!0p|XM2b2e}vH>j;P)t-spTREH-AT0DGynhq(f>UF001HS=b8Wj00wkYPE-H? z|Ns90v%jRjliLB;f5}NiK~z{r?T|qd!ypU;jS2t%a!Do^%f%W3q=%wQn~^Nmmhxk5 zfDOe58VCU6X8<+OyMhs$_x$!#65W6WG(`m7MgV?*U!j1vJwTFn!FhmaL%9N7 z^Y)|qnsc*Zg%1FFcYsnpS))peh&=Px00000NkvXXu0mjf{J?#U delta 265 zcmV+k0rvis2ZRT(vH>X%P)t-spTREH-AT0DG|~S(0000HPrm*D000GaQchF<|Ns90 z`?d~KlivZ?f4xaWK~z{r?UBI}gdhw{XSq3Z&00LHS9u!Y^xeYMSPguMm ztakvcfdDXm2G9euD;TkP&u>3P=>{xNG$Qae0`Lo1Qwn(71E`D(jthu3ly6{a-hOny z1Sjn90ie`c$1Cjc6ToJBqW`1O{1zX=a_D^jrThIT{TC%b0wloO0b2V2Z-6_^uL7mm P00000NkvXXu0mjfd+~2$