diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm
index d1a357e5a7..94ab50557c 100644
--- a/code/game/gamemodes/antag_spawner.dm
+++ b/code/game/gamemodes/antag_spawner.dm
@@ -292,3 +292,55 @@
veil_msg = "You sense an adorable presence lurking just beyond the veil..."
objective_verb = "Hug and Tickle"
demon_type = /mob/living/simple_animal/slaughter/laughter
+
+
+////////////Syndicate Cortical Borer
+obj/item/weapon/antag_spawner/syndi_borer
+ name = "syndicate brain-slug container"
+ desc = "Releases a modified cortical borer to assist the user."
+ icon_state = "locator"
+
+obj/item/weapon/antag_spawner/syndi_borer/spawn_antag(client/C, turf/T, mob/owner)
+ var/mob/living/simple_animal/borer/syndi_borer/B = new /mob/living/simple_animal/borer/syndi_borer(T)
+
+ B.key = C.key
+ if (owner)
+ B.owner = owner
+ B.faction = B.faction | owner.faction.Copy()
+
+ B.mind.assigned_role = B.name
+ B.mind.special_role = B.name
+ ticker.mode.traitors += B.mind
+ var/datum/objective/syndi_borer/new_objective
+ new_objective = new /datum/objective/syndi_borer
+ new_objective.owner = B.mind
+ new_objective.target = owner.mind
+ B.mind.objectives += new_objective
+
+ to_chat(B, "You are awake at last! Seek out whoever released you and aid them as best you can!")
+ if(new_objective)
+ to_chat(B, "Objective #[1]: [new_objective.explanation_text]")
+
+/obj/item/weapon/antag_spawner/syndi_borer/proc/check_usability(mob/user)
+ if(used)
+ to_chat(user, "[src] appears to be empty!")
+ return 0
+ return 1
+
+/obj/item/weapon/antag_spawner/syndi_borer/attack_self(mob/user)
+ if(!(check_usability(user)))
+ return
+
+ var/list/borer_candidates = pollCandidatesForMob("Do you want to play as a syndicate cortical borer?", ROLE_BORER, null, ROLE_BORER, 150, src)
+ if(borer_candidates.len)
+ if(!(check_usability(user)))
+ return
+ used = 1
+ var/mob/dead/observer/theghost = pick(borer_candidates)
+ spawn_antag(theghost.client, get_turf(src), user)
+ var/datum/effect_system/spark_spread/S = new /datum/effect_system/spark_spread
+ S.set_up(4, 1, src)
+ S.start()
+ qdel(src)
+ else
+ to_chat(user, "Unable to connect to release specimen. Please wait and try again later or use the container on your uplink to get your points refunded.")
diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm
index a4dda8145f..a44160619f 100644
--- a/code/game/gamemodes/miniantags/borer/borer.dm
+++ b/code/game/gamemodes/miniantags/borer/borer.dm
@@ -110,10 +110,14 @@ var/total_borer_hosts_needed = 10
var/datum/action/innate/borer/punish_victim/punish_victim_action = new
var/datum/action/innate/borer/jumpstart_host/jumpstart_host_action = new
+ var/is_team_borer = TRUE
+ var/borer_alert = "Become a cortical borer? (Warning, You can no longer be cloned!)"
+
/mob/living/simple_animal/borer/Initialize(mapload, gen=1)
..()
generation = gen
- notify_ghosts("A cortical borer has been created in [get_area(src)]!", enter_link = "(Click to enter)", source = src, action = NOTIFY_ATTACK)
+ if(is_team_borer)
+ notify_ghosts("A cortical borer has been created in [get_area(src)]!", enter_link = "(Click to enter)", source = src, action = NOTIFY_ATTACK)
real_name = "Cortical Borer [rand(1000,9999)]"
truename = "[borer_names[min(generation, borer_names.len)]] [rand(1000,9999)]"
borer_chems += /datum/borer_chem/epinephrine
@@ -128,8 +132,9 @@ var/total_borer_hosts_needed = 10
//borer_chems += /datum/borer_chem/creagent
borer_chems += /datum/borer_chem/ethanol
borer_chems += /datum/borer_chem/rezadone
-
- borers += src
+
+ if(is_team_borer)
+ borers += src
GrantBorerActions()
@@ -146,7 +151,7 @@ var/total_borer_hosts_needed = 10
return
if(stat != CONSCIOUS)
return
- var/be_borer = alert("Become a cortical borer? (Warning, You can no longer be cloned!)",,"Yes","No")
+ var/be_borer = alert(borer_alert,,"Yes","No")
if(be_borer == "No" || !src || QDELETED(src))
return
if(key)
diff --git a/code/game/gamemodes/miniantags/borer/syndi_borer.dm b/code/game/gamemodes/miniantags/borer/syndi_borer.dm
new file mode 100644
index 0000000000..0678970814
--- /dev/null
+++ b/code/game/gamemodes/miniantags/borer/syndi_borer.dm
@@ -0,0 +1,19 @@
+/mob/living/simple_animal/borer/syndi_borer
+ var/mob/owner = null
+ borer_alert = "Serve as a syndicate cortical borer? (Warning, You can no longer be cloned!)"
+
+/mob/living/simple_animal/borer/syndi_borer/Initialize(mapload, gen=1)
+ ..()
+ real_name = "Syndicate Borer [rand(1000,9999)]"
+ truename = "[borer_names[min(generation, borer_names.len)]] [rand(1000,9999)]"
+
+ GrantBorerActions()
+ make_larvae_action.Remove(src)
+
+/mob/living/simple_animal/borer/syndi_borer/GrantControlActions()
+ talk_to_brain_action.Grant(victim)
+ give_back_control_action.Grant(victim)
+
+/mob/living/simple_animal/borer/syndi_borer/RemoveControlActions()
+ talk_to_brain_action.Remove(victim)
+ give_back_control_action.Remove(victim)
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index e4b44fa4aa..43244f8d32 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -902,4 +902,16 @@ var/global/list/possible_items_special = list()
command_staff_only = TRUE
+//Syndicate borer objective, relies on their owner getting a greentext, no matter if they themselves did anything really.
+/datum/objective/syndi_borer
+ explanation_text = "You are a modified syndicate cortical borer, assist your owner with their objectives."
+ martyr_compatible = 1
+/datum/objective/syndi_borer/check_completion()
+ if(target)
+ for(var/datum/objective/objective in target.objectives)
+ if(!objective.check_completion())
+ return 0
+ return 1
+ else
+ return 1 //Not sure if we should greentext if we somehow don't even have an owner.
diff --git a/code/modules/uplink/uplink_item.dm b/code/modules/uplink/uplink_item.dm
index 67fc9ea1b5..9ab5d9bc3b 100644
--- a/code/modules/uplink/uplink_item.dm
+++ b/code/modules/uplink/uplink_item.dm
@@ -822,6 +822,15 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
cost = 1
surplus = 1
+/datum/uplink_item/stealthy_tools/syndi_borer
+ name = "Syndicate Brain Slug"
+ desc = "A small cortical borer, modified to be completely loyal to the owner. \
+ Genetically infertile, these brain slugs can assist medically in a support role, or take direct action \
+ to assist their host."
+ item = /obj/item/weapon/antag_spawner/syndi_borer
+ refundable = TRUE
+ cost = 5
+
//Space Suits and Hardsuits
/datum/uplink_item/suits
category = "Space Suits and Hardsuits"
diff --git a/tgstation.dme b/tgstation.dme
index 46d56db0e0..2494eb4489 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -489,6 +489,7 @@
#include "code\game\gamemodes\miniantags\borer\borer_event.dm"
#include "code\game\gamemodes\miniantags\borer\borer_html.dm"
#include "code\game\gamemodes\miniantags\borer\borer_topic.dm"
+#include "code\game\gamemodes\miniantags\borer\syndi_borer.dm"
#include "code\game\gamemodes\miniantags\bot_swarm\swarmer.dm"
#include "code\game\gamemodes\miniantags\bot_swarm\swarmer_event.dm"
#include "code\game\gamemodes\miniantags\monkey\monkey.dm"