diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index b19919dd92d3..1fa697d1e990 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -38,7 +38,6 @@ #define ROLE_DRONE "Drone" #define ROLE_DEATHSQUAD "Deathsquad" #define ROLE_LAVALAND "Lavaland" -#define ROLE_INTERNAL_AFFAIRS "Internal Affairs Agent" #define ROLE_FUGITIVE "Fugitive" #define ROLE_SHADOWLING "Shadowling" // Yogs #define ROLE_VAMPIRE "Vampire" // Yogs @@ -87,7 +86,6 @@ GLOBAL_LIST_INIT(special_roles, list( ROLE_BROTHER = /datum/antagonist/brother, ROLE_BRAINWASHED = /datum/antagonist/brainwashed, ROLE_OBSESSED = /datum/antagonist/obsessed, - ROLE_INTERNAL_AFFAIRS = /datum/antagonist/traitor/internal_affairs, ROLE_FUGITIVE = /datum/antagonist/fugitive, ROLE_SHADOWLING = /datum/antagonist/shadowling, // Yogs ROLE_VAMPIRE = /datum/antagonist/vampire, // Yogs diff --git a/code/datums/status_effects/agent_pinpointer.dm b/code/datums/status_effects/agent_pinpointer.dm new file mode 100644 index 000000000000..d620ce3796c3 --- /dev/null +++ b/code/datums/status_effects/agent_pinpointer.dm @@ -0,0 +1,78 @@ +#define PINPOINTER_MINIMUM_RANGE 15 +#define PINPOINTER_EXTRA_RANDOM_RANGE 10 +#define PINPOINTER_PING_TIME (4 SECONDS) + +/atom/movable/screen/alert/status_effect/agent_pinpointer + name = "Target Integrated Pinpointer" + desc = "Even stealthier than a normal implant, it points to any assassination target you have." + icon = 'icons/obj/device.dmi' + icon_state = "pinon" + +/datum/status_effect/agent_pinpointer + id = "agent_pinpointer" + duration = -1 + tick_interval = PINPOINTER_PING_TIME + alert_type = /atom/movable/screen/alert/status_effect/agent_pinpointer + ///The minimum range to start pointing towards your target. + var/minimum_range = PINPOINTER_MINIMUM_RANGE + ///How fuzzy will the pinpointer be, messing with it pointing to your target. + var/range_fuzz_factor = PINPOINTER_EXTRA_RANDOM_RANGE + ///The range until you're considered 'close' + var/range_mid = 8 + ///The range until you're considered 'too far away' + var/range_far = 16 + ///The target we are pointing towards, refreshes every tick. + var/mob/scan_target + +/datum/status_effect/agent_pinpointer/tick() + if(!owner) + qdel(src) + return + scan_for_target() + point_to_target() + +///Show the distance and direction of a scanned target +/datum/status_effect/agent_pinpointer/proc/point_to_target() + if(!scan_target) + linked_alert.icon_state = "pinonnull" + return + + var/turf/here = get_turf(owner) + var/turf/there = get_turf(scan_target) + + if(here.z != there.z) + linked_alert.icon_state = "pinonnull" + return + if(get_dist_euclidian(here,there) <= minimum_range + rand(0, range_fuzz_factor)) + linked_alert.icon_state = "pinondirect" + return + linked_alert.setDir(get_dir(here, there)) + + var/dist = (get_dist(here, there)) + if(dist >= 1 && dist <= range_mid) + linked_alert.icon_state = "pinonclose" + else if(dist > range_mid && dist <= range_far) + linked_alert.icon_state = "pinonmedium" + else if(dist > range_far) + linked_alert.icon_state = "pinonfar" + +///Attempting to locate a nearby target to scan and point towards. +/datum/status_effect/agent_pinpointer/proc/scan_for_target() + scan_target = null + if(!owner && !owner.mind) + return + for(var/datum/objective/assassinate/objective_datums as anything in owner.mind.get_all_objectives()) + if(!objective_datums.target || !objective_datums.target.current || objective_datums.target.current.stat == DEAD) + continue + var/mob/tracked_target = objective_datums.target.current + //JUUUST in case. + if(!tracked_target) + continue + + //Catch the first one we find, then stop. We want to point to the most recent one we've got. + scan_target = tracked_target + break + +#undef PINPOINTER_EXTRA_RANDOM_RANGE +#undef PINPOINTER_MINIMUM_RANGE +#undef PINPOINTER_PING_TIME diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index abc0aa2e7949..7213efde1add 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -274,14 +274,6 @@ GLOBAL_LIST_EMPTY(objectives) if(target && target.current != original) return TRUE -/datum/objective/assassinate/internal - var/stolen = 0 //Have we already eliminated this target? - -/datum/objective/assassinate/internal/update_explanation_text() - ..() - if(target && !target.current) - explanation_text = "Assassinate [target.name], who was obliterated." - /datum/objective/mutiny name = "mutiny" var/target_role_type=FALSE @@ -1059,9 +1051,6 @@ GLOBAL_LIST_EMPTY(possible_items_special) to_chat(admin, span_warning("No active AIs with minds!")) update_explanation_text() -/datum/objective/destroy/internal - var/stolen = FALSE //Have we already eliminated this target? - /datum/objective/steal_n_of_type name = "steal five of" explanation_text = "Steal some items!" diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor.dm similarity index 100% rename from code/game/gamemodes/traitor/traitor.dm rename to code/game/gamemodes/traitor.dm diff --git a/code/game/gamemodes/traitor/internal_affairs.dm b/code/game/gamemodes/traitor/internal_affairs.dm deleted file mode 100644 index 42b684d0b129..000000000000 --- a/code/game/gamemodes/traitor/internal_affairs.dm +++ /dev/null @@ -1,100 +0,0 @@ -/datum/game_mode - var/list/target_list = list() - var/list/late_joining_list = list() - -/datum/game_mode/traitor/internal_affairs - name = "Internal Affairs" - config_tag = "internal_affairs" - report_type = "internal_affairs" - false_report_weight = 10 - required_players = 25 - required_enemies = 5 - recommended_enemies = 8 - reroll_friendly = 0 - traitor_name = "Syndicate Internal Affairs Agent" - antag_flag = ROLE_INTERNAL_AFFAIRS - title_icon = "traitor" - - traitors_possible = 10 //hard limit on traitors if scaling is turned off - num_modifier = 4 // Four additional traitors - antag_datum = /datum/antagonist/traitor/internal_affairs - restricted_jobs = list("AI", "Cyborg")//Yogs -- Silicons can no longer be IAA - - announce_text = "There are Syndicate Internal Affairs Agents trying to kill each other!\n\ - IAA: Eliminate your targets and protect yourself!\n\ - Crew: Stop the IAA agents before they can cause too much mayhem." - - - -/datum/game_mode/traitor/internal_affairs/post_setup() - var/i = 0 - for(var/datum/mind/traitor in pre_traitors) - i++ - if(i + 1 > pre_traitors.len) - i = 0 - target_list[traitor] = pre_traitors[i+1] - ..() - - -/datum/game_mode/traitor/internal_affairs/add_latejoin_traitor(datum/mind/character) - - check_potential_agents() - - // As soon as we get 3 or 4 extra latejoin traitors, make them traitors and kill each other. - if(late_joining_list.len >= rand(3, 4)) - // True randomness - shuffle_inplace(late_joining_list) - // Reset the target_list, it'll be used again in force_traitor_objectives - target_list = list() - - // Basically setting the target_list for who is killing who - var/i = 0 - for(var/datum/mind/traitor in late_joining_list) - i++ - if(i + 1 > late_joining_list.len) - i = 0 - target_list[traitor] = late_joining_list[i + 1] - traitor.special_role = traitor_name - - // Now, give them their targets - for(var/datum/mind/traitor in target_list) - ..(traitor) - - late_joining_list = list() - else - late_joining_list += character - return - -/datum/game_mode/traitor/internal_affairs/proc/check_potential_agents() - - for(var/M in late_joining_list) - if(istype(M, /datum/mind)) - var/datum/mind/agent_mind = M - if(ishuman(agent_mind.current)) - var/mob/living/carbon/human/H = agent_mind.current - if(H.stat != DEAD) - if(H.client) - continue // It all checks out. - - // If any check fails, remove them from our list - late_joining_list -= M - - -/datum/game_mode/traitor/internal_affairs/generate_report() - return "Nanotrasen believes that a Syndicate cell operating in the region has successfully been tricked by a false intelligence leak. If this leak was successful, \ - be wary of Syndicate agents turning on their own on your station; we are unsure the lengths they will go to excise treason." - -/datum/game_mode/traitor/double_agents/generate_credit_text() - var/list/round_credits = list() - var/len_before_addition - - round_credits += "

