diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 0636d584e992..590fdef0e88b 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -235,12 +235,14 @@ Security HUDs! Basic mode shows only the job. holder.icon_state = "hud_imp_chem" set_hud_image_active(IMPCHEM_HUD) - if(HAS_TRAIT(src, TRAIT_MINDSHIELD)) - holder = hud_list[IMPLOYAL_HUD] - var/icon/IC = icon(icon, icon_state, dir) - holder.pixel_y = IC.Height() - world.icon_size - holder.icon_state = "hud_imp_loyal" - set_hud_image_active(IMPLOYAL_HUD) + //Dripstation edited + if(istype(I, /obj/item/implant/mindshield)) + var/obj/item/implant/mindshield/MS = I + holder = hud_list[IMPLOYAL_HUD] + var/icon/IC = icon(icon, icon_state, dir) + holder.pixel_y = IC.Height() - world.icon_size + holder.icon_state = MS.implant_visible_as + set_hud_image_active(IMPLOYAL_HUD) /mob/living/carbon/human/proc/sec_hud_set_security_status() var/image/holder = hud_list[WANTED_HUD] diff --git a/code/game/objects/items/implants/implant_mindshield.dm b/code/game/objects/items/implants/implant_mindshield.dm index 440ae58340f8..fce078c7794a 100644 --- a/code/game/objects/items/implants/implant_mindshield.dm +++ b/code/game/objects/items/implants/implant_mindshield.dm @@ -16,6 +16,7 @@ return dat +/* Dripstation start /obj/item/implant/mindshield/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE) if(..()) if(!target.mind) @@ -85,6 +86,7 @@ ADD_TRAIT(target, TRAIT_MINDSHIELD, "implant") target.sec_hud_set_implants() return TRUE +*/ //Dripstation end /obj/item/implant/mindshield/removed(mob/target, silent = FALSE, special = 0) if(..()) diff --git a/modular_dripstation/code/game/objects/items/implants/biosig_ntcommand.dm b/modular_dripstation/code/game/objects/items/implants/biosig_ntcommand.dm new file mode 100644 index 000000000000..8490341eb09d --- /dev/null +++ b/modular_dripstation/code/game/objects/items/implants/biosig_ntcommand.dm @@ -0,0 +1,74 @@ +/obj/item/implant/biosig_ntcommand + name = "nanotrasen command biosignaller implant" + desc = "An alarm which monitors host vital signs and transmits a radio message upon death. Usually implanted into command staff." + actions_types = null + verb_say = "broadcasts" + verb_exclaim = "broadcasts" + var/obj/item/radio/radio + var/static/list/stealth_areas = typecacheof(list(/area/yogs/infiltrator_base, /area/centcom/syndicate_mothership, /area/shuttle/yogs/stealthcruiser, /area/ruin/syndicate_icemoon, /area/ruin/powered/syndicate_lava_base, /area/ruin/space/has_grav/listeningstation, /area/ruin/space/has_grav/syndiederelict)) + +obj/item/encryptionkey/biosig_ntcommand + name = "\improper biosignaller radio encryption key" + icon_state = "cent_cypherkey" + independent = TRUE + channels = list(RADIO_CHANNEL_COMMON = 1, RADIO_CHANNEL_CENTCOM = 1) + +/obj/item/implant/biosig_ntcommand/Initialize(mapload) + . = ..() + radio = new(src) + radio.keyslot = new/obj/item/encryptionkey/biosig_ntcommand// Should broadcast both on the secure centcom and common channels to notify both all station and central command dudes. + radio.listening = FALSE + radio.recalculateChannels() + +/obj/item/implant/biosig_ntcommand/activate(cause) + if(!imp_in) + return FALSE + + // Location. + var/area/turf = get_area(imp_in) + // Name of implant user. + var/mobname = imp_in.name + // What is to be said. + var/message = "[station_name()] COMMAND TEAM ALERT: [mobname]'s lifesig//N&#@$¤#§>..." // Default message for unexpected causes. + + switch(cause) + if("death") + if(!is_type_in_typecache(turf, stealth_areas)) //give the syndies a bit of stealth + message = "[station_name()] COMMAND TEAM ALERT: [mobname]'s lifesigns ceased in [turf.name]!" + if("emp") + if(prob(70)) //30% chance to give give gib message + var/empname = prob(50) ? turf.name : pick(GLOB.teleportlocs) + message = "[station_name()] COMMAND TEAM ALERT: [mobname]'s lifesigns ceased in [empname]!" //eh, sorry, implant fried themselves. + + + name = "[mobname]'s Biosignaller" + radio.talk_into(src, message, RADIO_CHANNEL_CENTCOM) + radio.talk_into(src, message, RADIO_CHANNEL_COMMON) + qdel(src) + +/obj/item/implant/biosig_ntcommand/emp_act(severity) + activate("emp") + +/obj/item/implant/biosig_ntcommand/on_mob_death(mob/living/L, gibbed) + if(gibbed) + activate("gibbed") // Will use default message. + else + activate("death") + +/obj/item/implant/biosig_ntcommand/get_data() + . = {"Implant Specifications:
+ Name:Nanotrasen \"Profit Margin\" Class Employee Biosignaller Implant
+ Life:Until activation
+ Important Notes:Broadcasts a message over an encrypted channel.
+
+ Implant Details:
+ Function:Contains a miniature radio connected to a bioscanner. Broadcasts the death and last known position of the user both over an encrypted radio channel and all stationary.
" + Integrity: Implant will occasionally be degraded by the body's immune system and thus will occasionally malfunction."} + +/obj/item/implanter/biosig_ntcommand + name = "implanter" + imp_type = /obj/item/implant/biosig_ntcommand + +/obj/item/implantcase/biosig_ntcommand + name = "implant case - 'Standart Biosignal NT'" + imp_type = /obj/item/implant/biosig_ntcommand \ No newline at end of file diff --git a/modular_dripstation/code/game/objects/items/implants/mindshield.dm b/modular_dripstation/code/game/objects/items/implants/mindshield.dm new file mode 100644 index 000000000000..5fc76bbb9d0e --- /dev/null +++ b/modular_dripstation/code/game/objects/items/implants/mindshield.dm @@ -0,0 +1,242 @@ +/////Nanotrasen variants///// +/////Security and export variant///// +/obj/item/implant/mindshield + var/implant_visible_as = "hud_imp_loyal" + var/active = TRUE + +/obj/item/implant/mindshield/get_data() + var/dat = {"Implant Specifications:
+ Name: Nanotrasen Employee Management Implant
+ Life: One year.
+ Important Notes: Personnel injected with this device are much more resistant to brainwashing.
+
+ Implant Details:
+ Function: Contains a small pod of nanobots that protects the host's mental functions from manipulation.
+ Integrity: Implant will last so long as the nanobots are inside the bloodstream."} + return dat + + +/obj/item/implant/mindshield/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE) + if(..()) + if(target.mind && !silent) + to_chat(target, span_notice("You feel a sense of peace and security. You are now protected from brainwashing.")) + ADD_TRAIT(target, TRAIT_MINDSHIELD, "implant") + target.sec_hud_set_implants() + return TRUE + +/obj/item/implanter/mindshield + name = "implanter" + +/////High quality variant///// +/obj/item/implant/mindshield/centcom + name = "high quality mindshield implant" + desc = "Protects value assets from brainwashing. Grants access to military grade weaponry." + implant_visible_as = "hud_imp_loyal_ert" + +/obj/item/implant/mindshield/centcom/get_data() + var/dat = {"Implant Specifications:
+ Name: Nanotrasen Human Resourse Menatal Protector
+ Life: Five years.
+ Important Notes: Combat and high value personnel injected with this device are much more resistant to brainwashing.
+
+ Implant Details:
+ Function: Contains a small pod of nanobots that protects the host's mental functions from manipulation.
+ Integrity: Implant will last so long as the nanobots are inside the bloodstream."} + return dat + +/obj/item/implanter/mindshield/centcom + name = "implanter" + imp_type = /obj/item/implant/mindshield/centcom + +/obj/item/implantcase/mindshield/centcom + name = "implant case - 'High Quality Mindshield'" + imp_type = /obj/item/implant/mindshield/centcom + +/////Syndicate variants///// +/////Syndicate agent variant///// +/obj/item/implant/mindshield/tot + icon_state = "totmindshield" + actions_types = list(/datum/action/item_action/hands_free/activate) + +/obj/item/implant/mindshield/tot/activate() + . = ..() + active = !active + to_chat(imp_in, "You feel a faint click as [name] [active ? "activates" : "deactivates"]") + implant_visible_as = "[active ? "hud_imp_loyal" : null]" + imp_in.sec_hud_set_implants() + + +/obj/item/implant/mindshield/tot/get_data() + var/dat = {"Implant Specifications:
+ Name: Cybersun Brainwash Denial Implant
+ Life: Five Days.
+ Important Notes: Device reverts previous mental interference. Agents injected with this device are much more resistant to brainwashing on the mission.
+
+ Implant Details:
+ Function: Contains a small pod of nanobots that protects the host's mental functions from manipulation.
+ Special Features: Will revert most forms of brainwashing before brainwash shielding.
+ Integrity: Implant will last so long as the nanobots are inside the bloodstream."} + return dat + +/obj/item/implanter/mindshield/tot + name = "implanter" + +/////Syndicate operative variant///// +/obj/item/implant/mindshield/tot_obvious + icon_state = "totmindshield_obv" + actions_types = list(/datum/action/item_action/hands_free/activate) + implant_visible_as = "hud_imp_loyal_totobv" + +/obj/item/implant/mindshield/tot_obvious/activate() + . = ..() + active = !active + to_chat(imp_in, "You feel a faint click as [name] [active ? "activates" : "deactivates"]") + implant_visible_as = "[active ? "hud_imp_loyal_totobv" : null]" + imp_in.sec_hud_set_implants() + +/obj/item/implant/mindshield/tot_obvious/get_data() + var/dat = {"Implant Specifications:
+ Name: Cybersun Brainwash Denial Implant
+ Life: One Year.
+ Important Notes: Device reverts previous mental interference. Operatives injected with this device are much more resistant to brainwashing on the mission.
+
+ Implant Details:
+ Function: Contains a small pod of nanobots that protects the host's mental functions from manipulation.
+ Special Features: Will revert most forms of brainwashing before brainwash shielding.
+ Integrity: Implant will last so long as the nanobots are inside the bloodstream."} + return dat + +/obj/item/implanter/tot_obvious + name = "implanter" + imp_type = /obj/item/implant/mindshield/tot_obvious + +/obj/item/implantcase/tot_obvious + name = "implant case - 'Syndicate Operative Field Mentalshield'" + desc = "A glass case containing a Amnestic implant." + imp_type = /obj/item/implant/mindshield/tot_obvious + +/////Amnestic implant///// +/obj/item/implant/amnestic + name = "Amnestic implant" + desc = "Reverts recent mental interference by providing artificial amnesia." + actions_types = null + +/obj/item/implant/amnestic/get_data() + var/dat = {"Implant Specifications:
+ Name: Nanotrasen Employee Recovery Implant
+ Life: Three minutes.
+ Important Notes: Personnel injected with this device will remember their true allighment.
+
+ Implant Details:
+ Function: Contains a small pod of nanobots that removes recent memory and restores the host's mental functions.
+ Special Features: Removes recent memory of the host, providing artificial amnesia.
+ Integrity: Implant will last so long as the nanobots are inside the bloodstream."} + return dat + +/obj/item/implant/amnestic/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE) + if(..()) + if(!target.mind || target.stat == DEAD) + removed(target, TRUE) + return TRUE + + for(var/obj/item/implant/I in target.implants) + if(istype(I, /obj/item/implant/mindshield)) + target.visible_message(span_warning("[target] seems to resist the implant!"), span_warning("You feel something interfering with your curent mental conditioning! And causes heavy influence on your brain functions!!")) + if(istype(target, /mob/living/carbon/human)) + traumatize(target) + removed(target, TRUE) + return FALSE + + if(target.mind.has_antag_datum(/datum/antagonist/brainwashed)) + target.mind.remove_antag_datum(/datum/antagonist/brainwashed) + + var/datum/antagonist/hivemind/host = target.mind.has_antag_datum(/datum/antagonist/hivemind) //Releases the target from mind control beforehand + if(host) + var/datum/mind/M = host.owner + if(M) + var/datum/action/cooldown/spell/aoe/target_hive/hive_control/the_spell = locate(/datum/action/cooldown/spell/aoe/target_hive/hive_control) in M.current.actions + if(the_spell && the_spell.active) + the_spell.release_control() //he basicly forget the targets + + if(target.mind.has_antag_datum(/datum/antagonist/rev/head) || target.mind.has_antag_datum(/datum/antagonist/hivemind) || target.mind.unconvertable) + if(!silent) + target.visible_message(span_warning("[target] seems to resist the implant!"), span_warning("You feel something interfering with your curent mental conditioning, but your allighment lasts much more longer and can`t be reverted by this level of braiwashing!")) + removed(target, TRUE) + return FALSE + if(target.mind.has_antag_datum(/datum/antagonist/gang/boss) || target.mind.has_antag_datum(/datum/antagonist/mindslave)) + if(!silent) + target.visible_message(span_warning("[target] seems to resist the implant!"), span_warning("You feel something interfering with your curent mental conditioning, but your allighment lasts much more longer and can`t be reverted by this level of braiwashing!")) + removed(target, TRUE) + return FALSE + + if(IS_VASSAL(target)) + if(IS_FAVORITE_VASSAL(target)) + if(!silent) + target.visible_message(span_warning("[target] seems to resist the implant!"), span_warning("You feel something interfering with your curent mental conditioning, but your allighment can`t be reverted by this level of braiwashing!")) + removed(target, TRUE) + return FALSE + target.mind.remove_antag_datum(/datum/antagonist/vassal) + + var/datum/antagonist/hivevessel/woke = target.is_wokevessel() + if(is_hivemember(target)) + for(var/datum/antagonist/hivemind/hive in GLOB.antagonists) + if(hive.hivemembers.Find(target)) + var/mob/living/carbon/C = hive.owner.current.get_real_hivehost() + if(C) + C.apply_status_effect(STATUS_EFFECT_HIVE_TRACKER, target, woke?TRACKER_AWAKENED_TIME:TRACKER_MINDSHIELD_TIME) + target.apply_status_effect(STATUS_EFFECT_HIVE_TRACKER, C, TRACKER_DEFAULT_TIME) + if(C.mind) //If you were using mind control, too bad + C.apply_status_effect(STATUS_EFFECT_HIVE_RADAR) + to_chat(C, span_assimilator("We detect a surge of psionic energy from a far away vessel before they disappear from the hive. Whatever happened, there's a good chance they're after us now.")) + to_chat(target, span_assimilator("You hear supernatural wailing echo throughout your mind as you are finally set free. Deep down, you can feel the lingering presence of those who enslaved you... as can they!")) + target.apply_status_effect(STATUS_EFFECT_HIVE_RADAR) + remove_hivemember(target) + removed(target, TRUE) + return TRUE + + if(woke) + woke.one_mind.remove_member(target.mind) + target.mind.remove_antag_datum(/datum/antagonist/hivevessel) + + var/datum/antagonist/rev/rev = target.mind.has_antag_datum(/datum/antagonist/rev) + if(rev) + rev.remove_revolutionary(FALSE, user) + removed(target, TRUE) + return TRUE + if(target.mind.has_antag_datum(/datum/antagonist/gang)) + target.mind.remove_antag_datum(/datum/antagonist/gang) + removed(target, TRUE) + return TRUE + if(!silent) + if(target.mind in SSticker.mode.cult) + to_chat(target, span_warning("You feel something interfering with your mental conditioning, but you FAITH resist it!")) + removed(target, TRUE) + return TRUE + + to_chat(target, span_warning("You feel odd. It seems you can`t remember anything about that shift...")) + removed(target, TRUE) + return TRUE + +/obj/item/implant/amnestic/proc/traumatize(mob/living/carbon/human/H) + var/resistance = pick( + 50;TRAUMA_RESILIENCE_BASIC, + 30;TRAUMA_RESILIENCE_SURGERY, + 15;TRAUMA_RESILIENCE_LOBOTOMY, + 5;TRAUMA_RESILIENCE_MAGIC) + + var/trauma_type = pickweight(list( + BRAIN_TRAUMA_MILD = 60, + BRAIN_TRAUMA_SEVERE = 30, + BRAIN_TRAUMA_SPECIAL = 10 + )) + + H.gain_trauma_type(trauma_type, resistance) + +/obj/item/implanter/amnestic + name = "implanter" + imp_type = /obj/item/implant/mindshield + +/obj/item/implantcase/amnestic + name = "implant case - 'Amnestic'" + desc = "A glass case containing a Amnestic implant." + imp_type = /obj/item/implant/amnestic diff --git a/modular_dripstation/code/game/objects/items/pins.dm b/modular_dripstation/code/game/objects/items/pins.dm new file mode 100644 index 000000000000..06cf5af16243 --- /dev/null +++ b/modular_dripstation/code/game/objects/items/pins.dm @@ -0,0 +1,18 @@ +/obj/item/firing_pin/implant/mindshield + name = "mindshield firing pin" + desc = "This Security firing pin authorizes the weapon for only Nanotrasen Brand mindshield-implanted users." + icon_state = "firing_pin_loyalty" + req_implant = /obj/item/implant/mindshield + +/obj/item/firing_pin/implant/mindshield/pin_auth(mob/living/user) + if(user) + for(var/obj/item/implant/I in user.implants) + if(req_implant && (I.type == /obj/item/implant/mindshield || I.type == /obj/item/implant/mindshield/centcom)) + return TRUE + return FALSE + +/obj/item/firing_pin/implant/centcom_mindshield + name = "mindshield firing pin" + desc = "This Centcom firing pin authorizes the weapon for only high quality mindshield-implanted users." + icon_state = "firing_pin_centcomloyalty" + req_implant = /obj/item/implant/mindshield/centcom \ No newline at end of file diff --git a/modular_dripstation/code/game/objects/items/storage/boxes.dm b/modular_dripstation/code/game/objects/items/storage/boxes.dm index f56c10e30427..953252e0e445 100644 --- a/modular_dripstation/code/game/objects/items/storage/boxes.dm +++ b/modular_dripstation/code/game/objects/items/storage/boxes.dm @@ -338,6 +338,16 @@ new /obj/item/badge/security/cadet(src) new /obj/item/badge/security/cadet(src) +/obj/item/storage/box/security/biosig_nt + name = "biosignaller implant box" + desc = "A box claiming to contain 'Nanotrasen \"Profit Margin\" Class Employee Biosignaller' implants." + illustration = "implant" + +/obj/item/storage/box/security/biosig_nt/PopulateContents() + for(var/i in 1 to 6) + new /obj/item/implantcase/biosig_ntcommand(src) + new /obj/item/implanter/biosig_ntcommand(src) + // Syndie kit /obj/item/storage/box/donkdrip illustration = null diff --git a/modular_dripstation/code/game/objects/items/storage/lockbox.dm b/modular_dripstation/code/game/objects/items/storage/lockbox.dm index 21806d272381..d15bf7608139 100644 --- a/modular_dripstation/code/game/objects/items/storage/lockbox.dm +++ b/modular_dripstation/code/game/objects/items/storage/lockbox.dm @@ -50,3 +50,12 @@ item_state = "vialbox_secure" else item_state = "vialbox" + +/obj/item/storage/lockbox/amnestic + name = "lockbox of amnestic implants" + req_access = list(ACCESS_SECURITY) + +/obj/item/storage/lockbox/amnestic/PopulateContents() + for(var/i in 1 to 3) + new /obj/item/implantcase/amnestic(src) + new /obj/item/implanter/amnestic(src) \ No newline at end of file diff --git a/modular_dripstation/code/game/objects/items/tools_syndicate.dm b/modular_dripstation/code/game/objects/items/tools_syndicate.dm new file mode 100644 index 000000000000..39beae27266f --- /dev/null +++ b/modular_dripstation/code/game/objects/items/tools_syndicate.dm @@ -0,0 +1,175 @@ +/obj/item/wrench/nuke + name = "fancy wrench" + desc = "It's one of those fancy wrenches that you turn backward without twisting the bolt for faster action." + icon = 'modular_dripstation/icons/obj/tools.dmi' + icon_state = "wrench_syndie" + item_state = "wrench_syndie" + toolspeed = 0.5 + +/obj/item/wrench/combat + name = "combat wrench" + desc = "It's like a normal wrench but edgier. Can be found on the battlefield." + icon = 'modular_dripstation/icons/obj/tools.dmi' + icon_state = "wrench_combat" + item_state = "wrench_combat" + tool_behaviour = null + toolspeed = null + var/on = FALSE + +/obj/item/wrench/combat/attack_self(mob/living/user) + if(on) + on = FALSE + force = initial(force) + w_class = initial(w_class) + throwforce = initial(throwforce) + tool_behaviour = initial(tool_behaviour) + attack_verb = list("bopped") + toolspeed = initial(toolspeed) + playsound(user, 'sound/weapons/saberoff.ogg', 35, TRUE) + to_chat(user, "[src] can now be kept at bay.") + else + on = TRUE + force = 15 + w_class = WEIGHT_CLASS_NORMAL + throwforce = 10 + tool_behaviour = TOOL_WRENCH + attack_verb = list("devastated", "brutalized", "committed a war crime against", "obliterated", "humiliated") + toolspeed = 0.33 + hitsound = 'sound/weapons/blade1.ogg' + playsound(user, 'sound/weapons/saberon.ogg', 35, TRUE) + to_chat(user, "[src] is now active. Woe onto your enemies!") + update_icons() + +/obj/item/wrench/combat/proc/update_icons() + if(on) + icon_state = "[initial(icon_state)]_on" + item_state = "[initial(item_state)]1" + else + icon_state = "[initial(icon_state)]" + item_state = "[initial(item_state)]" + +/obj/item/wirecutters/nuke + name = "nonstandart wirecutters" + desc = "The blades of these wirecutters have suspiciously fine serrated teeth." + icon = 'modular_dripstation/icons/obj/tools.dmi' + icon_state = "wirecutters_syndie" + item_state = "wirecutters_syndie" + toolspeed = 0.5 + random_color = FALSE + +/obj/item/crowbar/nuke + name = "special crowbar" + desc = "It has special counterweights that adjust to the amount of pressure put on it by using a complex array of springs and screws." + icon = 'modular_dripstation/icons/obj/tools.dmi' + icon_state = "crowbar_syndie" + item_state = "crowbar_syndie" + toolspeed = 0.5 + force = 8 + +/obj/item/weldingtool/hugetank/nuke + desc = "An upgraded welder based of the industrial welder. Has remarkable painting and more stealthy welding flash." + icon = 'modular_dripstation/icons/obj/tools.dmi' + icon_state = "syndiewelder" + item_state = "syndiewelder" + toolspeed = 0.5 + light_range = 1 + +/obj/item/inducer/nuke + desc = "A tool for inductively charging internal power cells. This one has a suspicious colour scheme, and seems to be rigged to transfer charge at a much faster rate." + icon = 'modular_dripstation/icons/obj/tools.dmi' + icon_state = "inducer-syndi" + item_state = "inducer-syndi" + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_SMALL + powertransfer = 2000 + cell_type = /obj/item/stock_parts/cell/super + +/obj/item/jawsoflife/syndicate + name = "red jaws of life" + desc = "A pocket sized re-engineered copy of Nanotrasen's standard jaws of life. Can be used to force open airlocks in its crowbar configuration." + icon = 'modular_dripstation/icons/obj/tools.dmi' + icon_state = "syndie_pry" + item_state = "jawsoflife_syndie" + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_SMALL + toolspeed = 0.5 + +/obj/item/jawsoflife/syndicate/transform_crowbar(mob/user) + tool_behaviour = TOOL_CROWBAR + icon = 'modular_dripstation/icons/obj/tools.dmi' + icon_state = "syndie_pry" + playsound(get_turf(user), 'sound/items/change_jaws.ogg', 50, 1) + if (iscyborg(user)) + to_chat(user,span_notice("Your servos whirr as the cutting head reconfigures into a prying head.")) + else + to_chat(user, span_notice("You attach the pry jaws to [src].")) + update_appearance(UPDATE_ICON) + +/obj/item/jawsoflife/syndicate/transform_cutters(mob/user) + attack_verb = list("pinched", "nipped") + icon_state = "syndie_cutter" + hitsound = 'sound/items/jaws_cut.ogg' + usesound = 'sound/items/jaws_cut.ogg' + tool_behaviour = TOOL_WIRECUTTER + playsound(get_turf(user), 'sound/items/change_jaws.ogg', 50, 1) + if (iscyborg(user)) + to_chat(user,span_notice("Your servos whirr as the prying head reconfigures into a cutting head.")) + else + to_chat(user, span_notice("You attach the cutting jaws to [src].")) + update_appearance(UPDATE_ICON) + +/obj/item/construction/rcd/combat + name = "combat RCD" + delay_mod = 0.8 + icon = 'modular_dripstation/icons/obj/tools.dmi' + +/obj/item/multitool/ai_detect/red + name = "obvious device" + desc = "Syndicate device disguised as a multitool. Something is definitely wrong with it." + icon = 'modular_dripstation/icons/obj/tools.dmi' + icon_state = "redmultitool" + item_state = "redmultitool" + toolspeed = 0.33 + +/obj/item/storage/toolbox/syndicate/PopulateContents() + new /obj/item/screwdriver/nuke(src) + new /obj/item/wrench/nuke(src) + new /obj/item/weldingtool/largetank(src) + new /obj/item/crowbar/nuke(src) + new /obj/item/wirecutters/nuke(src) + new /obj/item/multitool/ai_detect(src) + new /obj/item/clothing/gloves/combat(src) + //YOGS start - toolspeed + for(var/obj/item/I in contents) + I.toolspeed = 0.5 + +/obj/item/storage/toolbox/syndicate/real + name = "syndicate toolbox" + +/obj/item/storage/toolbox/syndicate/real/PopulateContents() + new /obj/item/screwdriver/nuke(src) + new /obj/item/wrench/nuke(src) + new /obj/item/weldingtool/hugetank/nuke(src) + new /obj/item/crowbar/nuke(src) + new /obj/item/wirecutters/nuke(src) + new /obj/item/multitool/ai_detect(src) + new /obj/item/clothing/gloves/combat(src) + for(var/obj/item/I in contents) + I.toolspeed = 0.33 + I.name = "syndicate [I.name]" + +/obj/item/storage/belt/military/syndicate_eng + name = "/improper battle engineer`s belt" + desc = "Engineer is engihere!" + +/obj/item/storage/belt/military/syndicate_eng/PopulateContents() + new /obj/item/screwdriver/nuke(src) + new /obj/item/wrench/combat(src) + new /obj/item/weldingtool/hugetank/nuke(src) + new /obj/item/jawsoflife/syndicate(src) + new /obj/item/multitool/ai_detect/red(src) + new /obj/item/inducer/nuke(src) + new /obj/item/clothing/gloves/combat(src) + for(var/obj/item/I in contents) + I.toolspeed = 0.33 + I.name = "syndicate [I.name]" \ No newline at end of file diff --git a/modular_dripstation/code/modules/cargo/packs.dm b/modular_dripstation/code/modules/cargo/packs.dm index 66cc2204585e..d38a7f21ff19 100644 --- a/modular_dripstation/code/modules/cargo/packs.dm +++ b/modular_dripstation/code/modules/cargo/packs.dm @@ -163,6 +163,16 @@ order_limit = 1 contains = list(/obj/item/clothing/suit/space/hardsuit/heavymining) +/datum/supply_pack/security/armory/mindshield + desc = "Prevent against radical thoughts with three Mindshield implants. Requires Armory access to open." + +/datum/supply_pack/security/armory/amnestic + name = "Amnestic Implants Crate" + desc = "Revert radical thoughts with three Amnestic implants. Requires Armory access to open." + cost = 4000 + contains = list(/obj/item/storage/lockbox/amnestic) + crate_name = "amnestic implant crate" + /datum/supply_pack/security/armory/hos name = "Head of Security Armor Crate" desc = "Contains set of HoS heavy armor." diff --git a/modular_dripstation/code/modules/clothing/glasses.dm b/modular_dripstation/code/modules/clothing/glasses.dm index af5447cc7aa1..cc2875f24dd5 100644 --- a/modular_dripstation/code/modules/clothing/glasses.dm +++ b/modular_dripstation/code/modules/clothing/glasses.dm @@ -280,7 +280,6 @@ /obj/item/clothing/glasses/welding icon = 'modular_dripstation/icons/obj/clothing/eyes.dmi' - worn_icon = 'modular_dripstation/icons/mob/clothing/eyes.dmi' /obj/item/clothing/glasses/regular flags_cover = null //GLASSESCOVERSEYES diff --git a/modular_dripstation/code/modules/job/job_types/captain.dm b/modular_dripstation/code/modules/job/job_types/captain.dm index 9191152a6e98..6d575c4f8afd 100644 --- a/modular_dripstation/code/modules/job/job_types/captain.dm +++ b/modular_dripstation/code/modules/job/job_types/captain.dm @@ -3,4 +3,5 @@ glasses = /obj/item/clothing/glasses/sunglasses gloves = /obj/item/clothing/gloves/color/white shoes = /obj/item/clothing/shoes/laceup - box = /obj/item/storage/box/captain \ No newline at end of file + box = /obj/item/storage/box/captain + implants = list(/obj/item/implant/mindshield/centcom) \ No newline at end of file diff --git a/modular_dripstation/code/modules/surgery/organs/autosurgeon.dm b/modular_dripstation/code/modules/surgery/organs/autosurgeon.dm new file mode 100644 index 000000000000..0935c6677fc0 --- /dev/null +++ b/modular_dripstation/code/modules/surgery/organs/autosurgeon.dm @@ -0,0 +1,49 @@ +/obj/item/autosurgeon + icon = 'modular_dripstation/icons/obj/device.dmi' + icon_state = "autoimplanter" + +/obj/item/autosurgeon/xray_eyes + icon_state = "autoimplanter_red" + +/obj/item/autosurgeon/anti_stun + icon_state = "autoimplanter_red" + +/obj/item/autosurgeon/reviver + icon_state = "autoimplanter_nt" + +/obj/item/autosurgeon/reviver/syndicate + icon_state = "autoimplanter_red" + +/obj/item/autosurgeon/arm/syndicate/syndie_mantis + icon_state = "autoimplanter_red" + +/obj/item/autosurgeon/arm/syndicate/syndie_hammer + icon_state = "autoimplanter_red" + +/obj/item/autosurgeon/arm/syndicate/stechkin_implant + icon_state = "autoimplanter_red" + +/obj/item/autosurgeon/nt_mantis + icon_state = "autoimplanter_nt" + +/obj/item/autosurgeon/nt_mantis/left + icon_state = "autoimplanter_nt" + +/obj/item/autosurgeon/plasmavessel //Yogs Start: Just an autosurgeon with a plasma vessel in it, used in /obj/item/storage/box/syndie_kit/xeno_organ_kit + icon_state = "autoimplanter_red" + +/obj/item/autosurgeon/syndicate/spinalspeed + icon_state = "autoimplanter_red" + +/obj/item/autosurgeon/suspicious + icon_state = "autoimplanter_red" + +/obj/item/multisurgeon + icon = 'modular_dripstation/icons/obj/device.dmi' + icon_state = "autoimplanter" + +/obj/item/multisurgeon/airshoes //for traitors + icon_state = "autoimplanter_red" + +/obj/item/multisurgeon/noslipall //for traitors + icon_state = "autoimplanter_red" diff --git a/modular_dripstation/icons/obj/device.dmi b/modular_dripstation/icons/obj/device.dmi index 69280a5463dd..5a07ba1db2d0 100644 Binary files a/modular_dripstation/icons/obj/device.dmi and b/modular_dripstation/icons/obj/device.dmi differ diff --git a/modular_dripstation/icons/obj/implants.dmi b/modular_dripstation/icons/obj/implants.dmi index 092ce94abaee..b5e0a6d21aa3 100644 Binary files a/modular_dripstation/icons/obj/implants.dmi and b/modular_dripstation/icons/obj/implants.dmi differ diff --git a/modular_dripstation/icons/obj/tools.dmi b/modular_dripstation/icons/obj/tools.dmi new file mode 100644 index 000000000000..7a278c4920ae Binary files /dev/null and b/modular_dripstation/icons/obj/tools.dmi differ diff --git a/modular_dripstation/includes.dm b/modular_dripstation/includes.dm index 7d003e103105..841af8f69924 100644 --- a/modular_dripstation/includes.dm +++ b/modular_dripstation/includes.dm @@ -101,11 +101,13 @@ #include "code\game\objects\items\handcuffs.dm" #include "code\game\objects\items\holotool.dm" #include "code\game\objects\items\holy_weapons.dm" +#include "code\game\objects\items\implants\biosig_ntcommand.dm" #include "code\game\objects\items\implants\implant_misc.dm" #include "code\game\objects\items\implants\implant.dm" #include "code\game\objects\items\implants\implanter.dm" #include "code\game\objects\items\implants\implantpad.dm" #include "code\game\objects\items\implants\implantuplink.dm" +#include "code\game\objects\items\implants\mindshield.dm" #include "code\game\objects\items\manuals.dm" #include "code\game\objects\items\miscellaneous.dm" #include "code\game\objects\items\mop.dm" @@ -123,9 +125,11 @@ #include "code\game\objects\items\storage\firstaid.dm" #include "code\game\objects\items\storage\garment.dm" #include "code\game\objects\items\storage\lockbox.dm" +#include "code\game\objects\items\pins.dm" #include "code\game\objects\items\supermatter_delaminator.dm" #include "code\game\objects\items\tanks\watertank.dm" #include "code\game\objects\items\teleportation.dm" +#include "code\game\objects\items\tools_syndicate.dm" #include "code\game\objects\items\toys.dm" #include "code\game\objects\items\trash.dm" #include "code\game\objects\items\weaponry.dm" @@ -364,6 +368,7 @@ #include "code\modules\surgery\_bodyparts.dm" #include "code\modules\surgery\anasthesia_machine.dm" #include "code\modules\surgery\surgery_step.dm" +#include "code\modules\surgery\organs\autosurgeon.dm" #include "code\modules\surgery\tools.dm" #include "code\modules\uplink\uplink_devices.dm" #include "code\modules\uplink\uplink_items.dm"