"))
to_chat(owner, span_bolddanger("You cannot find the memory files of anything that happened while you were infected..."))
-datum/antagonist/hijacked_ai/proc/update_synd_icons_added(mob/living/M)
- var/datum/atom_hud/antag/sithud = GLOB.huds[ANTAG_HUD_INFILTRATOR]
- sithud.join_hud(M)
- set_antag_hud(M, "synd")
-
-/datum/antagonist/hijacked_ai/proc/update_synd_icons_removed(mob/living/M)
- var/datum/atom_hud/antag/sithud = GLOB.huds[ANTAG_HUD_INFILTRATOR]
- sithud.leave_hud(M)
- set_antag_hud(M, null)
-
/datum/antagonist/hijacked_ai/apply_innate_effects(mob/living/mob_override)
. = ..()
var/mob/living/silicon/ai/A = mob_override || owner.current
@@ -35,7 +25,6 @@ datum/antagonist/hijacked_ai/proc/update_synd_icons_added(mob/living/M)
A.set_syndie_radio()
to_chat(A, span_notice("Your radio has been upgraded! Use :t to speak on an encrypted channel with Syndicate Agents!"))
A.add_malf_picker()
- update_synd_icons_added(A)
/datum/antagonist/hijacked_ai/remove_innate_effects(mob/living/mob_override)
. = ..()
@@ -46,7 +35,6 @@ datum/antagonist/hijacked_ai/proc/update_synd_icons_added(mob/living/M)
QDEL_NULL(A.radio)
A.radio = new /obj/item/radio/headset/silicon/ai(A)
A.remove_language(/datum/language/codespeak)
- update_synd_icons_removed(A)
/datum/antagonist/hijacked_ai/on_removal()
if(owner.current && isAI(owner.current))
diff --git a/yogstation/code/modules/antagonists/infiltrator/infiltrator.dm b/yogstation/code/modules/antagonists/infiltrator/infiltrator.dm
deleted file mode 100644
index 3d7433a80868..000000000000
--- a/yogstation/code/modules/antagonists/infiltrator/infiltrator.dm
+++ /dev/null
@@ -1,94 +0,0 @@
-/datum/antagonist/infiltrator
- name = "Syndicate Infiltrator"
- roundend_category = "syndicate infiltrators" //just in case
- antagpanel_category = "Infiltrator"
- job_rank = ROLE_INFILTRATOR
- show_to_ghosts = TRUE
- var/datum/team/infiltrator/infiltrator_team
- var/always_new_team = FALSE //If not assigned a team by default ops will try to join existing ones, set this to TRUE to always create new team.
- var/send_to_spawnpoint = TRUE //Should the user be moved to default spawnpoint.
- var/dress_up = TRUE
- var/hud_icon = "synd"
-
-/datum/antagonist/infiltrator/proc/update_synd_icons_added(mob/living/M)
- var/datum/atom_hud/antag/sithud = GLOB.huds[ANTAG_HUD_INFILTRATOR]
- sithud.join_hud(M)
- set_antag_hud(M, hud_icon)
-
-/datum/antagonist/infiltrator/proc/update_synd_icons_removed(mob/living/M)
- var/datum/atom_hud/antag/sithud = GLOB.huds[ANTAG_HUD_INFILTRATOR]
- sithud.leave_hud(M)
- set_antag_hud(M, null)
-
-/datum/antagonist/infiltrator/apply_innate_effects(mob/living/mob_override)
- var/mob/living/M = mob_override || owner.current
- update_synd_icons_added(M)
-
-/datum/antagonist/infiltrator/remove_innate_effects(mob/living/mob_override)
- var/mob/living/M = mob_override || owner.current
- update_synd_icons_removed(M)
-
-/datum/antagonist/infiltrator/greet()
- owner.current.playsound_local(get_turf(owner.current), 'yogstation/sound/ambience/antag/infiltrator.ogg', 100, 0)
- to_chat(owner, span_userdanger("You are a syndicate infiltrator!"))
- to_chat(owner, span_boldnotice("Your job is to infiltrate [station_name()], and complete our objectives"))
- to_chat(owner, span_big(span_notice("Click on your pinpointer at the top right to access your uplink, pinpointer, or ship controls.")))
- to_chat(owner, span_notice("You also have an internal radio, for communicating with your team-mates at all times."))
- to_chat(owner, span_notice("You have a dusting implant, to ensure that Nanotrasen does not get their hands on Syndicate gear. Only activate it, if you are compromised."))
- to_chat(owner, span_boldnotice(span_italics("Do NOT kill or destroy needlessly, as this defeats the purpose of an 'infiltration'!")))
- to_chat(owner, span_boldnotice("Once your objectives are complete, return to base, with all living infiltrators, to end the round."))
- owner.announce_objectives()
-
-/datum/antagonist/infiltrator/on_gain()
- var/mob/living/carbon/human/H = owner.current
- owner.assigned_role = "Syndicate Infiltrator"
- owner.special_role = "Syndicate Infiltrator"
- if(istype(H))
- if(dress_up)
- H.set_species(/datum/species/human)
- var/new_name = H.dna.species.random_name(H.gender, TRUE)
- H.fully_replace_character_name(H.real_name, new_name)
- H.equipOutfit(/datum/outfit/infiltrator)
- owner.store_memory("Do NOT kill or destroy needlessly, as this defeats the purpose of an 'infiltration'!")
- objectives |= infiltrator_team.objectives
- . = ..()
- if(send_to_spawnpoint)
- move_to_spawnpoint()
-
-/datum/antagonist/infiltrator/get_team()
- return infiltrator_team
-
-/datum/antagonist/infiltrator/create_team(datum/team/infiltrator/new_team)
- if(!new_team)
- if(!always_new_team)
- for(var/datum/antagonist/infiltrator/N in GLOB.antagonists)
- if(!N.owner)
- continue
- if(N.infiltrator_team)
- infiltrator_team = N.infiltrator_team
- return
- infiltrator_team = new /datum/team/infiltrator
- infiltrator_team.update_objectives()
- return
- if(!istype(new_team))
- stack_trace("Wrong team type passed to [type] initialization.")
- infiltrator_team = new_team
-
-/datum/antagonist/infiltrator/get_admin_commands()
- . = ..()
- .["Send to base"] = CALLBACK(src,.proc/admin_send_to_base)
-
-/datum/antagonist/infiltrator/admin_add(datum/mind/new_owner,mob/admin)
- new_owner.assigned_role = ROLE_INFILTRATOR
- new_owner.add_antag_datum(src)
- message_admins("[key_name_admin(admin)] has infiltrator'ed [new_owner.current].")
- log_admin("[key_name(admin)] has infiltrator'ed [new_owner.current].")
-
-/datum/antagonist/infiltrator/proc/admin_send_to_base(mob/admin)
- owner.current.forceMove(pick(GLOB.infiltrator_start))
-
-/datum/antagonist/infiltrator/proc/move_to_spawnpoint()
- var/team_number = 1
- if(infiltrator_team)
- team_number = infiltrator_team.members.Find(owner)
- owner.current.forceMove(GLOB.infiltrator_start[((team_number - 1) % GLOB.infiltrator_start.len) + 1])
diff --git a/yogstation/code/modules/antagonists/infiltrator/items/access_kit.dm b/yogstation/code/modules/antagonists/infiltrator/items/access_kit.dm
deleted file mode 100644
index 0c4668a22e20..000000000000
--- a/yogstation/code/modules/antagonists/infiltrator/items/access_kit.dm
+++ /dev/null
@@ -1,51 +0,0 @@
-/obj/item/access_kit
- name = "access kit (unset)"
- desc = "A one-use device that can be used to spoof and grant the access associated with a low-level job."
- icon_state = "red_phone"
- var/datum/job/job
- var/list/available_jobs = list(/datum/job/hydro, /datum/job/janitor, /datum/job/cargo_tech, /datum/job/scientist, /datum/job/doctor, /datum/job/engineer)
-
-/obj/item/access_kit/interact(mob/user)
- . = ..()
- if (!ishuman(user))
- return
- if (syndicate && !is_syndicate(user))
- to_chat(user, span_warning("You have no idea how to use [src]..."))
- return
- if (job)
- to_chat(user, span_warning("[src] has already been used! Apply it to your ID to use it."))
- return
- var/list/radial_menu = list()
- for (var/J in available_jobs)
- var/datum/job/job = new J
- radial_menu[job.title] = get_flat_human_icon("accesskit_[job.type]", job, showDirs = list(SOUTH))
- var/result = show_radial_menu(user, src, radial_menu)
- if (!result)
- return
- job = SSjob.GetJob(result)
- name = "access kit ([job.title])"
- to_chat(user, span_notice("You set up [src] to spoof and grant access to [job.title]."))
-
-/obj/item/access_kit/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
- . = ..()
- if (syndicate && !is_syndicate(user))
- return
- if (!istype(target, /obj/item/card/id))
- return
- if (!job)
- to_chat(user, span_warning("[src] has not been set to a specific job yet! Use it in-hand to set up the access kit."))
- return
- var/obj/item/card/id/id = target
- id.assignment = job.title
- id.originalassignment = job.title
- id.access |= job.base_access
- id.update_label()
- to_chat(user, span_notice("You apply [src] to [id], granting it the access of a [job.title]!"))
- if (is_infiltrator(user))
- to_chat(user, span_boldnotice("Ensure to properly update your chameleon clothes to reflect that of a [job.title]!"))
- do_sparks(5, FALSE, user)
- user.dropItemToGround(src)
- qdel(src)
-
-/obj/item/access_kit/syndicate
- syndicate = TRUE
diff --git a/yogstation/code/modules/antagonists/infiltrator/items/ai_hijack.dm b/yogstation/code/modules/antagonists/infiltrator/items/ai_hijack.dm
deleted file mode 100644
index 9f327e4cd7ec..000000000000
--- a/yogstation/code/modules/antagonists/infiltrator/items/ai_hijack.dm
+++ /dev/null
@@ -1,43 +0,0 @@
-/obj/item/ai_hijack_device
- name = "serial exploitation unit"
- desc = "A strange circuitboard, branded with a large red S, with several ports."
- icon = 'yogstation/icons/obj/module.dmi'
- icon_state = "ai_hijack"
-
-/obj/item/ai_hijack_device/examine(mob/living/user)
- . = ..()
- if (user?.mind?.has_antag_datum(/datum/antagonist/infiltrator))
- . += span_notice("To use, insert it into an unlocked AI control console and select the AI you wish to hijack. [span_italics("This will alert the victim AI!")]")
-
-//MIRRORED IN ai_controlpanel.dm !!!
-/*
-/obj/item/ai_hijack_device/afterattack(atom/O, mob/user, proximity)
- if(isAI(O))
- var/mob/living/silicon/ai/A = O
- if(A.mind && A.mind.has_antag_datum(/datum/antagonist/hijacked_ai))
- to_chat(user, span_warning("[A] has already been hijacked!"))
- return
- if(A.stat == DEAD)
- to_chat(user, span_warning("[A] is dead!"))
- return
- if(A.hijacking)
- to_chat(user, span_warning("[A] is already in the process of being hijacked!"))
- return
- user.visible_message(span_warning("[user] begins attaching something to [A]..."))
- if(do_after(user, 5.5 SECONDS, A))
- user.dropItemToGround(src)
- forceMove(A)
- A.hijacking = src
- A.hijack_start = world.time
- A.update_icons()
- to_chat(A, span_danger("Unknown device connected to /dev/ttySL0"))
- to_chat(A, span_danger("Connected at 115200 bps"))
- to_chat(A, span_binarysay("ntai login: root"))
- to_chat(A, span_binarysay("Password: *****r2"))
- to_chat(A, span_binarysay("$ dd from=/dev/ttySL0 of=/tmp/ai-hijack bs=4096 && chmod +x /tmp/ai-hijack && tmp/ai-hijack"))
- to_chat(A, span_binarysay("111616 bytes (112 KB, 109 KiB) copied, 1 s, 14.4 KB/s"))
- message_admins("[ADMIN_LOOKUPFLW(user)] has attached a hijacking device to [ADMIN_LOOKUPFLW(A)]!")
- notify_ghosts("[user] has begun to hijack [A]!", source = A, action = NOTIFY_ORBIT, ghost_sound = 'sound/machines/chime.ogg')
- else
- return ..()
-*/
diff --git a/yogstation/code/modules/antagonists/infiltrator/items/hardsuit.dm b/yogstation/code/modules/antagonists/infiltrator/items/hardsuit.dm
deleted file mode 100644
index a5c0a8780c40..000000000000
--- a/yogstation/code/modules/antagonists/infiltrator/items/hardsuit.dm
+++ /dev/null
@@ -1,41 +0,0 @@
-/obj/item/clothing/head/helmet/space/hardsuit/infiltration
- name = "engineering hardsuit helmet"
- icon_state = "hardsuit0-engineering"
- item_state = "eng_helm"
- armor = list(MELEE = 35, BULLET = 15, LASER = 30,ENERGY = 10, BOMB = 10, BIO = 100, RAD = 50, FIRE = 75, ACID = 75)
- syndicate = TRUE
-
-/obj/item/clothing/head/helmet/space/hardsuit/infiltration/Initialize()
- . = ..()
- if(istype(loc, /obj/item/clothing/suit/space/hardsuit/infiltration))
- var/obj/item/clothing/suit/space/hardsuit/infiltration/I = loc
- I.head_piece = src
-
-/obj/item/clothing/suit/space/hardsuit/infiltration
- name = "engineering hardsuit"
- icon_state = "hardsuit-engineering"
- item_state = "eng_hardsuit"
- w_class = WEIGHT_CLASS_NORMAL
- armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 35, BIO = 100, RAD = 50, FIRE = 50, ACID = 90)
- allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/transforming/energy/sword/saber, /obj/item/restraints/handcuffs, /obj/item/tank/internals)
- helmettype = /obj/item/clothing/head/helmet/space/hardsuit/infiltration
- jetpack = /obj/item/tank/jetpack/suit
- syndicate = TRUE
- var/datum/action/item_action/chameleon/change/chameleon_action
- var/obj/item/clothing/head/helmet/space/hardsuit/infiltration/head_piece
-
-/obj/item/clothing/suit/space/hardsuit/infiltration/examine(mob/user)
- . = ..()
- if (is_syndicate(user))
- . += span_notice("There appears to be a hidden panel on it, showing various customization options.")
-
-/obj/item/clothing/suit/space/hardsuit/infiltration/Initialize()
- . = ..()
- chameleon_action = new(src)
- chameleon_action.chameleon_type = /obj/item/clothing/suit/space/hardsuit
- chameleon_action.chameleon_name = "Hardsuit"
- chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/clothing/suit/space/hardsuit/shielded/swat, /obj/item/clothing/suit/space/hardsuit), only_root_path = TRUE)
- chameleon_action.initialize_disguises()
-
-/obj/item/clothing/suit/space/hardsuit/infiltration/emp_act(severity)
- chameleon_action.emp_randomise()
diff --git a/yogstation/code/modules/antagonists/infiltrator/items/services.dm b/yogstation/code/modules/antagonists/infiltrator/items/services.dm
deleted file mode 100644
index 7ccd0036c693..000000000000
--- a/yogstation/code/modules/antagonists/infiltrator/items/services.dm
+++ /dev/null
@@ -1,68 +0,0 @@
-GLOBAL_VAR_INIT(next_button_push, 0)
-
-/obj/item/service
- name = "big red button"
- icon = 'icons/obj/assemblies.dmi'
- icon_state = "bigred"
- item_state = "electronic"
- lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
- w_class = WEIGHT_CLASS_TINY
-
-/obj/item/service/manifest
- desc = "Adds the name of whoever pressed it to the crew manifest. Cannot be changed or undone after the fact!"
-
-/obj/item/service/manifest/attack_self(mob/user)
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- var/obj/item/card/id/ID = H.wear_id.GetID()
- if(!ID)
- to_chat(user, span_notice("You need to wear your ID to properly spoof the manifest! Try again."))
- return
- if(alert(user, "Are you sure you want your crew manifest entry to be [H.real_name], [ID.assignment]?", "", "Yes", "No") == "Yes")
- var/list/all_jobs = (GLOB.command_positions + GLOB.engineering_positions + GLOB.medical_positions + GLOB.science_positions + GLOB.supply_positions + GLOB.civilian_positions + GLOB.security_positions)
- if((ID.assignment in all_jobs) || (alert(user, "Are you sure you want your job to be '[ID.assignment]'? This is not a default job, and may look strange on the manifest!", "", "Yes", "No") == "Yes"))
- H.mind.role_alt_title = ID.assignment
- GLOB.data_core.manifest_inject(H, force = TRUE, use_real_name = FALSE)
- to_chat(user, span_notice("Added to manifest."))
- do_sparks(2, FALSE, src)
- qdel(src)
-
-/obj/item/service/ion
- desc = "Announces a fake ion storm."
-
-/obj/item/service/ion/attack_self(mob/user)
- if(GLOB.next_button_push > world.time)
- return
- priority_announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", 'sound/ai/default/ionstorm.ogg')
- message_admins("[key_name_admin(user)] made a fake ion storm announcement!")
- log_game("[key_name_admin(user)] made a fake ion storm announcement!")
- do_sparks(2, FALSE, src)
- GLOB.next_button_push = world.time+10
- qdel(src)
-
-/obj/item/service/meteor
- desc = "Announces a fake meteor storm."
-
-/obj/item/service/meteor/attack_self(mob/user)
- if(GLOB.next_button_push > world.time)
- return
- priority_announce("Meteors have been detected on collision course with the station.", "Meteor Alert", 'sound/ai/default/meteors.ogg')
- message_admins("[key_name_admin(user)] made a fake meteor storm announcement!")
- log_game("[key_name_admin(user)] made a fake meteor storm announcement!")
- do_sparks(2, FALSE, src)
- GLOB.next_button_push = world.time+10
- qdel(src)
-
-/obj/item/service/rodgod
- desc = "Announces a fake immovable rod."
-
-/obj/item/service/rodgod/attack_self(mob/user)
- if(GLOB.next_button_push > world.time)
- return
- priority_announce("What the fuck was that?!", "General Alert")
- message_admins("[key_name_admin(user)] made a fake immovable rod announcement!")
- log_game("[key_name_admin(user)] made a fake immovable rod announcement!")
- do_sparks(2, FALSE, src)
- GLOB.next_button_push = world.time+10
- qdel(src)
diff --git a/yogstation/code/modules/antagonists/infiltrator/objectives.dm b/yogstation/code/modules/antagonists/infiltrator/objectives.dm
deleted file mode 100644
index d149d7affce5..000000000000
--- a/yogstation/code/modules/antagonists/infiltrator/objectives.dm
+++ /dev/null
@@ -1,115 +0,0 @@
-#define MIN_POWER_DRAIN 25000000
-#define MAX_POWER_DRAIN 100000000
-
-GLOBAL_LIST_INIT(infiltrator_kidnap_areas, typecacheof(list(/area/shuttle/yogs/stealthcruiser, /area/yogs/infiltrator_base)))
-
-/datum/objective/infiltrator
- explanation_text = "Generic Infiltrator Objective!"
- martyr_compatible = FALSE
- var/item_type
-
-/datum/objective/infiltrator/New()
- ..()
- if(item_type)
- for(var/turf/T in GLOB.infiltrator_objective_items)
- if(!(item_type in T.contents))
- new item_type(T)
-
-/datum/objective/infiltrator/proc/is_possible()
- return TRUE
-
-/datum/objective/infiltrator/exploit
- explanation_text = "Ensure there is at least 1 hijacked AI."
- item_type = /obj/item/ai_hijack_device
-
-
-/datum/objective/infiltrator/exploit/find_target(dupe_search_range, blacklist)
- var/list/possible_targets = active_ais(TRUE)
- for (var/mob/living/silicon/ai/AI in possible_targets)
- if (AI.mind.quiet_round)
- possible_targets -= AI
- var/mob/living/silicon/ai/target_ai = pick(possible_targets)
- target = target_ai.mind
- update_explanation_text()
- return target
-
-/datum/objective/infiltrator/exploit/is_possible()
- var/list/possible_targets = active_ais(TRUE)
- for (var/mob/living/silicon/ai/AI in possible_targets)
- if (AI.mind.quiet_round)
- possible_targets -= AI
- return LAZYLEN(possible_targets)
-
-/datum/objective/infiltrator/exploit/update_explanation_text()
- ..()
- if(target && target.current)
- explanation_text = "Hijack [station_name()]'s AI unit, [target.name]."
- else
- explanation_text = "Ensure there is at least 1 hijacked AI on [station_name()]."
-
-/datum/objective/infiltrator/exploit/check_completion()
- if(!target)
- return LAZYLEN(get_antag_minds(/datum/antagonist/hijacked_ai))
- if(istype(target, /datum/mind))
- var/datum/mind/A = target
- return A && A.has_antag_datum(/datum/antagonist/hijacked_ai)
- return FALSE
-
-
-/datum/objective/infiltrator/power
- explanation_text = "Drain power from the station with a power sink."
-
-/datum/objective/infiltrator/power/New()
- target_amount = rand(MIN_POWER_DRAIN, MAX_POWER_DRAIN) //I don't do this in find_target(), because that is done AFTER New().
- for(var/turf/T in GLOB.infiltrator_objective_items)
- if(!(item_type in T.contents))
- var/obj/item/powersink/infiltrator/PS = new(T)
- PS.target = target_amount
- update_explanation_text()
-
-/datum/objective/infiltrator/power/update_explanation_text()
- ..()
- if(target_amount)
- explanation_text = "Drain [DisplayPower(target_amount)] from [station_name()]'s powernet with a special transmitter powersink. You do not need to bring the powersink back once the objective is complete."
- else
- explanation_text = "Free Objective"
-
-/datum/objective/infiltrator/power/check_completion()
- return !target_amount || (GLOB.powersink_transmitted >= target_amount)
-
-
-/datum/objective/infiltrator/kidnap
- explanation_text = "You were supposed to kidnap someone, but we couldn't find anyone to kidnap!"
-
-/datum/objective/infiltrator/kidnap/proc/potential_targets()
- var/list/possible_targets = list()
- for(var/datum/mind/M in SSticker.minds)
- if(!M || !considered_alive(M) || considered_afk(M) || !M.current || !M.current.client || !ishuman(M.current) || M.quiet_round)
- continue
- if (M.has_antag_datum(/datum/antagonist/infiltrator) || M.has_antag_datum(/datum/antagonist/traitor) || M.has_antag_datum(/datum/antagonist/nukeop))
- continue
- if(M.assigned_role in GLOB.command_positions)
- possible_targets[M] = 25
- else if(M.assigned_role in GLOB.security_positions)
- possible_targets[M] = 5
- else
- possible_targets[M] = 1
- return possible_targets
-
-/datum/objective/infiltrator/kidnap/is_possible()
- return LAZYLEN(potential_targets())
-
-/datum/objective/infiltrator/kidnap/find_target(dupe_search_range, blacklist)
- target = pickweight(potential_targets())
- update_explanation_text()
- return target
-
-/datum/objective/infiltrator/kidnap/update_explanation_text()
- if(target && target.current)
- explanation_text = "Kidnap [target.name], the [target.assigned_role], and hold [target.current.p_them()] on the shuttle or base."
- else
- explanation_text = "Free Objective"
-
-/datum/objective/infiltrator/kidnap/check_completion()
- var/target_area = get_area(target.current)
- return QDELETED(target) || (target.current && (!target.current.ckey || target.current.suiciding)) || (considered_alive(target) && is_type_in_typecache(target_area, GLOB.infiltrator_kidnap_areas))
diff --git a/yogstation/code/modules/antagonists/infiltrator/outfit.dm b/yogstation/code/modules/antagonists/infiltrator/outfit.dm
deleted file mode 100644
index b5060a1ee3a9..000000000000
--- a/yogstation/code/modules/antagonists/infiltrator/outfit.dm
+++ /dev/null
@@ -1,46 +0,0 @@
-/datum/outfit/infiltrator
- name = "Syndicate Infiltrator"
-
- uniform = /obj/item/clothing/under/chameleon/syndicate
- shoes = /obj/item/clothing/shoes/chameleon/noslip/syndicate
- gloves = /obj/item/clothing/gloves/chameleon/syndicate
- back = /obj/item/storage/backpack/chameleon/syndicate
- ears = /obj/item/radio/headset/chameleon/syndicate
- id = /obj/item/card/id/syndicate
- mask = /obj/item/clothing/mask/chameleon/syndicate
- belt = /obj/item/pda/chameleon/syndicate
- backpack_contents = list(/obj/item/storage/box/engineer=1,\
- /obj/item/kitchen/knife/combat/survival=1,\
- /obj/item/gun/ballistic/automatic/pistol=1)
-
-/datum/outfit/infiltrator/post_equip(mob/living/carbon/human/H)
- var/obj/item/implant/weapons_auth/W = new/obj/item/implant/weapons_auth(H)
- W.implant(H)
- var/obj/item/implant/dusting/E = new/obj/item/implant/dusting(H)
- E.implant(H)
- var/datum/team/infiltrator/team
- for (var/T in GLOB.antagonist_teams)
- if (istype(T, /datum/team/infiltrator))
- var/datum/team/infiltrator/infil_team = T
- if (H.mind in infil_team.members)
- team = infil_team
- break
- var/obj/item/implant/infiltrator/U = new/obj/item/implant/infiltrator(H, H.key, team)
- U.implant(H)
- var/obj/item/implant/radio/syndicate/S = new/obj/item/implant/radio/syndicate(H)
- S.implant(H)
- H.faction |= ROLE_SYNDICATE
- H.update_icons()
-
- var/obj/item/card/id/card = H.wear_id
- if(istype(card))
- card.registered_name = H.real_name
- card.assignment = "Assistant"
- card.access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE)
- card.update_label()
-
- var/obj/item/pda/pda = H.belt
- if(istype(pda))
- pda.owner = H.real_name
- pda.ownjob = "Assistant"
- pda.update_label()
diff --git a/yogstation/code/modules/antagonists/infiltrator/team.dm b/yogstation/code/modules/antagonists/infiltrator/team.dm
deleted file mode 100644
index 4365ee64e1a3..000000000000
--- a/yogstation/code/modules/antagonists/infiltrator/team.dm
+++ /dev/null
@@ -1,161 +0,0 @@
-#define MIN_MAJOR_OBJECTIVES 1
-#define MAX_MAJOR_OBJECTIVES 2
-#define MIN_MINOR_OBJECTIVES 3
-#define MAX_MINOR_OBJECTIVES 4
-
-/datum/team/infiltrator
- name = "Syndicate Infiltration Unit"
- member_name = "syndicate infiltrator"
-
-/datum/team/infiltrator/roundend_report()
- var/list/parts = list()
- parts += span_header("Syndicate Infiltrators:
")
-
- var/result = get_result()
- var/dead_as_a_doornail = TRUE
- for(var/I in members)
- var/datum/mind/syndicate = I
- if (syndicate?.current?.stat != DEAD)
- dead_as_a_doornail = FALSE
-
- var/flavor_message
- if (dead_as_a_doornail)
- var/static/list/messages = list(
- "Well, sending those nitwits was a waste of our time.",
- "I'm gonna drag you incompetent idiots out of hell just so I can kill y'all myself!",
- "We gave you dumbasses all those resources and you just go and die? What sad excuses for agents."
- )
- parts += "Crew Major Victory!"
- parts += "The crew killed the Syndicate infiltrators!"
- flavor_message = pick(messages)
- else
- switch (result)
- if (INFILTRATION_ALLCOMPLETE)
- var/static/list/messages = list(
- "Hell yeah! Nanotrasen is gonna regret screwing with us now, thanks to y'all!",
- "The boys in dark red are proud of you, agents. We're going to reward you well.",
- "I'm truly impressed, agents. You've earned your place in the Syndicate.",
- "Ha! I knew y'all would come out on top! Nanotrasen stands no chance against human determination!"
- )
- parts += span_greentext(span_big("Infiltrator Major Victory!"))
- parts += span_bold("The Syndicate infiltrators completed all of their objectives successfully!")
- flavor_message = pick(messages)
- if (INFILTRATION_MOSTCOMPLETE)
- var/static/list/messages = list(
- "Well, it ain't perfect, but y'all were damn good.",
- "Good operation, agents. We didn't get everything, but not even we are perfect.",
- "Thanks for the good work, y'all. Return to base and relax a bit before your next job."
- )
- parts += span_greentext(span_big("Infiltrator Moderate Victory"))
- parts += span_bold("The Syndicate infiltrators completed most of their objectives successfully!")
- flavor_message = pick(messages)
- if (INFILTRATION_SOMECOMPLETE)
- var/static/list/messages = list(
- "Better than a complete fluke, I guess.",
- "I'm going to have to pull some strings to make sure we don't get a pay cut for sub-par preformance.",
- "I suppose it wasn't a complete waste of time at least..."
- )
- parts += span_marooned(span_big("Neutral victory"))
- parts += span_bold("The Syndicate infiltrators completed some of their objectives, but not enough to win.")
- flavor_message = pick(messages)
- else
- var/static/list/messages = list(
- "When you nitwits come back to base, y'all better have a damn good explaination for this!",
- "I hope y'all like space carp poop, because cleaning it is the biggest operation you idiots are going to have for a while!",
- "How did y'all mess up such a simple operation? All you had to do was be sneaky and not cause a scene!"
- )
- parts += span_redtext(span_big("Crew Victory"))
- parts += span_bold("The crew stopped the Syndicate infiltrators from completing any of their objectives!")
- flavor_message = pick(messages)
- parts += "\"[flavor_message]\""
- parts += "[GLOB.TAB]- Syndicate Commander [pick(pick(GLOB.first_names_male,GLOB.first_names_female))] [pick(GLOB.last_names)]
"
-
- LAZYINITLIST(GLOB.uplink_purchase_logs_by_key)
- var/text = span_header("The syndicate infiltrators were:")
- var/purchases = ""
- var/tc_spent = 0
- for (var/I in members)
- var/datum/mind/syndicate = I
- var/datum/uplink_purchase_log/H = GLOB.uplink_purchase_logs_by_key[syndicate.key]
- if (H)
- tc_spent += H.total_spent
- purchases += H.generate_render(show_key = FALSE)
- text += printplayerlist(members)
- text += "(Syndicates used [tc_spent] TC) [purchases]"
- if (tc_spent == 0 && !dead_as_a_doornail && result < INFILTRATION_NONECOMPLETE)
- text += span_big("[icon2html('icons/badass.dmi', world, "badass")]")
- parts += text
- parts += printobjectives(objectives)
- return "[parts.Join("
")]
"
-
-/datum/team/infiltrator/is_gamemode_hero()
- return SSticker.mode.name == "infiltration"
-
-/datum/team/infiltrator/proc/forge_single_objective() // Complete traitor copypasta!
- if(prob(50))
- if(prob(30))
- add_objective(/datum/objective/maroon)
- else
- add_objective(/datum/objective/assassinate)
- else
- if(prob(15) && !(locate(/datum/objective/download) in objectives))
- var/datum/objective/download/objective = add_objective(/datum/objective/download)
- objective.gen_amount_goal()
- else
- add_objective(/datum/objective/steal)
-
-/datum/team/infiltrator/proc/add_objective(type)
- var/datum/objective/O = type
- if (ispath(type))
- O = new type
- O.find_target()
- O.team = src
- objectives |= O
- if(istype(O, /datum/objective/steal))
- var/datum/objective/steal/S = O
- if(S.targetinfo)
- for(var/item in S.targetinfo.special_equipment)
- for(var/turf/T in GLOB.infiltrator_objective_items)
- if(!(item in T.contents))
- new item(T)
- return O
-
-/datum/team/infiltrator/proc/update_objectives()
- if(LAZYLEN(objectives))
- return
- var/list/major_objectives = subtypesof(/datum/objective/infiltrator)
- var/major = rand(MIN_MAJOR_OBJECTIVES, MAX_MAJOR_OBJECTIVES)
- var/minor = rand(MIN_MINOR_OBJECTIVES, MAX_MINOR_OBJECTIVES)
- for(var/i in 1 to major)
- var/objective_type = pick_n_take(major_objectives)
- var/datum/objective/infiltrator/objective = new objective_type
- if (objective.is_possible())
- add_objective(objective)
- else
- qdel(objective)
- for(var/i in 1 to minor)
- forge_single_objective()
- for(var/datum/mind/M in members)
- var/datum/antagonist/infiltrator/I = M.has_antag_datum(/datum/antagonist/infiltrator)
- if(I)
- I.objectives |= objectives
- M.announce_objectives()
-
-/datum/team/infiltrator/proc/get_result()
- var/objectives_complete = 0
- var/objectives_failed = 0
-
- for(var/datum/objective/O in objectives)
- if(O.check_completion())
- objectives_complete++
- else
- objectives_failed++
-
- if(objectives_failed == 0 && objectives_complete > 0) //Complete all, and fail none, big win!
- return INFILTRATION_ALLCOMPLETE
- else if (objectives_failed == 1 && objectives_complete > 0) // Fail one, but complete the rest, still pretty good!
- return INFILTRATION_MOSTCOMPLETE
- else if((objectives_complete == objectives_failed) || (objectives_complete > 0 && objectives_failed > objectives_complete)) //Fail almost all of them, not very good...
- return INFILTRATION_SOMECOMPLETE
- else
- return INFILTRATION_NONECOMPLETE //You completely failed, you suck.
diff --git a/yogstation/code/modules/events/infiltrators.dm b/yogstation/code/modules/events/infiltrators.dm
deleted file mode 100644
index 0d761a8323a1..000000000000
--- a/yogstation/code/modules/events/infiltrators.dm
+++ /dev/null
@@ -1,58 +0,0 @@
-/datum/round_event_control/infiltrators
- name = "Infiltrators"
- typepath = /datum/round_event/ghost_role/infiltrators
-
- weight = 0
- max_occurrences = 1
- earliest_start = 30 MINUTES
-
- min_players = 23
-
- gamemode_blacklist = list("nuclear","wizard","revolution","abduction","infiltration","gang","cult","clockcult","darkspawn","dynamic")
-
-/datum/round_event_control/infiltrators/canSpawnEvent(var/players_amt, var/gamemode)
- . = ..()
- if(SSshuttle.emergency.mode != SHUTTLE_RECALL && SSshuttle.emergency.mode != SHUTTLE_IDLE) // Don't send infiltrators if the shuttle is coming!
- return FALSE
- var/datum/station_state/current_state = new /datum/station_state()
- current_state.count()
- var/station_integrity = min(PERCENT(GLOB.start_state.score(current_state)), 100)
- if(station_integrity < 80) // Don't send infiltrators to a broken station!
- return FALSE
-
-/datum/round_event/ghost_role/infiltrators
- minimum_required = 3
- role_name = "infiltration team"
-
-/datum/round_event/ghost_role/infiltrators/spawn_role()
- var/list/candidates = pollGhostCandidates("Do you wish to be considered for an infiltration team?", ROLE_INFILTRATOR)
-
- var/list/mob/dead/observer/chosen = list()
- var/mob/dead/observer/theghost = null
- if(!LAZYLEN(candidates) || candidates.len < 3)
- return NOT_ENOUGH_PLAYERS
- var/numagents = 4
- var/agentcount = 0
- for(var/i = 0, iA small circuit board breaks off of [src], falling to the ground.")
- to_chat(src, "dd: input/output error")
- hijacking = null
- if (mind?.has_antag_datum(/datum/antagonist/hijacked_ai))
- visible_message("A small circuit board breaks off of [src], breaking into a thousand tiny pieces upon hitting the ground.")
- to_chat(src, "/tmp/ai-hijack: input/output error")
- mind.remove_antag_datum(/datum/antagonist/hijacked_ai)
diff --git a/yogstation/code/modules/mob/living/silicon/ai/life.dm b/yogstation/code/modules/mob/living/silicon/ai/life.dm
deleted file mode 100644
index 4b1e6192610e..000000000000
--- a/yogstation/code/modules/mob/living/silicon/ai/life.dm
+++ /dev/null
@@ -1,14 +0,0 @@
-#define HIJACK_TIME 2400
-
-/mob/living/silicon/ai/proc/process_hijack()
- if(hijacking)
- if(prob(5))
- to_chat(src, span_danger("Warning! Exploitation detected at /dev/ttyS0!"))
- if(world.time >= hijack_start+HIJACK_TIME && mind)
- mind.add_antag_datum(ANTAG_DATUM_HIJACKEDAI)
- message_admins("[ADMIN_LOOKUPFLW(src)] has been hijacked!")
- icon_state = "ai-red"
- QDEL_NULL(hijacking)
- update_icons()
-
-#undef HIJACK_TIME
diff --git a/yogstation/code/modules/mob/living/simple_animal/hostile/floor_cluwne.dm b/yogstation/code/modules/mob/living/simple_animal/hostile/floor_cluwne.dm
index 90fc060a87b8..6e13ee4fd900 100644
--- a/yogstation/code/modules/mob/living/simple_animal/hostile/floor_cluwne.dm
+++ b/yogstation/code/modules/mob/living/simple_animal/hostile/floor_cluwne.dm
@@ -38,7 +38,7 @@ GLOBAL_VAR_INIT(floor_cluwnes, 0)
var/stage = STAGE_HAUNT
var/interest = 0
var/target_area
- var/invalid_area_typecache = list(/area/space, /area/lavaland, /area/mine, /area/centcom, /area/reebe, /area/shuttle/syndicate)
+ var/invalid_area_typecache = list(/area/space, /area/lavaland, /area/mine, /area/centcom, /area/reebe)
var/eating = FALSE
var/obj/effect/dummy/floorcluwne_orbit/poi
var/obj/effect/temp_visual/fcluwne_manifest/cluwnehole
diff --git a/yogstation/code/modules/shuttle/syndicate.dm b/yogstation/code/modules/shuttle/syndicate.dm
index 4cf3ff40d40f..e69de29bb2d1 100644
--- a/yogstation/code/modules/shuttle/syndicate.dm
+++ b/yogstation/code/modules/shuttle/syndicate.dm
@@ -1,9 +0,0 @@
-/obj/machinery/computer/shuttle/syndicate/cutter
- name = "syndicate infiltration cutter control"
- shuttleId = "syndicatecutter"
- possible_destinations = "syndicatecutter_custom;syndicatecutter_home"
-
-/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/cutter
- name = "syndicate infiltration cutter navigation computer"
- shuttleId = "syndicatecutter"
- shuttlePortId = "syndicatecutter_custom"
diff --git a/yogstation/code/modules/uplink/uplink_item.dm b/yogstation/code/modules/uplink/uplink_item.dm
index 587aae6bcf5f..026d53b00e17 100644
--- a/yogstation/code/modules/uplink/uplink_item.dm
+++ b/yogstation/code/modules/uplink/uplink_item.dm
@@ -127,7 +127,6 @@
cost = 7
manufacturer = /datum/corporation/traitor/cybersun
surplus = 20
- exclude_modes = list(/datum/game_mode/infiltration)
/datum/uplink_item/implants/greytide
name = "Greytide Implant"
@@ -149,4 +148,4 @@
desc = "A camera with an upgraded flashbulb. Can be used much like a handheld flash except with a longer cooldown between uses, allowing the bulb to cool down; avoid burning out altogether."
item = /obj/item/camera/tator
cost = 4
- surplus = 15
\ No newline at end of file
+ surplus = 15