diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 044336e65d77..d8a308a4c85a 100644
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -259,22 +259,25 @@ GLOBAL_LIST_EMPTY(PDAs)
if (cartridge)
if(cartridge.bot_access_flags)
dat += "
Bots Access"
- if (cartridge.access & CART_JANITOR)
+ if(cartridge.access & CART_JANITOR)
dat += "
Custodial Locator"
- if (istype(cartridge.radio))
+ if(istype(cartridge.radio))
dat += "
Signaler System"
- if (cartridge.access & CART_NEWSCASTER)
+ if(cartridge.access & CART_NEWSCASTER)
dat += "
Newscaster Access "
- if (cartridge.access & CART_REAGENT_SCANNER)
+ if(cartridge.access & CART_REAGENT_SCANNER)
dat += "
[scanmode == 3 ? "Disable" : "Enable"] Reagent Scanner"
- if (cartridge.access & CART_ENGINE)
+ if(cartridge.access & CART_ENGINE)
dat += "
[scanmode == 4 ? "Disable" : "Enable"] Halogen Counter"
- if (cartridge.access & CART_ATMOS)
+ if(cartridge.access & CART_ATMOS)
dat += "
[scanmode == 5 ? "Disable" : "Enable"] Gas Scanner"
- if (cartridge.access & CART_REMOTE_DOOR)
+ if(cartridge.access & CART_REMOTE_DOOR)
dat += "
Toggle Remote Door"
- if (cartridge.access & CART_DRONEPHONE)
+ if(cartridge.access & CART_DRONEPHONE)
dat += "
Drone Phone"
+ if(cartridge.access & CART_MINDSLAVE)
+ dat += "
Slavemaster 2000"
+
dat += "
Atmospheric Scan"
dat += "
[fon ? "Disable" : "Enable"] Flashlight"
if (pai)
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
index 318aaa9e2465..f4f3ca8d0703 100644
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ b/code/game/objects/items/devices/PDA/cart.dm
@@ -13,6 +13,7 @@
#define CART_QUARTERMASTER (1<<12)
#define CART_HYDROPONICS (1<<13)
#define CART_DRONEPHONE (1<<14)
+#define CART_MINDSLAVE (1<<15)
/obj/item/cartridge
@@ -190,6 +191,12 @@
..()
radio = new(src)
+/obj/item/cartridge/slavemaster
+ name = "\improper Slavemaster-2000 cartridge"
+ var/obj/item/implant/mindslave/imp = null
+ access = CART_MINDSLAVE
+
+
/obj/item/cartridge/proc/post_status(command, data1, data2)
var/datum/radio_frequency/frequency = SSradio.return_frequency(FREQ_STATUS_DISPLAYS)
@@ -448,6 +455,15 @@ Code:
menu += "#[SO.id] - [SO.pack.name] requested by [SO.orderer]"
menu += "Upgrade NOW to Space Parts & Space Vendors PLUS for full remote order control and inventory management."
+ if(48) //slavermaster2000
+ menu = "
Slave Controller
"
+
+ menu += "
Available Slaves:
"
+ if(src:imp.imp_in)
+ menu += ""
+ else
+ menu += "No slaves detected."
+
if (49) //janitorial locator
menu = "
Persistent Custodial Object Locator
"
@@ -622,6 +638,15 @@ Code:
current_channel = host_pda.msg_input()
host_pda.Topic(null,list("choice"=num2text(host_pda.mode)))
return
+ if("Detonate Slave")
+ if(istype(src, /obj/item/cartridge/slavemaster))
+ if(src:imp)
+ if(ismob(src.loc))
+ var/mob/detonator = src.loc
+ if(ismob(src:imp.loc))
+ var/mob/detonated = src:imp.loc
+ log_game("[detonator.ckey]/([detonator] has detonated [detonated.ckey]/([detonated]) with a mindslave implant");
+ src:imp.activate()
//Bot control section! Viciously ripped from radios for being laggy and terrible.
if(href_list["op"])
diff --git a/code/game/objects/items/implants/implant_loyality.dm b/code/game/objects/items/implants/implant_loyality.dm
index 773d784fbd2c..3d4792bb6fc3 100644
--- a/code/game/objects/items/implants/implant_loyality.dm
+++ b/code/game/objects/items/implants/implant_loyality.dm
@@ -18,6 +18,9 @@
/obj/item/implant/mindshield/implant(mob/living/target, mob/user, silent = FALSE)
if(..())
+ var/obj/item/implant/mindslave/imp = locate(/obj/item/implant/mindslave) in target
+ if(imp)
+ imp.removed(target)
if(!target.mind)
return TRUE
diff --git a/code/game/objects/items/implants/implant_mindslave.dm b/code/game/objects/items/implants/implant_mindslave.dm
new file mode 100644
index 000000000000..d368613261ce
--- /dev/null
+++ b/code/game/objects/items/implants/implant_mindslave.dm
@@ -0,0 +1,93 @@
+/obj/item/implant/mindslave
+ name = "mindslave implant"
+ desc = "Turn a crewmate into your eternal slave"
+ activated = FALSE
+
+/obj/item/implant/mindslave/get_data()
+ var/dat = {"
+Implant Specifications:
+Name: Syndicate Loyalty Implant
+Life: Single use
+Important Notes: Illegal
+
+Implant Details:
+Function: Makes the injected a slave to the owner of the implant.
"}
+ return dat
+
+/obj/item/implant/mindslave/implant(mob/source, mob/user)
+
+ if(!source.mind)
+ to_chat(user.mind, "[source] doesn't posses the mental capabilities to be a slave.")
+ return FALSE
+
+ var/mob/living/carbon/human/target = source
+ var/mob/living/carbon/human/holder = user
+
+ if(target == holder)
+ to_chat(holder, "You can't implant yourself!")
+ return FALSE
+
+ if(locate(src.type) in source)
+ to_chat(holder, "[target] is already a slave!")
+ return FALSE
+
+ if(target.isloyal())
+ to_chat(holder, "[target] seems to resist the implant!")
+ return FALSE
+
+ if(target.mind.has_antag_datum(/datum/antagonist/changeling))
+ to_chat(holder, "[target]'s skin thickens where you try to inject them. Odd...")
+ to_chat(target, "We instinctively prevent [holder]'s injector from penetrating our skin.")
+ return FALSE
+
+ to_chat(target, "You feel a strange urge to serve [holder.real_name]. A simple thought about disobeying his/her commands makes your head feel like it is going to explode. You feel like you dont want to know what will happen if you actually disobey your new master.")
+
+ var/datum/objective/mindslave/serve_objective = new
+ serve_objective.owner = target
+ serve_objective.explanation_text = "Serve [holder.real_name] no matter what!"
+ serve_objective.completed = TRUE
+ source.mind.objectives += serve_objective
+ if(!SSticker.mode.traitors.Find(source.mind))
+ SSticker.mode.traitors += source.mind
+
+ log_game("[holder.ckey] enslaved [target.ckey] with a Mindslave implant")
+
+ return ..()
+
+/obj/item/implant/mindslave/removed(mob/target)
+ if(..())
+
+ for(var/datum/objective/mindslave/objective in target.mind.objectives)
+ target.mind.objectives -= objective
+
+ if(target.mind.objectives.len == 0)
+ SSticker.mode.traitors -= target.mind
+
+ if(target.stat != DEAD)
+ target.visible_message("[target] looks like they have just been released from slavery!", "You feel as if you have just been released from eternal slavery. Yet you cant seem to remember anything at all!")
+ return TRUE
+
+/obj/item/implant/mindslave/activate()
+ var/turf/T = get_turf(loc)
+
+ if (ismob(loc))
+ var/mob/M = loc
+ to_chat(M, "Your master has decided to detonate you!")
+
+ if(T)
+ T.hotspot_expose(1200,240)
+
+ explosion(T, 1, 2, 3, 3)
+
+ qdel(src)
+ return
+
+/obj/item/implanter/mindslave
+ name = "implanter (mindslave)"
+
+/obj/item/implanter/mindslave/New()
+ imp = new /obj/item/implant/mindslave(src)
+ ..()
+
+/datum/objective/mindslave
+ martyr_compatible = TRUE
diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm
index e4bcbd85271e..69ac9eb4247d 100644
--- a/code/game/objects/items/storage/uplink_kits.dm
+++ b/code/game/objects/items/storage/uplink_kits.dm
@@ -309,6 +309,11 @@
/obj/item/storage/box/syndie_kit/imp_radio/PopulateContents()
new /obj/item/implanter/radio/syndicate(src)
+/obj/item/storage/box/syndie_kit/imp_mindslave/PopulateContents()
+ var/obj/item/implanter/mindslave/M = new(src)
+ var/obj/item/cartridge/slavemaster/S = new(src)
+ S.imp = M.imp
+
/obj/item/storage/box/syndie_kit/centcom_costume/PopulateContents()
new /obj/item/clothing/under/rank/centcom_officer(src)
new /obj/item/clothing/shoes/sneakers/black(src)
diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm
index e3da5aba808b..048fdbbadba0 100644
--- a/code/modules/uplink/uplink_items.dm
+++ b/code/modules/uplink/uplink_items.dm
@@ -1148,6 +1148,12 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
item = /obj/item/storage/box/syndie_kit/imp_radio
cost = 4
+/datum/uplink_item/implants/mindslave
+ name = "Mindslave Implant"
+ desc = "An implant injected into a targets body. Will cause the target to obey your every command whilst the target is implanted. Implant can be removed by surgery!"
+ item = /obj/item/storage/box/syndie_kit/imp_mindslave
+ cost = 12
+
// Cybernetics
/datum/uplink_item/cyber_implants
diff --git a/yogstation.dme b/yogstation.dme
index 362a970d58f2..d26ffa4ed547 100644
--- a/yogstation.dme
+++ b/yogstation.dme
@@ -823,6 +823,7 @@
#include "code\game\objects\items\implants\implant_freedom.dm"
#include "code\game\objects\items\implants\implant_krav_maga.dm"
#include "code\game\objects\items\implants\implant_loyality.dm"
+#include "code\game\objects\items\implants\implant_mindslave.dm"
#include "code\game\objects\items\implants\implant_misc.dm"
#include "code\game\objects\items\implants\implant_spell.dm"
#include "code\game\objects\items\implants\implant_storage.dm"