From a312063e25a16548bfff04cbdfca6523ecb5e730 Mon Sep 17 00:00:00 2001 From: Kandiyaki <106633914+Kandiyaki@users.noreply.github.com> Date: Tue, 31 Dec 2024 22:47:09 -0500 Subject: [PATCH 01/14] ashen pig nerfs --- .../Heretic/Abilities/HereticAbilitySystem.Ash.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Ash.cs b/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Ash.cs index 36e2127f3010..530db4dc15e4 100644 --- a/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Ash.cs +++ b/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Ash.cs @@ -5,11 +5,16 @@ using Content.Shared.Damage; using Content.Shared.Atmos; using Content.Server.Polymorph.Systems; +using Robust.Server.Audio; +using Robust.Shared.Audio; namespace Content.Server.Heretic.Abilities; public sealed partial class HereticAbilitySystem : EntitySystem { + [Dependency] private readonly AudioSystem _audio = default!; + public SoundSpecifier JauntExitSound = new SoundPathSpecifier("/Audio/Magic/fireball.ogg"); + private void SubscribeAsh() { SubscribeLocalEvent(OnJaunt); @@ -43,6 +48,15 @@ private bool TryDoJaunt(EntityUid ent) private void OnJauntEnd(Entity ent, ref PolymorphRevertEvent args) { Spawn("PolymorphAshJauntEndAnimation", Transform(ent).Coordinates); + + if (TryComp(ent, out var flam)) + { + if (!flam.OnFire) + { + _flammable.AdjustFireStacks(ent, 1, flam, true); + } + } + _audio.PlayPvs(JauntExitSound, ent, AudioParams.Default.WithVolume(-2f)); } private void OnVolcano(Entity ent, ref EventHereticVolcanoBlast args) From 24f84de91f6e2ceabd48de918ca7ab8883e94637 Mon Sep 17 00:00:00 2001 From: Kandiyaki <106633914+Kandiyaki@users.noreply.github.com> Date: Wed, 1 Jan 2025 11:22:21 -0500 Subject: [PATCH 02/14] nightwatcher's rebirth nerf + ash blade recipe change --- .../_Goobstation/Heretic/Abilities/HereticAbilitySystem.Ash.cs | 3 ++- .../_Goobstation/Heretic/store/heretic/heretic-catalog-ash.ftl | 2 +- Resources/Prototypes/Entities/Objects/Tools/welders.yml | 1 + .../_Goobstation/Heretic/Heretic/heretic_rituals.yml | 2 +- Resources/Prototypes/tags.yml | 3 +++ .../_Goobstation/Guidebook/Antagonist/HereticsAsh.xml | 2 +- 6 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Ash.cs b/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Ash.cs index 530db4dc15e4..7e8b43b74609 100644 --- a/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Ash.cs +++ b/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Ash.cs @@ -14,6 +14,7 @@ public sealed partial class HereticAbilitySystem : EntitySystem { [Dependency] private readonly AudioSystem _audio = default!; public SoundSpecifier JauntExitSound = new SoundPathSpecifier("/Audio/Magic/fireball.ogg"); + public const float RebirthRange = 3f; private void SubscribeAsh() { @@ -88,7 +89,7 @@ private void OnNWRebirth(Entity ent, ref EventHereticNightwatc if (!TryUseAbility(ent, args)) return; - var lookup = _lookup.GetEntitiesInRange(ent, 5f); + var lookup = _lookup.GetEntitiesInRange(ent, RebirthRange); foreach (var look in lookup) { diff --git a/Resources/Locale/en-US/_Goobstation/Heretic/store/heretic/heretic-catalog-ash.ftl b/Resources/Locale/en-US/_Goobstation/Heretic/store/heretic/heretic-catalog-ash.ftl index a7aa3deef4cc..c8ed593d6c80 100644 --- a/Resources/Locale/en-US/_Goobstation/Heretic/store/heretic/heretic-catalog-ash.ftl +++ b/Resources/Locale/en-US/_Goobstation/Heretic/store/heretic/heretic-catalog-ash.ftl @@ -3,7 +3,7 @@ knowledge-path-ash-s1-desc = The City Guard know their watch. If you ask them at night, they may tell you about the ashy lantern. Opens up the Path of Ash to you. - Allows you to transmute a match and a knife into an Ashen Blade. + Allows you to transmute a welding tool and a knife into an Ashen Blade. knowledge-path-ash-s2-name = Grasp of Ash knowledge-path-ash-s2-desc = diff --git a/Resources/Prototypes/Entities/Objects/Tools/welders.yml b/Resources/Prototypes/Entities/Objects/Tools/welders.yml index a4fd950534eb..3a2db622439c 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/welders.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/welders.yml @@ -109,6 +109,7 @@ tags: - DroneUsable # imp edits # + - WeldingTool - type: ItemToggleDamageOtherOnHit activatedDamage: types: diff --git a/Resources/Prototypes/_Goobstation/Heretic/Heretic/heretic_rituals.yml b/Resources/Prototypes/_Goobstation/Heretic/Heretic/heretic_rituals.yml index c1e1103bf29e..720fe6b97931 100644 --- a/Resources/Prototypes/_Goobstation/Heretic/Heretic/heretic_rituals.yml +++ b/Resources/Prototypes/_Goobstation/Heretic/Heretic/heretic_rituals.yml @@ -61,7 +61,7 @@ state: icon requiredTags: Knife: 1 - Matchstick: 1 + WeldingTool: 1 output: HereticBladeAsh: 1 diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 989c8889583c..4eb4b9d763a8 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -1426,6 +1426,9 @@ - type: Tag id: WeldingMask +- type: Tag #imp addon (why the fuck doesn't this exist upstream) + id: WeldingTool + - type: Tag id: WetFloorSign diff --git a/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsAsh.xml b/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsAsh.xml index 611ecad92551..01204ded546c 100644 --- a/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsAsh.xml +++ b/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsAsh.xml @@ -10,7 +10,7 @@ Opens up the Path of Ash to you. - Allows you to transmute a match and a knife into an Ashen Blade. + Allows you to transmute a welding tool and a knife into an Ashen Blade. ## Grasp of Ash From 53c49f45c0d5d67acb59992b24838ce7c6b2aaff Mon Sep 17 00:00:00 2001 From: Kandiyaki <106633914+Kandiyaki@users.noreply.github.com> Date: Wed, 1 Jan 2025 12:06:55 -0500 Subject: [PATCH 03/14] mansus grasp can be removed by using it in hand --- .../Heretic/EntitySystems/MansusGraspSystem.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Content.Server/_Goobstation/Heretic/EntitySystems/MansusGraspSystem.cs b/Content.Server/_Goobstation/Heretic/EntitySystems/MansusGraspSystem.cs index b6f6f63a13d6..f239d523f785 100644 --- a/Content.Server/_Goobstation/Heretic/EntitySystems/MansusGraspSystem.cs +++ b/Content.Server/_Goobstation/Heretic/EntitySystems/MansusGraspSystem.cs @@ -9,10 +9,12 @@ using Content.Shared.DoAfter; using Content.Shared.Doors.Components; using Content.Shared.Doors.Systems; +using Content.Shared.Explosion.Components; using Content.Shared.Eye.Blinding.Systems; using Content.Shared.Hands; using Content.Shared.Heretic; using Content.Shared.Interaction; +using Content.Shared.Interaction.Events; using Content.Shared.Mobs.Components; using Content.Shared.Silicons.Borgs.Components; using Content.Shared.Speech.Muting; @@ -97,6 +99,7 @@ public override void Initialize() SubscribeLocalEvent(OnAfterInteract); SubscribeLocalEvent(OnRitualRuneDoAfter); + SubscribeLocalEvent(OnUseInHand); } private void OnAfterInteract(Entity ent, ref AfterInteractEvent args) @@ -146,6 +149,21 @@ private void OnAfterInteract(Entity ent, ref AfterInteract QueueDel(ent); } + private void OnUseInHand(EntityUid uid, MansusGraspComponent component, UseInHandEvent args) + { + if (args.Handled) + return; + + if (!TryComp(args.User, out var hereticComp)) + { + QueueDel(uid); + return; + } + + hereticComp.MansusGraspActive = false; + QueueDel(uid); + } + private void OnAfterInteract(Entity ent, ref AfterInteractEvent args) { var tags = ent.Comp.Tags; From 18fe324e513708af988894b5a10797a6bd2c02e9 Mon Sep 17 00:00:00 2001 From: Kandiyaki <106633914+Kandiyaki@users.noreply.github.com> Date: Wed, 1 Jan 2025 12:53:38 -0500 Subject: [PATCH 04/14] new ghoul examine text --- .../_Goobstation/Heretic/EntitySystems/GhoulSystem.cs | 2 +- .../Locale/en-US/_Goobstation/Heretic/abilities/heretic.ftl | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Content.Server/_Goobstation/Heretic/EntitySystems/GhoulSystem.cs b/Content.Server/_Goobstation/Heretic/EntitySystems/GhoulSystem.cs index ad015489c762..bd524da7d345 100644 --- a/Content.Server/_Goobstation/Heretic/EntitySystems/GhoulSystem.cs +++ b/Content.Server/_Goobstation/Heretic/EntitySystems/GhoulSystem.cs @@ -143,7 +143,7 @@ private void OnTryAttack(Entity ent, ref AttackAttemptEvent args private void OnExamine(Entity ent, ref ExaminedEvent args) { - args.PushMarkup(Loc.GetString("examine-system-cant-see-entity")); + args.PushMarkup($"[color=red]{Loc.GetString("heretic-ghoul-examine", ("ent", args.Examined))}[/color]"); } private void OnMobStateChange(Entity ent, ref MobStateChangedEvent args) diff --git a/Resources/Locale/en-US/_Goobstation/Heretic/abilities/heretic.ftl b/Resources/Locale/en-US/_Goobstation/Heretic/abilities/heretic.ftl index 32021f2e2ce8..fd88e2a02e43 100644 --- a/Resources/Locale/en-US/_Goobstation/Heretic/abilities/heretic.ftl +++ b/Resources/Locale/en-US/_Goobstation/Heretic/abilities/heretic.ftl @@ -9,6 +9,8 @@ heretic-magicitem-examine = [color=yellow]Allows you to use advanced spells whil heretic-blade-examine = [color=yellow]Using it while it's in your hand will break the blade and teleport you away from danger.[/color] heretic-blade-use = The blade shatters, and you feel the voices pulling you away. +heretic-ghoul-examine = { CAPITALIZE(POSS-ADJ($ent)) } body looks like a decaying corpse. + heretic-rust-mark-itembreak = {$name} shatters into dust! heretic-manselink-fail-exists = This creature is already connected! From ef073af1350d30e6f3c7107c378674da10f8fab5 Mon Sep 17 00:00:00 2001 From: Kandiyaki <106633914+Kandiyaki@users.noreply.github.com> Date: Thu, 2 Jan 2025 19:54:06 -0500 Subject: [PATCH 05/14] created heretic game presets --- .../Prototypes/_Goobstation/game_presets.yml | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/Resources/Prototypes/_Goobstation/game_presets.yml b/Resources/Prototypes/_Goobstation/game_presets.yml index 8f9938419245..2b1fd0f03dfc 100644 --- a/Resources/Prototypes/_Goobstation/game_presets.yml +++ b/Resources/Prototypes/_Goobstation/game_presets.yml @@ -1,3 +1,34 @@ +- type: gamePreset + id: Heretics + alias: + - Heretic + name: heretic-gamemode-title + description: heretic-gamemode-description + cooldown: 1 + showInVote: false + rules: + - Heretic + - SubGamemodesRule + - MeteorSwarmScheduler + - SpaceTrafficControlEventScheduler + - BasicRoundstartVariation + - MidpopLimiter + +- type: gamePreset + id: SecretHeretics + alias: + - SecretHeretic + name: secret-title + description: secret-description + showInVote: false + rules: + - Heretic + - SubGamemodesRule + - MeteorSwarmScheduler + - SpaceTrafficControlEventScheduler + - BasicRoundstartVariation + - MidpopLimiter + - type: gamePreset id: Changeling alias: From 7ee7aadd42495406ff7f11257068a21f7008888b Mon Sep 17 00:00:00 2001 From: Kandiyaki <106633914+Kandiyaki@users.noreply.github.com> Date: Fri, 3 Jan 2025 15:29:17 -0500 Subject: [PATCH 06/14] Ritual of Knowledge loc fix + trying to nerf multipathing (agony) --- .../Store/Conditions/HereticPathCondition.cs | 64 ++++++++++++++++++- .../Heretic/Catalog/Heretic/path_side.yml | 6 +- 2 files changed, 66 insertions(+), 4 deletions(-) diff --git a/Content.Server/_Goobstation/Store/Conditions/HereticPathCondition.cs b/Content.Server/_Goobstation/Store/Conditions/HereticPathCondition.cs index b18dc9c93e3e..9ca59ad38a9b 100644 --- a/Content.Server/_Goobstation/Store/Conditions/HereticPathCondition.cs +++ b/Content.Server/_Goobstation/Store/Conditions/HereticPathCondition.cs @@ -1,16 +1,28 @@ +using Content.Server.Heretic.EntitySystems; using Content.Shared.Heretic; +using Content.Shared.Heretic.Prototypes; using Content.Shared.Mind; using Content.Shared.Store; +using JetBrains.Annotations; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Microsoft.EntityFrameworkCore.Metadata.Conventions; +using Robust.Shared.Prototypes; +using Robust.Shared.Toolshed.Commands.Math; +using Robust.Shared.Utility; using System.Linq; namespace Content.Server.Store.Conditions; public sealed partial class HereticPathCondition : ListingCondition { + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly HereticKnowledgeSystem _knowledge = default!; + + public int AlternatePathPenalty = 1; [DataField] public HashSet? Whitelist; [DataField] public HashSet? Blacklist; [DataField] public int Stage = 0; - + public override bool Condition(ListingConditionArgs args) { var ent = args.EntityManager; @@ -22,11 +34,21 @@ public override bool Condition(ListingConditionArgs args) if (!ent.TryGetComponent(args.Buyer, out var hereticComp)) return false; + //Logger.Debug("Current Path: " + hereticComp.CurrentPath); + Logger.Debug("Current Stage: " + hereticComp.PathStage); + Logger.Debug("Working on Listing: " + args.Listing.Name ); + + //Stage is the level of the knowledge we're looking at + //always check for level if (Stage > hereticComp.PathStage) + { return false; + } + //if you have chosen a path if (Whitelist != null) { + Logger.Debug("doing Whitelist \n"); foreach (var white in Whitelist) if (hereticComp.CurrentPath == white) return true; @@ -35,12 +57,52 @@ public override bool Condition(ListingConditionArgs args) if (Blacklist != null) { + Logger.Debug("doing Blacklist \n"); foreach (var black in Blacklist) if (hereticComp.CurrentPath == black) return false; return true; } + Logger.Debug("\n"); + + + + if ((hereticComp.CurrentPath != null) && (args.Listing.ProductHereticKnowledge != null)) + { + //and the knowledge you're looking at is not from your current path or side knowledge + ProtoId knowledgeProto = new ProtoId((ProtoId)args.Listing.ProductHereticKnowledge); + Logger.Debug("Listing: " + args.Listing.Name); + Logger.Debug("ID: " + args.Listing.ID); + Logger.Debug("knowledge: " + args.Listing.ProductHereticKnowledge); + + Logger.Debug("proto knowledge: " + knowledgeProto); + Logger.Debug("proto ID: " + knowledgeProto.Id); + + var knowledge = _knowledge.GetKnowledge(knowledgeProto); + Logger.Debug("knowledge path: " + knowledge.Path + "\n"); + Logger.Debug("user path: " + hereticComp.CurrentPath + "\n"); + Logger.Debug("knowledge Stage: " + knowledge.Stage + "\n"); + Logger.Debug("user Stage: " + hereticComp.PathStage + "\n"); + + HashSet myPaths = new HashSet(); + myPaths.Add(hereticComp.CurrentPath); + myPaths.Add("Side"); + + + if (knowledge.Path != null && !(myPaths.Contains(knowledge.Path))) + { + //then, there should be a penalty. + //so, if the level of the knowledge is greater than your current path's level minus the penalty + if (Stage > hereticComp.PathStage - AlternatePathPenalty) + { + //then you can't have it. + return false; + } + + } + } + return true; } } diff --git a/Resources/Prototypes/_Goobstation/Heretic/Catalog/Heretic/path_side.yml b/Resources/Prototypes/_Goobstation/Heretic/Catalog/Heretic/path_side.yml index 39e006c78fed..a9e9f2d66193 100644 --- a/Resources/Prototypes/_Goobstation/Heretic/Catalog/Heretic/path_side.yml +++ b/Resources/Prototypes/_Goobstation/Heretic/Catalog/Heretic/path_side.yml @@ -33,8 +33,8 @@ - type: listing id: HereticSidePathKnowledge - name: knowledge-path-side-knowledge-name - description: knowledge-path-side-knowledge-desc + name: knowledge-path-side-s5-name + description: knowledge-path-side-s5-desc productHereticKnowledge: RitualOfKnowledge cost: KnowledgePoint: 2 @@ -44,4 +44,4 @@ - !type:ListingLimitedStockCondition stock: 1 - !type:HereticPathCondition - stage: 0 + stage: 5 From 75f702f567691fcedd9f2a46496b3a6a431342e2 Mon Sep 17 00:00:00 2001 From: Kandiyaki <106633914+Kandiyaki@users.noreply.github.com> Date: Fri, 3 Jan 2025 16:35:53 -0500 Subject: [PATCH 07/14] finished multipath nerf --- .../Store/Conditions/HereticPathCondition.cs | 46 ++++--------------- 1 file changed, 10 insertions(+), 36 deletions(-) diff --git a/Content.Server/_Goobstation/Store/Conditions/HereticPathCondition.cs b/Content.Server/_Goobstation/Store/Conditions/HereticPathCondition.cs index 9ca59ad38a9b..07e5ae7fc36e 100644 --- a/Content.Server/_Goobstation/Store/Conditions/HereticPathCondition.cs +++ b/Content.Server/_Goobstation/Store/Conditions/HereticPathCondition.cs @@ -3,30 +3,26 @@ using Content.Shared.Heretic.Prototypes; using Content.Shared.Mind; using Content.Shared.Store; -using JetBrains.Annotations; -using Microsoft.CodeAnalysis.CSharp.Syntax; -using Microsoft.EntityFrameworkCore.Metadata.Conventions; using Robust.Shared.Prototypes; -using Robust.Shared.Toolshed.Commands.Math; -using Robust.Shared.Utility; -using System.Linq; namespace Content.Server.Store.Conditions; public sealed partial class HereticPathCondition : ListingCondition { [Dependency] private readonly IPrototypeManager _proto = default!; - [Dependency] private readonly HereticKnowledgeSystem _knowledge = default!; - public int AlternatePathPenalty = 1; + public int AlternatePathPenalty = 1; //you can only buy alternate paths' abilities if they are this amount under your initial path's top ability level. [DataField] public HashSet? Whitelist; [DataField] public HashSet? Blacklist; [DataField] public int Stage = 0; - + public override bool Condition(ListingConditionArgs args) { var ent = args.EntityManager; var minds = ent.System(); + var knowledgeSys = ent.System(); + + if (!minds.TryGetMind(args.Buyer, out var mindId, out var mind)) return false; @@ -34,21 +30,15 @@ public override bool Condition(ListingConditionArgs args) if (!ent.TryGetComponent(args.Buyer, out var hereticComp)) return false; - //Logger.Debug("Current Path: " + hereticComp.CurrentPath); - Logger.Debug("Current Stage: " + hereticComp.PathStage); - Logger.Debug("Working on Listing: " + args.Listing.Name ); - //Stage is the level of the knowledge we're looking at //always check for level if (Stage > hereticComp.PathStage) { return false; } - //if you have chosen a path if (Whitelist != null) { - Logger.Debug("doing Whitelist \n"); foreach (var white in Whitelist) if (hereticComp.CurrentPath == white) return true; @@ -57,39 +47,23 @@ public override bool Condition(ListingConditionArgs args) if (Blacklist != null) { - Logger.Debug("doing Blacklist \n"); foreach (var black in Blacklist) if (hereticComp.CurrentPath == black) return false; return true; } - Logger.Debug("\n"); - + //if you have chosen a path if ((hereticComp.CurrentPath != null) && (args.Listing.ProductHereticKnowledge != null)) { - //and the knowledge you're looking at is not from your current path or side knowledge - ProtoId knowledgeProto = new ProtoId((ProtoId)args.Listing.ProductHereticKnowledge); - Logger.Debug("Listing: " + args.Listing.Name); - Logger.Debug("ID: " + args.Listing.ID); - Logger.Debug("knowledge: " + args.Listing.ProductHereticKnowledge); - - - Logger.Debug("proto knowledge: " + knowledgeProto); - Logger.Debug("proto ID: " + knowledgeProto.Id); - - var knowledge = _knowledge.GetKnowledge(knowledgeProto); - Logger.Debug("knowledge path: " + knowledge.Path + "\n"); - Logger.Debug("user path: " + hereticComp.CurrentPath + "\n"); - Logger.Debug("knowledge Stage: " + knowledge.Stage + "\n"); - Logger.Debug("user Stage: " + hereticComp.PathStage + "\n"); - + ProtoId knowledgeProtoId = new ProtoId((ProtoId)args.Listing.ProductHereticKnowledge); + var knowledge = knowledgeSys.GetKnowledge(knowledgeProtoId); HashSet myPaths = new HashSet(); myPaths.Add(hereticComp.CurrentPath); myPaths.Add("Side"); - + //and the knowledge you're looking at is not from your current path or side knowledge if (knowledge.Path != null && !(myPaths.Contains(knowledge.Path))) { //then, there should be a penalty. @@ -98,11 +72,11 @@ public override bool Condition(ListingConditionArgs args) { //then you can't have it. return false; + //this took me two days. } } } - return true; } } From 54e0bff25e0d57f04e37a2072fd6da2e944a07b0 Mon Sep 17 00:00:00 2001 From: Kandiyaki Date: Wed, 8 Jan 2025 18:48:09 -0500 Subject: [PATCH 08/14] flesh surgery nerf (untested!) --- .../Abilities/HereticAbilitySystem.Flesh.cs | 43 ++++++++----------- .../Heretic/Abilities/HereticAbilitySystem.cs | 3 ++ .../Heretic/abilities/heretic.ftl | 4 ++ 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Flesh.cs b/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Flesh.cs index 8976a576eb28..5b7b21ccd11d 100644 --- a/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Flesh.cs +++ b/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Flesh.cs @@ -3,8 +3,10 @@ using Content.Shared.Body.Part; using Content.Shared.Damage; using Content.Shared.DoAfter; +using Content.Shared.Eye.Blinding.Components; using Content.Shared.Heretic; using Content.Shared.Popups; +using Content.Shared.Speech.Muting; using Robust.Shared.Audio; using Robust.Shared.Player; @@ -39,42 +41,33 @@ private void OnFleshSurgery(Entity ent, ref EventHereticFleshS return; } - // remove a random organ + // temporarily disable a random organ + // the fucking goob coders were literally just deleting organ components. who thought that was okay + // TODO: change this to actually remove/disable organs once newmed comes out next week if (TryComp(args.Target, out var body)) { - _vomit.Vomit(args.Target, -1000, -1000); // You feel hollow! - + //i should really make these their own methods. but i dont want to switch (_random.Next(0, 2)) { - // remove stomach + // case 0: barf case 0: - foreach (var entity in _body.GetBodyOrganEntityComps((args.Target, body))) - QueueDel(entity.Owner); - - _popup.PopupEntity(Loc.GetString("admin-smite-stomach-removal-self"), args.Target, - args.Target, PopupType.LargeCaution); + _popup.PopupEntity(Loc.GetString("heretic-fleshsurgery-barf"), args.Target, args.Target, PopupType.LargeCaution); + _vomit.Vomit(args.Target, -1000, -1000); // i frew up break; - // remove random hand + // case 1: blind (fixable!) case 1: - var baseXform = Transform(args.Target); - foreach (var part in _body.GetBodyChildrenOfType(args.Target, BodyPartType.Hand, body)) - { - _transform.AttachToGridOrMap(part.Id); - break; - } - _popup.PopupEntity(Loc.GetString("admin-smite-remove-hands-self"), args.Target, args.Target, PopupType.LargeCaution); - _popup.PopupCoordinates(Loc.GetString("admin-smite-remove-hands-other", ("name", args.Target)), baseXform.Coordinates, - Filter.PvsExcept(args.Target), true, PopupType.Medium); + if (!TryComp(args.Target, out var blindable) || blindable.IsBlind) + return; + + _popup.PopupEntity(Loc.GetString("heretic-fleshsurgery-eyes"), args.Target, args.Target, PopupType.LargeCaution); + _blindable.AdjustEyeDamage((args.Target, blindable), 5); //same as rawdogging a welder 5 times. fixable but definitely a pain break; - // remove lungs + // case 2: mute for 2.5 minutes case 2: - foreach (var entity in _body.GetBodyOrganEntityComps((args.Target, body))) - QueueDel(entity.Owner); - - _popup.PopupEntity(Loc.GetString("admin-smite-lung-removal-self"), args.Target, - args.Target, PopupType.LargeCaution); + _popup.PopupEntity(Loc.GetString("heretic-fleshsurgery-mute"), args.Target, args.Target, PopupType.LargeCaution); + _statusEffect.TryAddStatusEffect(args.Target, "Muted", TimeSpan.FromSeconds(150), false); break; default: diff --git a/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.cs b/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.cs index 00a33dfd9199..1a83c5473a5c 100644 --- a/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.cs +++ b/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.cs @@ -32,6 +32,7 @@ using Robust.Shared.Audio; using Content.Shared.Mobs.Components; using Robust.Shared.Prototypes; +using Content.Shared.Eye.Blinding.Systems; namespace Content.Server.Heretic.Abilities; @@ -57,7 +58,9 @@ public sealed partial class HereticAbilitySystem : EntitySystem [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly SharedBodySystem _body = default!; + [Dependency] private readonly BlindableSystem _blindable = default!; [Dependency] private readonly VomitSystem _vomit = default!; + [Dependency] private readonly StatusEffectsSystem _statusEffect = default!; [Dependency] private readonly PhysicsSystem _phys = default!; [Dependency] private readonly SharedStunSystem _stun = default!; [Dependency] private readonly ThrowingSystem _throw = default!; diff --git a/Resources/Locale/en-US/_Goobstation/Heretic/abilities/heretic.ftl b/Resources/Locale/en-US/_Goobstation/Heretic/abilities/heretic.ftl index fd88e2a02e43..c13ce77d20b4 100644 --- a/Resources/Locale/en-US/_Goobstation/Heretic/abilities/heretic.ftl +++ b/Resources/Locale/en-US/_Goobstation/Heretic/abilities/heretic.ftl @@ -18,6 +18,10 @@ heretic-manselink-fail-nomind = This creature does not have a mind! heretic-manselink-start = You begin to connect this creature's mind to yours. heretic-manselink-start-target = You feel your mind being pulled somewhere... +heretic-fleshsurgery-barf = The contents of your stomach come pouring out! +heretic-fleshsurgery-eyes = Your vision becomes dull and cloudy! +heretic-fleshsurgery-mute = Your tongue falls limp! + heretic-livingheart-notargets = No available targets, visit the rune. heretic-livingheart-offstation = It's {$state}, off station, {$direction}! heretic-livingheart-onstation = It's {$state}, {$direction}! From 5572aa95055f2b1cea6905fa6bb5770e9eb655c7 Mon Sep 17 00:00:00 2001 From: Kandiyaki Date: Wed, 8 Jan 2025 19:52:49 -0500 Subject: [PATCH 09/14] fixed some miscellaneous goobcode --- .../Heretic/Abilities/HereticAbilitySystem.Flesh.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Flesh.cs b/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Flesh.cs index 5b7b21ccd11d..70bcf6132231 100644 --- a/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Flesh.cs +++ b/Content.Server/_Goobstation/Heretic/Abilities/HereticAbilitySystem.Flesh.cs @@ -47,7 +47,7 @@ private void OnFleshSurgery(Entity ent, ref EventHereticFleshS if (TryComp(args.Target, out var body)) { //i should really make these their own methods. but i dont want to - switch (_random.Next(0, 2)) + switch (_random.Next(0, 3)) { // case 0: barf case 0: @@ -61,7 +61,7 @@ private void OnFleshSurgery(Entity ent, ref EventHereticFleshS return; _popup.PopupEntity(Loc.GetString("heretic-fleshsurgery-eyes"), args.Target, args.Target, PopupType.LargeCaution); - _blindable.AdjustEyeDamage((args.Target, blindable), 5); //same as rawdogging a welder 5 times. fixable but definitely a pain + _blindable.AdjustEyeDamage((args.Target, blindable), 7); //same as rawdogging a welder 7 times. fixable but definitely a pain break; // case 2: mute for 2.5 minutes From 1ffaadbd04f4757a57e2cf3d4d41677e247b70ae Mon Sep 17 00:00:00 2001 From: Kandiyaki Date: Thu, 9 Jan 2025 13:21:52 -0500 Subject: [PATCH 10/14] flesh rituals that require blood now accept blood from all playable species --- .../Ritual/CustomBehavior.ReagentPuddle.cs | 57 ++++++++++++------- .../_Goobstation/Heretic/heretic/rituals.ftl | 2 +- .../Heretic/Heretic/heretic_rituals.yml | 30 +++++++++- 3 files changed, 64 insertions(+), 25 deletions(-) diff --git a/Content.Server/_Goobstation/Heretic/Ritual/CustomBehavior.ReagentPuddle.cs b/Content.Server/_Goobstation/Heretic/Ritual/CustomBehavior.ReagentPuddle.cs index 2319f326cd48..df89eea8ac97 100644 --- a/Content.Server/_Goobstation/Heretic/Ritual/CustomBehavior.ReagentPuddle.cs +++ b/Content.Server/_Goobstation/Heretic/Ritual/CustomBehavior.ReagentPuddle.cs @@ -3,6 +3,7 @@ using Content.Shared.Fluids.Components; using Content.Shared.Heretic.Prototypes; using Robust.Shared.Prototypes; +using System.Linq; namespace Content.Server.Heretic.Ritual; @@ -10,44 +11,58 @@ public sealed partial class RitualReagentPuddleBehavior : RitualCustomBehavior { protected EntityLookupSystem _lookup = default!; - [DataField] public ProtoId? Reagent; + [DataField] public List>? Reagents; private List uids = new(); public override bool Execute(RitualData args, out string? outstr) { - outstr = null; + if (Reagents == null) + { + //should only happen if someone fucked up their ritual yaml + outstr = Loc.GetString("heretic-ritual-unknown"); + return false; + } + string reagStrings = ""; - if (Reagent == null) - return true; + foreach(var Reagent in Reagents) + { + reagStrings += (Reagent.Id + ", "); - _lookup = args.EntityManager.System(); + outstr = null; + _lookup = args.EntityManager.System(); - var lookup = _lookup.GetEntitiesInRange(args.Platform, .75f); + var lookup = _lookup.GetEntitiesInRange(args.Platform, .75f); - foreach (var ent in lookup) - { - if (!args.EntityManager.TryGetComponent(ent, out var puddle)) - continue; + foreach (var ent in lookup) + { + if (!args.EntityManager.TryGetComponent(ent, out var puddle)) + continue; - if (puddle.Solution == null) - continue; + if (puddle.Solution == null) + continue; + + var soln = puddle.Solution.Value; - var soln = puddle.Solution.Value; + if (!soln.Comp.Solution.ContainsPrototype(Reagent)) + continue; - if (!soln.Comp.Solution.ContainsPrototype(Reagent)) + uids.Add(ent); + } + + if (uids.Count == 0) + { continue; + } - uids.Add(ent); + return true; } - if (uids.Count == 0) - { - outstr = Loc.GetString("heretic-ritual-fail-reagentpuddle", ("reagentname", Reagent!)); - return false; - } + //take off the comma + space on the end of the reagStrings + reagStrings = reagStrings.Substring(0, reagStrings.Length - 3); + outstr = Loc.GetString("heretic-ritual-fail-reagentpuddle", ("reagentname", reagStrings)); + return false; - return true; } public override void Finalize(RitualData args) diff --git a/Resources/Locale/en-US/_Goobstation/Heretic/heretic/rituals.ftl b/Resources/Locale/en-US/_Goobstation/Heretic/heretic/rituals.ftl index 78ed3da6c9e0..4247eaed0dbc 100644 --- a/Resources/Locale/en-US/_Goobstation/Heretic/heretic/rituals.ftl +++ b/Resources/Locale/en-US/_Goobstation/Heretic/heretic/rituals.ftl @@ -12,7 +12,7 @@ heretic-ritual-basic-heart = Relentless Heartbeat heretic-ritual-fail-sacrifice = There is no corpse to sacrifice. heretic-ritual-fail-sacrifice-ineligible = The rune refuses to accept this sacrifice. -heretic-ritual-fail-reagentpuddle = There is no {$reagentname} present. +heretic-ritual-fail-reagentpuddle = This ritual needs a puddle of one of these: {$reagentname}. heretic-ritual-fail-temperature-hot = It is too hot here. heretic-ritual-fail-temperature-cold = It is not cold enough here. heretic-ritual-fail-sacrifice-ash = There's either not enough of them dead, or burning. diff --git a/Resources/Prototypes/_Goobstation/Heretic/Heretic/heretic_rituals.yml b/Resources/Prototypes/_Goobstation/Heretic/Heretic/heretic_rituals.yml index 720fe6b97931..d4adf5e4b082 100644 --- a/Resources/Prototypes/_Goobstation/Heretic/Heretic/heretic_rituals.yml +++ b/Resources/Prototypes/_Goobstation/Heretic/Heretic/heretic_rituals.yml @@ -105,7 +105,15 @@ state: icon customBehaviors: - !type:RitualReagentPuddleBehavior - reagent: Blood + reagents: + - Blood + - Radium + - InsectBlood + - Slime + - Sap + - CopperBlood + - AmmoniaBlood + - ZombieBlood requiredTags: Knife: 1 output: @@ -132,7 +140,15 @@ state: raw_prophet customBehaviors: - !type:RitualReagentPuddleBehavior - reagent: Blood + reagents: + - Blood + - Radium + - InsectBlood + - Slime + - Sap + - CopperBlood + - AmmoniaBlood + - ZombieBlood requiredTags: Eyes: 1 Stomach: 1 @@ -148,7 +164,15 @@ state: stalker customBehaviors: - !type:RitualReagentPuddleBehavior - reagent: Blood + reagents: + - Blood + - Radium + - InsectBlood + - Slime + - Sap + - CopperBlood + - AmmoniaBlood + - ZombieBlood requiredTags: Pen: 1 Heart: 1 From 19d7fdd7c65e5fd1d051b8c58b987f1abbbeecd0 Mon Sep 17 00:00:00 2001 From: Kandiyaki Date: Thu, 9 Jan 2025 13:34:39 -0500 Subject: [PATCH 11/14] whoopsie --- .../_Goobstation/Heretic/Ritual/CustomBehavior.ReagentPuddle.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.Server/_Goobstation/Heretic/Ritual/CustomBehavior.ReagentPuddle.cs b/Content.Server/_Goobstation/Heretic/Ritual/CustomBehavior.ReagentPuddle.cs index df89eea8ac97..d85a2ca3e54b 100644 --- a/Content.Server/_Goobstation/Heretic/Ritual/CustomBehavior.ReagentPuddle.cs +++ b/Content.Server/_Goobstation/Heretic/Ritual/CustomBehavior.ReagentPuddle.cs @@ -59,7 +59,7 @@ public override bool Execute(RitualData args, out string? outstr) } //take off the comma + space on the end of the reagStrings - reagStrings = reagStrings.Substring(0, reagStrings.Length - 3); + reagStrings = reagStrings.Substring(0, reagStrings.Length - 2); outstr = Loc.GetString("heretic-ritual-fail-reagentpuddle", ("reagentname", reagStrings)); return false; From 6675ad0e8d5741d9b258b3ad46d493418c567525 Mon Sep 17 00:00:00 2001 From: Kandiyaki Date: Thu, 9 Jan 2025 14:08:49 -0500 Subject: [PATCH 12/14] gave the yaml checker a lollipop so it won't cry later --- Resources/Prototypes/Entities/Objects/Tools/welders.yml | 2 +- .../_Goobstation/Heretic/Catalog/Heretic/path_side.yml | 2 +- .../Prototypes/_Goobstation/Heretic/Heretic/heretic_rituals.yml | 2 +- Resources/Prototypes/_Goobstation/tags.yml | 2 +- Resources/Prototypes/tags.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Tools/welders.yml b/Resources/Prototypes/Entities/Objects/Tools/welders.yml index 3a2db622439c..e91a5af797fc 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/welders.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/welders.yml @@ -213,4 +213,4 @@ - type: PointLight enabled: false radius: 1.0 - color: orange + color: orange \ No newline at end of file diff --git a/Resources/Prototypes/_Goobstation/Heretic/Catalog/Heretic/path_side.yml b/Resources/Prototypes/_Goobstation/Heretic/Catalog/Heretic/path_side.yml index a9e9f2d66193..9eab88b9c628 100644 --- a/Resources/Prototypes/_Goobstation/Heretic/Catalog/Heretic/path_side.yml +++ b/Resources/Prototypes/_Goobstation/Heretic/Catalog/Heretic/path_side.yml @@ -44,4 +44,4 @@ - !type:ListingLimitedStockCondition stock: 1 - !type:HereticPathCondition - stage: 5 + stage: 5 \ No newline at end of file diff --git a/Resources/Prototypes/_Goobstation/Heretic/Heretic/heretic_rituals.yml b/Resources/Prototypes/_Goobstation/Heretic/Heretic/heretic_rituals.yml index d4adf5e4b082..d4e271c0eb8e 100644 --- a/Resources/Prototypes/_Goobstation/Heretic/Heretic/heretic_rituals.yml +++ b/Resources/Prototypes/_Goobstation/Heretic/Heretic/heretic_rituals.yml @@ -269,4 +269,4 @@ output: HereticEldritchFlask: 1 -## stage 7 +## stage 7 \ No newline at end of file diff --git a/Resources/Prototypes/_Goobstation/tags.yml b/Resources/Prototypes/_Goobstation/tags.yml index 34184240181c..2e4358297dc5 100644 --- a/Resources/Prototypes/_Goobstation/tags.yml +++ b/Resources/Prototypes/_Goobstation/tags.yml @@ -20,4 +20,4 @@ id: SecurityBreathMask - type: Tag - id: WaterTank + id: WaterTank \ No newline at end of file diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 4eb4b9d763a8..1c56c73b6fa1 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -1477,4 +1477,4 @@ - type: Tag id: WriteIgnoreStamps -# ALPHABETICAL +# ALPHABETICAL \ No newline at end of file From 96e3bbbbc6c4602d77bff05426c241900b0937cd Mon Sep 17 00:00:00 2001 From: Kandiyaki Date: Thu, 9 Jan 2025 16:12:16 -0500 Subject: [PATCH 13/14] guidebook rewrite --- .../_Goobstation/Heretic/guidebook/guides.ftl | 4 ++ .../Heretic/Guidebook/antagonist.yml | 33 ++++++++-- .../Guidebook/Antagonist/HereticsAsh.xml | 2 + .../Guidebook/Antagonist/HereticsFlesh.xml | 2 +- .../Antagonist/HereticsKnowledge.xml | 40 +++++++++++++ .../Guidebook/Antagonist/HereticsPaths.xml | 10 ++++ .../Guidebook/Antagonist/HereticsRituals.xml | 42 +++++++++++++ .../Guidebook/Antagonist/HereticsSpells.xml | 26 ++++++++ .../Guidebook/Antagonist/Heretics.xml | 60 ------------------- 9 files changed, 154 insertions(+), 65 deletions(-) create mode 100644 Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsKnowledge.xml create mode 100644 Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsPaths.xml create mode 100644 Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsRituals.xml create mode 100644 Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsSpells.xml diff --git a/Resources/Locale/en-US/_Goobstation/Heretic/guidebook/guides.ftl b/Resources/Locale/en-US/_Goobstation/Heretic/guidebook/guides.ftl index f345af5b1fb7..286b9c71b37d 100644 --- a/Resources/Locale/en-US/_Goobstation/Heretic/guidebook/guides.ftl +++ b/Resources/Locale/en-US/_Goobstation/Heretic/guidebook/guides.ftl @@ -1,4 +1,8 @@ guide-entry-heretics = Heretics +guide-entry-heretics-paths = Paths +guide-entry-heretics-knowledge = Knowledge Points +guide-entry-heretics-rituals = Rituals & Sacrifices +guide-entry-heretics-spells = Spells & Foci guide-entry-heretics-ash = Path of Ash guide-entry-heretics-flesh = Path of Flesh guide-entry-heretics-void = Path of Void diff --git a/Resources/Prototypes/_Goobstation/Heretic/Guidebook/antagonist.yml b/Resources/Prototypes/_Goobstation/Heretic/Guidebook/antagonist.yml index 5dc2199f3fe8..3ce1cf4fb83e 100644 --- a/Resources/Prototypes/_Goobstation/Heretic/Guidebook/antagonist.yml +++ b/Resources/Prototypes/_Goobstation/Heretic/Guidebook/antagonist.yml @@ -3,11 +3,36 @@ name: guide-entry-heretics text: "/ServerInfo/_Impstation/Guidebook/Antagonist/Heretics.xml" # given a consistency pass by dark, keeping in imp directory 4 now children: - - HereticsAsh - - HereticsFlesh - - HereticsVoid + - HereticsKnowledge + - HereticsSpells + - HereticsRituals + - HereticsPaths - HereticsSide +- type: guideEntry + id: HereticsPaths + name: guide-entry-heretics-paths + text: "/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsPaths.xml" + children: + - HereticsAsh + - HereticsFlesh + - HereticsVoid + +- type: guideEntry + id: HereticsKnowledge + name: guide-entry-heretics-knowledge + text: "/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsKnowledge.xml" + +- type: guideEntry + id: HereticsSpells + name: guide-entry-heretics-spells + text: "/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsSpells.xml" + +- type: guideEntry + id: HereticsRituals + name: guide-entry-heretics-rituals + text: "/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsRituals.xml" + - type: guideEntry id: HereticsAsh name: guide-entry-heretics-ash @@ -26,4 +51,4 @@ - type: guideEntry id: HereticsSide name: guide-entry-heretics-side - text: "/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsSide.xml" + text: "/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsSide.xml" \ No newline at end of file diff --git a/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsAsh.xml b/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsAsh.xml index 01204ded546c..8d2df249b442 100644 --- a/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsAsh.xml +++ b/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsAsh.xml @@ -21,6 +21,8 @@ ## Ashen Shift Grants you Ashen Passage, a spell that lets you phase out of reality and traverse a short distance, passing though any walls. + Upon returning to reality, you will emit a distinct sound. Additionally, your body will ignite, dealing minor damage. + ## Mark of Ash diff --git a/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsFlesh.xml b/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsFlesh.xml index 85cb79b10bd3..03348d3ceb27 100644 --- a/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsFlesh.xml +++ b/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsFlesh.xml @@ -42,7 +42,7 @@ - Grants you the spell Knit Flesh. This spell allows you to remove organs from victims without requiring a lengthy surgery. This process is much longer if the target is not dead. + Grants you the spell Knit Flesh. This spell allows you to disable a random one of your target's organs or senses. This spell also allows you to heal your minions and summons, or restore failing organs to acceptable status. diff --git a/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsKnowledge.xml b/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsKnowledge.xml new file mode 100644 index 000000000000..187727b44ee9 --- /dev/null +++ b/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsKnowledge.xml @@ -0,0 +1,40 @@ + + #Knowledge + + ##Knowledge Points + As a Heretic, your eldritch knowledge is what sets you above the heathens. + + Collecting Knowledge Points is your main goal, as well as your ticket to greater power. + + Knowledge Points can be spent in the knowledge store to unlock new spells and rituals. + + You can gain knowledge points and become stronger through a few ways: + - Draining influences that spawn randomly around the station. + - Sacrificing crew members your dark patrons hunger for. + - Automatically getting one knowledge point every 20 minutes. + + + ## Heretical Research + Once you have some knowledge points, it's time to research! Open up your knowledge store using the action button. + + Your first selection will commit you to a path that defines your initial abilities and Final Ascension. + + You can earn abilities from other paths to a limited degree, but only when you have researched sufficient knowledge from your main path. + + + ## Eldritch Influences + + + + Influences are the easy way to gain knowledge points. Whenever there are Heretics aboard Space Station 14, influences will randomly spawn across the station. + + They are not visible to the naked eye of a crew member, hovewer they [bold]will[/bold] become visible after harvesting, aside from suddenly changing colors. + + PRO TIP: Harvesting with a [color=orange]Focus[/color] equipped will yield double the points from influences. + + + + + Each influence can only be harvested once, so the heretic that goes the fastest and grabs the most influences first has to do less killing and sacrificing to reach their ascensions. + + diff --git a/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsPaths.xml b/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsPaths.xml new file mode 100644 index 000000000000..20229ccc254c --- /dev/null +++ b/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsPaths.xml @@ -0,0 +1,10 @@ + + #Paths + + As the Heretic, you will have a choice of several paths to follow on your journey to ascension. + + These paths are permanent, and you can only choose one. Your choice will lock you into a certain blade ritual and a certain type of ascension. + + Choose a path that you believe is best suited to your character and role. + + diff --git a/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsRituals.xml b/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsRituals.xml new file mode 100644 index 000000000000..8d5a33897b3a --- /dev/null +++ b/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsRituals.xml @@ -0,0 +1,42 @@ + + #Rituals & Sacrifices + + + + + ## Transmutation is Key + Eventually, you'll need to start using proper magics. To draw a transmutation rune, you'll need a writing tool, such as a pen or crayon. + + [color=red][bold]To start drawing a rune[/bold][/color], activate [color=green]Mansus Grasp[/color] in your offhand and click on the floor with your writing tool. + These runes are highly noticeable and take up a 3x3 area. + + [color=red][bold]To remove a rune[/bold][/color], use your pen on it with an activated [color=green]Mansus Grasp[/color] in your off-hand. + You can also freely use other Heretics' runes. + + [color=red][bold]To choose a ritual[/bold][/color], simply click the rune with your empty hand and select one from the radial menu. + + [color=red][bold]To start the ritual[/bold][/color], use your [color=green]Mansus Grasp[/color] on the rune once you've made a selection. + You can always see your chosen ritual by [bold]inspecting[/bold] the rune. + + Transmutation Rituals allow you to create powerful artifacts, demonic monsters, and many useful tools that will help you progress towards ultimate power. + + ## Sacrifices + Now it's time for you to grow some balls and start sacrificing your beloved coworkers for points. + + The Mansus desires only a select few Heathens (non-heretics) at any moment. + + You can reroll your targets by invoking the [color=yellow]Relentless Heartbeat[/color] ritual. + + At the start of the round you will be assigned a number of sacrifice targets. [bold]You will only be able to sacrifice these targets.[/bold] + - One target will be a Head of Staff. Heads of staff are worth an additional point! + - One target will be a member of security. + - One target will be a member of your department. + - Other targets will be completely random crewmembers. + + Follow your [color=red]Living Heart[/color] to your target of choice and incapacitate them through any means necessary. + + If your target's in critical condition or dead, they're ready to sacrifice. + + Drag them over a transmutation rune and invoke the [color=yellow]Heartbeat of the Mansus[/color] ritual to sacrifice them. + + diff --git a/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsSpells.xml b/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsSpells.xml new file mode 100644 index 000000000000..03e9ed8e0b4d --- /dev/null +++ b/Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/HereticsSpells.xml @@ -0,0 +1,26 @@ + + #Spells & Foci + + + + + + ## We Love Casting Spells + Spells are your main form of weaponry, movement, and general utility. + + You will only start with one spell, the [color=green]Mansus Grasp[/color]. Use your knowledge store to get more. + + Spells can be activated using the action buttons. Many will require you to click on a target as well. + + ## 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. + + You can acquire an Amber Focus using the eponymous ritual. It will act as a focus when worn around your neck. + + 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). + + [color=yellow]Ascension[/color] disables the need for a focus. + + diff --git a/Resources/ServerInfo/_Impstation/Guidebook/Antagonist/Heretics.xml b/Resources/ServerInfo/_Impstation/Guidebook/Antagonist/Heretics.xml index c4ae8c9b6f4b..4af27965a9e7 100644 --- a/Resources/ServerInfo/_Impstation/Guidebook/Antagonist/Heretics.xml +++ b/Resources/ServerInfo/_Impstation/Guidebook/Antagonist/Heretics.xml @@ -3,65 +3,7 @@ So you're a Heretic? Well, get ready for magic and battle. Grab influences, complete sacrifices, accomplish rituals, and ascend to godhood. Your ultimate goal is to ascend and become all powerful, but to do that you must gain knowledge. - All knowledges cost 1 point, except for "public" ones, which are accessible from any path, or Ascensions. - - You can gain knowledge points and become stronger through a few ways: - - Draining influences that spawn randomly around the station. - - Sacrificing crew members your dark patrons hunger for. - - Automatically getting one knowledge point every 20 minutes. - - ## Eldritch Influences - - - - Influences are the easy way to gain power points. Whenever there are Heretics aboard Space Station 14, influences will randomly spawn across the station. - They are not visible to the naked eye of a crew member, hovewer they [bold]will[/bold] become visible after harvesting, aside from suddenly changing colors. - PRO TIP: [color=orange]Amber Focus[/color] allows you to harvest double the points from influences. - - - - - Each influence can only be harvested once, so the heretic that goes the fastest and grabs the most influences first has to do less killing and sacrificing to reach their ascensions. - - ## Sacrifices - Now it's time for you to grow some balls and start sacrificing crewmembers for points. - The Mansus desires only a select few Heathens (non-heretics) at any moment. - - At the start of the round you will be assigned five sacrifice targets. You can reroll these with an optional knowledge (The Relentless Heartbeat) later on, but until then, you're stuck with those. - - - One target will be a Head of Staff. Heads of staff are worth an additional point! - - One target will be a member of security. - - One target will be a member of your department. - - Other targets will be completely random crewmembers. - You will only be able to sacrifice these targets. Your patrons will not accept just any old assistant. - - Follow your [color=red]Living Heart[/color] to your target of choice and incapacitate them through any means necessary. If your target's in critical condition or dead they're ready to sacrifice. - Drag them over a transmutation rune and invoke the [color=yellow]Heartbeat of the Mansus[/color] to sacrifice them. - - You can reroll your targets by invoking [color=yellow]Relentless Heartbeat[/color] ritual. - - ## Heretical Research - Once you have some power points, it's time to research! Open up your knowledge store using the action button. - The research menu forms a branching tree, and your first selection will be to commit to a path that defines your initial abilities and Final Ascension. - You can earn abilities from other paths to a limited degree, but overall your chosen path will heavily influence your play-style. - - ## Transmutation is Key - Eventually, you'll need to start using proper magics. To draw a transmutation rune, you'll need a writing tool, such as a pen or crayon. - Activate [color=green]Mansus Grasp[/color] in your offhand and click on the floor to start drawing a rune. - These runes are highly noticeable and take up a 3x3 area. - You can freely remove runes by using your pen with the activated [color=green]Mansus Grasp[/color] on it, and you can also freely use other Heretic's runes. - - To [bold]transmute[/bold], simply click the rune with your empty hand to choose the needed ritual, after that use your [color=green]Mansus Grasp[/color] on the rune to see what objects you require for the ritual. - You can always see your chosen ritual by [bold]inspecting[/bold] the rune. - - Transmutation Rituals allow you to create powerful artifacts, demonic monsters, and many useful tools that will help you progress towards ultimate power. - - ## Focus is Necessary - To cast more advanced spells, you must focus by wearing an [color=orange]Amber Focus[/color]. - You can acquire Ambes Focus using the eponymous ritual. - 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). - [color=yellow]Ascension[/color] disables the need for a focus. ## Starting Knowledge - \[ [color=red]Mansus Grasp[/color] \] - A short range spell that channels eldritch power straight to your palm. Upon contact, knocks down and confuses unsuspecting targets. @@ -74,9 +16,7 @@ - On the Path of Ash, always carry a fire extinguisher or a bottle of water with you! While you can spew out fireballs, you are not immune to them until you ascend! - As a [color=purple]Ghoul[/color], your [color=green]Mansus Link[/color] ability is extremely useful for communication. When you use it on someone, they gain a radio channel similar to changelings with :z key to talk privately. - Unlike most other solo antagonists, Heretics start weak but grow stronger over time. It would be best not to attract too much attention to yourself until you unlock more powerful spells and equipment. - - 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. - - By default, nothing on you is incriminating. If security suspects you, but can't actually pin anything heretical on you, you might be able to pass off as a Traitor instead. - Monkeys and other animals make for great, usually non-suspicious sources of organs or corpses for your heretical rituals. - Most summoned ghouls will drop the components used to create them on death. While having them to die is not ideal, you can easily grab the parts and summon another. From 0bf7a28f04f8f227fe8ab79e42b4270b5d565409 Mon Sep 17 00:00:00 2001 From: Kandiyaki Date: Fri, 10 Jan 2025 21:30:29 -0500 Subject: [PATCH 14/14] fixed the args handles mistakes --- .../_Goobstation/Heretic/EntitySystems/MansusGraspSystem.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Content.Server/_Goobstation/Heretic/EntitySystems/MansusGraspSystem.cs b/Content.Server/_Goobstation/Heretic/EntitySystems/MansusGraspSystem.cs index f239d523f785..c4b27ee1d22e 100644 --- a/Content.Server/_Goobstation/Heretic/EntitySystems/MansusGraspSystem.cs +++ b/Content.Server/_Goobstation/Heretic/EntitySystems/MansusGraspSystem.cs @@ -160,6 +160,7 @@ private void OnUseInHand(EntityUid uid, MansusGraspComponent component, UseInHan return; } + args.Handled = true; hereticComp.MansusGraspActive = false; QueueDel(uid); }