diff --git a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm index 16cad321853..c2c8d872cf3 100644 --- a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm +++ b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm @@ -161,11 +161,14 @@ desc = "A disk that contains advanced surgery procedures, must be loaded into an Operating Console." surgeries = list( /datum/surgery/advanced/lobotomy, + /datum/surgery/advanced/lobotomy/mechanic, /datum/surgery/advanced/bioware/vein_threading, + /datum/surgery/advanced/bioware/vein_threading/mechanic, /datum/surgery/advanced/bioware/nerve_splicing, + /datum/surgery/advanced/bioware/nerve_splicing/mechanic, /datum/surgery_step/heal/combo/upgraded, /datum/surgery_step/pacify, - /datum/surgery_step/revive, + /datum/surgery_step/pacify/mechanic, ) //Pad & Pad Terminal diff --git a/code/modules/mod/modules/modules_medical.dm b/code/modules/mod/modules/modules_medical.dm index b828169e3bf..7a802cf0f6c 100644 --- a/code/modules/mod/modules/modules_medical.dm +++ b/code/modules/mod/modules/modules_medical.dm @@ -411,12 +411,21 @@ /datum/surgery/advanced/pacify, /datum/surgery/healing/combo/upgraded/femto, /datum/surgery/advanced/brainwashing, + /datum/surgery/advanced/brainwashing/mechanic, /datum/surgery/advanced/bioware/nerve_splicing, + /datum/surgery/advanced/bioware/nerve_splicing/mechanic, /datum/surgery/advanced/bioware/nerve_grounding, + /datum/surgery/advanced/bioware/nerve_grounding/mechanic, /datum/surgery/advanced/bioware/vein_threading, + /datum/surgery/advanced/bioware/vein_threading/mechanic, /datum/surgery/advanced/bioware/muscled_veins, + /datum/surgery/advanced/bioware/muscled_veins/mechanic, /datum/surgery/advanced/bioware/ligament_hook, + /datum/surgery/advanced/bioware/ligament_hook/mechanic, /datum/surgery/advanced/bioware/ligament_reinforcement, + /datum/surgery/advanced/bioware/ligament_reinforcement/mechanic, /datum/surgery/advanced/bioware/cortex_imprint, + /datum/surgery/advanced/bioware/cortex_imprint/mechanic, /datum/surgery/advanced/bioware/cortex_folding, + /datum/surgery/advanced/bioware/cortex_folding/mechanic, ) diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 27dbbca1d17..23a41da63ec 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -1070,6 +1070,12 @@ surgery = /datum/surgery/advanced/lobotomy research_icon_state = "surgery_head" +/datum/design/surgery/lobotomy/mechanic + name = "Wetware OS Destructive Defragmentation" + desc = "A destructive robotic defragmentation method which guarantees removal of almost all brain traumas, but might cause another permanent trauma in return." + id = "surgery_lobotomy_mechanic" + surgery = /datum/surgery/advanced/lobotomy/mechanic + /datum/design/surgery/pacify name = "Pacification" desc = "A surgical procedure which permanently inhibits the aggression center of the brain, making the patient unwilling to cause direct harm." @@ -1077,6 +1083,12 @@ surgery = /datum/surgery/advanced/pacify research_icon_state = "surgery_head" +/datum/design/surgery/pacify/mechanic + name = "Aggression Suppression Programming" + desc = "Malware which permanently inhibits the aggression programming of the patient's neural network, making the patient unwilling to cause direct harm." + id = "surgery_pacify_mechanic" + surgery = /datum/surgery/advanced/pacify/mechanic + /datum/design/surgery/viral_bonding name = "Viral Bonding" desc = "A surgical procedure that forces a symbiotic relationship between a virus and its host. The patient must be dosed with spaceacillin, virus food, and formaldehyde." @@ -1135,6 +1147,12 @@ surgery = /datum/surgery/advanced/brainwashing research_icon_state = "surgery_head" +/datum/design/surgery/brainwashing/mechanic + name = "Reprogramming" + desc = "Malware which directly implants a directive into the robotic patient's operating system, making it their absolute priority. It can be cleared using a mindshield implant." + id = "surgery_brainwashing_mechanic" + surgery = /datum/surgery/advanced/brainwashing/mechanic + /datum/design/surgery/nerve_splicing name = "Nerve Splicing" desc = "A surgical procedure which splices the patient's nerves, making them more resistant to stuns." @@ -1142,6 +1160,12 @@ surgery = /datum/surgery/advanced/bioware/nerve_splicing research_icon_state = "surgery_chest" +/datum/design/surgery/nerve_splicing/mechanic + name = "System Automatic Reset Subroutine" + desc = "A robotic upgrade which upgrades a robotic patient's automatic systems, making them more resistant to stuns." + id = "surgery_nerve_splice_mechanic" + surgery = /datum/surgery/advanced/bioware/nerve_splicing/mechanic + /datum/design/surgery/nerve_grounding name = "Nerve Grounding" desc = "A surgical procedure which makes the patient's nerves act as grounding rods, protecting them from electrical shocks." @@ -1149,6 +1173,12 @@ surgery = /datum/surgery/advanced/bioware/nerve_grounding research_icon_state = "surgery_chest" +/datum/design/surgery/nerve_grounding/mechanic + name = "System Shock Dampening" + desc = "A robotic upgrade which installs grounding rods into the robotic patient's system, protecting them from electrical shocks." + id = "surgery_nerve_ground_mechanic" + surgery = /datum/surgery/advanced/bioware/nerve_grounding/mechanic + /datum/design/surgery/vein_threading name = "Vein Threading" desc = "A surgical procedure which severely reduces the amount of blood lost in case of injury." @@ -1156,13 +1186,25 @@ surgery = /datum/surgery/advanced/bioware/vein_threading research_icon_state = "surgery_chest" +/datum/design/surgery/vein_threading/mechanic + name = "Hydraulics Routing Optimization" + desc = "A robotic upgrade which severely reduces the amount of hydraulic fluid lost in case of injury." + id = "surgery_vein_thread_mechanic" + surgery = /datum/surgery/advanced/bioware/vein_threading/mechanic + /datum/design/surgery/muscled_veins name = "Vein Muscle Membrane" - desc = "A surgical procedure which adds a muscled membrane to blood vessels, allowing them to pump blood without a heart." + desc = "A surgical procedure which adds a muscled membrane to blood vessels, allowing a patient to pump blood without a heart." id = "surgery_muscled_veins" surgery = /datum/surgery/advanced/bioware/muscled_veins research_icon_state = "surgery_chest" +/datum/design/surgery/muscled_veins/mechanic + name = "Hydraulics Redundancy Subroutine" + desc = "A robotic upgrade which adds sophisticated hydraulics redundancies, allowing a patient to pump hydraulic fluid without an engine." + id = "surgery_muscled_veins_mechanic" + surgery = /datum/surgery/advanced/bioware/muscled_veins/mechanic + /datum/design/surgery/ligament_hook name = "Ligament Hook" desc = "A surgical procedure which reshapes the connections between torso and limbs, making it so limbs can be attached manually if severed. \ @@ -1171,6 +1213,13 @@ surgery = /datum/surgery/advanced/bioware/ligament_hook research_icon_state = "surgery_chest" +/datum/design/surgery/ligament_hook/mechanic + name = "Anchor Point Snaplocks" + desc = "A robotic upgrade which installs rapid detachment anchor points, making it so limbs can be attached manually if detached. \ + However this weakens the connection, making them easier to detach as well." + id = "surgery_ligament_hook_mechanic" + surgery = /datum/surgery/advanced/bioware/ligament_hook/mechanic + /datum/design/surgery/ligament_reinforcement name = "Ligament Reinforcement" desc = "A surgical procedure which adds a protective tissue and bone cage around the connections between the torso and limbs, preventing dismemberment. \ @@ -1179,6 +1228,13 @@ surgery = /datum/surgery/advanced/bioware/ligament_reinforcement research_icon_state = "surgery_chest" +/datum/design/surgery/ligament_reinforcement/mechanic + name = "Anchor Point Reinforcement" + desc = "A surgical procedure which adds reinforced limb anchor points to the patient's chassis, preventing dismemberment. \ + However, the nerve connections as a result are more easily interrupted, making it easier to disable limbs with damage." + id = "surgery_ligament_reinforcement_mechanic" + surgery = /datum/surgery/advanced/bioware/ligament_reinforcement/mechanic + /datum/design/surgery/cortex_imprint name = "Cortex Imprint" desc = "A surgical procedure which modifies the cerebral cortex into a redundant neural pattern, making the brain able to bypass damage caused by minor brain traumas." @@ -1186,6 +1242,13 @@ surgery = /datum/surgery/advanced/bioware/cortex_imprint research_icon_state = "surgery_head" +/datum/design/surgery/cortex_imprint/mechanic + name = "Wetware OS Ver 2.0" + desc = "A surgical procedure which updates the patient's operating system to the 'latest version', whatever that means, making the brain able to bypass damage caused by minor brain traumas. \ + Shame about all the adware." + id = "surgery_cortex_imprint_mechanic" + surgery = /datum/surgery/advanced/bioware/cortex_imprint/mechanic + /datum/design/surgery/cortex_folding name = "Cortex Folding" desc = "A surgical procedure which modifies the cerebral cortex into a complex fold, giving space to non-standard neural patterns." @@ -1193,6 +1256,12 @@ surgery = /datum/surgery/advanced/bioware/cortex_folding research_icon_state = "surgery_head" +/datum/design/surgery/cortex_folding/mechanic + name = "Wetware OS Labyrinthian Programming" + desc = "A robotic upgrade which reprograms the patient's neural network in a downright eldritch programming language, giving space to non-standard neural patterns." + id = "surgery_cortex_folding_mechanic" + surgery = /datum/surgery/advanced/bioware/cortex_folding/mechanic + /datum/design/surgery/necrotic_revival name = "Necrotic Revival" desc = "An experimental surgical procedure that stimulates the growth of a Romerol tumor inside the patient's brain. Requires zombie powder or rezadone." diff --git a/code/modules/research/techweb/nodes/alien_nodes.dm b/code/modules/research/techweb/nodes/alien_nodes.dm index c5d21c255cf..58e8dbfc68f 100644 --- a/code/modules/research/techweb/nodes/alien_nodes.dm +++ b/code/modules/research/techweb/nodes/alien_nodes.dm @@ -73,6 +73,7 @@ "alien_saw", "alien_scalpel", "surgery_brainwashing", + "surgery_brainwashing_mechanic", "surgery_heal_combo_upgrade_femto", "surgery_zombie", ) diff --git a/code/modules/research/techweb/nodes/surgery_nodes.dm b/code/modules/research/techweb/nodes/surgery_nodes.dm index 0b8812191e2..4be7a3256ac 100644 --- a/code/modules/research/techweb/nodes/surgery_nodes.dm +++ b/code/modules/research/techweb/nodes/surgery_nodes.dm @@ -32,6 +32,7 @@ "surgery_heal_burn_upgrade_femto", "surgery_heal_combo", "surgery_lobotomy", + "surgery_lobotomy_mechanic", "surgery_wing_reconstruction", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) @@ -44,15 +45,24 @@ prereq_ids = list(TECHWEB_NODE_SURGERY_ADV) design_ids = list( "surgery_cortex_folding", + "surgery_cortex_folding_mechanic", "surgery_cortex_imprint", + "surgery_cortex_imprint_mechanic", "surgery_heal_combo_upgrade", "surgery_ligament_hook", + "surgery_ligament_hook_mechanic", "surgery_ligament_reinforcement", + "surgery_ligament_reinforcement_mechanic", "surgery_muscled_veins", + "surgery_muscled_veins_mechanic", "surgery_nerve_ground", + "surgery_nerve_ground_mechanic", "surgery_nerve_splice", + "surgery_nerve_splice_mechanic", "surgery_pacify", + "surgery_pacify_mechanic", "surgery_vein_thread", + "surgery_vein_thread_mechanic", "surgery_viral_bond", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) diff --git a/code/modules/surgery/advanced/bioware/cortex_folding.dm b/code/modules/surgery/advanced/bioware/cortex_folding.dm index 73792575a7b..2e20f0906ac 100644 --- a/code/modules/surgery/advanced/bioware/cortex_folding.dm +++ b/code/modules/surgery/advanced/bioware/cortex_folding.dm @@ -14,6 +14,21 @@ status_effect_gained = /datum/status_effect/bioware/cortex/folded +/datum/surgery/advanced/bioware/cortex_folding/mechanic + name = "Wetware OS Labyrinthian Programming" + desc = "A robotic upgrade which reprograms the patient's neural network in a downright eldritch programming language, giving space to non-standard neural patterns." + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/apply_bioware/fold_cortex, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery/advanced/bioware/cortex_folding/can_start(mob/user, mob/living/carbon/target) var/obj/item/organ/internal/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN) if(!target_brain) diff --git a/code/modules/surgery/advanced/bioware/cortex_imprint.dm b/code/modules/surgery/advanced/bioware/cortex_imprint.dm index 26b43ee691f..27a75a26167 100644 --- a/code/modules/surgery/advanced/bioware/cortex_imprint.dm +++ b/code/modules/surgery/advanced/bioware/cortex_imprint.dm @@ -14,6 +14,22 @@ status_effect_gained = /datum/status_effect/bioware/cortex/imprinted +/datum/surgery/advanced/bioware/cortex_imprint/mechanic + name = "Wetware OS Ver 2.0" + desc = "A robotic upgrade which updates the patient's operating system to the 'latest version', whatever that means, making the brain able to bypass damage caused by minor brain traumas. \ + Shame about all the adware." + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/apply_bioware/imprint_cortex, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery/advanced/bioware/cortex_imprint/can_start(mob/user, mob/living/carbon/target) var/obj/item/organ/internal/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN) if(!target_brain) diff --git a/code/modules/surgery/advanced/bioware/ligament_hook.dm b/code/modules/surgery/advanced/bioware/ligament_hook.dm index b4a8b168a2e..8cae41a9602 100644 --- a/code/modules/surgery/advanced/bioware/ligament_hook.dm +++ b/code/modules/surgery/advanced/bioware/ligament_hook.dm @@ -15,6 +15,22 @@ status_effect_gained = /datum/status_effect/bioware/ligaments/hooked +/datum/surgery/advanced/bioware/ligament_hook/mechanic + name = "Anchor Point Snaplocks" + desc = "A robotic upgrade which installs rapid detachment anchor points, making it so limbs can be attached manually if detached. \ + However this weakens the connection, making them easier to detach as well." + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/apply_bioware/reshape_ligaments, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery_step/apply_bioware/reshape_ligaments name = "reshape ligaments (hand)" diff --git a/code/modules/surgery/advanced/bioware/ligament_reinforcement.dm b/code/modules/surgery/advanced/bioware/ligament_reinforcement.dm index 27f4674c7b6..02a9eb15e81 100644 --- a/code/modules/surgery/advanced/bioware/ligament_reinforcement.dm +++ b/code/modules/surgery/advanced/bioware/ligament_reinforcement.dm @@ -15,6 +15,22 @@ status_effect_gained = /datum/status_effect/bioware/ligaments/reinforced +/datum/surgery/advanced/bioware/ligament_reinforcement/mechanic + name = "Anchor Point Reinforcement" + desc = "A surgical procedure which adds reinforced limb anchor points to the patient's chassis, preventing dismemberment. \ + However, the nerve connections as a result are more easily interrupted, making it easier to disable limbs with damage." + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/apply_bioware/reinforce_ligaments, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery_step/apply_bioware/reinforce_ligaments name = "reinforce ligaments (hand)" diff --git a/code/modules/surgery/advanced/bioware/muscled_veins.dm b/code/modules/surgery/advanced/bioware/muscled_veins.dm index 13355a56948..05fb341d06c 100644 --- a/code/modules/surgery/advanced/bioware/muscled_veins.dm +++ b/code/modules/surgery/advanced/bioware/muscled_veins.dm @@ -14,6 +14,21 @@ status_effect_gained = /datum/status_effect/bioware/heart/muscled_veins +/datum/surgery/advanced/bioware/muscled_veins/mechanic + name = "Hydraulics Redundancy Subroutine" + desc = "A robotic upgrade which adds sophisticated hydraulics redundancies, allowing a patient to pump hydraulic fluid without an engine." + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/apply_bioware/muscled_veins, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery_step/apply_bioware/muscled_veins name = "shape vein muscles (hand)" diff --git a/code/modules/surgery/advanced/bioware/nerve_grounding.dm b/code/modules/surgery/advanced/bioware/nerve_grounding.dm index b0879bb0734..611c4bbab78 100644 --- a/code/modules/surgery/advanced/bioware/nerve_grounding.dm +++ b/code/modules/surgery/advanced/bioware/nerve_grounding.dm @@ -14,6 +14,21 @@ status_effect_gained = /datum/status_effect/bioware/nerves/grounded +/datum/surgery/advanced/bioware/nerve_grounding/mechanic + name = "System Shock Dampening" + desc = "A robotic upgrade which installs grounding rods into the robotic patient's system, protecting them from electrical shocks." + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/apply_bioware/ground_nerves, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery_step/apply_bioware/ground_nerves name = "ground nerves (hand)" time = 15.5 SECONDS diff --git a/code/modules/surgery/advanced/bioware/nerve_splicing.dm b/code/modules/surgery/advanced/bioware/nerve_splicing.dm index 5962f828009..3481e6e08a3 100644 --- a/code/modules/surgery/advanced/bioware/nerve_splicing.dm +++ b/code/modules/surgery/advanced/bioware/nerve_splicing.dm @@ -14,6 +14,21 @@ status_effect_gained = /datum/status_effect/bioware/nerves/spliced +/datum/surgery/advanced/bioware/nerve_splicing/mechanic + name = "System Automatic Reset Subroutine" + desc = "A robotic upgrade which upgrades a robotic patient's automatic systems, making them more resistant to stuns." + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/apply_bioware/splice_nerves, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery_step/apply_bioware/splice_nerves name = "splice nerves (hand)" time = 15.5 SECONDS diff --git a/code/modules/surgery/advanced/bioware/vein_threading.dm b/code/modules/surgery/advanced/bioware/vein_threading.dm index ee83ddbba4d..9eced408beb 100644 --- a/code/modules/surgery/advanced/bioware/vein_threading.dm +++ b/code/modules/surgery/advanced/bioware/vein_threading.dm @@ -14,6 +14,21 @@ status_effect_gained = /datum/status_effect/bioware/heart/threaded_veins +/datum/surgery/advanced/bioware/vein_threading/mechanic + name = "Hydraulics Routing Optimization" + desc = "A robotic upgrade which severely reduces the amount of hydraulic fluid lost in case of injury." + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/apply_bioware/thread_veins, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery_step/apply_bioware/thread_veins name = "thread veins (hand)" diff --git a/code/modules/surgery/advanced/brainwashing.dm b/code/modules/surgery/advanced/brainwashing.dm index 69b2a3d83c7..0e80f89b6dc 100644 --- a/code/modules/surgery/advanced/brainwashing.dm +++ b/code/modules/surgery/advanced/brainwashing.dm @@ -1,7 +1,10 @@ /obj/item/disk/surgery/brainwashing name = "Brainwashing Surgery Disk" desc = "The disk provides instructions on how to impress an order on a brain, making it the primary objective of the patient." - surgeries = list(/datum/surgery/advanced/brainwashing) + surgeries = list( + /datum/surgery/advanced/brainwashing, + /datum/surgery/advanced/brainwashing/mechanic, + ) /datum/surgery/advanced/brainwashing name = "Brainwashing" @@ -16,6 +19,19 @@ /datum/surgery_step/close, ) +/datum/surgery/advanced/brainwashing/mechanic + name = "Reprogramming" + desc = "Malware which directly implants a directive into the robotic patient's operating system, making it their absolute priority. It can be cleared using a mindshield implant." + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/brainwash/mechanic, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery/advanced/brainwashing/can_start(mob/user, mob/living/carbon/target) if(!..()) return FALSE @@ -37,6 +53,17 @@ failure_sound = 'sound/surgery/organ2.ogg' var/objective +/datum/surgery_step/brainwash/mechanic + name = "reprogram (multitool)" + implements = list( + TOOL_MULTITOOL = 85, + TOOL_HEMOSTAT = 50, + TOOL_WIRECUTTER = 50, + /obj/item/stack/package_wrap = 35, + /obj/item/stack/cable_coil = 15) + preop_sound = 'sound/items/taperecorder/tape_flip.ogg' + success_sound = 'sound/items/taperecorder/taperecorder_close.ogg' + /datum/surgery_step/brainwash/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) objective = tgui_input_text(user, "Choose the objective to imprint on your victim's brain", "Brainwashing") if(!objective) diff --git a/code/modules/surgery/advanced/lobotomy.dm b/code/modules/surgery/advanced/lobotomy.dm index b36bcee140a..1c82052fe98 100644 --- a/code/modules/surgery/advanced/lobotomy.dm +++ b/code/modules/surgery/advanced/lobotomy.dm @@ -2,7 +2,6 @@ name = "Lobotomy" desc = "An invasive surgical procedure which guarantees removal of almost all brain traumas, but might cause another permanent trauma in return." possible_locs = list(BODY_ZONE_HEAD) - requires_bodypart_type = NONE steps = list( /datum/surgery_step/incise, /datum/surgery_step/retract_skin, @@ -12,6 +11,19 @@ /datum/surgery_step/close, ) +/datum/surgery/advanced/lobotomy/mechanic + name = "Wetware OS Destructive Defragmentation" + desc = "A destructive robotic defragmentation method which guarantees removal of almost all brain traumas, but might cause another permanent trauma in return." + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/lobotomize/mechanic, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery/advanced/lobotomy/can_start(mob/user, mob/living/carbon/target) . = ..() if(!.) @@ -36,6 +48,18 @@ failure_sound = 'sound/surgery/organ2.ogg' surgery_effects_mood = TRUE +/datum/surgery_step/lobotomize/mechanic + name = "execute neural defragging (multitool)" + implements = list( + TOOL_MULTITOOL = 85, + /obj/item/melee/energy/sword = 55, + /obj/item/knife = 35, + /obj/item/shard = 25, + /obj/item = 20, + ) + preop_sound = 'sound/items/taperecorder/tape_flip.ogg' + success_sound = 'sound/items/taperecorder/taperecorder_close.ogg' + /datum/surgery_step/lobotomize/tool_check(mob/user, obj/item/tool) if(implement_type == /obj/item && !tool.get_sharpness()) return FALSE diff --git a/code/modules/surgery/advanced/pacification.dm b/code/modules/surgery/advanced/pacification.dm index 48a2d1c88e6..6db290e1df7 100644 --- a/code/modules/surgery/advanced/pacification.dm +++ b/code/modules/surgery/advanced/pacification.dm @@ -2,7 +2,6 @@ name = "Pacification" desc = "A surgical procedure which permanently inhibits the aggression center of the brain, making the patient unwilling to cause direct harm." possible_locs = list(BODY_ZONE_HEAD) - requires_bodypart_type = NONE steps = list( /datum/surgery_step/incise, /datum/surgery_step/retract_skin, @@ -12,6 +11,19 @@ /datum/surgery_step/close, ) +/datum/surgery/advanced/pacify/mechanic + name = "Aggression Suppression Programming" + desc = "Malware which permanently inhibits the aggression programming of the patient's neural network, making the patient unwilling to cause direct harm." + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/pacify/mechanic, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery/advanced/pacify/can_start(mob/user, mob/living/carbon/target) . = ..() var/obj/item/organ/internal/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN) @@ -23,12 +35,24 @@ implements = list( TOOL_HEMOSTAT = 100, TOOL_SCREWDRIVER = 35, - /obj/item/pen = 15) + /obj/item/pen = 15, + ) time = 40 preop_sound = 'sound/surgery/hemostat1.ogg' success_sound = 'sound/surgery/hemostat1.ogg' failure_sound = 'sound/surgery/organ2.ogg' +/datum/surgery_step/pacify/mechanic + name = "delete aggression programming (multitool)" + implements = list( + TOOL_MULTITOOL = 100, + TOOL_HEMOSTAT = 35, + TOOL_SCREWDRIVER = 35, + /obj/item/pen = 15, + ) + preop_sound = 'sound/items/taperecorder/tape_flip.ogg' + success_sound = 'sound/items/taperecorder/taperecorder_close.ogg' + /datum/surgery_step/pacify/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( user, diff --git a/code/modules/surgery/amputation.dm b/code/modules/surgery/amputation.dm index cd2910f4d11..49793c1ad2d 100644 --- a/code/modules/surgery/amputation.dm +++ b/code/modules/surgery/amputation.dm @@ -1,7 +1,6 @@ /datum/surgery/amputation name = "Amputation" - requires_bodypart_type = NONE surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_MORBID_CURIOSITY possible_locs = list( BODY_ZONE_R_ARM, @@ -19,6 +18,15 @@ /datum/surgery_step/sever_limb, ) +/datum/surgery/amputation/mechanic + name = "Disassemble" + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/sever_limb/mechanic, //The benefit of being robotic; people can pull you apart in an instant! Wait, that's not a benefit... + ) + /datum/surgery/amputation/can_start(mob/user, mob/living/patient) if(HAS_TRAIT(patient, TRAIT_NODISMEMBER)) return FALSE @@ -34,12 +42,26 @@ /obj/item/melee/arm_blade = 80, /obj/item/fireaxe = 50, /obj/item/hatchet = 40, - /obj/item/knife/butcher = 25) + /obj/item/knife/butcher = 25, + ) time = 64 preop_sound = 'sound/surgery/scalpel1.ogg' success_sound = 'sound/surgery/organ2.ogg' surgery_effects_mood = TRUE +/datum/surgery_step/sever_limb/mechanic + name = "detach limb (wrench or crowbar)" + implements = list( + /obj/item/shovel/giant_wrench = 300, + TOOL_WRENCH = 100, + TOOL_CROWBAR = 100, + TOOL_SCALPEL = 50, + TOOL_SAW = 50, + ) + time = 20 //WAIT I NEED THAT!! + preop_sound = 'sound/items/ratchet.ogg' + preop_sound = 'sound/machines/doorclick.ogg' + /datum/surgery_step/sever_limb/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( user, diff --git a/code/modules/surgery/autopsy.dm b/code/modules/surgery/autopsy.dm index 6ff32f8b465..d0ada2dce55 100644 --- a/code/modules/surgery/autopsy.dm +++ b/code/modules/surgery/autopsy.dm @@ -9,6 +9,16 @@ /datum/surgery_step/close, ) +/datum/surgery/autopsy/mechanic + name = "System Failure Analysis" + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/autopsy, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery/autopsy/can_start(mob/user, mob/living/patient) if(!..()) return FALSE diff --git a/code/modules/surgery/blood_filter.dm b/code/modules/surgery/blood_filter.dm index 577e23cee1c..81af19c9621 100644 --- a/code/modules/surgery/blood_filter.dm +++ b/code/modules/surgery/blood_filter.dm @@ -9,6 +9,19 @@ /datum/surgery_step/close, ) + +/datum/surgery/blood_filter/mechanic + name = "Hydraulics Purge" + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/filter_blood, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery/blood_filter/can_start(mob/user, mob/living/carbon/target) if(HAS_TRAIT(target, TRAIT_HUSK)) //You can filter the blood of a dead person just not husked return FALSE diff --git a/code/modules/surgery/brain_surgery.dm b/code/modules/surgery/brain_surgery.dm index f9de1e01514..879cbdf7bf5 100644 --- a/code/modules/surgery/brain_surgery.dm +++ b/code/modules/surgery/brain_surgery.dm @@ -1,7 +1,6 @@ /datum/surgery/brain_surgery name = "Brain surgery" possible_locs = list(BODY_ZONE_HEAD) - requires_bodypart_type = NONE steps = list( /datum/surgery_step/incise, /datum/surgery_step/retract_skin, @@ -11,6 +10,19 @@ /datum/surgery_step/close, ) +/datum/surgery/brain_surgery/mechanic + name = "Wetware OS Diagnostics" + requires_bodypart_type = BODYTYPE_ROBOTIC + possible_locs = list(BODY_ZONE_HEAD) + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/fix_brain/mechanic, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery_step/fix_brain name = "fix brain (hemostat)" implements = list( @@ -23,6 +35,16 @@ success_sound = 'sound/surgery/hemostat1.ogg' failure_sound = 'sound/surgery/organ2.ogg' +/datum/surgery_step/fix_brain/mechanic + name = "perform neural debugging (hemostat or multitool)" + implements = list( + TOOL_HEMOSTAT = 85, + TOOL_MULTITOOL = 85, + TOOL_SCREWDRIVER = 35, + /obj/item/pen = 15) + preop_sound = 'sound/items/taperecorder/tape_flip.ogg' + success_sound = 'sound/items/taperecorder/taperecorder_close.ogg' + /datum/surgery/brain_surgery/can_start(mob/user, mob/living/carbon/target) return target.get_organ_slot(ORGAN_SLOT_BRAIN) && ..() diff --git a/code/modules/surgery/coronary_bypass.dm b/code/modules/surgery/coronary_bypass.dm index bf79df82ad3..e9c136574b2 100644 --- a/code/modules/surgery/coronary_bypass.dm +++ b/code/modules/surgery/coronary_bypass.dm @@ -12,6 +12,19 @@ /datum/surgery_step/close, ) +/datum/surgery/gastrectomy/mechanic + name = "Engine Diagnostic" + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/incise_heart/mechanic, + /datum/surgery_step/coronary_bypass/mechanic, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery/coronary_bypass/can_start(mob/user, mob/living/carbon/target) var/obj/item/organ/internal/heart/target_heart = target.get_organ_slot(ORGAN_SLOT_HEART) if(isnull(target_heart) || target_heart.damage < 60 || target_heart.operated) @@ -33,6 +46,17 @@ failure_sound = 'sound/surgery/organ2.ogg' surgery_effects_mood = TRUE +/datum/surgery_step/incise_heart/mechanic + name = "access engine internals (scalpel or crowbar)" + implements = list( + TOOL_SCALPEL = 95, + TOOL_CROWBAR = 95, + /obj/item/melee/energy/sword = 65, + /obj/item/knife = 45, + /obj/item/shard = 35) + preop_sound = 'sound/items/ratchet.ogg' + success_sound = 'sound/machines/doorclick.ogg' + /datum/surgery_step/incise_heart/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( user, @@ -87,6 +111,17 @@ success_sound = 'sound/surgery/hemostat1.ogg' failure_sound = 'sound/surgery/organ2.ogg' +/datum/surgery_step/coronary_bypass/mechanic + name = "perform maintenance (hemostat or wrench)" + implements = list( + TOOL_HEMOSTAT = 90, + TOOL_WRENCH = 90, + TOOL_WIRECUTTER = 35, + /obj/item/stack/package_wrap = 15, + /obj/item/stack/cable_coil = 5) + preop_sound = 'sound/items/ratchet.ogg' + success_sound = 'sound/machines/doorclick.ogg' + /datum/surgery_step/coronary_bypass/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( user, @@ -102,6 +137,8 @@ var/obj/item/organ/internal/heart/target_heart = target.get_organ_slot(ORGAN_SLOT_HEART) if(target_heart) //slightly worrying if we lost our heart mid-operation, but that's life target_heart.operated = TRUE + if(target_heart.organ_flags & ORGAN_EMP) //If our organ is failing due to an EMP, fix that + target_heart.organ_flags &= ~ORGAN_EMP display_results( user, target, diff --git a/code/modules/surgery/gastrectomy.dm b/code/modules/surgery/gastrectomy.dm index 7ed006a5079..f498d220d2f 100644 --- a/code/modules/surgery/gastrectomy.dm +++ b/code/modules/surgery/gastrectomy.dm @@ -14,6 +14,18 @@ /datum/surgery_step/close, ) +/datum/surgery/gastrectomy/mechanic + name = "Nutrient Processing System Diagnostic" + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/gastrectomy/mechanic, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery/gastrectomy/can_start(mob/user, mob/living/carbon/target) var/obj/item/organ/internal/stomach/target_stomach = target.get_organ_slot(ORGAN_SLOT_STOMACH) if(isnull(target_stomach) || target_stomach.damage < 50 || target_stomach.operated) @@ -35,6 +47,17 @@ failure_sound = 'sound/surgery/organ2.ogg' surgery_effects_mood = TRUE +/datum/surgery_step/gastrectomy/mechanic + name = "perform maintenance (scalpel or wrench)" + implements = list( + TOOL_SCALPEL = 95, + TOOL_WRENCH = 95, + /obj/item/melee/energy/sword = 65, + /obj/item/knife = 45, + /obj/item/shard = 35) + preop_sound = 'sound/items/ratchet.ogg' + success_sound = 'sound/machines/doorclick.ogg' + /datum/surgery_step/gastrectomy/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( user, @@ -51,6 +74,8 @@ target_human.setOrganLoss(ORGAN_SLOT_STOMACH, 20) // Stomachs have a threshold for being able to even digest food, so I might tweak this number if(target_stomach) target_stomach.operated = TRUE + if(target_stomach.organ_flags & ORGAN_EMP) //If our organ is failing due to an EMP, fix that + target_stomach.organ_flags &= ~ORGAN_EMP display_results( user, target, diff --git a/code/modules/surgery/hepatectomy.dm b/code/modules/surgery/hepatectomy.dm index 27e74512c1f..2216ac7ad69 100644 --- a/code/modules/surgery/hepatectomy.dm +++ b/code/modules/surgery/hepatectomy.dm @@ -13,6 +13,18 @@ /datum/surgery_step/close, ) +/datum/surgery/hepatectomy/mechanic + name = "Impurity Management System Diagnostic" + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/hepatectomy/mechanic, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery/hepatectomy/can_start(mob/user, mob/living/carbon/target) var/obj/item/organ/internal/liver/target_liver = target.get_organ_slot(ORGAN_SLOT_LIVER) if(isnull(target_liver) || target_liver.damage < 50 || target_liver.operated) @@ -34,6 +46,17 @@ failure_sound = 'sound/surgery/organ2.ogg' surgery_effects_mood = TRUE +/datum/surgery_step/hepatectomy/mechanic + name = "perform maintenance (scalpel or wirecutter)" + implements = list( + TOOL_SCALPEL = 95, + TOOL_WRENCH = 95, + /obj/item/melee/energy/sword = 65, + /obj/item/knife = 45, + /obj/item/shard = 35) + preop_sound = 'sound/items/ratchet.ogg' + success_sound = 'sound/machines/doorclick.ogg' + /datum/surgery_step/hepatectomy/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( user, @@ -50,6 +73,8 @@ human_target.setOrganLoss(ORGAN_SLOT_LIVER, 10) //not bad, not great if(target_liver) target_liver.operated = TRUE + if(target_liver.organ_flags & ORGAN_EMP) //If our organ is failing due to an EMP, fix that + target_liver.organ_flags &= ~ORGAN_EMP display_results( user, target, diff --git a/code/modules/surgery/lipoplasty.dm b/code/modules/surgery/lipoplasty.dm index 71ad77b2370..6cb3dc8f757 100644 --- a/code/modules/surgery/lipoplasty.dm +++ b/code/modules/surgery/lipoplasty.dm @@ -9,6 +9,19 @@ /datum/surgery_step/close, ) +/datum/surgery/lipoplasty/mechanic + name = "Nutrient Reserve Expulsion" + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/cut_fat/mechanic, + /datum/surgery_step/remove_fat/mechanic, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery/lipoplasty/can_start(mob/user, mob/living/carbon/target) if(!HAS_TRAIT_FROM(target, TRAIT_FAT, OBESITY) || target.nutrition < NUTRITION_LEVEL_WELL_FED) return FALSE @@ -22,7 +35,8 @@ TOOL_SAW = 100, /obj/item/shovel/serrated = 75, /obj/item/hatchet = 35, - /obj/item/knife/butcher = 25) + /obj/item/knife/butcher = 25, + ) time = 64 surgery_effects_mood = TRUE preop_sound = list( @@ -30,6 +44,19 @@ /obj/item = 'sound/surgery/scalpel1.ogg', ) +/datum/surgery_step/cut_fat/mechanic + name = "open fat containers (wrench or crowbar)" + implements = list( + TOOL_WRENCH = 95, + TOOL_CROWBAR = 95, + TOOL_SAW = 65, + /obj/item/melee/energy/sword = 65, + /obj/item/knife = 45, + /obj/item/shard = 35, + ) + preop_sound = 'sound/items/ratchet.ogg' + success_sound = 'sound/machines/doorclick.ogg' + /datum/surgery_step/cut_fat/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) user.visible_message(span_notice("[user] begins to cut away [target]'s excess fat."), span_notice("You begin to cut away [target]'s excess fat...")) display_results( @@ -58,11 +85,23 @@ implements = list( TOOL_RETRACTOR = 100, TOOL_SCREWDRIVER = 45, - TOOL_WIRECUTTER = 35) + TOOL_WIRECUTTER = 35, + ) time = 32 preop_sound = 'sound/surgery/retractor1.ogg' success_sound = 'sound/surgery/retractor2.ogg' +/datum/surgery_step/remove_fat/mechanic + name = "engage expulsion valve (screwdriver or wrench)" //gross + implements = list( + TOOL_SCREWDRIVER = 100, + TOOL_WRENCH = 100, + TOOL_WIRECUTTER = 35, + TOOL_RETRACTOR = 35, + ) + preop_sound = 'sound/items/ratchet.ogg' + success_sound = 'sound/surgery/organ2.ogg' + /datum/surgery_step/remove_fat/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( user, diff --git a/code/modules/surgery/lobectomy.dm b/code/modules/surgery/lobectomy.dm index 4ed1bad1c0b..a31af5f69cc 100644 --- a/code/modules/surgery/lobectomy.dm +++ b/code/modules/surgery/lobectomy.dm @@ -11,13 +11,24 @@ /datum/surgery_step/close, ) +/datum/surgery/lobectomy/mechanic + name = "Air Filtration Diagnostic" + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/lobectomy/mechanic, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery/lobectomy/can_start(mob/user, mob/living/carbon/target) var/obj/item/organ/internal/lungs/target_lungs = target.get_organ_slot(ORGAN_SLOT_LUNGS) if(isnull(target_lungs) || target_lungs.damage < 60 || target_lungs.operated) return FALSE return ..() - //lobectomy, removes the most damaged lung lobe with a 95% base success chance /datum/surgery_step/lobectomy name = "excise damaged lung node (scalpel)" @@ -32,6 +43,17 @@ failure_sound = 'sound/surgery/organ2.ogg' surgery_effects_mood = TRUE +/datum/surgery_step/lobectomy/mechanic + name = "Perform maintenance (scalpel or wrench)" + implements = list( + TOOL_SCALPEL = 95, + TOOL_WRENCH = 95, + /obj/item/melee/energy/sword = 65, + /obj/item/knife = 45, + /obj/item/shard = 35) + preop_sound = 'sound/items/ratchet.ogg' + success_sound = 'sound/machines/doorclick.ogg' + /datum/surgery_step/lobectomy/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( user, @@ -46,8 +68,11 @@ if(ishuman(target)) var/mob/living/carbon/human/human_target = target var/obj/item/organ/internal/lungs/target_lungs = human_target.get_organ_slot(ORGAN_SLOT_LUNGS) - target_lungs.operated = TRUE human_target.setOrganLoss(ORGAN_SLOT_LUNGS, 60) + if(target_lungs) + target_lungs.operated = TRUE + if(target_lungs.organ_flags & ORGAN_EMP) //If our organ is failing due to an EMP, fix that + target_lungs.organ_flags &= ~ORGAN_EMP display_results( user, target, diff --git a/code/modules/surgery/mechanic_steps.dm b/code/modules/surgery/mechanic_steps.dm index 309090a03ca..e9bfcbe9490 100644 --- a/code/modules/surgery/mechanic_steps.dm +++ b/code/modules/surgery/mechanic_steps.dm @@ -1,6 +1,6 @@ //open shell /datum/surgery_step/mechanic_open - name = "unscrew shell (screwdriver)" + name = "unscrew shell (screwdriver or scalpel)" implements = list( TOOL_SCREWDRIVER = 100, TOOL_SCALPEL = 75, // med borgs could try to unscrew shell with scalpel @@ -30,7 +30,7 @@ //close shell /datum/surgery_step/mechanic_close - name = "screw shell (screwdriver)" + name = "screw shell (screwdriver or scalpel)" implements = list( TOOL_SCREWDRIVER = 100, TOOL_SCALPEL = 75, @@ -60,10 +60,10 @@ //prepare electronics /datum/surgery_step/prepare_electronics - name = "prepare electronics (multitool)" + name = "prepare electronics (multitool or hemostat)" implements = list( TOOL_MULTITOOL = 100, - TOOL_HEMOSTAT = 10) // try to reboot internal controllers via short circuit with some conductor + TOOL_HEMOSTAT = 75) time = 24 preop_sound = 'sound/items/taperecorder/tape_flip.ogg' success_sound = 'sound/items/taperecorder/taperecorder_close.ogg' @@ -80,10 +80,10 @@ //unwrench /datum/surgery_step/mechanic_unwrench - name = "unwrench bolts (wrench)" + name = "unwrench bolts (wrench or retractor)" implements = list( TOOL_WRENCH = 100, - TOOL_RETRACTOR = 10) + TOOL_RETRACTOR = 75) time = 24 preop_sound = 'sound/items/ratchet.ogg' @@ -105,10 +105,10 @@ //wrench /datum/surgery_step/mechanic_wrench - name = "wrench bolts (wrench)" + name = "wrench bolts (wrench or retractor)" implements = list( TOOL_WRENCH = 100, - TOOL_RETRACTOR = 10) + TOOL_RETRACTOR = 75) time = 24 preop_sound = 'sound/items/ratchet.ogg' diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm index ab99265c476..d96d558863b 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -55,7 +55,7 @@ ) /datum/surgery/organ_manipulation/mechanic - name = "Prosthesis organ manipulation" + name = "Hardware Manipulation" requires_bodypart_type = BODYTYPE_ROBOTIC surgery_flags = SURGERY_SELF_OPERABLE | SURGERY_REQUIRE_LIMB possible_locs = list(BODY_ZONE_CHEST, BODY_ZONE_HEAD) @@ -110,7 +110,7 @@ ) /datum/surgery/organ_manipulation/mechanic/external - name = "Prosthetic feature manipulation" + name = "Chassis Manipulation" possible_locs = list( BODY_ZONE_CHEST, BODY_ZONE_HEAD, diff --git a/code/modules/surgery/organs/_organ.dm b/code/modules/surgery/organs/_organ.dm index e4bb7dfe769..98d947793ef 100644 --- a/code/modules/surgery/organs/_organ.dm +++ b/code/modules/surgery/organs/_organ.dm @@ -322,6 +322,9 @@ INITIALIZE_IMMEDIATE(/obj/item/organ) if(advanced && (organ_flags & ORGAN_PROMINENT)) return "Harmful Foreign Body" + if(organ_flags & ORGAN_EMP) + return "EMP-Derived Failure Cascade in Progress" + if(owner.has_reagent(/datum/reagent/inverse/technetium)) return "[round((damage/maxHealth)*100, 1)]% damaged." diff --git a/code/modules/surgery/revival.dm b/code/modules/surgery/revival.dm index 405b693178f..bda1aaaafef 100644 --- a/code/modules/surgery/revival.dm +++ b/code/modules/surgery/revival.dm @@ -2,7 +2,6 @@ name = "Revival" desc = "An experimental surgical procedure which involves reconstruction and reactivation of the patient's brain even long after death. \ The body must still be able to sustain life." - requires_bodypart_type = NONE possible_locs = list(BODY_ZONE_CHEST) target_mobtypes = list(/mob/living) surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_MORBID_CURIOSITY @@ -16,6 +15,19 @@ /datum/surgery_step/close, ) +/datum/surgery/revival/mechanic + name = "Full System Reboot" + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/revive, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery/revival/can_start(mob/user, mob/living/target) if(!..()) return FALSE diff --git a/code/modules/surgery/sleeper_protocol.dm b/code/modules/surgery/sleeper_protocol.dm index 693b0fbfb5c..277a8c170d6 100644 --- a/code/modules/surgery/sleeper_protocol.dm +++ b/code/modules/surgery/sleeper_protocol.dm @@ -1,11 +1,15 @@ /obj/item/disk/surgery/sleeper_protocol name = "Suspicious Surgery Disk" desc = "The disk provides instructions on how to turn someone into a sleeper agent for the Syndicate." - surgeries = list(/datum/surgery/advanced/brainwashing_sleeper) + surgeries = list( + /datum/surgery/advanced/brainwashing_sleeper, + /datum/surgery/advanced/brainwashing_sleeper/mechanic, + ) /datum/surgery/advanced/brainwashing_sleeper name = "Sleeper Agent Surgery" desc = "A surgical procedure which implants the sleeper protocol into the patient's brain, making it their absolute priority. It can be cleared using a mindshield implant." + requires_bodypart_type = NONE possible_locs = list(BODY_ZONE_HEAD) steps = list( /datum/surgery_step/incise, @@ -16,6 +20,19 @@ /datum/surgery_step/close, ) +/datum/surgery/advanced/brainwashing_sleeper/mechanic + name = "Sleeper Agent Reprogramming" + desc = "Malware which directly implants the sleeper protocol directive into the robotic patient's operating system, making it their absolute priority. It can be cleared using a mindshield implant." + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/brainwash/sleeper_agent/mechanic, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery/advanced/brainwashing_sleeper/can_start(mob/user, mob/living/carbon/target) . = ..() if(!.) @@ -42,6 +59,17 @@ "The cyborgs and the AI are stalking you. What are they planning?", ) +/datum/surgery_step/brainwash/sleeper_agent/mechanic + name = "reprogram (multitool)" + implements = list( + TOOL_MULTITOOL = 85, + TOOL_HEMOSTAT = 50, + TOOL_WIRECUTTER = 50, + /obj/item/stack/package_wrap = 35, + /obj/item/stack/cable_coil = 15) + preop_sound = 'sound/surgery/hemostat1.ogg' + success_sound = 'sound/surgery/hemostat1.ogg' + /datum/surgery_step/brainwash/sleeper_agent/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) objective = pick(possible_objectives) display_results( diff --git a/code/modules/surgery/stomachpump.dm b/code/modules/surgery/stomachpump.dm index 25f067aef65..4d6dca105da 100644 --- a/code/modules/surgery/stomachpump.dm +++ b/code/modules/surgery/stomachpump.dm @@ -10,6 +10,18 @@ /datum/surgery_step/close, ) +/datum/surgery/stomach_pump/mechanic + name = "Nutrient Processing Purge" + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/stomach_pump, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + /datum/surgery/stomach_pump/can_start(mob/user, mob/living/carbon/target) var/obj/item/organ/internal/stomach/target_stomach = target.get_organ_slot(ORGAN_SLOT_STOMACH) if(HAS_TRAIT(target, TRAIT_HUSK))