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"