From 2679bb238acf5e6aa55cb8554b5b3ead6a8e837e Mon Sep 17 00:00:00 2001 From: AeraAulin <133451603+AeraAuling@users.noreply.github.com> Date: Wed, 19 Nov 2025 17:58:08 -0800 Subject: [PATCH] Psionic Prosthetics (#4689) * AAAAAAAAA * consistency * add to emag packs * add blacklist system and blacklist high risk items and bags thank you javadocs * add DeltaV comments * make comment better fit comment standards --- .../ItemRecall/ItemRecallComponent.cs | 7 ++ .../ItemRecall/SharedItemRecallSystem.cs | 23 +++++-- .../en-US/_DV/item-recall/item-recall.ftl | 1 + .../en-US/_DV/research/technologies.ftl | 2 + .../Entities/Structures/Machines/lathe.yml | 3 + Resources/Prototypes/Magic/recall_spell.yml | 4 ++ .../Prototypes/_DV/Body/Parts/cybernetic.yml | 64 +++++++++++++++++++ .../_DV/Recipes/Lathes/Packs/robotics.yml | 7 ++ .../_DV/Recipes/Lathes/Packs/security.yml | 6 ++ .../_DV/Recipes/Lathes/robotics.yml | 36 +++++++++++ .../_DV/Recipes/Lathes/security.yml | 24 +++++++ Resources/Prototypes/_DV/Research/arsenal.yml | 13 ++++ .../Prototypes/_DV/Research/experimental.yml | 14 ++++ 13 files changed, 199 insertions(+), 5 deletions(-) create mode 100644 Resources/Locale/en-US/_DV/item-recall/item-recall.ftl create mode 100644 Resources/Prototypes/_DV/Body/Parts/cybernetic.yml diff --git a/Content.Shared/ItemRecall/ItemRecallComponent.cs b/Content.Shared/ItemRecall/ItemRecallComponent.cs index e057a9945c..773feb6f73 100644 --- a/Content.Shared/ItemRecall/ItemRecallComponent.cs +++ b/Content.Shared/ItemRecall/ItemRecallComponent.cs @@ -1,4 +1,5 @@ using Robust.Shared.GameStates; +using Content.Shared.Whitelist; // DeltaV namespace Content.Shared.ItemRecall; @@ -40,4 +41,10 @@ public sealed partial class ItemRecallComponent : Component /// [DataField, AutoNetworkedField] public EntityUid? MarkedEntity; + + /// + // DeltaV - Prevent steal target items from being marked. + /// + [DataField] + public EntityWhitelist? MarkedEntityBlacklist = new(); } diff --git a/Content.Shared/ItemRecall/SharedItemRecallSystem.cs b/Content.Shared/ItemRecall/SharedItemRecallSystem.cs index 8d0e371b89..0639a8f665 100644 --- a/Content.Shared/ItemRecall/SharedItemRecallSystem.cs +++ b/Content.Shared/ItemRecall/SharedItemRecallSystem.cs @@ -5,6 +5,7 @@ using Content.Shared.Hands.EntitySystems; using Content.Shared.IdentityManagement; using Content.Shared.Popups; using Content.Shared.Projectiles; +using Content.Shared.Whitelist; //DeltaV using Robust.Shared.GameStates; using Robust.Shared.Player; @@ -22,6 +23,7 @@ public abstract partial class SharedItemRecallSystem : EntitySystem [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly SharedPopupSystem _popups = default!; [Dependency] private readonly SharedProjectileSystem _proj = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; // DeltaV public override void Initialize() { @@ -60,9 +62,11 @@ public abstract partial class SharedItemRecallSystem : EntitySystem return; } - _popups.PopupClient(Loc.GetString("item-recall-item-marked", ("item", markItem.Value)), args.Performer, args.Performer); - TryMarkItem(ent, markItem.Value); + // DeltaV + if (TryMarkItem(ent, markItem.Value)) + _popups.PopupClient(Loc.GetString("item-recall-item-marked", ("item", markItem.Value)), args.Performer, args.Performer); return; + // DeltaV } RecallItem(ent.Comp.MarkedEntity.Value); @@ -96,13 +100,20 @@ public abstract partial class SharedItemRecallSystem : EntitySystem TryUnmarkItem(ent); } - private void TryMarkItem(Entity ent, EntityUid item) + // DeltaV - Change to return bool and add blacklist check + private bool TryMarkItem(Entity ent, EntityUid item) { if (_actions.GetAction(ent.Owner) is not {} action) - return; + return false; if (action.Comp.AttachedEntity is not {} user) - return; + return false; + + if (_whitelistSystem.IsBlacklistPass(ent.Comp.MarkedEntityBlacklist, item)) + { + _popups.PopupClient(Loc.GetString("item-recall-item-steal-target", ("item", item)), user, user); + return false; + } AddToPvsOverride(item, user); @@ -114,7 +125,9 @@ public abstract partial class SharedItemRecallSystem : EntitySystem Dirty(item, marker); UpdateActionAppearance((action, action, ent)); + return true; } + // END DeltaV private void TryUnmarkItem(EntityUid item) { diff --git a/Resources/Locale/en-US/_DV/item-recall/item-recall.ftl b/Resources/Locale/en-US/_DV/item-recall/item-recall.ftl new file mode 100644 index 0000000000..bbcd4ded08 --- /dev/null +++ b/Resources/Locale/en-US/_DV/item-recall/item-recall.ftl @@ -0,0 +1 @@ +item-recall-item-steal-target = {CAPITALIZE(THE($item))}'s potential rejects the mark. diff --git a/Resources/Locale/en-US/_DV/research/technologies.ftl b/Resources/Locale/en-US/_DV/research/technologies.ftl index fdf78f1cbc..321ad2d667 100644 --- a/Resources/Locale/en-US/_DV/research/technologies.ftl +++ b/Resources/Locale/en-US/_DV/research/technologies.ftl @@ -9,6 +9,7 @@ research-technology-engineering-eva = EVA PPE Suits # Experimental research-technology-cloning = Cloning research-technology-artifact-display = Artifact Display Technology +research-technology-psionic-prosthetics = Psionic Prosthetics # Civilian research-technology-civilian-mechs = Civilian Mechs @@ -29,3 +30,4 @@ research-technology-robust-melee = Robust Melee research-technology-incendiary-laser-weapons = Incendiary Laser Weapons research-technology-security-eva = EVA Armored Suits research-technology-salvage-eva = EVA Xeno-fighting Suits +research-technology-offensive-psionic-prosthetics = Offensive Psionic Prosthetics diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 38146b6fca..ae8c76443d 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -345,6 +345,7 @@ - MechEquipment - Surgery # DeltaV - Share Surgery Parts between Epi and Med. - CyberneticsRobotics # DeltaV - Share Surgery Parts between Epi and Med. + - PsionicProsthetics # DeltaV - type: EmagLatheRecipes # DeltaV emagStaticPacks: - RoboticsEmagStatic @@ -357,6 +358,7 @@ - SalvageHardsuits - ParamedicHardsuit - EngineeringHardsuits + - AdvancedPsionicProsthetics # End DeltaV Additions - type: MaterialStorage whitelist: @@ -455,6 +457,7 @@ - SecurityWeapons - SpecOpsGoogles # DeltaV #- SecurityDisablers # DeltaV - made roundstart + - AdvancedPsionicProsthetics # DeltaV - type: MaterialStorage whitelist: tags: diff --git a/Resources/Prototypes/Magic/recall_spell.yml b/Resources/Prototypes/Magic/recall_spell.yml index 72082c3834..834a239d62 100644 --- a/Resources/Prototypes/Magic/recall_spell.yml +++ b/Resources/Prototypes/Magic/recall_spell.yml @@ -21,3 +21,7 @@ - type: InstantAction event: !type:OnItemRecallActionEvent - type: ItemRecall + markedEntityBlacklist: # DeltaV + tags: + - HighRiskItem + - Backpack diff --git a/Resources/Prototypes/_DV/Body/Parts/cybernetic.yml b/Resources/Prototypes/_DV/Body/Parts/cybernetic.yml new file mode 100644 index 0000000000..4182376638 --- /dev/null +++ b/Resources/Prototypes/_DV/Body/Parts/cybernetic.yml @@ -0,0 +1,64 @@ +- type: entity + parent: LeftArmCyberneticBase + id: ForcewallLeftArm + name: FWL left arm + description: A prosthetic arm made by blending advanced cybernetics and powerful psionics. This one grants the use of the ability forcewall. + components: + - type: BodyPart + onAdd: + - type: ActionGrant + actions: + - ActionForceWall + - type: Psionic + +- type: entity + parent: LeftArmCyberneticBase + id: RecallLeftArm + name: RCL left arm + description: A prosthetic arm made by blending advanced cybernetics and powerful psionics. This one grants the use of the ability Recall. + components: + - type: BodyPart + onAdd: + - type: ActionGrant + actions: + - ActionItemRecall + - type: Psionic + +- type: entity + parent: LeftArmCyberneticBase + id: DispelLeftArm + name: DSP left arm + description: A prosthetic arm made by blending advanced cybernetics and powerful psionics. This one grants the use of the ability Dispel. + components: + - type: BodyPart + onAdd: + - type: ActionGrant + actions: + - ActionDispel + - type: Psionic + +- type: entity + parent: LeftArmCyberneticBase + id: PyroLeftArm + name: BRN left arm + description: A prosthetic arm made by blending advanced cybernetics and powerful psionics. This one grants the use of the ability Pyrokinesis. + components: + - type: BodyPart + onAdd: + - type: ActionGrant + actions: + - ActionPyrokinesis + - type: Psionic + +- type: entity + parent: LeftArmCyberneticBase + id: ZapLeftArm + name: ZAP left arm + description: A prosthetic arm made by blending advanced cybernetics and powerful psionics. This one grants the use of the ability Noospheric Zap. + components: + - type: BodyPart + onAdd: + - type: ActionGrant + actions: + - ActionNoosphericZap + - type: Psionic diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/robotics.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/robotics.yml index 27dd1a6734..87bb7090da 100644 --- a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/robotics.yml +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/robotics.yml @@ -76,3 +76,10 @@ - AugmentBotanyPanelElectronics - AugmentSurgeryPanelElectronics - AugmentPaperworkPanelElectronics + +- type: latheRecipePack + id: PsionicProsthetics + recipes: + - DispelLeftArm + - RecallLeftArm + - ForcewallLeftArm diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/security.yml b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/security.yml index 5f7c4c0c2e..bfa44674f3 100644 --- a/Resources/Prototypes/_DV/Recipes/Lathes/Packs/security.yml +++ b/Resources/Prototypes/_DV/Recipes/Lathes/Packs/security.yml @@ -100,3 +100,9 @@ recipes: - ClothingOuterHardsuitEVAPrisoner - ClothingHeadHelmetEVALarge + +- type: latheRecipePack + id: AdvancedPsionicProsthetics + recipes: + - PyroLeftArm + - ZapLeftArm diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/robotics.yml b/Resources/Prototypes/_DV/Recipes/Lathes/robotics.yml index d84e9ebcc7..d58a0fc4a6 100644 --- a/Resources/Prototypes/_DV/Recipes/Lathes/robotics.yml +++ b/Resources/Prototypes/_DV/Recipes/Lathes/robotics.yml @@ -242,3 +242,39 @@ Plasma: 1000 Plastic: 1000 Gold: 500 + +- type: latheRecipe + id: ForcewallLeftArm + result: ForcewallLeftArm + categories: + - Robotics + completetime: 5 + materials: + Steel: 1500 + Silver: 100 + Plasma: 500 + Bluespace: 300 + +- type: latheRecipe + id: DispelLeftArm + result: DispelLeftArm + categories: + - Robotics + completetime: 5 + materials: + Steel: 1500 + Silver: 100 + Plasma: 500 + Bluespace: 300 + +- type: latheRecipe + id: RecallLeftArm + result: RecallLeftArm + categories: + - Robotics + completetime: 5 + materials: + Steel: 1500 + Silver: 100 + Plasma: 500 + Bluespace: 300 diff --git a/Resources/Prototypes/_DV/Recipes/Lathes/security.yml b/Resources/Prototypes/_DV/Recipes/Lathes/security.yml index 4da2710a19..8ea60584f7 100644 --- a/Resources/Prototypes/_DV/Recipes/Lathes/security.yml +++ b/Resources/Prototypes/_DV/Recipes/Lathes/security.yml @@ -352,3 +352,27 @@ Silver: 1500 Gold: 500 Wood: 300 + +- type: latheRecipe + id: PyroLeftArm + result: PyroLeftArm + categories: + - Robotics + completetime: 5 + materials: + Steel: 1500 + Silver: 100 + Plasma: 500 + Bluespace: 300 + +- type: latheRecipe + id: ZapLeftArm + result: ZapLeftArm + categories: + - Robotics + completetime: 5 + materials: + Steel: 1500 + Silver: 100 + Plasma: 500 + Bluespace: 300 diff --git a/Resources/Prototypes/_DV/Research/arsenal.yml b/Resources/Prototypes/_DV/Research/arsenal.yml index 6a2b81d987..34cbf2797e 100644 --- a/Resources/Prototypes/_DV/Research/arsenal.yml +++ b/Resources/Prototypes/_DV/Research/arsenal.yml @@ -151,3 +151,16 @@ - TelescopicShield - BorgModuleSecurityEscalate - BorgModuleSecurityBastion + +- type: technology + id: OffensivePsionicProsthetics + name: research-technology-offensive-psionic-prosthetics + icon: + sprite: _DV/Interface/Actions/actions_psionics.rsi + state: pyrokinesis + discipline: Arsenal + tier: 2 + cost: 12500 + recipeUnlocks: + - PyroLeftArm + - ZapLeftArm diff --git a/Resources/Prototypes/_DV/Research/experimental.yml b/Resources/Prototypes/_DV/Research/experimental.yml index 3d2e8aa7a5..7ddab88ffe 100644 --- a/Resources/Prototypes/_DV/Research/experimental.yml +++ b/Resources/Prototypes/_DV/Research/experimental.yml @@ -9,3 +9,17 @@ cost: 5000 recipeUnlocks: - ArtifactDisplayCaseMachineCircuitBoard + +- type: technology + id: PsionicProsthetics + name: research-technology-psionic-prosthetics + icon: + sprite: _DV/Interface/Actions/actions_psionics.rsi + state: dispel + discipline: Experimental + tier: 2 + cost: 10000 + recipeUnlocks: + - DispelLeftArm + - RecallLeftArm + - ForcewallLeftArm