From 2e57cbf514ea91de81f896bad4891ec50b778c4d Mon Sep 17 00:00:00 2001 From: Aviu00 <93730715+Aviu00@users.noreply.github.com> Date: Mon, 1 Apr 2024 20:36:32 +0900 Subject: [PATCH] Ling fixes and tweaks (#259) * - fix: Bees fix. * - fix: Transform transfers body type. * - fix: Chemcap is transfered on transform. * - fix: Gulag objective actual fix. * - fix: Fix escape with identity not working. * - tweak: Fixes & objective tweaks. * - tweak: More slowdown from ling armor. --- .../Administration/Systems/BwoinkSystem.cs | 2 +- Content.Server/Antag/AntagSelectionSystem.cs | 4 +- .../Changeling/ChangelingRuleSystem.cs | 2 +- .../Changeling/ChangelingSystem.Abilities.cs | 9 ++- Content.Server/Changeling/HiveHeadSystem.cs | 12 +++- .../Objectives/ChangelingConditionsSystem.cs | 31 ++++++---- .../Components/PickRandomIdentityComponent.cs | 3 +- Content.Server/Chat/Commands/OOCCommand.cs | 2 +- .../GameTicking/Rules/NukeopsRuleSystem.cs | 2 +- .../GameTicking/Rules/TraitorRuleSystem.cs | 2 +- .../GameTicking/Rules/ZombieRuleSystem.cs | 2 +- Content.Server/Ghost/Roles/GhostRoleSystem.cs | 2 +- .../Systems/KillPersonConditionSystem.cs | 6 +- .../_Miracle/GulagSystem/GulagSystem.cs | 15 ++++- .../_White/Cult/GameRule/CultRuleSystem.cs | 4 +- Content.Shared/Changeling/ChemicalsSystem.cs | 2 +- .../Entities/Clothing/OuterClothing/armor.yml | 3 + .../Prototypes/Objectives/changeling.yml | 59 ++++++++++++++++++- .../Prototypes/Objectives/objectiveGroups.yml | 26 +++++--- 19 files changed, 143 insertions(+), 45 deletions(-) diff --git a/Content.Server/Administration/Systems/BwoinkSystem.cs b/Content.Server/Administration/Systems/BwoinkSystem.cs index 079f85c62f..67a69c356c 100644 --- a/Content.Server/Administration/Systems/BwoinkSystem.cs +++ b/Content.Server/Administration/Systems/BwoinkSystem.cs @@ -385,7 +385,7 @@ namespace Content.Server.Administration.Systems var senderSession = eventArgs.SenderSession; //No bwoink for banned - if (_gulagSystem.IsUserGulaged(senderSession.UserId, out _)) + if (_gulagSystem.IsUserGulagged(senderSession.UserId, out _)) { return; } diff --git a/Content.Server/Antag/AntagSelectionSystem.cs b/Content.Server/Antag/AntagSelectionSystem.cs index c641ee2b5f..f3be661aac 100644 --- a/Content.Server/Antag/AntagSelectionSystem.cs +++ b/Content.Server/Antag/AntagSelectionSystem.cs @@ -104,7 +104,7 @@ public sealed class AntagSelectionSystem : GameRuleSystem chosen = new List(); foreach (var player in allPlayers) { - if (_gulag.IsUserGulaged(player.UserId, out _)) // WD + if (_gulag.IsUserGulagged(player.UserId, out _)) // WD continue; if (includeHeads == false) @@ -179,7 +179,7 @@ public sealed class AntagSelectionSystem : GameRuleSystem foreach (var player in candidates.Keys) { - if (_gulag.IsUserGulaged(player.UserId, out _)) // WD + if (_gulag.IsUserGulagged(player.UserId, out _)) // WD continue; if (_sharedPlayerSystem.ContentData(player) is not {Mind: { } mindId} || _roles.MindIsAntagonist(mindId)) diff --git a/Content.Server/Changeling/ChangelingRuleSystem.cs b/Content.Server/Changeling/ChangelingRuleSystem.cs index 7dbc84d47c..dfbb75baa9 100644 --- a/Content.Server/Changeling/ChangelingRuleSystem.cs +++ b/Content.Server/Changeling/ChangelingRuleSystem.cs @@ -235,7 +235,7 @@ public sealed class ChangelingRuleSystem : GameRuleSystem= MaxChangelings) continue; - if (_gulag.IsUserGulaged(ev.Player.UserId, out _)) + if (_gulag.IsUserGulagged(ev.Player.UserId, out _)) continue; if (!ev.LateJoin) diff --git a/Content.Server/Changeling/ChangelingSystem.Abilities.cs b/Content.Server/Changeling/ChangelingSystem.Abilities.cs index 4d5a3f310d..1943b28a67 100644 --- a/Content.Server/Changeling/ChangelingSystem.Abilities.cs +++ b/Content.Server/Changeling/ChangelingSystem.Abilities.cs @@ -819,6 +819,7 @@ public sealed partial class ChangelingSystem var toAdd = new ChangelingComponent { HiveName = component.HiveName, + ChemicalCapacity = component.ChemicalCapacity, ChemicalsBalance = component.ChemicalsBalance, AbsorbedEntities = component.AbsorbedEntities, IsInited = component.IsInited, @@ -902,10 +903,10 @@ public sealed partial class ChangelingSystem if (component.AbsorbedEntities.ContainsKey(targetDna.DNA)) return; - if (component.AbsorbedEntities.Count == 7) + /*if (component.AbsorbedEntities.Count == 7) { component.AbsorbedEntities.Remove(component.AbsorbedEntities.ElementAt(2).Key); - } + }*/ var appearance = _serializationManager.CreateCopy(targetAppearance, notNullableOverride: true); var meta = _serializationManager.CreateCopy(targetMeta, notNullableOverride: true); @@ -966,6 +967,7 @@ public sealed partial class ChangelingSystem var toAdd = new ChangelingComponent { HiveName = lingComp.HiveName, + ChemicalCapacity = lingComp.ChemicalCapacity, ChemicalsBalance = lingComp.ChemicalsBalance, AbsorbedEntities = lingComp.AbsorbedEntities, IsInited = lingComp.IsInited, @@ -1104,7 +1106,8 @@ public sealed partial class ChangelingSystem targetHumanoid.EyeColor = sourceHumanoid.EyeColor; targetHumanoid.Age = sourceHumanoid.Age; _humanoidAppearance.SetSex(target, sourceHumanoid.Sex, false, targetHumanoid); - _humanoidAppearance.SetSpecies(target, sourceHumanoid.Species); + _humanoidAppearance.SetBodyType(target, sourceHumanoid.BodyType, false, targetHumanoid); + _humanoidAppearance.SetSpecies(target, sourceHumanoid.Species, true, targetHumanoid); targetHumanoid.CustomBaseLayers = new Dictionary(sourceHumanoid.CustomBaseLayers); diff --git a/Content.Server/Changeling/HiveHeadSystem.cs b/Content.Server/Changeling/HiveHeadSystem.cs index 599eac7eff..efce84beef 100644 --- a/Content.Server/Changeling/HiveHeadSystem.cs +++ b/Content.Server/Changeling/HiveHeadSystem.cs @@ -2,6 +2,7 @@ using Content.Server.Actions; using Content.Shared.Actions; using Content.Shared.Changeling; using Content.Shared.Inventory; +using Content.Shared.Mobs.Systems; namespace Content.Server.Changeling; @@ -9,6 +10,7 @@ public sealed class HiveHeadSystem : EntitySystem { [Dependency] private readonly ActionsSystem _actions = default!; [Dependency] private readonly ActionContainerSystem _actionContainer = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; public override void Initialize() { @@ -22,6 +24,9 @@ public sealed class HiveHeadSystem : EntitySystem private void OnReleaseBees(Entity ent, ref ReleaseBeesEvent args) { + if (!_mobState.IsAlive(args.Performer)) + return; + args.Handled = true; var coords = Transform(args.Performer).Coordinates; @@ -34,8 +39,11 @@ public sealed class HiveHeadSystem : EntitySystem private void OnGetActions(Entity ent, ref GetItemActionsEvent args) { - if (args.SlotFlags == SlotFlags.HEAD) - args.AddAction(ref ent.Comp.ActionEntity, ent.Comp.Action); + if (args.SlotFlags != SlotFlags.HEAD) + return; + + args.AddAction(ref ent.Comp.ActionEntity, ent.Comp.Action); + _actions.SetCooldown(ent.Comp.ActionEntity, TimeSpan.FromSeconds(5)); } private void OnShutdown(Entity ent, ref ComponentShutdown args) diff --git a/Content.Server/Changeling/Objectives/ChangelingConditionsSystem.cs b/Content.Server/Changeling/Objectives/ChangelingConditionsSystem.cs index 033c2bfb8d..c3991bda9a 100644 --- a/Content.Server/Changeling/Objectives/ChangelingConditionsSystem.cs +++ b/Content.Server/Changeling/Objectives/ChangelingConditionsSystem.cs @@ -1,5 +1,6 @@ using System.Linq; using Content.Server._Miracle.Components; +using Content.Server._Miracle.GulagSystem; using Content.Server.Changeling.Objectives.Components; using Content.Server.Forensics; using Content.Server.Mind; @@ -20,6 +21,7 @@ public sealed class ChangelingConditionsSystem : EntitySystem [Dependency] private readonly TargetObjectiveSystem _target = default!; [Dependency] private readonly MindSystem _mind = default!; [Dependency] private readonly EmergencyShuttleSystem _emergencyShuttle = default!; + [Dependency] private readonly GulagSystem _gulag = default!; public override void Initialize() { @@ -185,14 +187,19 @@ public sealed class ChangelingConditionsSystem : EntitySystem return; var allHumans = _mind.GetAliveHumansExcept(args.MindId); - allHumans = allHumans.Where(x => !HasComp(x)).ToList(); + allHumans = allHumans.Where(x => !_gulag.IsMindGulagged(x)).ToList(); if (allHumans.Count == 0) { args.Cancelled = true; return; } - _target.SetTarget(uid, _random.Pick(allHumans), target); + var targetMindId = _random.Pick(allHumans); + + if (TryComp(targetMindId, out MindComponent? mind) && TryComp(mind.CurrentEntity, out DnaComponent? dna)) + component.DNA = dna.DNA; + + _target.SetTarget(uid, targetMindId, target); } private void OnEscapeWithIdentityGetProgress(EntityUid uid, EscapeWithIdentityConditionComponent component, ref ObjectiveGetProgressEvent args) @@ -200,10 +207,15 @@ public sealed class ChangelingConditionsSystem : EntitySystem if (!_target.GetTarget(uid, out var target)) return; - args.Progress = GetEscapeWithIdentityProgress(args.Mind, target.Value); + var fallbackDNA = string.Empty; + + if (TryComp(uid, out PickRandomIdentityComponent? pickIdentity)) + fallbackDNA = pickIdentity.DNA; + + args.Progress = GetEscapeWithIdentityProgress(args.Mind, target.Value, fallbackDNA); } - private float GetEscapeWithIdentityProgress(MindComponent mind, EntityUid target) + private float GetEscapeWithIdentityProgress(MindComponent mind, EntityUid target, string DNA) { var progress = 0f; @@ -213,24 +225,21 @@ public sealed class ChangelingConditionsSystem : EntitySystem if (!TryComp(target, out var targetMind)) return 0f; - if (!TryComp(targetMind.CurrentEntity, out var targetDna)) - return 0f; + if (TryComp(targetMind.CurrentEntity, out var targetDna)) + DNA = targetDna.DNA; if (!TryComp(mind.CurrentEntity, out var changeling)) return 0f; - if (!changeling.AbsorbedEntities.ContainsKey(targetDna.DNA)) + if (!changeling.AbsorbedEntities.ContainsKey(DNA)) return 0f; //Target absorbed by this changeling, so 50% of work is done progress += 0.5f; - if (_emergencyShuttle.IsTargetEscaping(mind.CurrentEntity.Value) && selfDna.DNA == targetDna.DNA) + if (_emergencyShuttle.IsTargetEscaping(mind.CurrentEntity.Value) && selfDna.DNA == DNA) progress += 0.5f; - if (_emergencyShuttle.ShuttlesLeft) - return progress; - return progress; } diff --git a/Content.Server/Changeling/Objectives/Components/PickRandomIdentityComponent.cs b/Content.Server/Changeling/Objectives/Components/PickRandomIdentityComponent.cs index af98b5acf3..63ed3f2203 100644 --- a/Content.Server/Changeling/Objectives/Components/PickRandomIdentityComponent.cs +++ b/Content.Server/Changeling/Objectives/Components/PickRandomIdentityComponent.cs @@ -3,5 +3,6 @@ [RegisterComponent] public sealed partial class PickRandomIdentityComponent : Component { - + [ViewVariables] + public string DNA = string.Empty; } diff --git a/Content.Server/Chat/Commands/OOCCommand.cs b/Content.Server/Chat/Commands/OOCCommand.cs index f9cc79f355..b1b1a4ff03 100644 --- a/Content.Server/Chat/Commands/OOCCommand.cs +++ b/Content.Server/Chat/Commands/OOCCommand.cs @@ -21,7 +21,7 @@ namespace Content.Server.Chat.Commands } var gulag = EntitySystem.Get(); - if (gulag.IsUserGulaged(shell.Player.UserId, out var _)) + if (gulag.IsUserGulagged(shell.Player.UserId, out var _)) { return; } diff --git a/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs b/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs index f0175cc141..ad6f1adfd1 100644 --- a/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs @@ -634,7 +634,7 @@ public sealed class NukeopsRuleSystem : GameRuleSystem // ReSharper disable once ForeachCanBeConvertedToQueryUsingAnotherGetEnumerator foreach (var player in everyone) { - if (_gulag.IsUserGulaged(player.UserId, out _)) // WD + if (_gulag.IsUserGulagged(player.UserId, out _)) // WD continue; if (!ev.Profiles.ContainsKey(player.UserId)) diff --git a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs index e7c2e300ce..9ecb73732f 100644 --- a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs @@ -310,7 +310,7 @@ public sealed class TraitorRuleSystem : GameRuleSystem if (!GameTicker.IsGameRuleAdded(uid, gameRule)) continue; - if (_gulag.IsUserGulaged(ev.Player.UserId, out _)) // WD + if (_gulag.IsUserGulagged(ev.Player.UserId, out _)) // WD continue; if (traitor.TotalTraitors >= MaxTraitors) diff --git a/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs b/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs index 98ffd6ac78..7b9e1faf52 100644 --- a/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs @@ -274,7 +274,7 @@ public sealed class ZombieRuleSystem : GameRuleSystem var prefList = new List(); foreach (var player in allPlayers) { - if (_gulag.IsUserGulaged(player.UserId, out _)) // WD + if (_gulag.IsUserGulagged(player.UserId, out _)) // WD continue; if (player.AttachedEntity == null || !HasComp(player.AttachedEntity) || HasComp(player.AttachedEntity)) diff --git a/Content.Server/Ghost/Roles/GhostRoleSystem.cs b/Content.Server/Ghost/Roles/GhostRoleSystem.cs index 76d5364f2c..80855c84de 100644 --- a/Content.Server/Ghost/Roles/GhostRoleSystem.cs +++ b/Content.Server/Ghost/Roles/GhostRoleSystem.cs @@ -204,7 +204,7 @@ namespace Content.Server.Ghost.Roles if (!_ghostRoles.TryGetValue(identifier, out var role)) return; - if (_gulagSystem.IsUserGulaged(player.UserId, out _)) + if (_gulagSystem.IsUserGulagged(player.UserId, out _)) { return; } diff --git a/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs b/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs index d5de4b5bee..da2d08bac4 100644 --- a/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs +++ b/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs @@ -1,5 +1,6 @@ using System.Linq; using Content.Server._Miracle.Components; +using Content.Server._Miracle.GulagSystem; using Content.Server._White.Cult.GameRule; using Content.Server.Objectives.Components; using Content.Server.Shuttles.Systems; @@ -23,6 +24,7 @@ public sealed class KillPersonConditionSystem : EntitySystem [Dependency] private readonly SharedJobSystem _job = default!; [Dependency] private readonly SharedMindSystem _mind = default!; [Dependency] private readonly TargetObjectiveSystem _target = default!; + [Dependency] private readonly GulagSystem _gulag = default!; // WD public override void Initialize() { @@ -60,7 +62,7 @@ public sealed class KillPersonConditionSystem : EntitySystem // no other humans to kill var allHumans = _mind.GetAliveHumansExcept(args.MindId); - allHumans = allHumans.Where(x => !HasComp(x)).ToList(); // WD + allHumans = allHumans.Where(x => !_gulag.IsMindGulagged(x)).ToList(); if (allHumans.Count == 0) { args.Cancelled = true; @@ -85,7 +87,7 @@ public sealed class KillPersonConditionSystem : EntitySystem // no other humans to kill var allHumans = _mind.GetAliveHumansExcept(args.MindId); - allHumans = allHumans.Where(x => !HasComp(x)).ToList(); // WD + allHumans = allHumans.Where(x => !_gulag.IsMindGulagged(x)).ToList(); if (allHumans.Count == 0) { args.Cancelled = true; diff --git a/Content.Server/_Miracle/GulagSystem/GulagSystem.cs b/Content.Server/_Miracle/GulagSystem/GulagSystem.cs index 2932a0d5fa..6e6d5dc62f 100644 --- a/Content.Server/_Miracle/GulagSystem/GulagSystem.cs +++ b/Content.Server/_Miracle/GulagSystem/GulagSystem.cs @@ -25,6 +25,7 @@ using Content.Shared.Hands.EntitySystems; using Content.Shared.Interaction; using Content.Shared.Inventory; using Content.Shared.Materials; +using Content.Shared.Mind; using Content.Shared.Parallax.Biomes; using Content.Shared.Popups; using Content.Shared.Preferences; @@ -121,7 +122,7 @@ public sealed partial class GulagSystem : SharedGulagSystem private void OnJoinedLobby(PlayerJoinedLobbyEvent ev) { - if(IsUserGulaged(ev.PlayerSession.UserId, out _)) + if(IsUserGulagged(ev.PlayerSession.UserId, out _)) { _chatManager.DispatchServerMessage(ev.PlayerSession, Loc.GetString("gulag-chat-join-message")); } @@ -141,7 +142,7 @@ public sealed partial class GulagSystem : SharedGulagSystem var player = source.PlayerId; - if (!IsUserGulaged(player, out var ban)) + if (!IsUserGulagged(player, out var ban)) { return; } @@ -289,13 +290,21 @@ public sealed partial class GulagSystem : SharedGulagSystem _popupSystem.PopupEntity(Loc.GetString("gulag-ban-time-changed", ("Time", $"{time.TotalSeconds}")), uid, PopupType.Medium); } - public bool IsUserGulaged(NetUserId playerId, out HashSet bans) + public bool IsUserGulagged(NetUserId playerId, out HashSet bans) { bans = _banManager.GetServerBans(playerId); return bans.Count != 0; } + public bool IsMindGulagged(EntityUid mindId) + { + if (!TryComp(mindId, out MindComponent? mind) || mind.UserId == null) + return false; + + return IsUserGulagged(mind.UserId.Value, out _); + } + private void SendToGulag(EntityUid playerEntity) { if (_inventorySystem.TryGetContainerSlotEnumerator(playerEntity, out var enumerator)) diff --git a/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs b/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs index e1ea4f502a..a22725cd8d 100644 --- a/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs +++ b/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs @@ -325,7 +325,7 @@ public sealed class CultRuleSystem : GameRuleSystem if (entity == default) continue; - if (_gulag.IsUserGulaged(actor.PlayerSession.UserId, out _)) + if (_gulag.IsUserGulagged(actor.PlayerSession.UserId, out _)) continue; if (exclude?.Contains(actor.PlayerSession) is true) @@ -348,7 +348,7 @@ public sealed class CultRuleSystem : GameRuleSystem foreach (var player in candidates.Keys) { // Gulag - if (_gulag.IsUserGulaged(player.UserId, out _)) + if (_gulag.IsUserGulagged(player.UserId, out _)) continue; // Role prevents antag. diff --git a/Content.Shared/Changeling/ChemicalsSystem.cs b/Content.Shared/Changeling/ChemicalsSystem.cs index 761cb75b58..728d11c948 100644 --- a/Content.Shared/Changeling/ChemicalsSystem.cs +++ b/Content.Shared/Changeling/ChemicalsSystem.cs @@ -97,7 +97,7 @@ public sealed class ChemicalsSystem : EntitySystem if(_net.IsServer) { _alertsSystem.ShowAlert(uid, AlertType.Chemicals, - (short) Math.Clamp(Math.Round(component.ChemicalsBalance / 10f), 0, 7)); + (short) Math.Clamp(Math.Round(component.ChemicalsBalance / 10f), 0, 16)); } } } diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml index 65f9fc4d16..2c2e15a9ab 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml @@ -172,6 +172,9 @@ - type: ExplosionResistance damageCoefficient: 0.5 - type: GroupExamine + - type: ClothingSpeedModifier + walkModifier: 0.85 + sprintModifier: 0.85 - type: Unremoveable deleteOnDrop: true - type: ClothingModifyChemicalRegen diff --git a/Resources/Prototypes/Objectives/changeling.yml b/Resources/Prototypes/Objectives/changeling.yml index ef14c052a3..3ed2c0beb6 100644 --- a/Resources/Prototypes/Objectives/changeling.yml +++ b/Resources/Prototypes/Objectives/changeling.yml @@ -17,11 +17,11 @@ id: BaseChangelingStealObjective components: - type: StealCondition - verifyMapExistance: false + verifyMapExistence: false - type: Objective difficulty: 2.75 - type: ObjectiveLimit - limit: 1 + limit: 2 - type: entity noSpawn: true @@ -63,6 +63,22 @@ - type: PickRandomChangeling - type: AbsorbChangelingCondition +# escape + +- type: entity + noSpawn: true + parent: [BaseChangelingObjective, BaseLivingObjective] + id: EscapeShuttleObjectiveCh + name: Escape to centcom alive and unrestrained. + description: One of our undercover agents will debrief you when you arrive. Don't show up in cuffs. + components: + - type: Objective + difficulty: 1.3 + icon: + sprite: Structures/Furniture/chairs.rsi + state: shuttle + - type: EscapeShuttleCondition + - type: entity noSpawn: true parent: BaseChangelingObjective @@ -76,6 +92,11 @@ title: objective-condition-escape-with-identity-title - type: PickRandomIdentity - type: EscapeWithIdentityCondition + - type: ObjectiveBlacklistRequirement + blacklist: + components: + - EscapeShuttleCondition + - DieCondition # steal @@ -225,3 +246,37 @@ - type: StealCondition stealGroup: NukeDisk owner: objective-condition-steal-station + +# kill + +- type: entity + noSpawn: true + parent: [BaseChangelingObjective, BaseKillObjective] + id: KillRandomPersonObjectiveCh + description: Do it however you like, just make sure they don't make it to centcom. + components: + - type: Objective + difficulty: 1.75 + unique: false + - type: TargetObjective + title: objective-condition-kill-person-title + - type: PickRandomPerson + +- type: entity + noSpawn: true + parent: [BaseChangelingObjective, BaseKillObjective] + id: KillRandomHeadObjectiveCh + description: We need this head gone and you probably know why. Good luck, agent. + components: + - type: Objective + # technically its still possible for KillRandomPersonObjective to roll a head but this is guaranteed, so higher difficulty + difficulty: 3.0 + # killing 1 head is enough + unique: true + - type: TargetObjective + title: objective-condition-kill-head-title + - type: PickRandomHead + - type: KillPersonCondition + # don't count missing evac as killing as heads are higher profile, so you really need to do the dirty work + # if ce flies a shittle to centcom you better find a way onto it + requireDead: true diff --git a/Resources/Prototypes/Objectives/objectiveGroups.yml b/Resources/Prototypes/Objectives/objectiveGroups.yml index 82d7561102..78224f0fe7 100644 --- a/Resources/Prototypes/Objectives/objectiveGroups.yml +++ b/Resources/Prototypes/Objectives/objectiveGroups.yml @@ -133,17 +133,18 @@ weights: ChangelingObjectiveGroupSteal: 1 ChangelingObjectiveGroupKill: 1 + ChangelingObjectiveGroupEscape: 1 - type: weightedRandom id: ChangelingObjectiveGroupSteal weights: - CaptainIDStealObjectiveCh: 0.5 - CMOHyposprayStealObjectiveCh: 0.5 - RDHardsuitStealObjectiveCh: 0.5 - NukeDiskStealObjectiveCh: 0.5 - MagbootsStealObjectiveCh: 0.5 - CorgiMeatStealObjectiveCh: 0.5 - ClipboardStealObjectiveCh: 0.5 + CaptainIDStealObjectiveCh: 1 + CMOHyposprayStealObjectiveCh: 1 + RDHardsuitStealObjectiveCh: 1 + NukeDiskStealObjectiveCh: 1 + MagbootsStealObjectiveCh: 1 + CorgiMeatStealObjectiveCh: 1 + ClipboardStealObjectiveCh: 1 CaptainGunStealObjectiveCh: 0.5 CaptainJetpackStealObjectiveCh: 0.5 HandTeleporterStealObjectiveCh: 0.5 @@ -154,5 +155,12 @@ weights: AbsorbDnaObjective: 1 AbsorbMoreDnaObjective: 0.75 - AbsorbChangelingObjective: 0.25 - EscapeWithIdentityObjective: 0.75 + #AbsorbChangelingObjective: 0.25 + KillRandomPersonObjectiveCh: 1 + KillRandomHeadObjectiveCh: 0.25 + +- type: weightedRandom + id: ChangelingObjectiveGroupEscape + weights: + EscapeShuttleObjectiveCh: 1 + EscapeWithIdentityObjective: 0.5