diff --git a/Content.Server/Objectives/Components/KillPersonConditionComponent.cs b/Content.Server/Objectives/Components/KillPersonConditionComponent.cs index 7bbc42ac98..534e8094b6 100644 --- a/Content.Server/Objectives/Components/KillPersonConditionComponent.cs +++ b/Content.Server/Objectives/Components/KillPersonConditionComponent.cs @@ -10,8 +10,14 @@ namespace Content.Server.Objectives.Components; public sealed partial class KillPersonConditionComponent : Component { /// - /// Whether the target must be truly dead, ignores missing evac. + /// Whether the target must be dead /// [DataField, ViewVariables(VVAccess.ReadWrite)] public bool RequireDead = false; + + /// + /// Whether the target must not be on evac + /// + [DataField, ViewVariables(VVAccess.ReadWrite)] + public bool RequireMaroon = false; } diff --git a/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs b/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs index 45ad68e28b..c378841278 100644 --- a/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs +++ b/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs @@ -29,36 +29,30 @@ public sealed class KillPersonConditionSystem : EntitySystem if (!_target.GetTarget(uid, out var target)) return; - args.Progress = GetProgress(target.Value, comp.RequireDead); + args.Progress = GetProgress(target.Value, comp.RequireDead, comp.RequireMaroon); } - private float GetProgress(EntityUid target, bool requireDead) + private float GetProgress(EntityUid target, bool requireDead, bool requireMaroon) { // deleted or gibbed or something, counts as dead if (!TryComp(target, out var mind) || mind.OwnedEntity == null) return 1f; - // dead is success - if (_mind.IsCharacterDeadIc(mind)) - return 1f; + var targetDead = _mind.IsCharacterDeadIc(mind); + var targetMarooned = !_emergencyShuttle.IsTargetEscaping(target) && + _emergencyShuttle.ShuttlesLeft; + if (!_config.GetCVar(CCVars.EmergencyShuttleEnabled) && requireMaroon) + { + requireDead = true; + requireMaroon = false; + } - // if the target has to be dead dead then don't check evac stuff - if (requireDead) + if (requireDead && !targetDead) return 0f; - // if evac is disabled then they really do have to be dead - if (!_config.GetCVar(CCVars.EmergencyShuttleEnabled)) - return 0f; + if (requireMaroon) // if evac is still here and target hasn't boarded, show 50% to give you an indicator that you are doing good + return targetMarooned ? 1f : _emergencyShuttle.EmergencyShuttleArrived ? 0.5f : 0f; - // target is escaping so you fail - if (_emergencyShuttle.IsTargetEscaping(mind.OwnedEntity.Value)) - return 0f; - - // evac has left without the target, greentext since the target is afk in space with a full oxygen tank and coordinates off. - if (_emergencyShuttle.ShuttlesLeft) - return 1f; - - // if evac is still here and target hasn't boarded, show 50% to give you an indicator that you are doing good - return _emergencyShuttle.EmergencyShuttleArrived ? 0.5f : 0f; + return 1f; // Good job you did it woohoo } } diff --git a/Resources/Locale/en-US/objectives/conditions/kill-person.ftl b/Resources/Locale/en-US/objectives/conditions/kill-person.ftl index c48e2122ff..48606b92c2 100644 --- a/Resources/Locale/en-US/objectives/conditions/kill-person.ftl +++ b/Resources/Locale/en-US/objectives/conditions/kill-person.ftl @@ -1 +1,3 @@ objective-condition-kill-person-title = Kill or maroon {$targetName}, {CAPITALIZE($job)} +objective-condition-kill-maroon-title = Kill and maroon {$targetName}, {CAPITALIZE($job)} +objective-condition-maroon-person-title = Maroon {$targetName}, {CAPITALIZE($job)} diff --git a/Resources/Prototypes/Objectives/paradoxClone.yml b/Resources/Prototypes/Objectives/paradoxClone.yml index 40a1021676..34b41050c7 100644 --- a/Resources/Prototypes/Objectives/paradoxClone.yml +++ b/Resources/Prototypes/Objectives/paradoxClone.yml @@ -34,7 +34,7 @@ components: - type: PickSpecificPerson - type: KillPersonCondition - requireDead: true # don't count missing evac as killing + requireDead: true - type: TargetObjective title: objective-condition-kill-head-title # kill , diff --git a/Resources/Prototypes/Objectives/traitor.yml b/Resources/Prototypes/Objectives/traitor.yml index de222df6cc..1da9953b60 100644 --- a/Resources/Prototypes/Objectives/traitor.yml +++ b/Resources/Prototypes/Objectives/traitor.yml @@ -89,13 +89,13 @@ difficulty: 1.75 unique: false - type: TargetObjective - title: objective-condition-kill-person-title + title: objective-condition-maroon-person-title - type: PickRandomPerson - type: entity parent: [BaseTraitorObjective, BaseKillObjective] id: KillRandomHeadObjective - description: We need this head gone and you probably know why. Good luck, agent. + description: We need this head gone and you probably know why. Make sure they don't make it to centcomm, even if they're dead. Good luck, agent. components: - type: Objective # technically its still possible for KillRandomPersonObjective to roll a head but this is guaranteed, so higher difficulty @@ -103,12 +103,13 @@ # killing 1 head is enough unique: true - type: TargetObjective - title: objective-condition-kill-head-title + title: objective-condition-kill-maroon-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 + requireMaroon: true # social