diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
index 7b125439d53..1d676ea2667 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
@@ -60,7 +60,7 @@
/datum/dynamic_ruleset/latejoin/infiltrator
name = "Syndicate Infiltrator"
- antag_datum = /datum/antagonist/traitor
+ antag_datum = /datum/antagonist/traitor/infiltrator
antag_flag = ROLE_SYNDICATE_INFILTRATOR
antag_flag_override = ROLE_TRAITOR
protected_roles = list(
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
index d30f3ffef76..7ad11367fc4 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
@@ -226,7 +226,7 @@
/datum/dynamic_ruleset/midround/from_living/autotraitor
name = "Syndicate Sleeper Agent"
midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT
- antag_datum = /datum/antagonist/traitor
+ antag_datum = /datum/antagonist/traitor/infiltrator/sleeper_agent
antag_flag = ROLE_SLEEPER_AGENT
antag_flag_override = ROLE_TRAITOR
protected_roles = list(
@@ -264,7 +264,7 @@
var/mob/M = pick(candidates)
assigned += M
candidates -= M
- var/datum/antagonist/traitor/newTraitor = new
+ var/datum/antagonist/traitor/infiltrator/sleeper_agent/newTraitor = new
M.mind.add_antag_datum(newTraitor)
message_admins("[ADMIN_LOOKUPFLW(M)] was selected by the [name] ruleset and has been made into a midround traitor.")
log_dynamic("[key_name(M)] was selected by the [name] ruleset and has been made into a midround traitor.")
diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm
index aaf162c15f8..20ded165fc0 100644
--- a/code/modules/antagonists/traitor/datum_traitor.dm
+++ b/code/modules/antagonists/traitor/datum_traitor.dm
@@ -18,6 +18,8 @@
default_custom_objective = "Perform an overcomplicated heist on valuable Nanotrasen assets."
hardcore_random_bonus = TRUE
var/give_objectives = TRUE
+ /// Whether to give secondary objectives to the traitor, which aren't necessary but can be completed for a progression and TC boost.
+ var/give_secondary_objectives = TRUE
var/should_give_codewords = TRUE
///give this traitor an uplink?
var/give_uplink = TRUE
@@ -45,6 +47,16 @@
///the final objective the traitor has to accomplish, be it escaping, hijacking, or just martyrdom.
var/datum/objective/ending_objective
+/datum/antagonist/traitor/infiltrator
+ // Used to denote traitors who have joined midround and therefore have no access to secondary objectives.
+ // Progression elements are best left to the roundstart antagonists
+ // There will still be a timelock on uplink items
+ name = "\improper Infiltrator"
+ //give_secondary_objectives = FALSE //FLUFFY FRONTIER REMOVAL - Трейторы всё же должны иметь побочки.
+
+/datum/antagonist/traitor/infiltrator/sleeper_agent
+ name = "\improper Syndicate Sleeper Agent"
+
/datum/antagonist/traitor/New(give_objectives = TRUE)
. = ..()
src.give_objectives = give_objectives
@@ -67,8 +79,9 @@
uplink_handler.has_progression = TRUE
SStraitor.register_uplink_handler(uplink_handler)
- uplink_handler.has_objectives = TRUE
- uplink_handler.generate_objectives()
+ if(give_secondary_objectives)
+ uplink_handler.has_objectives = TRUE
+ uplink_handler.generate_objectives()
uplink_handler.can_replace_objectives = CALLBACK(src, PROC_REF(can_change_objectives))
uplink_handler.replace_objectives = CALLBACK(src, PROC_REF(submit_player_objective))
diff --git a/modular_skyrat/modules/Midroundtraitor/code/datum_traitor.dm b/modular_skyrat/modules/Midroundtraitor/code/datum_traitor.dm
index 7b02d4a58f3..dd7af42f581 100644
--- a/modular_skyrat/modules/Midroundtraitor/code/datum_traitor.dm
+++ b/modular_skyrat/modules/Midroundtraitor/code/datum_traitor.dm
@@ -1,10 +1,10 @@
-/datum/antagonist/traitor/infiltrator
+/datum/antagonist/traitor/lone_infiltrator
name = "Lone Infiltrator"
var/infil_outfit = /datum/outfit/syndicateinfiltrator
preview_outfit = /datum/outfit/lone_infiltrator_preview
job_rank = ROLE_LONE_INFILTRATOR
-/datum/antagonist/traitor/infiltrator/on_gain()
+/datum/antagonist/traitor/lone_infiltrator/on_gain()
var/mob/living/carbon/human/current = owner.current
current.equipOutfit(infil_outfit)
var/chosen_name = current.dna.species.random_name(current.gender,1,1)
diff --git a/modular_skyrat/modules/Midroundtraitor/code/event.dm b/modular_skyrat/modules/Midroundtraitor/code/event.dm
index 6bf83fc2cd0..ebaa5abaf44 100644
--- a/modular_skyrat/modules/Midroundtraitor/code/event.dm
+++ b/modular_skyrat/modules/Midroundtraitor/code/event.dm
@@ -1,6 +1,6 @@
/datum/dynamic_ruleset/midround/from_ghosts/lone_infiltrator
name = "Lone Infiltrator"
- antag_datum = /datum/antagonist/traitor/infiltrator
+ antag_datum = /datum/antagonist/traitor/lone_infiltrator
midround_ruleset_style = MIDROUND_RULESET_STYLE_LIGHT
antag_flag = ROLE_LONE_INFILTRATOR
restricted_roles = list(JOB_CYBORG,
@@ -46,7 +46,7 @@
player_mind.special_role = "Lone Infiltrator"
player_mind.active = TRUE
player_mind.transfer_to(operative)
- player_mind.add_antag_datum(/datum/antagonist/traitor/infiltrator)
+ player_mind.add_antag_datum(/datum/antagonist/traitor/lone_infiltrator)
message_admins("[ADMIN_LOOKUPFLW(operative)] has been made into lone infiltrator by midround ruleset.")
log_game("[key_name(operative)] was spawned as a lone infiltrator by midround ruleset.")
diff --git a/tgui/packages/tgui/interfaces/TraitorObjectiveDebug.tsx b/tgui/packages/tgui/interfaces/TraitorObjectiveDebug.tsx
index ef20d344de9..4042c199460 100644
--- a/tgui/packages/tgui/interfaces/TraitorObjectiveDebug.tsx
+++ b/tgui/packages/tgui/interfaces/TraitorObjectiveDebug.tsx
@@ -1,7 +1,7 @@
import { useBackend, useLocalState } from '../backend';
import { Box, LabeledList, Stack, Tabs, Tooltip } from '../components';
import { Window } from '../layouts';
-import { getReputation } from './Uplink/calculateReputationLevel';
+import { getDangerLevel } from './Uplink/calculateDangerLevel';
type Objective = {
name: string;
@@ -271,7 +271,7 @@ export const TraitorObjectiveDebug = (props, context) => {
))}
{player_data.map((value) => {
- const rep = getReputation(value.progression_points);
+ const rep = getDangerLevel(value.progression_points);
return (
void,
grow: boolean = false
) => {
- const reputation = getReputation(objective.progression_minimum);
+ const dangerLevel = getDangerLevel(objective.progression_minimum);
return (
{
handleObjectiveAction(objective, value.action);
}}
@@ -334,7 +334,7 @@ const ObjectiveFunction = (
type ObjectiveElementProps = {
name: string;
- reputation: Rank;
+ dangerLevel: Rank;
description: string;
telecrystalReward: number;
progressionReward: number;
@@ -354,7 +354,7 @@ type ObjectiveElementProps = {
export const ObjectiveElement = (props: ObjectiveElementProps, context) => {
const {
name,
- reputation,
+ dangerLevel,
description,
uiButtons = null,
telecrystalReward,
@@ -399,7 +399,7 @@ export const ObjectiveElement = (props: ObjectiveElementProps, context) => {
@@ -451,13 +451,13 @@ export const ObjectiveElement = (props: ObjectiveElementProps, context) => {
'border-right': 'none',
'border-bottom': objectiveFinished ? 'none' : undefined,
}}
- className={reputation.gradient}
+ className={dangerLevel.gradient}
py={0.5}
width="100%"
textAlign="center">
{telecrystalReward} TC,
- {calculateProgression(progressionReward)} Reputation
+ {calculateProgression(progressionReward)} Threat Level
{Math.abs(progressionDiff) > 10 && (
{
as="span">
{Math.abs(progressionDiff)}%
- {progressionDiff > 0 ? 'less' : 'more'} reputation
- from this objective. This is because your
- reputation is{' '}
+ {progressionDiff > 0 ? 'less' : 'more'} threat
+ from this objective. This is because your threat
+ level is{' '}
{progressionDiff > 0 ? 'ahead ' : 'behind '}
where it normally should be at.
@@ -504,7 +504,7 @@ export const ObjectiveElement = (props: ObjectiveElementProps, context) => {
{objectiveFinished ? (
{ranks.map((value) => {
@@ -104,7 +104,7 @@ export const reputationLevelsTooltip = (
);
-export const getReputation = (progression_points: number) => {
+export const getDangerLevel = (progression_points: number) => {
const minutes = progression_points / 600;
for (let index = 0; index < ranks.length; index++) {
@@ -117,31 +117,31 @@ export const getReputation = (progression_points: number) => {
return ranks[ranks.length - 1];
};
-export const calculateReputationLevel = (
+export const calculateDangerLevel = (
progression_points: number,
textOnly: boolean
) => {
const minutes = progression_points / 600;
const displayedProgression = calculateProgression(progression_points);
- const reputation = getReputation(progression_points);
+ const dangerLevel = getDangerLevel(progression_points);
if (textOnly) {
return (
- {reputation.title} ({displayedProgression})
+ {dangerLevel.title} ({displayedProgression})
);
}
return (
- {reputation.title} ({displayedProgression})
+ {dangerLevel.title} ({displayedProgression})
);
};
diff --git a/tgui/packages/tgui/interfaces/Uplink/index.tsx b/tgui/packages/tgui/interfaces/Uplink/index.tsx
index 91a9adb0ba9..6fd26b4e9be 100644
--- a/tgui/packages/tgui/interfaces/Uplink/index.tsx
+++ b/tgui/packages/tgui/interfaces/Uplink/index.tsx
@@ -8,7 +8,7 @@ import { BooleanLike } from 'common/react';
import { Box, Tabs, Button, Stack, Section, Tooltip, Dimmer } from '../../components';
import { PrimaryObjectiveMenu } from './PrimaryObjectiveMenu';
import { Objective, ObjectiveMenu } from './ObjectiveMenu';
-import { calculateProgression, calculateReputationLevel, reputationDefault, reputationLevelsTooltip } from './calculateReputationLevel';
+import { calculateProgression, calculateDangerLevel, dangerDefault, dangerLevelsTooltip } from './calculateDangerLevel';
type UplinkItem = {
id: string;
@@ -227,7 +227,7 @@ export class Uplink extends Component<{}, UplinkState> {
<>
,
- {calculateReputationLevel(item.progression_minimum, true)}
+ {calculateDangerLevel(item.progression_minimum, true)}
>
) : (
@@ -280,12 +280,15 @@ export class Uplink extends Component<{}, UplinkState> {
(!!has_progression && (
- Your current level of reputation.
- Reputation determines what quality of objective
- you get and what items you can purchase.
+ Your current level of threat. Threat
+ determines
+ {has_objectives
+ ? ' the severity of secondary objectives you get and '
+ : ' '}
+ what items you can purchase.
{/* A minute in deciseconds */}
- Reputation passively increases by{' '}
+ Threat passively increases by{' '}
{calculateProgression(
current_progression_scaling
@@ -295,10 +298,10 @@ export class Uplink extends Component<{}, UplinkState> {
{Math.abs(progressionPercentage) > 0 && (
- Because your reputation is{' '}
+ Because your threat level is
{progressionPercentage < 0
- ? 'ahead '
- : 'behind '}
+ ? ' ahead '
+ : ' behind '}
of where it should be, you are getting
{
{progressionPercentage < 0
? 'less'
: 'more'}{' '}
- reputation every minute
+ threat every minute
)}
- {reputationLevelsTooltip}
+ {dangerLevelsTooltip}
)) ||
- 'Your current level of reputation. You are a respected elite and do not need to improve your reputation.'
+ "Your current threat level. You are a killing machine and don't need to improve your threat level."
}>
{/* If we have no progression,
just give them a generic title */}
{has_progression
- ? calculateReputationLevel(progression_points, false)
- : calculateReputationLevel(reputationDefault, false)}
+ ? calculateDangerLevel(progression_points, false)
+ : calculateDangerLevel(dangerDefault, false)}