The Internal Affairs Agents:

" - len_before_addition = round_credits.len - for(var/datum/mind/traitor in traitors) - round_credits += "

[traitor.name] as an Internal Affairs Agent

" - if(len_before_addition == round_credits.len) - round_credits += list("

The Internal Affairs Agents have concealed their actions!

", "

We couldn't locate them!

") - round_credits += "
" - - round_credits += ..() - return round_credits diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index a701a07d8372..87e27533bb19 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -330,28 +330,6 @@ message_admins(span_adminnotice("[key_name_admin(mob_user)] used everyone is a traitor secret. Objective is [objective]")) log_admin("[key_name(mob_user)] used everyone is a traitor secret. Objective is [objective]") - if("iaa_all") - if(!check_rights_for(rights, R_FUN)) - return - if(!SSticker.HasRoundStarted()) - tgui_alert(mob_user, "The game hasn't started yet!") - return - SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("IAA All")) - for(var/mob/living/H in GLOB.player_list) - if(!(ishuman(H))) - continue - if(H.stat == DEAD || !H.client || !H.mind || ispAI(H)) - continue - if(is_special_character(H)) - continue - var/list/badjobs = list("Security Officer", "Warden", "Detective", "AI", "Cyborg", "Captain", "Head of Personnel", "Head of Security") - if(H.mind.assigned_role in badjobs) - continue - var/datum/antagonist/traitor/internal_affairs/T = new() - H.mind.add_antag_datum(T) - message_admins(span_adminnotice("[key_name_admin(mob_user)] used everyone is a iaa secret.")) - log_admin("[key_name(mob_user)] used everyone is a iaa secret.") - if("changebombcap") if(!check_rights_for(rights, R_FUN)) return diff --git a/code/modules/admin/sql_ban_system.dm b/code/modules/admin/sql_ban_system.dm index 25e7e21cec36..ecadf6fb6425 100644 --- a/code/modules/admin/sql_ban_system.dm +++ b/code/modules/admin/sql_ban_system.dm @@ -295,7 +295,7 @@ "Ghost and Other Roles" = list(ROLE_BRAINWASHED, ROLE_DEATHSQUAD, ROLE_DRONE, ROLE_FUGITIVE, ROLE_HOLOPARASITE, ROLE_HORROR, ROLE_LAVALAND, ROLE_MIND_TRANSFER, ROLE_POSIBRAIN, ROLE_SENTIENCE, ROLE_MOUSE, ROLE_GOLEM, ROLE_GHOSTBEACON), "Antagonist Positions" = list(ROLE_ABDUCTOR, ROLE_ALIEN, ROLE_BLOB, ROLE_BLOODSUCKER, ROLE_BROTHER, ROLE_CHANGELING, ROLE_CULTIST, - ROLE_FUGITIVE, ROLE_HOLOPARASITE, ROLE_INTERNAL_AFFAIRS, ROLE_MALF, + ROLE_FUGITIVE, ROLE_HOLOPARASITE, ROLE_MALF, ROLE_MONKEY, ROLE_MONSTERHUNTER, ROLE_NINJA, ROLE_OPERATIVE, ROLE_REV, ROLE_REVENANT, ROLE_SINFULDEMON, ROLE_REV_HEAD, ROLE_SERVANT_OF_RATVAR, ROLE_SYNDICATE, diff --git a/code/modules/antagonists/traitor/IAA/internal_affairs.dm b/code/modules/antagonists/traitor/IAA/internal_affairs.dm deleted file mode 100644 index 726924602f72..000000000000 --- a/code/modules/antagonists/traitor/IAA/internal_affairs.dm +++ /dev/null @@ -1,280 +0,0 @@ -#define PINPOINTER_MINIMUM_RANGE 15 -#define PINPOINTER_EXTRA_RANDOM_RANGE 10 -#define PINPOINTER_PING_TIME 40 -#define PROB_ACTUAL_TRAITOR 20 -#define TRAITOR_AGENT_ROLE "Gorlex Marauders Exile" -#define TRAITOR_AGENT_SROLE "gorlex marauders exile" - -/datum/antagonist/traitor/internal_affairs - name = "Syndicate Internal Affairs Agent" - special_role = "internal affairs agent" //Doesn't have it listed but employer should still be syndicate - antagpanel_category = "IAA" - var/marauder = FALSE - var/last_man_standing = FALSE - var/list/datum/mind/targets_stolen - greentext_achieve = /datum/achievement/greentext/internal - preview_outfit = /datum/outfit/assassin - -/datum/antagonist/traitor/internal_affairs/proc/give_pinpointer() - if(owner && owner.current) - owner.current.apply_status_effect(/datum/status_effect/agent_pinpointer) - -/datum/antagonist/traitor/internal_affairs/apply_innate_effects() - .=..() //in case the base is used in future - if(owner && owner.current) - give_pinpointer(owner.current) - -/datum/antagonist/traitor/internal_affairs/remove_innate_effects() - .=..() - if(owner && owner.current) - owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer) - -/datum/antagonist/traitor/internal_affairs/on_gain() - START_PROCESSING(SSprocessing, src) - - if(ishuman(owner.current)) - var/mob/living/carbon/human/H = owner.current - var/obj/item/implant/dusting/E = new/obj/item/implant/dusting(H) - E.implant(H) - - company = pick(subtypesof(/datum/corporation/traitor)) - - .=..() -/datum/antagonist/traitor/internal_affairs/on_removal() - STOP_PROCESSING(SSprocessing,src) - .=..() -/datum/antagonist/traitor/internal_affairs/process() - iaa_process() - - -/datum/status_effect/agent_pinpointer - id = "agent_pinpointer" - duration = -1 - tick_interval = PINPOINTER_PING_TIME - alert_type = /atom/movable/screen/alert/status_effect/agent_pinpointer - var/minimum_range = PINPOINTER_MINIMUM_RANGE - var/range_fuzz_factor = PINPOINTER_EXTRA_RANDOM_RANGE - var/mob/scan_target = null - var/range_mid = 8 - var/range_far = 16 - -/atom/movable/screen/alert/status_effect/agent_pinpointer - name = "Internal Affairs Integrated Pinpointer" - desc = "Even stealthier than a normal implant." - icon = 'icons/obj/device.dmi' - icon_state = "pinon" - -/datum/status_effect/agent_pinpointer/proc/point_to_target() //If we found what we're looking for, show the distance and direction - if(!scan_target) - linked_alert.icon_state = "pinonnull" - return - var/turf/here = get_turf(owner) - var/turf/there = get_turf(scan_target) - if(here?.z != there?.z) - linked_alert.icon_state = "pinonnull" - return - if(get_dist_euclidian(here,there)<=minimum_range + rand(0, range_fuzz_factor)) - linked_alert.icon_state = "pinondirect" - else - linked_alert.setDir(get_dir(here, there)) - var/dist = (get_dist(here, there)) - if(dist >= 1 && dist <= range_mid) - linked_alert.icon_state = "pinonclose" - else if(dist > range_mid && dist <= range_far) - linked_alert.icon_state = "pinonmedium" - else if(dist > range_far) - linked_alert.icon_state = "pinonfar" - -/datum/status_effect/agent_pinpointer/proc/scan_for_target() - scan_target = null - if(owner) - if(owner.mind) - for(var/datum/objective/objective_ in owner.mind.get_all_objectives()) - if(!is_internal_objective(objective_)) - continue - var/datum/objective/assassinate/internal/objective = objective_ - var/mob/current = objective.target.current - if(current&¤t.stat!=DEAD) - scan_target = current - break - -/datum/status_effect/agent_pinpointer/tick() - if(!owner) - qdel(src) - return - scan_for_target() - point_to_target() - - -/proc/is_internal_objective(datum/objective/O) - return (istype(O, /datum/objective/assassinate/internal)||istype(O, /datum/objective/destroy/internal)) - -/datum/antagonist/traitor/proc/replace_escape_objective_martyr() - if(!owner || !objectives.len) - return - for (var/objective_ in objectives) - if(!(istype(objective_, /datum/objective/escape)||istype(objective_, /datum/objective/survive)||istype(objective_, /datum/objective/hijack))) - continue - remove_objective(objective_) - - var/datum/objective/martyr/martyr_objective = new - martyr_objective.owner = owner - add_objective(martyr_objective) - -/datum/antagonist/traitor/proc/replace_escape_objective_hijack() //Should work? - if(!owner || !objectives.len) - return - for (var/objective_ in objectives) - if(!(istype(objective_, /datum/objective/escape)||istype(objective_, /datum/objective/survive)||istype(objective_, /datum/objective/martyr))) - continue - remove_objective(objective_) - - var/datum/objective/hijack/hijack_objective = new - hijack_objective.owner = owner - add_objective(hijack_objective) - -/datum/antagonist/traitor/proc/reinstate_escape_objective() - if(!owner||!objectives.len) - return - for (var/objective_ in objectives) - if(!istype(objective_, /datum/objective/martyr) || !istype(objective_, /datum/objective/hijack)) - continue - remove_objective(objective_) - -/datum/antagonist/traitor/internal_affairs/reinstate_escape_objective() - ..() - var/objtype = traitor_kind == TRAITOR_HUMAN ? /datum/objective/escape : /datum/objective/survive - var/datum/objective/escape_objective = new objtype - escape_objective.owner = owner - add_objective(escape_objective) - -/datum/antagonist/traitor/internal_affairs/proc/steal_targets(datum/mind/victim) - if(!owner.current||owner.current.stat==DEAD) - return - to_chat(owner.current, span_userdanger("Target eliminated: [victim.name]")) - for(var/objective_ in victim.get_all_objectives()) - if(istype(objective_, /datum/objective/assassinate/internal)) - var/datum/objective/assassinate/internal/objective = objective_ - if(objective.target==owner) - continue - else if(targets_stolen.Find(objective.target) == 0) - var/datum/objective/assassinate/internal/new_objective = new - new_objective.owner = owner - new_objective.target = objective.target - new_objective.update_explanation_text() - add_objective(new_objective) - targets_stolen += objective.target - var/status_text = objective.check_completion() ? "neutralised" : "active" - to_chat(owner.current, span_userdanger("New target added to database: [objective.target.name] ([status_text])")) - else if(istype(objective_, /datum/objective/destroy/internal)) - var/datum/objective/destroy/internal/objective = objective_ - var/datum/objective/destroy/internal/new_objective = new - if(objective.target==owner) - continue - else if(targets_stolen.Find(objective.target) == 0) - new_objective.owner = owner - new_objective.target = objective.target - new_objective.update_explanation_text() - add_objective(new_objective) - targets_stolen += objective.target - var/status_text = objective.check_completion() ? "neutralised" : "active" - to_chat(owner.current, span_userdanger("New target added to database: [objective.target.name] ([status_text])")) - last_man_standing = TRUE - for(var/objective_ in objectives) - if(!is_internal_objective(objective_)) - continue - var/datum/objective/assassinate/internal/objective = objective_ - if(!objective.check_completion()) - last_man_standing = FALSE - return - if(last_man_standing) - if(!marauder) - to_chat(owner.current,span_userdanger("Every agent confirmed turncoat has been eliminated. However, given that the entire cell was compromised, your loyalty is being called into question. Die a glorious death, and prove your unending allegiance to the Syndicate.")) - replace_escape_objective_martyr(owner) - else - to_chat(owner.current,span_userdanger("Each of the others lies dead at your feet. Your final obstacle of this trial is to hijack the shuttle. Leave none standing and no survivors in your wake. Your brothers await you with open arms, Marauder.")) - replace_escape_objective_hijack(owner) - -/datum/antagonist/traitor/internal_affairs/proc/iaa_process() - if(owner&&owner.current&&owner.current.stat!=DEAD) - for(var/objective_ in objectives) - if(!is_internal_objective(objective_)) - continue - var/datum/objective/assassinate/internal/objective = objective_ - if(!objective.target) - continue - if(objective.check_completion()) - if(objective.stolen) - continue - else - steal_targets(objective.target) - objective.stolen = TRUE - else - if(objective.stolen) - var/fail_msg = span_userdanger("Your sensors tell you that [objective.target.current.real_name], one of the targets you were meant to have killed, lives once again.") - if(last_man_standing) - if(!marauder) - fail_msg += span_userdanger("You no longer have permission to die. Track the treacherous vermin down, and kill them. No loose ends are permitted.") - else - fail_msg += span_userdanger("They will not judge us weak. Cease your terror on Nanotrasen and eliminate the tenacious target once more. Fail to do this, and a bullet awaits you at the base.") - reinstate_escape_objective(owner) - last_man_standing = FALSE - to_chat(owner.current, fail_msg) - objective.stolen = FALSE - -/datum/antagonist/traitor/internal_affairs/proc/forge_iaa_objectives() - if(SSticker.mode.target_list.len && SSticker.mode.target_list[owner]) // Is a double agent - // Assassinate - var/datum/mind/target_mind = SSticker.mode.target_list[owner] - if(issilicon(target_mind.current)) - var/datum/objective/destroy/internal/destroy_objective = new - destroy_objective.owner = owner - destroy_objective.target = target_mind - destroy_objective.update_explanation_text() - add_objective(destroy_objective) - else - var/datum/objective/assassinate/internal/kill_objective = new - kill_objective.owner = owner - kill_objective.target = target_mind - kill_objective.update_explanation_text() - add_objective(kill_objective) - - //Lower chance of someone needing to do an additional objective, but getting hijack instead of DaGD - if(prob(PROB_ACTUAL_TRAITOR)) //20% - company = /datum/corporation/gorlex //Should not double wammy the corporate introduction, I hope - name = "Gorlex Marauders Exile" - owner.special_role = TRAITOR_AGENT_ROLE - special_role = TRAITOR_AGENT_SROLE - marauder = TRUE - forge_single_objective() - greentext_achieve = /datum/achievement/greentext/external - -/datum/antagonist/traitor/internal_affairs/forge_traitor_objectives() - forge_iaa_objectives() - - var/objtype = traitor_kind == TRAITOR_HUMAN ? /datum/objective/escape : /datum/objective/survive - var/datum/objective/escape_objective = new objtype - escape_objective.owner = owner - add_objective(escape_objective) - -/datum/antagonist/traitor/internal_affairs/proc/greet_iaa() - to_chat(owner.current, span_userdanger("You are the [special_role].")) - if(!marauder) - to_chat(owner.current, span_userdanger("An intel leak suggests that operatives on this station have been turned by Nanotrasen. For now, your target is the only confirmed turncoat.")) - to_chat(owner.current, "Any apparent damage you cause may draw early suspicion to an intelligence leak. Limit collateral damage to avoid this.") //yogs - murderbone rule exists, apparently - to_chat(owner.current, span_userdanger("You have been provided with a standard uplink to accomplish your task.")) - else - to_chat(owner.current, span_userdanger("You have been granted a chance to rejoin the Gorlex ranks, despite your dishonorable behavior. Complete this small task and eliminate every other Syndicate agent on the station to prove yourself. Your listed target is the first of many.")) - to_chat(owner.current, "Unnecessary collateral damage will condemn yourself. Keep your destructive force focused on your targets, or you will fail this trial.") - to_chat(owner.current, span_userdanger("We have given you a standard uplink for tools in your glorious hunt. Use them well, use them cunningly.")) - - to_chat(owner.current, span_userdanger("Your target still likely has an uplink of their own, and other agents may be moving to eliminate you, if your identity has been compromised. Be careful, and watch your back.")) - owner.announce_objectives() - -/datum/antagonist/traitor/internal_affairs/greet() - greet_iaa() - -#undef PROB_ACTUAL_TRAITOR -#undef PINPOINTER_EXTRA_RANDOM_RANGE -#undef PINPOINTER_MINIMUM_RANGE -#undef PINPOINTER_PING_TIME diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/internalaffairsagent.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/internalaffairsagent.ts deleted file mode 100644 index 10f274359ed5..000000000000 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/internalaffairsagent.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Antagonist, Category } from "../base"; -import { multiline } from "common/string"; - -export const IAA_MECHANICAL_DESCRIPTION - = multiline` - Minimize damage to Nanotrasen civilians and their station, but utilize an uplink to eliminate all rogue agents. Be wary; others will be moving against you. - `; - - -const internalaffairsagent: Antagonist = { - key: "internalaffairsagent", - name: "Internal Affairs Agent", - description: [ - multiline` - Someone's ratted. The trust of your agent cell is in question. Presume any and all confirmed targets dangerous, and watch your own back, operative. Clean up this mess and await further instructions. - `, - IAA_MECHANICAL_DESCRIPTION, - ], - category: Category.Roundstart, - priority: -1, -}; - -export default internalaffairsagent; diff --git a/tgui/packages/tgui/interfaces/SecretsPanel.js b/tgui/packages/tgui/interfaces/SecretsPanel.js index 1f1d7dae1404..0cc6bb00ec6b 100644 --- a/tgui/packages/tgui/interfaces/SecretsPanel.js +++ b/tgui/packages/tgui/interfaces/SecretsPanel.js @@ -57,7 +57,6 @@ export const SecretsPanel = (props, context) => { act('quickpower')} disabled={!funRights} />