diff --git a/code/datums/components/surgery_initiator.dm b/code/datums/components/surgery_initiator.dm index d360478b8b25..61fea3ce97c6 100644 --- a/code/datums/components/surgery_initiator.dm +++ b/code/datums/components/surgery_initiator.dm @@ -106,11 +106,18 @@ continue if(!surgery.can_start(user, target)) continue + // BUBBER ADDITION START + if(istype(surgery, /datum/surgery/robot)) + var/datum/surgery/robot/robot_surgery = surgery + if(robot_surgery.is_closer) + continue + // BUBBER ADDITION END available_surgeries += surgery return available_surgeries +// BUBBER COMMENT Overridden by surgery_initiator in modular_zubbers /// Does the surgery de-initiation. /datum/component/surgery_initiator/proc/attempt_cancel_surgery(datum/surgery/the_surgery, mob/living/patient, mob/user) var/selected_zone = user.zone_selected diff --git a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm index feb62ec4fca6..14f548b863b5 100644 --- a/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm +++ b/code/modules/antagonists/pirate/pirate_shuttle_equipment.dm @@ -161,14 +161,18 @@ 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/robot/advanced/lobotomy, // BUBBER EDIT /datum/surgery/advanced/bioware/vein_threading, - /datum/surgery/advanced/bioware/vein_threading/mechanic, + /datum/surgery/robot/advanced/bioware/vein_threading, // BUBBER EDIT /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/pacify/mechanic, + /datum/surgery/robot/advanced/bioware/nerve_splicing, // BUBBER EDIT + // BUBBER EDIT START + /datum/surgery/healing/brute/upgraded, + /datum/surgery/healing/burn/upgraded, + /datum/surgery/robot/healing/upgraded, + /datum/surgery/advanced/pacify, + /datum/surgery/robot/advanced/pacify, + // BUBBER EDIT END ) //Pad & Pad Terminal diff --git a/code/modules/mod/modules/modules_medical.dm b/code/modules/mod/modules/modules_medical.dm index 397945f41ef7..bff78a7992d7 100644 --- a/code/modules/mod/modules/modules_medical.dm +++ b/code/modules/mod/modules/modules_medical.dm @@ -409,23 +409,23 @@ /datum/surgery/advanced/pacify, /datum/surgery/healing/combo/upgraded/femto, /datum/surgery/advanced/brainwashing, - /datum/surgery/advanced/brainwashing/mechanic, + /datum/surgery/robot/advanced/brainwashing, // BUBBER EDIT /datum/surgery/advanced/bioware/nerve_splicing, - /datum/surgery/advanced/bioware/nerve_splicing/mechanic, + /datum/surgery/robot/advanced/bioware/nerve_splicing, // BUBBER EDIT /datum/surgery/advanced/bioware/nerve_grounding, - /datum/surgery/advanced/bioware/nerve_grounding/mechanic, + /datum/surgery/robot/advanced/bioware/nerve_grounding, // BUBBER EDIT /datum/surgery/advanced/bioware/vein_threading, - /datum/surgery/advanced/bioware/vein_threading/mechanic, + /datum/surgery/robot/advanced/bioware/vein_threading, // BUBBER EDIT /datum/surgery/advanced/bioware/muscled_veins, - /datum/surgery/advanced/bioware/muscled_veins/mechanic, + /datum/surgery/robot/advanced/bioware/muscled_veins, // BUBBER EDIT /datum/surgery/advanced/bioware/ligament_hook, - /datum/surgery/advanced/bioware/ligament_hook/mechanic, + // /datum/surgery/advanced/bioware/ligament_hook/mechanic, // BUBBER REMOVAL /datum/surgery/advanced/bioware/ligament_reinforcement, - /datum/surgery/advanced/bioware/ligament_reinforcement/mechanic, + /datum/surgery/robot/advanced/bioware/ligament_reinforcement, // BUBBER EDIT /datum/surgery/advanced/bioware/cortex_imprint, - /datum/surgery/advanced/bioware/cortex_imprint/mechanic, + /datum/surgery/robot/advanced/bioware/cortex_imprint, // BUBBER EDIT /datum/surgery/advanced/bioware/cortex_folding, - /datum/surgery/advanced/bioware/cortex_folding/mechanic, + /datum/surgery/robot/advanced/bioware/cortex_folding, // BUBBER EDIT ) /obj/item/mod/module/surgical_processor/emergency diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index c34411fff61c..8b7e0da8d92a 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -1099,7 +1099,7 @@ 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 + surgery = /datum/surgery/robot/advanced/lobotomy // BUBBER EDIT /datum/design/surgery/pacify name = "Pacification" @@ -1112,7 +1112,7 @@ 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 + surgery = /datum/surgery/robot/advanced/pacify // BUBBER EDIT /datum/design/surgery/viral_bonding name = "Viral Bonding" @@ -1176,7 +1176,7 @@ 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 + surgery = /datum/surgery/robot/advanced/brainwashing // BUBBER EDIT /datum/design/surgery/nerve_splicing name = "Nerve Splicing" @@ -1189,7 +1189,7 @@ 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 + surgery = /datum/surgery/robot/advanced/bioware/nerve_splicing // BUBBER EDIT /datum/design/surgery/nerve_grounding name = "Nerve Grounding" @@ -1202,7 +1202,7 @@ 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 + surgery = /datum/surgery/robot/advanced/bioware/nerve_grounding // BUBBER EDIT /datum/design/surgery/vein_threading name = "Vein Threading" @@ -1215,7 +1215,7 @@ 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 + surgery = /datum/surgery/robot/advanced/bioware/vein_threading // BUBBER EDIT /datum/design/surgery/muscled_veins name = "Vein Muscle Membrane" @@ -1228,7 +1228,7 @@ 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 + surgery = /datum/surgery/robot/advanced/bioware/muscled_veins // BUBBER EDIT /datum/design/surgery/ligament_hook name = "Ligament Hook" @@ -1238,12 +1238,14 @@ surgery = /datum/surgery/advanced/bioware/ligament_hook research_icon_state = "surgery_chest" +/* BUBBER REMOVAL START /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 +BUBBER REMOVAL END */ /datum/design/surgery/ligament_reinforcement name = "Ligament Reinforcement" @@ -1258,7 +1260,7 @@ 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 + surgery = /datum/surgery/robot/advanced/bioware/ligament_reinforcement // BUBBER EDIT /datum/design/surgery/cortex_imprint name = "Cortex Imprint" @@ -1272,7 +1274,7 @@ 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 + surgery = /datum/surgery/robot/advanced/bioware/cortex_imprint // BUBBER EDIT /datum/design/surgery/cortex_folding name = "Cortex Folding" @@ -1285,7 +1287,7 @@ 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 + surgery = /datum/surgery/robot/advanced/bioware/cortex_folding // BUBBER EDIT /datum/design/surgery/necrotic_revival name = "Necrotic Revival" diff --git a/code/modules/research/techweb/nodes/surgery_nodes.dm b/code/modules/research/techweb/nodes/surgery_nodes.dm index 7af1dacf1df9..4d8e7fed3b80 100644 --- a/code/modules/research/techweb/nodes/surgery_nodes.dm +++ b/code/modules/research/techweb/nodes/surgery_nodes.dm @@ -52,7 +52,7 @@ "surgery_cortex_imprint_mechanic", "surgery_heal_combo_upgrade", "surgery_ligament_hook", - "surgery_ligament_hook_mechanic", + // "surgery_ligament_hook_mechanic", // BUBBER REMOVAL "surgery_ligament_reinforcement", "surgery_ligament_reinforcement_mechanic", "surgery_muscled_veins", diff --git a/code/modules/surgery/advanced/bioware/cortex_folding.dm b/code/modules/surgery/advanced/bioware/cortex_folding.dm index 2e20f0906acd..a00984d61c6f 100644 --- a/code/modules/surgery/advanced/bioware/cortex_folding.dm +++ b/code/modules/surgery/advanced/bioware/cortex_folding.dm @@ -14,6 +14,7 @@ status_effect_gained = /datum/status_effect/bioware/cortex/folded +/* BUBBER REMOVAL START /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." @@ -28,6 +29,7 @@ /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /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) diff --git a/code/modules/surgery/advanced/bioware/cortex_imprint.dm b/code/modules/surgery/advanced/bioware/cortex_imprint.dm index 27a75a261674..f6d2a29bdb22 100644 --- a/code/modules/surgery/advanced/bioware/cortex_imprint.dm +++ b/code/modules/surgery/advanced/bioware/cortex_imprint.dm @@ -14,6 +14,7 @@ status_effect_gained = /datum/status_effect/bioware/cortex/imprinted +/* BUBBER REMOVAL START /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. \ @@ -29,6 +30,7 @@ /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /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) diff --git a/code/modules/surgery/advanced/bioware/ligament_hook.dm b/code/modules/surgery/advanced/bioware/ligament_hook.dm index 8cae41a96021..d7ec750ff74b 100644 --- a/code/modules/surgery/advanced/bioware/ligament_hook.dm +++ b/code/modules/surgery/advanced/bioware/ligament_hook.dm @@ -15,6 +15,7 @@ status_effect_gained = /datum/status_effect/bioware/ligaments/hooked +/* BUBBER REMOVAL START - This one isn't getting replaced, this is already a mechanic! /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. \ @@ -30,6 +31,7 @@ /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /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 02a9eb15e818..586d7593e950 100644 --- a/code/modules/surgery/advanced/bioware/ligament_reinforcement.dm +++ b/code/modules/surgery/advanced/bioware/ligament_reinforcement.dm @@ -15,6 +15,7 @@ status_effect_gained = /datum/status_effect/bioware/ligaments/reinforced +/* BUBBER REMOVAL START /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. \ @@ -30,6 +31,7 @@ /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /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 05fb341d06cd..4b15f7eb0fc3 100644 --- a/code/modules/surgery/advanced/bioware/muscled_veins.dm +++ b/code/modules/surgery/advanced/bioware/muscled_veins.dm @@ -14,6 +14,7 @@ status_effect_gained = /datum/status_effect/bioware/heart/muscled_veins +/* BUBBER REMOVAL START /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." @@ -28,6 +29,7 @@ /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /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 611c4bbab785..a65252a18623 100644 --- a/code/modules/surgery/advanced/bioware/nerve_grounding.dm +++ b/code/modules/surgery/advanced/bioware/nerve_grounding.dm @@ -14,6 +14,7 @@ status_effect_gained = /datum/status_effect/bioware/nerves/grounded +/* BUBBER REMOVAL START /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." @@ -28,6 +29,7 @@ /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /datum/surgery_step/apply_bioware/ground_nerves name = "ground nerves (hand)" diff --git a/code/modules/surgery/advanced/bioware/nerve_splicing.dm b/code/modules/surgery/advanced/bioware/nerve_splicing.dm index 3481e6e08a3a..71000945b25a 100644 --- a/code/modules/surgery/advanced/bioware/nerve_splicing.dm +++ b/code/modules/surgery/advanced/bioware/nerve_splicing.dm @@ -14,6 +14,7 @@ status_effect_gained = /datum/status_effect/bioware/nerves/spliced +/* BUBBER REMOVAL START /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." @@ -28,6 +29,7 @@ /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /datum/surgery_step/apply_bioware/splice_nerves name = "splice nerves (hand)" diff --git a/code/modules/surgery/advanced/bioware/vein_threading.dm b/code/modules/surgery/advanced/bioware/vein_threading.dm index 9eced408beb7..5a7a0c779021 100644 --- a/code/modules/surgery/advanced/bioware/vein_threading.dm +++ b/code/modules/surgery/advanced/bioware/vein_threading.dm @@ -14,6 +14,7 @@ status_effect_gained = /datum/status_effect/bioware/heart/threaded_veins +/* BUBBER REMOVAL START /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." @@ -28,6 +29,7 @@ /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /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 315e7d54e9f1..434ee9fa7a80 100644 --- a/code/modules/surgery/advanced/brainwashing.dm +++ b/code/modules/surgery/advanced/brainwashing.dm @@ -7,7 +7,7 @@ special_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, - /datum/surgery/advanced/brainwashing/mechanic, + // /datum/surgery/advanced/brainwashing/mechanic, // BUBBER EDIT ) /datum/surgery/advanced/brainwashing @@ -23,6 +23,7 @@ /datum/surgery_step/close, ) +/* BUBBER REMOVAL START /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." @@ -35,6 +36,7 @@ /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /datum/surgery/advanced/brainwashing/can_start(mob/user, mob/living/carbon/target) if(!..()) @@ -63,8 +65,11 @@ TOOL_MULTITOOL = 85, TOOL_HEMOSTAT = 50, TOOL_WIRECUTTER = 50, + /* BUBBER REMOVAL START /obj/item/stack/package_wrap = 35, - /obj/item/stack/cable_coil = 15) + /obj/item/stack/cable_coil = 15 + BUBBER REMOVAL END */ + ) preop_sound = 'sound/items/taperecorder/tape_flip.ogg' success_sound = 'sound/items/taperecorder/taperecorder_close.ogg' diff --git a/code/modules/surgery/advanced/lobotomy.dm b/code/modules/surgery/advanced/lobotomy.dm index 5c528acae52f..0d4d53de34ef 100644 --- a/code/modules/surgery/advanced/lobotomy.dm +++ b/code/modules/surgery/advanced/lobotomy.dm @@ -11,6 +11,7 @@ /datum/surgery_step/close, ) +/* BUBBER REMOVAL START /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." @@ -23,6 +24,7 @@ /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /datum/surgery/advanced/lobotomy/can_start(mob/user, mob/living/carbon/target) . = ..() @@ -52,13 +54,20 @@ name = "execute neural defragging (multitool)" implements = list( TOOL_MULTITOOL = 85, + /* BUBBER REMOVAL START /obj/item/melee/energy/sword = 55, /obj/item/knife = 35, /obj/item/shard = 25, /obj/item = 20, + BUBBER REMOVAL END */ + // BUBBER ADDITION START + TOOL_HEMOSTAT = 35, + /obj/item/pen = 15 + // BUBBER ADDITION END + ) preop_sound = 'sound/items/taperecorder/tape_flip.ogg' - success_sound = 'sound/items/taperecorder/taperecorder_close.ogg' + success_sound = 'sound/items/weapons/taser.ogg' // BUBBER EDIT /datum/surgery_step/lobotomize/tool_check(mob/user, obj/item/tool) if(implement_type == /obj/item && !tool.get_sharpness()) diff --git a/code/modules/surgery/advanced/pacification.dm b/code/modules/surgery/advanced/pacification.dm index 6c2d990cb962..f74455e3f62c 100644 --- a/code/modules/surgery/advanced/pacification.dm +++ b/code/modules/surgery/advanced/pacification.dm @@ -11,6 +11,7 @@ /datum/surgery_step/close, ) +/* BUBBER REMOVAL START /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." @@ -23,6 +24,7 @@ /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /datum/surgery/advanced/pacify/can_start(mob/user, mob/living/carbon/target) . = ..() diff --git a/code/modules/surgery/amputation.dm b/code/modules/surgery/amputation.dm index 90e902c3d909..0b1ec4995545 100644 --- a/code/modules/surgery/amputation.dm +++ b/code/modules/surgery/amputation.dm @@ -18,6 +18,7 @@ ) removes_target_bodypart = TRUE // SKYRAT EDIT ADDITION - Surgically unremovable limbs +/* BUBBER REMOVAL START /datum/surgery/amputation/mechanic name = "Disassemble" requires_bodypart_type = BODYTYPE_ROBOTIC @@ -26,6 +27,7 @@ /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... ) +BUBBER REMOVAL END */ /datum/surgery/amputation/peg name = "Detach" diff --git a/code/modules/surgery/autopsy.dm b/code/modules/surgery/autopsy.dm index d0ada2dce55b..0f036b25474f 100644 --- a/code/modules/surgery/autopsy.dm +++ b/code/modules/surgery/autopsy.dm @@ -9,6 +9,7 @@ /datum/surgery_step/close, ) +/* BUBBER REMOVAL START /datum/surgery/autopsy/mechanic name = "System Failure Analysis" requires_bodypart_type = BODYTYPE_ROBOTIC @@ -18,6 +19,7 @@ /datum/surgery_step/autopsy, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /datum/surgery/autopsy/can_start(mob/user, mob/living/patient) if(!..()) diff --git a/code/modules/surgery/blood_filter.dm b/code/modules/surgery/blood_filter.dm index 9c0baa418c38..32e4118ffa81 100644 --- a/code/modules/surgery/blood_filter.dm +++ b/code/modules/surgery/blood_filter.dm @@ -9,7 +9,7 @@ /datum/surgery_step/close, ) - +/* BUBBER REMOVAL START /datum/surgery/blood_filter/mechanic name = "Hydraulics Purge" requires_bodypart_type = BODYTYPE_ROBOTIC @@ -21,6 +21,7 @@ /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /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 diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 5bdbc3dabfaf..0218bcaeb055 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -388,10 +388,10 @@ if(check_for_frankenstein(victim)) bodypart_flags |= BODYPART_IMPLANTED if(human_victim == user) - human_victim.visible_message(span_warning("[human_victim] jams [src] into [human_victim.p_their()] empty socket!"),\ + human_victim.visible_message(span_notice("[human_victim] inserts [src] into [human_victim.p_their()] empty socket!"), // BUBBER EDIT span_notice("You force [src] into your empty socket, and it locks into place!")) else - human_victim.visible_message(span_warning("[user] jams [src] into [human_victim]'s empty socket!"),\ + human_victim.visible_message(span_notice("[user] inserts [src] into [human_victim]'s empty socket!"), // BUBBER EDIT span_notice("[user] forces [src] into your empty socket, and it locks into place!")) return return ..() diff --git a/code/modules/surgery/brain_surgery.dm b/code/modules/surgery/brain_surgery.dm index c3a9baafde10..6e96d9a829af 100644 --- a/code/modules/surgery/brain_surgery.dm +++ b/code/modules/surgery/brain_surgery.dm @@ -10,6 +10,7 @@ /datum/surgery_step/close, ) +/* BUBBER REMOVAL START /datum/surgery/brain_surgery/mechanic name = "Wetware OS Diagnostics" requires_bodypart_type = BODYTYPE_ROBOTIC @@ -22,6 +23,7 @@ /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /datum/surgery_step/fix_brain name = "fix brain (hemostat)" diff --git a/code/modules/surgery/coronary_bypass.dm b/code/modules/surgery/coronary_bypass.dm index 3f1e7b761cc5..59eae538dcea 100644 --- a/code/modules/surgery/coronary_bypass.dm +++ b/code/modules/surgery/coronary_bypass.dm @@ -12,6 +12,7 @@ /datum/surgery_step/close, ) +/* BUBBER REMOVAL START /datum/surgery/gastrectomy/mechanic name = "Engine Diagnostic (Heart Repair)" // SKYRAT EDIT: Original name = "Engine Diagnostic" requires_bodypart_type = BODYTYPE_ROBOTIC @@ -24,6 +25,7 @@ /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /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) diff --git a/code/modules/surgery/ear_surgery.dm b/code/modules/surgery/ear_surgery.dm index 4333b00913ba..2d8899f42c60 100644 --- a/code/modules/surgery/ear_surgery.dm +++ b/code/modules/surgery/ear_surgery.dm @@ -1,7 +1,7 @@ //Head surgery to fix the ears organ /datum/surgery/ear_surgery name = "Ear surgery" - requires_bodypart_type = NONE + //requires_bodypart_type = NONE // BUBBER EDIT organ_to_manipulate = ORGAN_SLOT_EARS possible_locs = list(BODY_ZONE_HEAD) steps = list( diff --git a/code/modules/surgery/eye_surgery.dm b/code/modules/surgery/eye_surgery.dm index fb759baca877..b082b202bb94 100644 --- a/code/modules/surgery/eye_surgery.dm +++ b/code/modules/surgery/eye_surgery.dm @@ -1,6 +1,6 @@ /datum/surgery/eye_surgery name = "Eye surgery" - requires_bodypart_type = NONE + //requires_bodypart_type = NONE // BUBBER EDIT organ_to_manipulate = ORGAN_SLOT_EYES possible_locs = list(BODY_ZONE_PRECISE_EYES) steps = list( diff --git a/code/modules/surgery/gastrectomy.dm b/code/modules/surgery/gastrectomy.dm index b72e01d0ecf7..e37ad870c5b4 100644 --- a/code/modules/surgery/gastrectomy.dm +++ b/code/modules/surgery/gastrectomy.dm @@ -14,6 +14,7 @@ /datum/surgery_step/close, ) +/* BUBBER REMOVAL START /datum/surgery/gastrectomy/mechanic name = "Nutrient Processing System Diagnostic" requires_bodypart_type = BODYTYPE_ROBOTIC @@ -25,6 +26,7 @@ /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /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) diff --git a/code/modules/surgery/hepatectomy.dm b/code/modules/surgery/hepatectomy.dm index c0d94abb69a9..79243e15fe58 100644 --- a/code/modules/surgery/hepatectomy.dm +++ b/code/modules/surgery/hepatectomy.dm @@ -13,6 +13,7 @@ /datum/surgery_step/close, ) +/* BUBBER REMOVAL START /datum/surgery/hepatectomy/mechanic name = "Impurity Management System Diagnostic" requires_bodypart_type = BODYTYPE_ROBOTIC @@ -24,6 +25,7 @@ /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /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) diff --git a/code/modules/surgery/implant_removal.dm b/code/modules/surgery/implant_removal.dm index 51c279d32cd9..3ef982d1a445 100644 --- a/code/modules/surgery/implant_removal.dm +++ b/code/modules/surgery/implant_removal.dm @@ -83,6 +83,8 @@ to_chat(user, span_warning("You can't find anything in [target]'s [target_zone]!")) return ..() +// BUBBER EDIT +/* /datum/surgery/implant_removal/mechanic name = "Implant Removal" requires_bodypart_type = BODYTYPE_ROBOTIC @@ -95,3 +97,4 @@ /datum/surgery_step/extract_implant, /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close) +*/ diff --git a/code/modules/surgery/lipoplasty.dm b/code/modules/surgery/lipoplasty.dm index 975df4a8bdff..6236cd360a0a 100644 --- a/code/modules/surgery/lipoplasty.dm +++ b/code/modules/surgery/lipoplasty.dm @@ -9,6 +9,7 @@ /datum/surgery_step/close, ) +/* BUBBER REMOVAL START - pretty sure robots can't get fat??? /datum/surgery/lipoplasty/mechanic name = "Nutrient Reserve Expulsion" requires_bodypart_type = BODYTYPE_ROBOTIC @@ -21,6 +22,7 @@ /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /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) @@ -58,7 +60,7 @@ success_sound = 'sound/machines/airlock/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...")) + // 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...")) // BUBBER EDIT FIX display_results( user, target, diff --git a/code/modules/surgery/lobectomy.dm b/code/modules/surgery/lobectomy.dm index 85a963953c68..6b644d61e8b6 100644 --- a/code/modules/surgery/lobectomy.dm +++ b/code/modules/surgery/lobectomy.dm @@ -11,6 +11,7 @@ /datum/surgery_step/close, ) +/* BUBBER REMOVAL START /datum/surgery/lobectomy/mechanic name = "Air Filtration Diagnostic" requires_bodypart_type = BODYTYPE_ROBOTIC @@ -22,6 +23,7 @@ /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /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) diff --git a/code/modules/surgery/mechanic_steps.dm b/code/modules/surgery/mechanic_steps.dm index 44be32bc858a..8d8df177cc6d 100644 --- a/code/modules/surgery/mechanic_steps.dm +++ b/code/modules/surgery/mechanic_steps.dm @@ -60,10 +60,14 @@ //prepare electronics /datum/surgery_step/prepare_electronics - name = "prepare electronics (multitool or hemostat)" + name = "prepare electronics (multitool)" // BUBBER EDIT implements = list( TOOL_MULTITOOL = 100, - TOOL_HEMOSTAT = 75) + // BUBBER EDIT START + TOOL_HEMOSTAT = 35, + /obj/item/pen = 15 + // BUBBER EDIT END + ) time = 24 preop_sound = 'sound/items/taperecorder/tape_flip.ogg' success_sound = 'sound/items/taperecorder/taperecorder_close.ogg' @@ -80,7 +84,7 @@ //unwrench /datum/surgery_step/mechanic_unwrench - name = "unwrench bolts (wrench or retractor)" + name = "unwrench bolts (wrench)" // BUBBER EDIT implements = list( TOOL_WRENCH = 100, TOOL_RETRACTOR = 75) @@ -105,7 +109,7 @@ //wrench /datum/surgery_step/mechanic_wrench - name = "wrench bolts (wrench or retractor)" + name = "wrench bolts (wrench)" // BUBBER EDIT implements = list( TOOL_WRENCH = 100, TOOL_RETRACTOR = 75) diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm index 7e0f5c29b8ec..d13748edb64e 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -54,6 +54,7 @@ /datum/surgery_step/close, ) +/* BUBBER REMOVAL START /datum/surgery/organ_manipulation/mechanic name = "Hardware Manipulation" requires_bodypart_type = BODYTYPE_ROBOTIC @@ -129,6 +130,7 @@ /datum/surgery_step/manipulate_organs/external/mechanic, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ ///Organ manipulation base class. Do not use, it wont work. Use its subtypes /datum/surgery_step/manipulate_organs diff --git a/code/modules/surgery/prosthetic_replacement.dm b/code/modules/surgery/prosthetic_replacement.dm index fcfc01f3a9b9..42a3e3a118b1 100644 --- a/code/modules/surgery/prosthetic_replacement.dm +++ b/code/modules/surgery/prosthetic_replacement.dm @@ -1,7 +1,7 @@ /datum/surgery/prosthetic_replacement name = "Prosthetic replacement" surgery_flags = NONE - requires_bodypart_type = NONE + //requires_bodypart_type = NONE // BUBBER EDIT possible_locs = list( BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, @@ -22,6 +22,10 @@ if(!iscarbon(target)) return FALSE var/mob/living/carbon/carbon_target = target + // BUBBER ADDITION START + if(carbon_target.get_bodypart(BODY_ZONE_CHEST).bodytype & BODYTYPE_ROBOTIC) + return FALSE + // BUBBER ADDITION END if(!carbon_target.get_bodypart(user.zone_selected)) //can only start if limb is missing return TRUE return FALSE diff --git a/code/modules/surgery/revival.dm b/code/modules/surgery/revival.dm index aeade07ef200..093e01eed98b 100644 --- a/code/modules/surgery/revival.dm +++ b/code/modules/surgery/revival.dm @@ -15,6 +15,7 @@ /datum/surgery_step/close, ) +/* BUBBER REMOVAL START /datum/surgery/revival/mechanic name = "Full System Reboot" requires_bodypart_type = BODYTYPE_ROBOTIC @@ -27,6 +28,7 @@ /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /datum/surgery/revival/can_start(mob/user, mob/living/target) if(!..()) diff --git a/code/modules/surgery/sleeper_protocol.dm b/code/modules/surgery/sleeper_protocol.dm index 23b02aeda801..7fdb69e16932 100644 --- a/code/modules/surgery/sleeper_protocol.dm +++ b/code/modules/surgery/sleeper_protocol.dm @@ -3,7 +3,7 @@ desc = "The disk provides instructions on how to turn someone into a sleeper agent for the Syndicate." surgeries = list( /datum/surgery/advanced/brainwashing_sleeper, - /datum/surgery/advanced/brainwashing_sleeper/mechanic, + /datum/surgery/robot/advanced/brainwashing_sleeper // BUBBER EDIT ) /datum/surgery/advanced/brainwashing_sleeper @@ -20,6 +20,7 @@ /datum/surgery_step/close, ) +/* BUBBER REMOVAL START /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." @@ -32,6 +33,7 @@ /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /datum/surgery/advanced/brainwashing_sleeper/can_start(mob/user, mob/living/carbon/target) . = ..() @@ -65,10 +67,15 @@ TOOL_MULTITOOL = 85, TOOL_HEMOSTAT = 50, TOOL_WIRECUTTER = 50, + /* BUBBER REMOVAL START /obj/item/stack/package_wrap = 35, - /obj/item/stack/cable_coil = 15) - preop_sound = 'sound/items/handling/surgery/hemostat1.ogg' - success_sound = 'sound/items/handling/surgery/hemostat1.ogg' + /obj/item/stack/cable_coil = 15 + BUBBER REMOVAL END */ + ) + // BUBBER ADDITION START + preop_sound = 'sound/items/taperecorder/tape_flip.ogg' + success_sound = 'sound/items/taperecorder/taperecorder_close.ogg' + // BUBBER ADDITION END /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) diff --git a/code/modules/surgery/stomachpump.dm b/code/modules/surgery/stomachpump.dm index 4880f9329646..6a898349cdc4 100644 --- a/code/modules/surgery/stomachpump.dm +++ b/code/modules/surgery/stomachpump.dm @@ -10,6 +10,7 @@ /datum/surgery_step/close, ) +/* BUBBER REMOVAL START /datum/surgery/stomach_pump/mechanic name = "Nutrient Processing Purge" requires_bodypart_type = BODYTYPE_ROBOTIC @@ -21,6 +22,7 @@ /datum/surgery_step/mechanic_wrench, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /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) diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index c1891d4f1889..b19329d70eb2 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -339,10 +339,12 @@ if(!pain_message) return to_chat(target, span_notice("You feel a dull, numb sensation as your body is surgically operated on.")) + /* BUBBER REMOVAL START // SKYRAT EDIT ADDITION START else if(mechanical_surgery == TRUE) //robots can't benefit from numbing agents like most but have no reason not to sleep - their debuff falls in-between target.add_mood_event("robot_surgery", /datum/mood_event/robot_surgery) // SKYRAT EDIT ADDITION END + BUBBER REMOVAL END */ else target.add_mood_event("severe_surgery", /datum/mood_event/severe_surgery) // SKYRAT EDIT ADDITION - Adds mood effects to surgeries if(!pain_message) diff --git a/modular_skyrat/modules/medical_designs/medical_designs.dm b/modular_skyrat/modules/medical_designs/medical_designs.dm index 8d8b92d29e0e..fc9e45821acc 100644 --- a/modular_skyrat/modules/medical_designs/medical_designs.dm +++ b/modular_skyrat/modules/medical_designs/medical_designs.dm @@ -12,13 +12,13 @@ departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE /datum/design/surgery/healing/robotic_healing_upgrade - name = "Repair robotic limbs upgrade: Advanced" - surgery = /datum/surgery/robot_healing/upgraded + name = "Repair robotics upgrade: Advanced" // BUBBER EDIT + surgery = /datum/surgery/robot/healing/upgraded // BUBBER EDIT id = "robotic_heal_surgery_upgrade" /datum/design/surgery/healing/robotic_healing_upgrade_2 - name = "Repair robotic limbs upgrade: Experimental" - surgery = /datum/surgery/robot_healing/experimental + name = "Repair robotics upgrade: Experimental" // BUBBER EDIT + surgery = /datum/surgery/robot/healing/experimental // BUBBER EDIT id = "robotic_heal_surgery_upgrade_2" //Limb Grower diff --git a/modular_skyrat/modules/synths/code/reagents/reagents.dm b/modular_skyrat/modules/synths/code/reagents/reagents.dm index c5496306bfe1..3264867322be 100644 --- a/modular_skyrat/modules/synths/code/reagents/reagents.dm +++ b/modular_skyrat/modules/synths/code/reagents/reagents.dm @@ -44,7 +44,10 @@ process_flags = REAGENT_SYNTHETIC /datum/reagent/medicine/liquid_solder/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick) - affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, -3 * REM * seconds_per_tick) + // BUBBER EDIT START + for(var/obj/item/organ/organ in affected_mob.organs) + affected_mob.adjustOrganLoss(organ.slot, -3 * REM * seconds_per_tick) + // BUBBER EDIT END if(prob(10)) affected_mob.cure_trauma_type(resilience = TRAUMA_RESILIENCE_BASIC) return ..() diff --git a/modular_skyrat/modules/synths/code/surgery/mechanic_steps.dm b/modular_skyrat/modules/synths/code/surgery/mechanic_steps.dm index 6befc85c0efc..6e8e7c40b8ed 100644 --- a/modular_skyrat/modules/synths/code/surgery/mechanic_steps.dm +++ b/modular_skyrat/modules/synths/code/surgery/mechanic_steps.dm @@ -8,7 +8,8 @@ /obj/item = 10, ) // 10% success with any sharp item. time = 2.4 SECONDS - preop_sound = 'sound/items/tools/wirecutter.ogg' + preop_sound = 'sound/items/tools/wirecutter_cut.ogg' // BUBBER EDIT + success_sound = 'sound/items/tools/wirecutter.ogg' // BUBBER ADDITION /datum/surgery_step/cut_wires/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( @@ -32,7 +33,7 @@ TOOL_HEMOSTAT = 10, ) time = 2.4 SECONDS - preop_sound = 'sound/items/tools/crowbar.ogg' + success_sound = 'sound/items/tools/crowbar.ogg' // BUBBER EDIT /datum/surgery_step/pry_off_plating/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) do_sparks(rand(5, 9), FALSE, target.loc) @@ -99,6 +100,7 @@ implements = list(/obj/item/stack/cable_coil = 100) time = 2.4 SECONDS var/cableamount = 5 + success_sound = 'sound/items/deconstruct.ogg' // BUBBER EDIT /datum/surgery_step/replace_wires/tool_check(mob/user, obj/item/tool) var/obj/item/stack/cable_coil/coil = tool @@ -128,6 +130,7 @@ implements = list(/obj/item/stack/sheet/iron = 100) time = 2.4 SECONDS var/ironamount = 5 + success_sound = 'sound/items/deconstruct.ogg' // BUBBER EDIT /datum/surgery_step/add_plating/tool_check(mob/user, obj/item/tool) var/obj/item/stack/sheet/iron/plat = tool diff --git a/modular_skyrat/modules/synths/code/surgery/robot_brain_surgery.dm b/modular_skyrat/modules/synths/code/surgery/robot_brain_surgery.dm index 27442f031f3e..a5806735e8de 100644 --- a/modular_skyrat/modules/synths/code/surgery/robot_brain_surgery.dm +++ b/modular_skyrat/modules/synths/code/surgery/robot_brain_surgery.dm @@ -1,3 +1,4 @@ +/* BUBBER REMOVAL START /datum/surgery/robot_brain_surgery name = "Reset Posibrain Logic (Brain Surgery)" steps = list( @@ -24,6 +25,7 @@ return FALSE else return TRUE +BUBBER REMOVAL END */ /datum/surgery_step/fix_robot_brain name = "fix posibrain (multitool)" @@ -80,6 +82,7 @@ return FALSE +/* BUBBER REMOVAL /datum/surgery/robot_trauma_surgery name = "Reticulate Posibrain Splines (Blessed Lobotomy)" desc = "A surgical procedure that refurbishes low level components in the posibrain, to fix the strongest trauma errors." @@ -94,6 +97,7 @@ /datum/surgery_step/fix_robot_brain/advanced, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL */ /datum/surgery_step/fix_robot_brain/advanced name = "reticulate splines (multitool)" diff --git a/modular_skyrat/modules/synths/code/surgery/robot_chassis_restoration.dm b/modular_skyrat/modules/synths/code/surgery/robot_chassis_restoration.dm index d3ed1e7855f0..0c1184ae4d3b 100644 --- a/modular_skyrat/modules/synths/code/surgery/robot_chassis_restoration.dm +++ b/modular_skyrat/modules/synths/code/surgery/robot_chassis_restoration.dm @@ -1,6 +1,7 @@ #define SYNTH_REVIVE_WELD_INTERNALS_DAMAGE 30 // Should be a very quick surgery, it's meant to replace defibs (mostly!) +/* BUBBER REMOVAL START /datum/surgery/positronic_restoration name = "Posibrain Reboot (Revival)" steps = list( @@ -23,6 +24,7 @@ return FALSE return TRUE +BUBBER REMOVAL END */ /datum/surgery_step/pry_off_plating/fullbody time = 1.4 SECONDS diff --git a/modular_skyrat/modules/synths/code/surgery/robot_healing.dm b/modular_skyrat/modules/synths/code/surgery/robot_healing.dm index b57a21eb17c5..e6d25aba0ff5 100644 --- a/modular_skyrat/modules/synths/code/surgery/robot_healing.dm +++ b/modular_skyrat/modules/synths/code/surgery/robot_healing.dm @@ -1,7 +1,10 @@ +// Overridden by robot_healing.dm in modular_zubbers + #define DAMAGE_ROUNDING 0.1 #define FAIL_DAMAGE_MULTIPLIER 0.8 #define FINAL_STEP_HEAL_MULTIPLIER 0.55 +/* BUBBER REMOVAL START //Almost copypaste of tend wounds, with some changes /datum/surgery/robot_healing steps = list( @@ -33,6 +36,7 @@ healing_step_type, /datum/surgery_step/mechanic_close, ) +BUBBER REMOVAL END */ /datum/surgery_step/robot_heal name = "repair body (crowbar/wirecutters)" @@ -70,10 +74,10 @@ woundtype = "wiring" return - if(!istype(surgery, /datum/surgery/robot_healing)) + if(!istype(surgery, /datum/surgery/robot/healing)) // BUBBER EDIT return - var/datum/surgery/robot_healing/the_surgery = surgery + var/datum/surgery/robot/healing/the_surgery = surgery // BUBBER EDIT if(the_surgery.surgery_preop_message_sent) return @@ -126,8 +130,8 @@ display_results(user, target, span_notice("[self_message]."), "[other_message].", "[other_message].") - if(istype(surgery, /datum/surgery/robot_healing)) - var/datum/surgery/robot_healing/the_surgery = surgery + if(istype(surgery, /datum/surgery/robot/healing)) // BUBBER EDIT + var/datum/surgery/robot/healing/the_surgery = surgery // BUBBER EDIT the_surgery.surgery_preop_message_sent = TRUE return TRUE @@ -158,6 +162,7 @@ return FALSE /***************************TYPES***************************/ +/* BUBBER REMOVAL START /datum/surgery/robot_healing/basic name = "Repair robotic limbs (Basic)" desc = "A surgical procedure that provides repairs and maintenance to robotic limbs. Is slightly more efficient when the patient is severely damaged." @@ -177,6 +182,7 @@ healing_step_type = /datum/surgery_step/robot_heal/experimental replaced_by = null requires_tech = TRUE +BUBBER REMOVAL END */ /***************************STEPS***************************/ diff --git a/modular_skyrat/modules/synths/code/surgery/robot_heart_surgery.dm b/modular_skyrat/modules/synths/code/surgery/robot_heart_surgery.dm index 3b23802bc47e..200d70c7bcf1 100644 --- a/modular_skyrat/modules/synths/code/surgery/robot_heart_surgery.dm +++ b/modular_skyrat/modules/synths/code/surgery/robot_heart_surgery.dm @@ -1,4 +1,5 @@ /// Hydraulic Pump Surgery +/* BUBBER REMOVAL START /datum/surgery/hydraulic_maintenance name = "Hydraulic Pump Maintenance" requires_bodypart_type = BODYTYPE_ROBOTIC @@ -21,6 +22,7 @@ if(isnull(hydraulic_pump) || !issynthetic(target) || hydraulic_pump.damage < 10) return FALSE return ..() +BUBBER REMOVAL END */ /datum/surgery_step/hydraulic/repair name = "tighten seals (screwdriver or wrench)" diff --git a/modular_skyrat/modules/synths/code/surgery/robot_liver_surgery.dm b/modular_skyrat/modules/synths/code/surgery/robot_liver_surgery.dm index 685d36580adf..dae02a53b4c7 100644 --- a/modular_skyrat/modules/synths/code/surgery/robot_liver_surgery.dm +++ b/modular_skyrat/modules/synths/code/surgery/robot_liver_surgery.dm @@ -1,4 +1,5 @@ /// Reagent Processor Repair surgery +/* BUBBER REMOVAL START /datum/surgery/reagent_pump name = "Reagent Processor Manual Reset" surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB @@ -21,6 +22,7 @@ if(isnull(reagent_processor) || !issynthetic(target) || reagent_processor.damage < 10) return FALSE return ..() +BUBBER REMOVAL END */ /datum/surgery_step/reagent_pump/repair name = "perform valve adjustment (screwdriver)" diff --git a/modular_skyrat/modules/synths/code/surgery/robot_lung_surgery.dm b/modular_skyrat/modules/synths/code/surgery/robot_lung_surgery.dm index 3213cc954b3e..d2db428232c9 100644 --- a/modular_skyrat/modules/synths/code/surgery/robot_lung_surgery.dm +++ b/modular_skyrat/modules/synths/code/surgery/robot_lung_surgery.dm @@ -1,4 +1,5 @@ /// Heatsink Repair Surgery +/* BUBBER REMOVAL START /datum/surgery/heatsink name = "Heatsink Maintenance" surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB @@ -22,6 +23,7 @@ if(isnull(target_lungs) || !issynthetic(target) || target_lungs.damage < 10 ) return FALSE return ..() +BUBBER REMOVAL END */ /datum/surgery_step/heatsink/repair name = "Tighten heatsink mounts (wrench)" diff --git a/modular_skyrat/modules/synths/code/surgery/robot_stomach_surgery.dm b/modular_skyrat/modules/synths/code/surgery/robot_stomach_surgery.dm index 92c91ff895d3..af9139e3001c 100644 --- a/modular_skyrat/modules/synths/code/surgery/robot_stomach_surgery.dm +++ b/modular_skyrat/modules/synths/code/surgery/robot_stomach_surgery.dm @@ -1,4 +1,5 @@ /// Bioreactor Maintenance +/* BUBBER REMOVAL START /datum/surgery/bioreactor name = "Bioreactor Maintenance" surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB @@ -21,6 +22,7 @@ if(isnull(bioreactor) || !issynthetic(target) || bioreactor.damage < 10) return FALSE return ..() +BUBBER REMOVAL END */ /datum/surgery_step/bioreactor/repair name = "perform bioreactor maintenance (screwdriver)" diff --git a/modular_skyrat/modules/synths/code/surgery/robot_surgery_rename.dm b/modular_skyrat/modules/synths/code/surgery/robot_surgery_rename.dm index 427d60d6f032..4893db5f15eb 100644 --- a/modular_skyrat/modules/synths/code/surgery/robot_surgery_rename.dm +++ b/modular_skyrat/modules/synths/code/surgery/robot_surgery_rename.dm @@ -1,3 +1,4 @@ +/* BUBBER REMOVAL START /datum/surgery/amputation/mechanic name = "Disconnect limb" @@ -9,6 +10,6 @@ /datum/surgery/organ_manipulation/mechanic/external name = "Chassis Manipulation (External Manipulation)" - +BUBBER REMOVAL END */ diff --git a/modular_skyrat/modules/synths/code/surgery/surgery.dm b/modular_skyrat/modules/synths/code/surgery/surgery.dm index b9521de12c9a..bf12d50e0939 100644 --- a/modular_skyrat/modules/synths/code/surgery/surgery.dm +++ b/modular_skyrat/modules/synths/code/surgery/surgery.dm @@ -1,3 +1,4 @@ +/* BUBBER REMOVAL START //Blacklists upstream's mechanical surgeries for augmented people in favor of our synth surgeries /datum/surgery/advanced/bioware/cortex_folding/mechanic/can_start(mob/user, mob/living/carbon/target) @@ -51,3 +52,4 @@ /datum/surgery/stomach_pump/mechanic/can_start(mob/user, mob/living/carbon/target) return !issynthetic(target) && ..() +BUBBER REMOVAL END */ diff --git a/modular_zubbers/code/__DEFINES/tools.dm b/modular_zubbers/code/__DEFINES/tools.dm new file mode 100644 index 000000000000..db89e8470aa4 --- /dev/null +++ b/modular_zubbers/code/__DEFINES/tools.dm @@ -0,0 +1 @@ +#define MECHANICAL_TOOLS list(TOOL_CROWBAR, TOOL_MULTITOOL, TOOL_SCREWDRIVER, TOOL_WIRECUTTER, TOOL_WRENCH, TOOL_WELDER,) diff --git a/modular_zubbers/code/modules/synths/code/surgery/amputation.dm b/modular_zubbers/code/modules/synths/code/surgery/amputation.dm new file mode 100644 index 000000000000..b6305d4abc27 --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/amputation.dm @@ -0,0 +1,84 @@ +/datum/surgery/robot/amputation + name = "Disassemble (Amputation)" + requires_bodypart_type = BODYTYPE_ROBOTIC + surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_MORBID_CURIOSITY | SURGERY_SELF_OPERABLE + possible_locs = list( + BODY_ZONE_R_ARM, + BODY_ZONE_L_ARM, + BODY_ZONE_R_LEG, + BODY_ZONE_L_LEG, + BODY_ZONE_HEAD, + ) + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/robot_sever_limb, + ) + removes_target_bodypart = TRUE // Surgically unremovable limbs + close_surgery = /datum/surgery/robot/close_amputation + num_opening_steps = 3 + num_steps_until_closing = 6 // last step automatically closes + +/datum/surgery/robot/close_amputation + name = "Close Surgery (Disassemble)" + requires_bodypart_type = BODYTYPE_ROBOTIC + surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_MORBID_CURIOSITY | SURGERY_SELF_OPERABLE + possible_locs = list( + BODY_ZONE_R_ARM, + BODY_ZONE_L_ARM, + BODY_ZONE_R_LEG, + BODY_ZONE_L_LEG, + BODY_ZONE_HEAD, + ) + steps = list( + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE + +/datum/surgery/robot/amputation/can_start(mob/user, mob/living/patient) + if(HAS_TRAIT(patient, TRAIT_NODISMEMBER)) + return FALSE + return ..() + +/datum/surgery_step/robot_sever_limb + name = "disconnect limb (hand)" + implements = list( + TOOL_CROWBAR = 100, + TOOL_HEMOSTAT = 75, + ) + accept_hand = TRUE // You can just pull it off, like putting a limb on + time = 2 SECONDS // It's not a slow procedure + success_sound = 'sound/items/deconstruct.ogg' + +/datum/surgery_step/robot_sever_limb/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results( + user, + target, + span_notice("You begin to disconnect [target]'s [parse_zone(target_zone)]..."), + span_notice("[user] begins to disconnect [target]'s [parse_zone(target_zone)]!"), + span_notice("[user] begins to disconnect [target]'s [parse_zone(target_zone)]!"), + ) + //display_pain(target, "You feel a gruesome pain in your [parse_zone(target_zone)]'s joint!") + +/datum/surgery_step/robot_sever_limb/success(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) + display_results( + user, + target, + span_notice("You sever [target]'s [parse_zone(target_zone)]."), + span_notice("[user] severs [target]'s [parse_zone(target_zone)]!"), + span_notice("[user] severs [target]'s [parse_zone(target_zone)]!"), + ) + display_pain(target, "You can no longer feel your severed [parse_zone(target_zone)]!") + + if(HAS_MIND_TRAIT(user, TRAIT_MORBID) && ishuman(user)) + var/mob/living/carbon/human/morbid_weirdo = user + morbid_weirdo.add_mood_event("morbid_dismemberment", /datum/mood_event/morbid_dismemberment) + + if(surgery.operated_bodypart) + var/obj/item/bodypart/target_limb = surgery.operated_bodypart + target_limb.drop_limb() + return ..() diff --git a/modular_zubbers/code/modules/synths/code/surgery/autopsy.dm b/modular_zubbers/code/modules/synths/code/surgery/autopsy.dm new file mode 100644 index 000000000000..67a1a27ea1a0 --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/autopsy.dm @@ -0,0 +1,35 @@ +/datum/surgery/robot/autopsy + name = "System Failure Analysis (Autopsy)" + surgery_flags = SURGERY_IGNORE_CLOTHES | SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_MORBID_CURIOSITY + possible_locs = list(BODY_ZONE_CHEST) + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/autopsy, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + num_opening_steps = 2 + num_steps_until_closing = 4 + close_surgery = /datum/surgery/robot/close_autopsy + +/datum/surgery/robot/close_autopsy + name = "Close Surgery (System Failure Analysis)" + surgery_flags = SURGERY_IGNORE_CLOTHES | SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_MORBID_CURIOSITY + possible_locs = list(BODY_ZONE_CHEST) + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE + +/datum/surgery/robot/autopsy/can_start(mob/user, mob/living/patient) + if(!..()) + return FALSE + if(patient.stat != DEAD) + return FALSE + if(HAS_TRAIT_FROM(patient, TRAIT_DISSECTED, AUTOPSY_TRAIT)) + return FALSE + return TRUE diff --git a/modular_zubbers/code/modules/synths/code/surgery/bioware_surgery.dm b/modular_zubbers/code/modules/synths/code/surgery/bioware_surgery.dm new file mode 100644 index 000000000000..9decc74d95e1 --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/bioware_surgery.dm @@ -0,0 +1,14 @@ +/datum/surgery/robot/advanced/bioware + name = "Enhancement surgery" + /// What status effect is gained when the surgery is successful? + /// Used to check against other bioware types to prevent stacking. + var/status_effect_gained = /datum/status_effect/bioware + +/datum/surgery/robot/advanced/bioware/can_start(mob/user, mob/living/carbon/human/target) + if(!..()) + return FALSE + if(!istype(target)) + return FALSE + if(target.has_status_effect(status_effect_gained)) + return FALSE + return TRUE diff --git a/modular_zubbers/code/modules/synths/code/surgery/blood_filter.dm b/modular_zubbers/code/modules/synths/code/surgery/blood_filter.dm new file mode 100644 index 000000000000..225fcfa0e664 --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/blood_filter.dm @@ -0,0 +1,31 @@ +/datum/surgery/robot/blood_filter + name = "Hydraulics Purge (Filter Blood)" + possible_locs = list(BODY_ZONE_CHEST) + requires_bodypart_type = BODYTYPE_ROBOTIC + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/filter_blood, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + num_opening_steps = 2 + num_steps_until_closing = 4 + close_surgery = /datum/surgery/robot/close_blood_filter + +/datum/surgery/robot/close_blood_filter + name = "Close Surgery (Hydraulics Purge)" + possible_locs = list(BODY_ZONE_CHEST) + requires_bodypart_type = BODYTYPE_ROBOTIC + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE + +/datum/surgery/robot/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 + return ..() diff --git a/modular_zubbers/code/modules/synths/code/surgery/brain_surgery.dm b/modular_zubbers/code/modules/synths/code/surgery/brain_surgery.dm new file mode 100644 index 000000000000..927a12a102a7 --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/brain_surgery.dm @@ -0,0 +1,57 @@ +/datum/surgery/robot/brain_surgery + name = "Reset Posibrain Logic (Brain Surgery)" + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/fix_robot_brain, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + + num_opening_steps = 3 + num_steps_until_closing = 6 + close_surgery = /datum/surgery/robot/close_brain_surgery + possible_locs = list(BODY_ZONE_CHEST) // The brains are in the chest + requires_bodypart_type = BODYTYPE_ROBOTIC + desc = "A surgical procedure that restores the default behavior logic and personality matrix of an IPC posibrain." + surgery_flags = SURGERY_SELF_OPERABLE + +/datum/surgery/robot/brain_surgery/organic + name = "Brain Repair" + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/fix_brain, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + close_surgery = /datum/surgery/robot/close_brain_surgery/organic + possible_locs = list(BODY_ZONE_HEAD) + desc = "A surgical procedure that repairs an organic brain inside of a robotic shell." + +/datum/surgery/robot/close_brain_surgery + name = "Close Surgery (Reset Posibrain Logic)" + steps = list( + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE + possible_locs = list(BODY_ZONE_CHEST) // The brains are in the chest + requires_bodypart_type = BODYTYPE_ROBOTIC + surgery_flags = SURGERY_SELF_OPERABLE + +/datum/surgery/robot/close_brain_surgery/organic + possible_locs = list(BODY_ZONE_HEAD) + +/datum/surgery/robot/brain_surgery/can_start(mob/user, mob/living/carbon/target, obj/item/tool) + return istype(target.get_organ_slot(ORGAN_SLOT_BRAIN), /obj/item/organ/internal/brain/synth) && ..() + +/datum/surgery/robot/brain_surgery/organic/can_start(mob/user, mob/living/carbon/target, obj/item/tool) + return target.get_organ_slot(ORGAN_SLOT_BRAIN) && !istype(target.get_organ_slot(ORGAN_SLOT_BRAIN), /obj/item/organ/internal/brain/synth) && ..() diff --git a/modular_zubbers/code/modules/synths/code/surgery/brainwashing.dm b/modular_zubbers/code/modules/synths/code/surgery/brainwashing.dm new file mode 100644 index 000000000000..37abc7683dd1 --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/brainwashing.dm @@ -0,0 +1,36 @@ +/datum/surgery/robot/advanced/brainwashing + name = "Reprogramming (Brainwashing)" + 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 + possible_locs = list(BODY_ZONE_HEAD) + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/brainwash/mechanic, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + num_opening_steps = 3 + num_steps_until_closing = 6 + close_surgery = /datum/surgery/robot/advanced/close_brainwashing + +/datum/surgery/robot/advanced/close_brainwashing + name = "Close Surgery (Reprogramming)" + requires_bodypart_type = BODYTYPE_ROBOTIC + possible_locs = list(BODY_ZONE_HEAD) + steps = list( + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + +/datum/surgery/robot/advanced/brainwashing/can_start(mob/user, mob/living/carbon/target) + if(!..()) + return FALSE + var/obj/item/organ/internal/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN) + if(!target_brain) + return FALSE + return TRUE diff --git a/modular_zubbers/code/modules/synths/code/surgery/cavity_implant.dm b/modular_zubbers/code/modules/synths/code/surgery/cavity_implant.dm new file mode 100644 index 000000000000..5f24e6985b09 --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/cavity_implant.dm @@ -0,0 +1,26 @@ +/datum/surgery/robot/cavity_implant + name = "Cavity implant" + possible_locs = list(BODY_ZONE_CHEST) + requires_bodypart_type = BODYTYPE_ROBOTIC + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/handle_cavity, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + num_opening_steps = 2 + num_steps_until_closing = 4 + close_surgery = /datum/surgery/robot/close_cavity_implant + +/datum/surgery/robot/close_cavity_implant + name = "Close Surgery (Cavity implant)" + possible_locs = list(BODY_ZONE_CHEST) + requires_bodypart_type = BODYTYPE_ROBOTIC + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE diff --git a/modular_zubbers/code/modules/synths/code/surgery/cortex_folding.dm b/modular_zubbers/code/modules/synths/code/surgery/cortex_folding.dm new file mode 100644 index 000000000000..2fdb01228f96 --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/cortex_folding.dm @@ -0,0 +1,86 @@ +/datum/surgery/robot/advanced/bioware/cortex_folding + name = "Posibrain Labyrinthian Programming (Cortex Folding)" + 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 + possible_locs = list(BODY_ZONE_HEAD) + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/apply_bioware/fold_cortex/mechanic, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + num_opening_steps = 3 + num_steps_until_closing = 7 + close_surgery = /datum/surgery/robot/advanced/bioware/close_cortex_folding + +/datum/surgery/robot/advanced/bioware/close_cortex_folding + name = "Close Surgery (Posibrain Labyrinthian Programming)" + requires_bodypart_type = BODYTYPE_ROBOTIC + possible_locs = list(BODY_ZONE_HEAD) + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE + +/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) + return FALSE + return ..() + +/datum/surgery_step/apply_bioware/fold_cortex/mechanic + name = "reprogram cortex (multitool)" + accept_hand = FALSE + implements = list( + TOOL_MULTITOOL = 95, + TOOL_HEMOSTAT = 35, + /obj/item/pen = 15 + ) + preop_sound = 'sound/items/taperecorder/tape_flip.ogg' + success_sound = 'sound/items/taperecorder/taperecorder_close.ogg' + +/datum/surgery_step/apply_bioware/fold_cortex/mechanic/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results( + user, + target, + span_notice("You start reprogramming [target]'s neural network into a fractal pattern."), + span_notice("[user] starts reprogramming [target]'s neural network into a fractal pattern."), + span_notice("[user] begins to perform surgery on [target]'s posibrain."), + ) + +/datum/surgery_step/apply_bioware/fold_cortex/mechanic/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) + . = ..() + if(!.) + return + + display_results( + user, + target, + span_notice("You reprogram [target]'s neural network into a fractal pattern!"), + span_notice("[user] reprograms [target]'s neural network into a fractal pattern!"), + span_notice("[user] completes the surgery on [target]'s posibrain."), + ) + +/datum/surgery_step/apply_bioware/fold_cortex/mechanic/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(target.get_organ_slot(ORGAN_SLOT_BRAIN)) + display_results( + user, + target, + span_warning("You screw up, damaging the posibrain!"), + span_warning("[user] screws up, damaging the posibrain!"), + span_notice("[user] completes the surgery on [target]'s posibrain."), + ) + target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 60) + target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_LOBOTOMY) + else + user.visible_message(span_warning("[user] suddenly notices that the posibrain [user.p_they()] [user.p_were()] working on is not there anymore."), span_warning("You suddenly notice that the posibrain you were working on is not there anymore.")) + return FALSE diff --git a/modular_zubbers/code/modules/synths/code/surgery/cortex_imprint.dm b/modular_zubbers/code/modules/synths/code/surgery/cortex_imprint.dm new file mode 100644 index 000000000000..8e9acdf8610e --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/cortex_imprint.dm @@ -0,0 +1,87 @@ +/datum/surgery/robot/advanced/bioware/cortex_imprint + name = "Positronic OS Ver 2.0 (Cortex Imprint)" + 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 + possible_locs = list(BODY_ZONE_HEAD) + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /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/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + num_opening_steps = 3 + num_steps_until_closing = 7 + close_surgery = /datum/surgery/robot/advanced/bioware/close_cortex_imprint + +/datum/surgery/robot/advanced/bioware/close_cortex_imprint + name = "Close Surgery (Positronic OS Ver 2.0)" + requires_bodypart_type = BODYTYPE_ROBOTIC + possible_locs = list(BODY_ZONE_HEAD) + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE + +/datum/surgery/robot/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) + return FALSE + return ..() + +/datum/surgery_step/apply_bioware/imprint_cortex/mechanic + name = "imprint cortex (multitool)" + accept_hand = FALSE + implements = list( + TOOL_MULTITOOL = 95, + TOOL_HEMOSTAT = 35, + /obj/item/pen = 15 + ) + preop_sound = 'sound/items/taperecorder/tape_flip.ogg' + success_sound = 'sound/items/taperecorder/taperecorder_close.ogg' + +/datum/surgery_step/apply_bioware/imprint_cortex/mechanic/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results( + user, + target, + span_notice("You start updating [target]'s operating system to a self-imprinting version."), + span_notice("[user] starts updating [target]'s operating system to a self-imprinting version."), + span_notice("[user] begins to perform surgery on [target]'s posibrain."), + ) + +/datum/surgery_step/apply_bioware/imprint_cortex/mechanic/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) + . = ..() + if(!.) + return + + display_results( + user, + target, + span_notice("You update [target]'s operating system to a self-imprinting version!"), + span_notice("[user] updates [target]'s operating system to a self-imprinting version!"), + span_notice("[user] completes the surgery on [target]'s posibrain."), + ) + +/datum/surgery_step/apply_bioware/imprint_cortex/mechanic/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(target.get_organ_slot(ORGAN_SLOT_BRAIN)) + display_results( + user, + target, + span_warning("You screw up, damaging the posibrain!"), + span_warning("[user] screws up, damaging the posibrain!"), + span_notice("[user] completes the surgery on [target]'s posibrain."), + ) + target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 60) + target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_LOBOTOMY) + else + user.visible_message(span_warning("[user] suddenly notices that the posibrain [user.p_they()] [user.p_were()] working on is not there anymore."), span_warning("You suddenly notice that the brain you were working on is not there anymore.")) + return FALSE diff --git a/modular_zubbers/code/modules/synths/code/surgery/ear_surgery.dm b/modular_zubbers/code/modules/synths/code/surgery/ear_surgery.dm new file mode 100644 index 000000000000..8e5438e3e0f3 --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/ear_surgery.dm @@ -0,0 +1,95 @@ +/datum/surgery/robot/ear_surgery + name = "Repair mics (Ear surgery)" + requires_bodypart_type = BODYTYPE_ROBOTIC + organ_to_manipulate = ORGAN_SLOT_EARS + possible_locs = list(BODY_ZONE_HEAD) + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/robot_fix_ears, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + num_opening_steps = 3 + num_steps_until_closing = 5 + close_surgery = /datum/surgery/robot/close_ear_surgery + surgery_flags = SURGERY_SELF_OPERABLE | SURGERY_REQUIRE_LIMB + +/datum/surgery/robot/close_ear_surgery + name = "Close Surgery (Repair mics)" + requires_bodypart_type = BODYTYPE_ROBOTIC + organ_to_manipulate = ORGAN_SLOT_EARS + possible_locs = list(BODY_ZONE_HEAD) + steps = list( + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE + surgery_flags = SURGERY_SELF_OPERABLE | SURGERY_REQUIRE_LIMB + +/datum/surgery_step/robot_fix_ears + name = "fix ears (multitool)" + implements = list( + TOOL_MULTITOOL = 100, + TOOL_HEMOSTAT = 35, + /obj/item/pen = 15 + ) + time = 6.4 SECONDS + preop_sound = 'sound/items/taperecorder/tape_flip.ogg' + success_sound = 'sound/items/taperecorder/taperecorder_close.ogg' + +/datum/surgery/robot/ear_surgery/can_start(mob/user, mob/living/carbon/target) + ..() + var/obj/item/organ/internal/ears/target_ears = target.get_organ_slot(ORGAN_SLOT_EARS) + if(!target_ears) + return FALSE + return TRUE + +/datum/surgery_step/robot_fix_ears/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results( + user, + target, + span_notice("You begin to fix [target]'s ears..."), + span_notice("[user] begins to fix [target]'s ears."), + span_notice("[user] begins to perform surgery on [target]'s ears."), + ) + //display_pain(target, "You feel a dizzying pain in your head!") + +/datum/surgery_step/robot_fix_ears/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) + var/obj/item/organ/internal/ears/target_ears = target.get_organ_slot(ORGAN_SLOT_EARS) + display_results( + user, + target, + span_notice("You succeed in fixing [target]'s ears."), + span_notice("[user] successfully fixes [target]'s ears!"), + span_notice("[user] completes the surgery on [target]'s ears."), + ) + display_pain(target, "Your head swims, but it seems like you can feel your hearing coming back!") + target_ears.deaf = (20) //deafness works off ticks, so this should work out to about 30-40s + target_ears.set_organ_damage(0) + return ..() + +/datum/surgery_step/robot_fix_ears/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(target.get_organ_by_type(/obj/item/organ/internal/brain)) + display_results( + user, + target, + span_warning("You accidentally stab [target] right in the brain!"), + span_warning("[user] accidentally stabs [target] right in the brain!"), + span_warning("[user] accidentally stabs [target] right in the brain!"), + ) + display_pain(target, "You feel a visceral stabbing pain right through your head, into your brain!") + target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 70) + else + display_results( + user, + target, + span_warning("You accidentally stab [target] right in the brain! Or would have, if [target] had a brain."), + span_warning("[user] accidentally stabs [target] right in the brain! Or would have, if [target] had a brain."), + span_warning("[user] accidentally stabs [target] right in the brain!"), + ) + display_pain(target, "You feel a visceral stabbing pain right through your head!") // dunno who can feel pain w/o a brain but may as well be consistent. + return FALSE diff --git a/modular_zubbers/code/modules/synths/code/surgery/eye_surgery.dm b/modular_zubbers/code/modules/synths/code/surgery/eye_surgery.dm new file mode 100644 index 000000000000..fdcaf3ff2dbb --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/eye_surgery.dm @@ -0,0 +1,89 @@ +/datum/surgery/robot/eye_surgery + name = "Repair optics (Eye surgery)" + requires_bodypart_type = BODYTYPE_ROBOTIC + organ_to_manipulate = ORGAN_SLOT_EYES + possible_locs = list(BODY_ZONE_PRECISE_EYES) + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/robot_fix_eyes, + /datum/surgery_step/mechanic_close, + ) + num_opening_steps = 1 + num_steps_until_closing = 3 + close_surgery = /datum/surgery/robot/close_eye_surgery + surgery_flags = SURGERY_SELF_OPERABLE | SURGERY_REQUIRE_LIMB + +/datum/surgery/robot/close_eye_surgery + name = "Close Surgery (Repair optics)" + requires_bodypart_type = BODYTYPE_ROBOTIC + organ_to_manipulate = ORGAN_SLOT_EYES + possible_locs = list(BODY_ZONE_PRECISE_EYES) + steps = list( + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE + surgery_flags = SURGERY_SELF_OPERABLE | SURGERY_REQUIRE_LIMB + +/datum/surgery_step/robot_fix_eyes + name = "fix eyes (multitool)" + implements = list( + TOOL_MULTITOOL = 100, + TOOL_HEMOSTAT = 35, + /obj/item/pen = 15 + ) + time = 6.4 SECONDS + preop_sound = 'sound/items/taperecorder/tape_flip.ogg' + success_sound = 'sound/items/taperecorder/taperecorder_close.ogg' + +/datum/surgery/robot/eye_surgery/can_start(mob/user, mob/living/carbon/target) + ..() + var/obj/item/organ/internal/eyes/target_eyes = target.get_organ_slot(ORGAN_SLOT_EYES) + return !isnull(target_eyes) + +/datum/surgery_step/robot_fix_eyes/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results( + user, + target, + span_notice("You begin to fix [target]'s eyes..."), + span_notice("[user] begins to fix [target]'s eyes."), + span_notice("[user] begins to perform surgery on [target]'s eyes."), + ) + //display_pain(target, "You feel a stabbing pain in your eyes!") + +/datum/surgery_step/robot_fix_eyes/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) + var/obj/item/organ/internal/eyes/target_eyes = target.get_organ_slot(ORGAN_SLOT_EYES) + user.visible_message(span_notice("[user] successfully fixes [target]'s eyes!"), span_notice("You succeed in fixing [target]'s eyes.")) + display_results( + user, + target, + span_notice("You succeed in fixing [target]'s eyes."), + span_notice("[user] successfully fixes [target]'s eyes!"), + span_notice("[user] completes the surgery on [target]'s eyes."), + ) + display_pain(target, "Your vision blurs, but it seems like you can see a little better now!") + target.remove_status_effect(/datum/status_effect/temporary_blindness) + target.set_eye_blur_if_lower(70 SECONDS) //this will fix itself slowly. + target_eyes.set_organ_damage(0) // heals nearsightedness and blindness from eye damage + return ..() + +/datum/surgery_step/robot_fix_eyes/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(target.get_organ_by_type(/obj/item/organ/internal/brain)) + display_results( + user, + target, + span_warning("You accidentally stab [target] right in the brain!"), + span_warning("[user] accidentally stabs [target] right in the brain!"), + span_warning("[user] accidentally stabs [target] right in the brain!"), + ) + display_pain(target, "You feel a visceral stabbing pain right through your head, into your brain!") + target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 70) + else + display_results( + user, + target, + span_warning("You accidentally stab [target] right in the brain! Or would have, if [target] had a brain."), + span_warning("[user] accidentally stabs [target] right in the brain! Or would have, if [target] had a brain."), + span_warning("[user] accidentally stabs [target] right in the brain!"), + ) + display_pain(target, "You feel a visceral stabbing pain right through your head!") // dunno who can feel pain w/o a brain but may as well be consistent. + return FALSE diff --git a/modular_zubbers/code/modules/synths/code/surgery/implant_removal.dm b/modular_zubbers/code/modules/synths/code/surgery/implant_removal.dm new file mode 100644 index 000000000000..63b87bc3f14e --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/implant_removal.dm @@ -0,0 +1,36 @@ +/datum/surgery_step/extract_implant/robot + name = "extract implant (crowbar)" + implements = list( + TOOL_CROWBAR = 100, + TOOL_HEMOSTAT = 75, + /obj/item/kitchen/fork = 55) + preop_sound = 'sound/items/tools/crowbar_prying.ogg' + success_sound = 'sound/items/deconstruct.ogg' + +/datum/surgery/robot/implant_removal + name = "Uninstall Implant" + requires_bodypart_type = BODYTYPE_ROBOTIC + possible_locs = list(BODY_ZONE_CHEST) + target_mobtypes = list(/mob/living/carbon/human) // Simpler mobs don't have bodypart types + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/extract_implant/robot, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close,) + num_opening_steps = 2 + num_steps_until_closing = 5 + close_surgery = /datum/surgery/robot/close_implant_removal + surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_SELF_OPERABLE + +/datum/surgery/robot/close_implant_removal + name = "Close Surgery (Uninstall Implant)" + requires_bodypart_type = BODYTYPE_ROBOTIC + possible_locs = list(BODY_ZONE_CHEST) + target_mobtypes = list(/mob/living/carbon/human) // Simpler mobs don't have bodypart types + steps = list( + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close,) + is_closer = TRUE + surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_SELF_OPERABLE diff --git a/modular_zubbers/code/modules/synths/code/surgery/ligament_reinforcement.dm b/modular_zubbers/code/modules/synths/code/surgery/ligament_reinforcement.dm new file mode 100644 index 000000000000..6dfde0489b4b --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/ligament_reinforcement.dm @@ -0,0 +1,34 @@ +/datum/surgery/robot/advanced/bioware/ligament_reinforcement + name = "Anchor Point Reinforcement (Ligament 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 + possible_locs = list(BODY_ZONE_CHEST) + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /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/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + num_opening_steps = 3 + num_steps_until_closing = 7 + close_surgery = /datum/surgery/robot/advanced/bioware/close_ligament_reinforcement + + status_effect_gained = /datum/status_effect/bioware/ligaments/reinforced + +/datum/surgery/robot/advanced/bioware/close_ligament_reinforcement + requires_bodypart_type = BODYTYPE_ROBOTIC + possible_locs = list(BODY_ZONE_CHEST) + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE diff --git a/modular_zubbers/code/modules/synths/code/surgery/lipoplasty.dm b/modular_zubbers/code/modules/synths/code/surgery/lipoplasty.dm new file mode 100644 index 000000000000..f059b23fe5dd --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/lipoplasty.dm @@ -0,0 +1,77 @@ +/datum/surgery/robot/lipoplasty + name = "Nutrient Reserve Expulsion (Lipoplasty)" + requires_bodypart_type = BODYTYPE_ROBOTIC + possible_locs = list(BODY_ZONE_CHEST) + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /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/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + +/datum/surgery/robot/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 + return ..() + +/datum/surgery_step/cut_fat/mechanic/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results( + user, + target, + span_notice("You begin to open [target]'s fat containers..."), + span_notice("[user] begin to open [target]'s fat containers."), + span_notice("[user] begins to open [target]'s [target_zone] with [tool]."), + ) + +/datum/surgery_step/cut_fat/mechanic/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results) + display_results( + user, + target, + span_notice("You open [target]'s fat containers."), + span_notice("[user] opens [target]'s fat containers!"), + span_notice("[user] finishes opening [target]'s [target_zone]."), + ) + return TRUE + +/datum/surgery_step/remove_fat/mechanic/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results( + user, + target, + span_notice("You begin to expel [target]'s loose fat..."), + span_notice("[user] begins to exepel [target]'s loose fat!"), + span_notice("[user] begins to expel something from [target]'s [target_zone]."), + ) + +/datum/surgery_step/remove_fat/mechanic/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) + display_results( + user, + target, + span_notice("You expel [target]'s fat."), + span_notice("[user] expel [target]'s fat!"), + span_notice("[user] expel [target]'s fat!"), + ) + target.overeatduration = 0 //patient is unfatted + var/removednutriment = target.nutrition + target.set_nutrition(NUTRITION_LEVEL_WELL_FED) + removednutriment -= NUTRITION_LEVEL_WELL_FED //whatever was removed goes into the meat + var/mob/living/carbon/human/human = target + var/typeofmeat = /obj/item/food/meat/slab/human + + if(target.flags_1 & HOLOGRAM_1) + typeofmeat = null + else if(human.dna && human.dna.species) + typeofmeat = human.dna.species.meat + + if(typeofmeat) + var/obj/item/food/meat/slab/human/newmeat = new typeofmeat + newmeat.name = "fatty meat" + newmeat.desc = "Extremely fatty tissue taken from a patient." + newmeat.subjectname = human.real_name + newmeat.subjectjob = human.job + newmeat.reagents.add_reagent (/datum/reagent/consumable/nutriment, (removednutriment / 15)) //To balance with nutriment_factor of nutriment + newmeat.forceMove(target.loc) + return ..() diff --git a/modular_zubbers/code/modules/synths/code/surgery/lobotomy.dm b/modular_zubbers/code/modules/synths/code/surgery/lobotomy.dm new file mode 100644 index 000000000000..01b666ad254f --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/lobotomy.dm @@ -0,0 +1,130 @@ +/datum/surgery/robot/advanced/lobotomy + name = "Destructive Posibrain Defragmentation (Lobotomy)" + 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 + possible_locs = list(BODY_ZONE_HEAD) + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/lobotomize/mechanic, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + num_opening_steps = 3 + num_steps_until_closing = 6 + close_surgery = /datum/surgery/robot/advanced/close_lobotomy + +/datum/surgery/robot/advanced/close_lobotomy + name = "Close Surgery (Destructive Posibrain Defragmentation)" + requires_bodypart_type = BODYTYPE_ROBOTIC + possible_locs = list(BODY_ZONE_HEAD) + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE + +/datum/surgery/robot/advanced/lobotomy/can_start(mob/user, mob/living/carbon/target) + . = ..() + if(!.) + return FALSE + var/obj/item/organ/internal/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN) + if(!target_brain) + return FALSE + return TRUE + +/datum/surgery_step/lobotomize/mechanic/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results( + user, + target, + span_notice("You begin to perform a lobotomy on [target]'s posibrain..."), + span_notice("[user] begins to perform a lobotomy on [target]'s posibrain."), + span_notice("[user] begins to perform surgery on [target]'s posibrain."), + ) + +/datum/surgery_step/lobotomize/mechanic/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) + display_results( + user, + target, + span_notice("You succeed in lobotomizing [target]."), + span_notice("[user] successfully lobotomizes [target]!"), + span_notice("[user] completes the surgery on [target]'s posibrain."), + ) + + target.cure_all_traumas(TRAUMA_RESILIENCE_LOBOTOMY) + if(target.mind && target.mind.has_antag_datum(/datum/antagonist/brainwashed)) + target.mind.remove_antag_datum(/datum/antagonist/brainwashed) + if(prob(75)) // 75% chance to get a trauma from this + switch(rand(1, 3))//Now let's see what hopefully-not-important part of the brain we cut off + if(1) + target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_MAGIC) + if(2) + if(HAS_TRAIT(target, TRAIT_SPECIAL_TRAUMA_BOOST) && prob(50)) + target.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, TRAUMA_RESILIENCE_MAGIC) + else + target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_MAGIC) + if(3) + target.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, TRAUMA_RESILIENCE_MAGIC) + return ..() + +/datum/surgery_step/lobotomize/mechanic/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + var/obj/item/organ/internal/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN) + if(target_brain) + display_results( + user, + target, + span_warning("You remove the wrong files, causing more damage!"), + span_notice("[user] successfully lobotomizes [target]!"), + span_notice("[user] completes the surgery on [target]'s posibrain."), + ) + target_brain.apply_organ_damage(80) + switch(rand(1,3)) + if(1) + target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_MAGIC) + if(2) + if(HAS_TRAIT(target, TRAIT_SPECIAL_TRAUMA_BOOST) && prob(50)) + target.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, TRAUMA_RESILIENCE_MAGIC) + else + target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_MAGIC) + if(3) + target.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, TRAUMA_RESILIENCE_MAGIC) + else + user.visible_message(span_warning("[user] suddenly notices that the posibrain [user.p_they()] [user.p_were()] working on is not there anymore."), span_warning("You suddenly notice that the posibrain you were working on is not there anymore.")) + return FALSE + +/datum/surgery/robot/advanced/blessed_lobotomy + name = "Reticulate Posibrain Splines (Blessed Lobotomy)" + desc = "A surgical procedure that refurbishes low level components in the posibrain, to fix the strongest trauma errors." + possible_locs = list(BODY_ZONE_CHEST) // The brains are in the chest + requires_bodypart_type = BODYTYPE_ROBOTIC + target_mobtypes = list(/mob/living/carbon/human) + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/fix_robot_brain/advanced, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + num_opening_steps = 3 + num_steps_until_closing = 6 + close_surgery = /datum/surgery/robot/advanced/close_blessed_lobotomy + +/datum/surgery/robot/advanced/close_blessed_lobotomy + name = "Close Surgery (Reticulate Posibrain Splines)" + possible_locs = list(BODY_ZONE_CHEST) // The brains are in the chest + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE diff --git a/modular_zubbers/code/modules/synths/code/surgery/muscled_veins.dm b/modular_zubbers/code/modules/synths/code/surgery/muscled_veins.dm new file mode 100644 index 000000000000..2970f05e39aa --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/muscled_veins.dm @@ -0,0 +1,58 @@ +/datum/surgery/robot/advanced/bioware/muscled_veins + name = "Hydraulics Redundancy Subroutine (Muscled Veins)" + desc = "A robotic upgrade which adds sophisticated hydraulics redundancies, allowing a patient to pump hydraulic fluid without a dedicated pump." + requires_bodypart_type = BODYTYPE_ROBOTIC + possible_locs = list(BODY_ZONE_CHEST) + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/apply_bioware/muscled_veins/mechanic, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + num_opening_steps = 3 + num_steps_until_closing = 7 + close_surgery = /datum/surgery/robot/advanced/bioware/close_muscled_veins + + status_effect_gained = /datum/status_effect/bioware/heart/muscled_veins + +/datum/surgery/robot/advanced/bioware/close_muscled_veins + requires_bodypart_type = BODYTYPE_ROBOTIC + possible_locs = list(BODY_ZONE_CHEST) + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE + +/datum/surgery_step/apply_bioware/muscled_veins/mechanic + name = "optimize hydraulics (hand)" + +/datum/surgery_step/apply_bioware/muscled_veins/mechanic/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results( + user, + target, + span_notice("You start attaching synth-muscles to [target]'s hydraulic system."), + span_notice("[user] starts attaching synth-muscles to [target]'s hydraulic system."), + span_notice("[user] starts manipulating [target]'s hydraulic system."), + ) + +/datum/surgery_step/apply_bioware/muscled_veins/mechanic/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) + . = ..() + if(!.) + return + + display_results( + user, + target, + span_notice("You reshape [target]'s hydraulic system, adding makeshift redundant pumps!"), + span_notice("[user] reshapes [target]'s hydraulic system, adding makeshift redundant pumps!"), + span_notice("[user] finishes manipulating [target]'s hydraulic system."), + ) diff --git a/modular_zubbers/code/modules/synths/code/surgery/nerve_grounding.dm b/modular_zubbers/code/modules/synths/code/surgery/nerve_grounding.dm new file mode 100644 index 000000000000..a9b2828da329 --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/nerve_grounding.dm @@ -0,0 +1,56 @@ +/datum/surgery/robot/advanced/bioware/nerve_grounding + name = "System Shock Dampening (Nerve Grounding)" + desc = "A robotic upgrade which reroutes and grounds the patient's electricals, protecting them from electrical shocks." + requires_bodypart_type = BODYTYPE_ROBOTIC + possible_locs = list(BODY_ZONE_CHEST) + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/apply_bioware/ground_nerves/mechanic, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + num_opening_steps = 3 + num_steps_until_closing = 7 + close_surgery = /datum/surgery/robot/advanced/bioware/close_nerve_grounding + + status_effect_gained = /datum/status_effect/bioware/nerves/grounded + +/datum/surgery/robot/advanced/bioware/close_nerve_grounding + name = "Close Surgery (System Shock Dampening)" + requires_bodypart_type = BODYTYPE_ROBOTIC + possible_locs = list(BODY_ZONE_CHEST) + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE + +/datum/surgery_step/apply_bioware/ground_nerves/mechanic + name = "ground electricals (hand)" + +/datum/surgery_step/apply_bioware/ground_nerves/mechanic/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results( + user, + target, + span_notice("You start rerouting [target]'s electricals."), + span_notice("[user] starts rerouting [target]'s electricals."), + span_notice("[user] starts manipulating [target]'s electrical system."), + ) + +/datum/surgery_step/apply_bioware/ground_nerves/mechanic/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) + display_results( + user, + target, + span_notice("You successfully reroute [target]'s electrical system!"), + span_notice("[user] successfully reroutes [target]'s electrical system!"), + span_notice("[user] finishes manipulating [target]'s electrical system."), + ) + return ..() diff --git a/modular_zubbers/code/modules/synths/code/surgery/nerve_splicing.dm b/modular_zubbers/code/modules/synths/code/surgery/nerve_splicing.dm new file mode 100644 index 000000000000..cd82488cb6c2 --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/nerve_splicing.dm @@ -0,0 +1,53 @@ +/datum/surgery/robot/advanced/bioware/nerve_splicing + name = "System Automatic Reset Subroutine (Nerve Splicing)" + desc = "A robotic upgrade which upgrades a patient's automatic systems, making them more resistant to stuns." + requires_bodypart_type = BODYTYPE_ROBOTIC + possible_locs = list(BODY_ZONE_CHEST) + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/apply_bioware/splice_nerves/mechanic, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + +/datum/surgery/robot/advanced/bioware/close_nerve_splicing + name = "Close Surgery (System Automatic Reset Subroutine)" + requires_bodypart_type = BODYTYPE_ROBOTIC + possible_locs = list(BODY_ZONE_CHEST) + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + +/datum/surgery_step/apply_bioware/splice_nerves/mechanic + name = "splice electricals (hand)" + +/datum/surgery_step/apply_bioware/splice_nerves/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results( + user, + target, + span_notice("You start splicing together [target]'s electricals."), + span_notice("[user] starts splicing together [target]'s electricals."), + span_notice("[user] starts manipulating [target]'s electrical system."), + ) + +/datum/surgery_step/apply_bioware/splice_nerves/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) + . = ..() + if(!.) + return + + display_results( + user, + target, + span_notice("You successfully splice [target]'s electrical system!"), + span_notice("[user] successfully splices [target]'s electrical system!"), + span_notice("[user] finishes manipulating [target]'s electrical system."), + ) diff --git a/modular_zubbers/code/modules/synths/code/surgery/organ_manipulation.dm b/modular_zubbers/code/modules/synths/code/surgery/organ_manipulation.dm new file mode 100644 index 000000000000..d50e71e3f630 --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/organ_manipulation.dm @@ -0,0 +1,108 @@ +/datum/surgery/robot/organ_manipulation + name = "Hardware Manipulation (Organ Manipulation)" + requires_bodypart_type = BODYTYPE_ROBOTIC + surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB | SURGERY_MORBID_CURIOSITY | SURGERY_SELF_OPERABLE + possible_locs = list(BODY_ZONE_CHEST, BODY_ZONE_HEAD) + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/manipulate_organs/internal/mechanic, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + num_opening_steps = 3 + num_steps_until_closing = 5 + close_surgery = /datum/surgery/robot/close_organ_manipulation + +/datum/surgery/robot/close_organ_manipulation/ + name = "Close Surgery (Hardware Manipulation)" + requires_bodypart_type = BODYTYPE_ROBOTIC + surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB | SURGERY_MORBID_CURIOSITY | SURGERY_SELF_OPERABLE + possible_locs = list(BODY_ZONE_CHEST, BODY_ZONE_HEAD) + steps = list( + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE + +/datum/surgery/robot/organ_manipulation/soft + possible_locs = list( + BODY_ZONE_PRECISE_GROIN, + BODY_ZONE_PRECISE_EYES, + BODY_ZONE_PRECISE_MOUTH, + BODY_ZONE_L_ARM, + BODY_ZONE_R_ARM, + ) + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/manipulate_organs/internal/mechanic, + /datum/surgery_step/mechanic_close, + ) + num_opening_steps = 1 + num_steps_until_closing = 3 + close_surgery = /datum/surgery/robot/close_organ_manipulation/soft + +/datum/surgery/robot/close_organ_manipulation/soft + possible_locs = list( + BODY_ZONE_PRECISE_GROIN, + BODY_ZONE_PRECISE_EYES, + BODY_ZONE_PRECISE_MOUTH, + BODY_ZONE_L_ARM, + BODY_ZONE_R_ARM, + ) + steps = list( + /datum/surgery_step/mechanic_close, + ) + +/datum/surgery/robot/organ_manipulation/external + name = "Chassis Manipulation (Feature Manipulation)" + surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB | SURGERY_SELF_OPERABLE + possible_locs = list( + BODY_ZONE_CHEST, + BODY_ZONE_HEAD, + BODY_ZONE_PRECISE_GROIN, + BODY_ZONE_L_ARM, + BODY_ZONE_R_ARM, + BODY_ZONE_L_LEG, + BODY_ZONE_R_LEG, + ) + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/manipulate_organs/external/mechanic, + /datum/surgery_step/mechanic_close, + ) + num_opening_steps = 1 + num_steps_until_closing = 2 + close_surgery = /datum/surgery/robot/close_organ_manipulation/external + +/datum/surgery/robot/close_organ_manipulation/external + name = "Close Surgery (Chassis Manipulation)" + possible_locs = list( + BODY_ZONE_CHEST, + BODY_ZONE_HEAD, + BODY_ZONE_PRECISE_GROIN, + BODY_ZONE_L_ARM, + BODY_ZONE_R_ARM, + BODY_ZONE_L_LEG, + BODY_ZONE_R_LEG, + ) + steps = list( + /datum/surgery_step/mechanic_close, + ) + +/datum/surgery_step/manipulate_organs/internal/mechanic + implements_extract = list(TOOL_HEMOSTAT = 75, TOOL_CROWBAR = 100, /obj/item/kitchen/fork = 55) + name = "manipulate hardware (crowbar/hardware)" + preop_sound = 'sound/items/tools/crowbar_prying.ogg' + success_sound = 'sound/items/tools/crowbar.ogg' + +/datum/surgery_step/manipulate_organs/external/mechanic + implements_extract = list(TOOL_HEMOSTAT = 75, TOOL_CROWBAR = 100, /obj/item/kitchen/fork = 55) + name = "manipulate chassis features (crowbar/feature)" + preop_sound = 'sound/items/tools/crowbar_prying.ogg' + success_sound = 'sound/items/tools/crowbar.ogg' diff --git a/modular_zubbers/code/modules/synths/code/surgery/pacification.dm b/modular_zubbers/code/modules/synths/code/surgery/pacification.dm new file mode 100644 index 000000000000..01d263c89238 --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/pacification.dm @@ -0,0 +1,69 @@ +/datum/surgery/robot/advanced/pacify + name = "Aggression Suppression Programming (Pacification)" + 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 + possible_locs = list(BODY_ZONE_HEAD) + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/pacify/mechanic, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + num_opening_steps = 3 + num_steps_until_closing = 6 + close_surgery = /datum/surgery/robot/advanced/close_pacify + +/datum/surgery/robot/advanced/close_pacify + name = "Close Surgery (Aggression Suppression Programming)" + requires_bodypart_type = BODYTYPE_ROBOTIC + possible_locs = list(BODY_ZONE_HEAD) + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE + +/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) + if(!target_brain) + return FALSE + +/datum/surgery_step/pacify/mechanic/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results( + user, + target, + span_notice("You begin to pacify [target]..."), + span_notice("[user] begins to fix [target]'s posibrain."), + span_notice("[user] begins to perform surgery on [target]'s posibrain."), + ) + display_pain(target, "Your head pounds with unimaginable pain!") + +/datum/surgery_step/pacify/mechanic/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) + display_results( + user, + target, + span_notice("You succeed in neurologically pacifying [target]."), + span_notice("[user] successfully fixes [target]'s posibrain!"), + span_notice("[user] completes the surgery on [target]'s posibrain."), + ) + target.gain_trauma(/datum/brain_trauma/severe/pacifism, TRAUMA_RESILIENCE_LOBOTOMY) + return ..() + +/datum/surgery_step/pacify/mechanic/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results( + user, + target, + span_notice("You screw up, rewiring [target]'s brain the wrong way around..."), + span_warning("[user] screws up, causing posibrain damage!"), + span_notice("[user] completes the surgery on [target]'s posibrain."), + ) + target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_LOBOTOMY) + return FALSE diff --git a/modular_zubbers/code/modules/synths/code/surgery/positronic_restoration.dm b/modular_zubbers/code/modules/synths/code/surgery/positronic_restoration.dm new file mode 100644 index 000000000000..70ae4ad85a49 --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/positronic_restoration.dm @@ -0,0 +1,38 @@ +/datum/surgery/robot/positronic_restoration + name = "Systems Reboot (Revival)" + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/finalize_positronic_restoration, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + + target_mobtypes = list(/mob/living/carbon/human) + possible_locs = list(BODY_ZONE_CHEST) + requires_bodypart_type = BODYTYPE_ROBOTIC + desc = "A surgical procedure that reboots a synthetic body." + num_opening_steps = 3 + num_steps_until_closing = 6 + close_surgery = /datum/surgery/robot/close_positronic_restoration + +/datum/surgery/robot/close_positronic_restoration + name = "Close Surgery (Posibrain Reboot)" + steps = list( + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE + target_mobtypes = list(/mob/living/carbon/human) + possible_locs = list(BODY_ZONE_CHEST) + requires_bodypart_type = BODYTYPE_ROBOTIC + +/datum/surgery/robot/chassis_restoration/can_start(mob/user, mob/living/carbon/target) + if(!..() || target.stat != DEAD || !target.get_organ_slot(ORGAN_SLOT_BRAIN)) + return FALSE + + return TRUE diff --git a/modular_zubbers/code/modules/synths/code/surgery/robot_healing.dm b/modular_zubbers/code/modules/synths/code/surgery/robot_healing.dm new file mode 100644 index 000000000000..c86f3fad5046 --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/robot_healing.dm @@ -0,0 +1,60 @@ +/datum/surgery/robot/healing + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/robot_heal, + /datum/surgery_step/mechanic_close, + ) + + target_mobtypes = list(/mob/living/carbon/human) + possible_locs = list(BODY_ZONE_CHEST) + replaced_by = /datum/surgery + requires_bodypart_type = BODYTYPE_ROBOTIC + surgery_flags = SURGERY_IGNORE_CLOTHES | SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_SELF_OPERABLE + + /// The step to use in the 4th surgery step. + var/healing_step_type + /// If true, doesn't send the surgery preop message. Set during surgery. + var/surgery_preop_message_sent = FALSE + num_opening_steps = 1 + num_steps_until_closing = 2 + close_surgery = /datum/surgery/robot/close_healing + +/datum/surgery/robot/close_healing + steps = list( + /datum/surgery_step/mechanic_close, + ) + target_mobtypes = list(/mob/living/carbon/human) + possible_locs = list(BODY_ZONE_CHEST) + replaced_by = /datum/surgery + requires_bodypart_type = BODYTYPE_ROBOTIC + surgery_flags = SURGERY_IGNORE_CLOTHES | SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_SELF_OPERABLE + is_closer = TRUE + +/datum/surgery/robot/healing/New(surgery_target, surgery_location, surgery_bodypart) + ..() + if(healing_step_type) + steps = list( + /datum/surgery_step/mechanic_open, + healing_step_type, + /datum/surgery_step/mechanic_close, + ) + +/datum/surgery/robot/healing/basic + name = "Repair robotics (Basic)" + desc = "A surgical procedure that provides repairs and maintenance to robotic parts. Is slightly more efficient when the patient is severely damaged." + healing_step_type = /datum/surgery_step/robot_heal/basic + replaced_by = /datum/surgery/robot/healing/upgraded + +/datum/surgery/robot/healing/upgraded + name = "Repair robotics (Adv.)" + desc = "A surgical procedure that provides highly effective repairs and maintenance to robotic parts. Is somewhat more efficient when the patient is severely damaged." + healing_step_type = /datum/surgery_step/robot_heal/upgraded + replaced_by = /datum/surgery/robot/healing/experimental + requires_tech = TRUE + +/datum/surgery/robot/healing/experimental + name = "Repair robotics (Exp.)" + desc = "A surgical procedure that quickly provides highly effective repairs and maintenance to robotic parts. Is moderately more efficient when the patient is severely damaged." + healing_step_type = /datum/surgery_step/robot_heal/experimental + replaced_by = null + requires_tech = TRUE diff --git a/modular_zubbers/code/modules/synths/code/surgery/robot_heart_surgery.dm b/modular_zubbers/code/modules/synths/code/surgery/robot_heart_surgery.dm new file mode 100644 index 000000000000..1d852e6ae49b --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/robot_heart_surgery.dm @@ -0,0 +1,40 @@ +/// Hydraulic Pump Surgery +/datum/surgery/robot/hydraulic_maintenance + name = "Hydraulic Pump Maintenance" + requires_bodypart_type = BODYTYPE_ROBOTIC + surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB | SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/hydraulic/repair, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + target_mobtypes = list(/mob/living/carbon/human) + possible_locs = list(BODY_ZONE_CHEST) + desc = "A mechanical surgery procedure designed to repair an androids internal hydraulic pump." + num_opening_steps = 3 + num_steps_until_closing = 6 + close_surgery = /datum/surgery/robot/close_hydraulic_maintenance + +/datum/surgery/robot/close_hydraulic_maintenance + name = "Close Surgery (Hydraulic Pump Maintenance)" + requires_bodypart_type = BODYTYPE_ROBOTIC + surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB | SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE + target_mobtypes = list(/mob/living/carbon/human) + possible_locs = list(BODY_ZONE_CHEST) + +/datum/surgery/robot/hydraulic_maintenance/can_start(mob/user, mob/living/carbon/target) + var/obj/item/organ/internal/heart/hydraulic_pump = target.get_organ_slot(ORGAN_SLOT_HEART) + if(isnull(hydraulic_pump) || !issynthetic(target) || hydraulic_pump.damage < 10) + return FALSE + return ..() diff --git a/modular_zubbers/code/modules/synths/code/surgery/robot_liver_surgery.dm b/modular_zubbers/code/modules/synths/code/surgery/robot_liver_surgery.dm new file mode 100644 index 000000000000..abb1fd6f9298 --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/robot_liver_surgery.dm @@ -0,0 +1,40 @@ +/// Reagent Processor Repair surgery +/datum/surgery/robot/reagent_pump + name = "Reagent Processor Manual Reset" + surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB | SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/reagent_pump/repair, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + target_mobtypes = list(/mob/living/carbon/human) + possible_locs = list(BODY_ZONE_CHEST) + requires_bodypart_type = BODYTYPE_ROBOTIC + desc = "A mechanical list of actions to reset the reagent processor and purge built up minerals." + num_opening_steps = 3 + num_steps_until_closing = 6 + close_surgery = /datum/surgery/robot/close_reagent_pump + +/datum/surgery/robot/close_reagent_pump + name = "Close Surgery (Reagent Processor Manual Reset)" + requires_bodypart_type = BODYTYPE_ROBOTIC + surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB | SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE + target_mobtypes = list(/mob/living/carbon/human) + possible_locs = list(BODY_ZONE_CHEST) + +/datum/surgery/robot/reagent_pump/can_start(mob/user, mob/living/carbon/target) + var/obj/item/organ/internal/liver/reagent_processor = target.get_organ_slot(ORGAN_SLOT_LIVER) + if(isnull(reagent_processor) || !issynthetic(target) || reagent_processor.damage < 10) + return FALSE + return ..() diff --git a/modular_zubbers/code/modules/synths/code/surgery/robot_lung_surgery.dm b/modular_zubbers/code/modules/synths/code/surgery/robot_lung_surgery.dm new file mode 100644 index 000000000000..42ca347a8517 --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/robot_lung_surgery.dm @@ -0,0 +1,43 @@ +/// Heatsink Repair Surgery +/datum/surgery/robot/heatsink + name = "Heatsink Maintenance" + surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB | SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/weld_plating_slice, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/heatsink/repair, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/weld_plating, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + target_mobtypes = list(/mob/living/carbon/human) + possible_locs = list(BODY_ZONE_CHEST) + requires_bodypart_type = BODYTYPE_ROBOTIC + desc = "A mechanical surgery procedure designed to repair an androids internal heatsink." + num_opening_steps = 4 + num_steps_until_closing = 7 + close_surgery = /datum/surgery/robot/close_heatsink + +/datum/surgery/robot/close_heatsink + name = "Close Surgery (Heatsink Maintenance)" + requires_bodypart_type = BODYTYPE_ROBOTIC + surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB | SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/reattach_plating, + /datum/surgery_step/weld_plating, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE + target_mobtypes = list(/mob/living/carbon/human) + possible_locs = list(BODY_ZONE_CHEST) + +/datum/surgery/robot/heatsink/can_start(mob/user, mob/living/carbon/target, obj/item/tool) + var/obj/item/organ/internal/lungs/target_lungs = target.get_organ_slot(ORGAN_SLOT_LUNGS) + if(isnull(target_lungs) || !issynthetic(target) || target_lungs.damage < 10 ) + return FALSE + return ..() diff --git a/modular_zubbers/code/modules/synths/code/surgery/robot_stomach_surgery.dm b/modular_zubbers/code/modules/synths/code/surgery/robot_stomach_surgery.dm new file mode 100644 index 000000000000..f2441c990527 --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/robot_stomach_surgery.dm @@ -0,0 +1,40 @@ +/// Bioreactor Maintenance +/datum/surgery/robot/bioreactor + name = "Bioreactor Maintenance" + surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB | SURGERY_SELF_OPERABLE + organ_to_manipulate = ORGAN_SLOT_STOMACH + possible_locs = list(BODY_ZONE_CHEST) + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/bioreactor/repair, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + desc = "A mechanical surgery procedure designed to repair an androids internal bioreactor." + num_opening_steps = 3 + num_steps_until_closing = 6 + close_surgery = /datum/surgery/robot/close_bioreactor + +/datum/surgery/robot/close_bioreactor + name = "Close Surgery (Bioreactor Maintenance)" + requires_bodypart_type = BODYTYPE_ROBOTIC + surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB | SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE + target_mobtypes = list(/mob/living/carbon/human) + possible_locs = list(BODY_ZONE_CHEST) + +/datum/surgery/robot/bioreactor/can_start(mob/user, mob/living/carbon/target) + var/obj/item/organ/internal/stomach/bioreactor = target.get_organ_slot(ORGAN_SLOT_STOMACH) + if(isnull(bioreactor) || !issynthetic(target) || bioreactor.damage < 10) + return FALSE + return ..() diff --git a/modular_zubbers/code/modules/synths/code/surgery/sleeper_protocol.dm b/modular_zubbers/code/modules/synths/code/surgery/sleeper_protocol.dm new file mode 100644 index 000000000000..0140672c41ad --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/sleeper_protocol.dm @@ -0,0 +1,48 @@ +/datum/surgery/robot/advanced/brainwashing_sleeper + 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 + possible_locs = list(BODY_ZONE_HEAD) + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/brainwash/sleeper_agent/mechanic, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + num_opening_steps = 3 + num_steps_until_closing = 6 + close_surgery = /datum/surgery/robot/advanced/close_brainwashing_sleeper + +/datum/surgery/robot/advanced/close_brainwashing_sleeper + name = "Close Surgery (Sleeper Agent Reprogramming)" + requires_bodypart_type = BODYTYPE_ROBOTIC + possible_locs = list(BODY_ZONE_HEAD) + steps = list( + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE + +/datum/surgery/advanced/brainwashing_sleeper/can_start(mob/user, mob/living/carbon/target) + . = ..() + if(!.) + return FALSE + var/obj/item/organ/internal/brain/target_brain = target.get_organ_slot(ORGAN_SLOT_BRAIN) + if(!target_brain) + return FALSE + return TRUE + +/datum/surgery_step/brainwash/sleeper_agent/mechanic/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + objective = pick(possible_objectives) + display_results( + user, + target, + span_notice("You begin to reprogram [target]..."), + "[user] begins to fix [target]'s posibrain.", + "[user] begins to perform surgery on [target]'s posibrain.", + ) diff --git a/modular_zubbers/code/modules/synths/code/surgery/stomachpump.dm b/modular_zubbers/code/modules/synths/code/surgery/stomachpump.dm new file mode 100644 index 000000000000..78cf467d99a7 --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/stomachpump.dm @@ -0,0 +1,77 @@ +/datum/surgery/robot/stomach_pump + name = "Nutrient Processing Purge (Stomach Pump)" + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/stomach_pump, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + surgery_flags = SURGERY_SELF_OPERABLE + num_opening_steps = 2 + num_steps_until_closing = 4 + close_surgery = /datum/surgery/robot/close_stomach_pump + +/datum/surgery/robot/close_stomach_pump + name = "Close Surgery (Nutrient Processing Purge)" + requires_bodypart_type = BODYTYPE_ROBOTIC + steps = list( + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE + surgery_flags = SURGERY_SELF_OPERABLE + +/datum/surgery/robot/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)) + return FALSE + if(!target_stomach) + return FALSE + return ..() + +/datum/surgery_step/stomach_pump/mechanic + name = "pump bioreactor (hand)" + accept_hand = TRUE + repeatable = TRUE + time = 20 + success_sound = 'sound/items/handling/surgery/organ2.ogg' + +/datum/surgery_step/stomach_pump/mechanic/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results( + user, + target, + span_notice("You begin pumping [target]'s stomach..."), + span_notice("[user] begins to pump [target]'s stomach."), + span_notice("[user] begins to press on [target]'s chest."), + ) + display_pain(target, "You feel a horrible sloshing feeling in your gut! You're going to be sick!") // TODO change to a cooler message + +/datum/surgery_step/stomach_pump/mechanic/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) + if(ishuman(target)) + var/mob/living/carbon/human/target_human = target + display_results( + user, + target, + span_notice("[user] forces [target_human] to vomit, cleansing their stomach of some chemicals!"), + span_notice("[user] forces [target_human] to vomit, cleansing their stomach of some chemicals!"), + span_notice("[user] forces [target_human] to vomit!"), + ) + target_human.vomit((MOB_VOMIT_MESSAGE | MOB_VOMIT_STUN), lost_nutrition = 20, purge_ratio = 0.67) //higher purge ratio than regular vomiting + return ..() + +/datum/surgery_step/stomach_pump/mechanic/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(ishuman(target)) + var/mob/living/carbon/human/target_human = target + display_results( + user, + target, + span_warning("You screw up, bruising [target_human]'s chest!"), + span_warning("[user] screws up, brusing [target_human]'s chest!"), + span_warning("[user] screws up!"), + ) + target_human.adjustOrganLoss(ORGAN_SLOT_STOMACH, 5) + target_human.adjustBruteLoss(5) + // TODO add "pain" message diff --git a/modular_zubbers/code/modules/synths/code/surgery/synth_surgery.dm b/modular_zubbers/code/modules/synths/code/surgery/synth_surgery.dm new file mode 100644 index 000000000000..d67601024289 --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/synth_surgery.dm @@ -0,0 +1,54 @@ +/datum/surgery/robot + name = "robot surgery" + requires_bodypart_type = BODYTYPE_ROBOTIC + var/num_opening_steps + var/num_steps_until_closing + var/close_surgery + var/is_closer = FALSE + +//reattach plating +/datum/surgery_step/reattach_plating + name = "reattach plating (crowbar)" + implements = list( + TOOL_CROWBAR = 100, + TOOL_HEMOSTAT = 10, + ) + time = 2.4 SECONDS + success_sound = 'sound/items/tools/screwdriver2.ogg' + +/datum/surgery_step/reattach_plating/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results( + user, + target, + span_notice("You begin to reattach [target]'s [parse_zone(target_zone)] plating..."), + "[user] begins to reattach [target]'s [parse_zone(target_zone)] plating.", + "[user] begins to reattach [target]'s [parse_zone(target_zone)] plating.", + ) + +/datum/surgery/robot/next_step(mob/living/user, modifiers) + if(location != user.zone_selected) + return FALSE + if(user.combat_mode) + return FALSE + if(step_in_progress) + return TRUE + + var/try_to_fail = FALSE + if(LAZYACCESS(modifiers, RIGHT_CLICK)) + try_to_fail = TRUE + + var/datum/surgery_step/step = get_surgery_step() + if(isnull(step)) + return FALSE + var/obj/item/tool = user.get_active_held_item() + if(step.try_op(user, target, user.zone_selected, tool, src, try_to_fail)) + return TRUE + if(tool && (tool.tool_behaviour in MECHANICAL_TOOLS)) //Mechanic surgery should be done with mechanical tools + to_chat(user, span_warning("This step requires a different tool!")) + return TRUE + + return FALSE + +/datum/surgery/robot/advanced + name = "advanced robot surgery" + requires_tech = TRUE diff --git a/modular_zubbers/code/modules/synths/code/surgery/vein_threading.dm b/modular_zubbers/code/modules/synths/code/surgery/vein_threading.dm new file mode 100644 index 000000000000..6cad894b9f6d --- /dev/null +++ b/modular_zubbers/code/modules/synths/code/surgery/vein_threading.dm @@ -0,0 +1,60 @@ +/datum/surgery/robot/advanced/bioware/vein_threading + name = "Hydraulics Routing Optimization (Vein Threading)" + desc = "A robotic upgrade which severely reduces the amount of hydraulic fluid lost in case of injury." + requires_bodypart_type = BODYTYPE_ROBOTIC + possible_locs = list(BODY_ZONE_CHEST) + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/pry_off_plating, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/apply_bioware/thread_veins/mechanic, + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + num_opening_steps = 3 + num_steps_until_closing = 7 + close_surgery = /datum/surgery/robot/advanced/bioware/close_vein_threading + + status_effect_gained = /datum/status_effect/bioware/heart/threaded_veins + +/datum/surgery/robot/advanced/bioware/close_vein_threading + name = "Close Surgery (Hydraulics Routing Optimization)" + requires_bodypart_type = BODYTYPE_ROBOTIC + possible_locs = list(BODY_ZONE_CHEST) + surgery_flags = SURGERY_SELF_OPERABLE + steps = list( + /datum/surgery_step/mechanic_wrench, + /datum/surgery_step/reattach_plating, + /datum/surgery_step/mechanic_close, + ) + is_closer = TRUE + +/datum/surgery_step/apply_bioware/thread_veins/mechanic + name = "reroute hydraulics (hand)" + +/datum/surgery_step/apply_bioware/thread_veins/mechanic/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results( + user, + target, + span_notice("You start rerouting [target]'s hydraulic system."), + span_notice("[user] starts rerouting [target]'s hydraulic system."), + span_notice("[user] starts manipulating [target]'s hydraulic system."), + ) + +/datum/surgery_step/apply_bioware/thread_veins/mechanic/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) + . = ..() + if(!.) + return + + display_results( + user, + target, + span_notice("You reroute [target]'s hydraulic system into a resistant mesh!"), + span_notice("[user] reroutes [target]'s hydraulic system into a resistant mesh!"), + span_notice("[user] finishes manipulating [target]'s hydraulic system."), + ) + diff --git a/modular_zubbers/master_files/code/modules/synths/code/surgery/robot_heart_surgery.dm b/modular_zubbers/master_files/code/modules/synths/code/surgery/robot_heart_surgery.dm new file mode 100644 index 000000000000..f56b313b9336 --- /dev/null +++ b/modular_zubbers/master_files/code/modules/synths/code/surgery/robot_heart_surgery.dm @@ -0,0 +1,11 @@ +/datum/surgery_step/hydraulic/repair + name = "tighten seals (screwdriver or wrench)" + implements = list( + TOOL_SCREWDRIVER = 90, + TOOL_WRENCH = 90, + TOOL_WIRECUTTER = 35, + /obj/item/stack/package_wrap = 15, + TOOL_SCALPEL = 45, + ) + preop_sound = 'sound/items/tools/ratchet_slow.ogg' + success_sound = 'sound/machines/airlock/doorclick.ogg' diff --git a/modular_zubbers/master_files/code/modules/synths/code/surgery/surgery_initiator.dm b/modular_zubbers/master_files/code/modules/synths/code/surgery/surgery_initiator.dm new file mode 100644 index 000000000000..32d6db3197a8 --- /dev/null +++ b/modular_zubbers/master_files/code/modules/synths/code/surgery/surgery_initiator.dm @@ -0,0 +1,65 @@ +// Override of tg code + +/// Does the surgery de-initiation. +/datum/component/surgery_initiator/attempt_cancel_surgery(datum/surgery/the_surgery, mob/living/patient, mob/user) + var/selected_zone = user.zone_selected + + if(the_surgery.status == 1) + if(istype(the_surgery, /datum/surgery/robot)) + var/datum/surgery/robot/robot_surgery = the_surgery + if(robot_surgery.is_closer) + patient.balloon_alert(user, "already closing the surgery!") + return + patient.surgeries -= the_surgery + REMOVE_TRAIT(patient, TRAIT_ALLOWED_HONORBOUND_ATTACK, type) + user.visible_message( + span_notice("[user] removes [parent] from [patient]'s [patient.parse_zone_with_bodypart(selected_zone)]."), + span_notice("You remove [parent] from [patient]'s [patient.parse_zone_with_bodypart(selected_zone)]."), + ) + + patient.balloon_alert(user, "stopped work on [patient.parse_zone_with_bodypart(selected_zone)]") + + qdel(the_surgery) + return + + var/obj/item/close_tool = user.get_inactive_held_item() + var/is_robotic = the_surgery.requires_bodypart_type == BODYTYPE_ROBOTIC + + if(!is_robotic) + if(!close_tool || close_tool.tool_behaviour != TOOL_CAUTERY) + patient.balloon_alert(user, "need a cautery in your inactive hand to stop the surgery!") + return + + if(!istype(the_surgery, /datum/surgery/robot)) + if(the_surgery.operated_bodypart) + the_surgery.operated_bodypart.adjustBleedStacks(-5) + + patient.surgeries -= the_surgery + + REMOVE_TRAIT(patient, TRAIT_ALLOWED_HONORBOUND_ATTACK, ELEMENT_TRAIT(type)) + + user.visible_message( + span_notice("[user] closes [patient]'s [patient.parse_zone_with_bodypart(selected_zone)] with [close_tool] and removes [parent]."), + span_notice("You close [patient]'s [patient.parse_zone_with_bodypart(selected_zone)] with [close_tool] and remove [parent]."), + ) + + patient.balloon_alert(user, "closed up [patient.parse_zone_with_bodypart(selected_zone)]") + else + var/datum/surgery/robot/robot_surgery = the_surgery + if(robot_surgery.status >= robot_surgery.num_steps_until_closing || robot_surgery.is_closer) + patient.balloon_alert(user, "already closing the surgery!") + return + else + patient.surgeries -= the_surgery + + var/datum/surgery/robot/close_surgery = new robot_surgery.close_surgery(patient, selected_zone, the_surgery.operated_bodypart) + close_surgery.status += max(robot_surgery.num_opening_steps - robot_surgery.status + 1, 0) + + user.visible_message( + span_notice("[user] begins to close [patient]'s [patient.parse_zone_with_bodypart(selected_zone)]."), + span_notice("You begin to close [patient]'s [patient.parse_zone_with_bodypart(selected_zone)]."), + ) + + patient.balloon_alert(user, "starting to close up [patient.parse_zone_with_bodypart(selected_zone)]") + + qdel(the_surgery) diff --git a/tgstation.dme b/tgstation.dme index 07189456a37e..c87087dce1c0 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -8642,6 +8642,7 @@ #include "modular_zubbers\code\__DEFINES\send2relay.dm" #include "modular_zubbers\code\__DEFINES\span.dm" #include "modular_zubbers\code\__DEFINES\techweb_nodes.dm" +#include "modular_zubbers\code\__DEFINES\tools.dm" #include "modular_zubbers\code\__DEFINES\traits.dm" #include "modular_zubbers\code\_globalvars\lists\_maintenance_loot.dm" #include "modular_zubbers\code\_globalvars\lists\maintenance_loot_common.dm" @@ -9325,6 +9326,36 @@ #include "modular_zubbers\code\modules\syndicate_offstation\storage\fireaxe.dm" #include "modular_zubbers\code\modules\syndicate_offstation\storage\lockers.dm" #include "modular_zubbers\code\modules\syndicate_offstation\storage\safe.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\amputation.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\autopsy.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\bioware_surgery.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\blood_filter.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\brain_surgery.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\brainwashing.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\cavity_implant.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\cortex_folding.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\cortex_imprint.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\ear_surgery.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\eye_surgery.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\implant_removal.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\ligament_reinforcement.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\lipoplasty.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\lobotomy.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\muscled_veins.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\nerve_grounding.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\nerve_splicing.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\organ_manipulation.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\pacification.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\positronic_restoration.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\robot_healing.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\robot_heart_surgery.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\robot_liver_surgery.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\robot_lung_surgery.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\robot_stomach_surgery.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\sleeper_protocol.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\stomachpump.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\synth_surgery.dm" +#include "modular_zubbers\code\modules\synths\code\surgery\vein_threading.dm" #include "modular_zubbers\code\modules\tarkon\code\misc-fluff\research.dm" #include "modular_zubbers\code\modules\taur_mechanics\serpentine_taur.dm" #include "modular_zubbers\code\modules\title_screen\code\title_screen_subsystem.dm" @@ -9420,6 +9451,8 @@ #include "modular_zubbers\master_files\code\modules\reagents\reagent_containers\cups\_cup.dm" #include "modular_zubbers\master_files\code\modules\research\designs\biogenerator_designs.dm" #include "modular_zubbers\master_files\code\modules\research\designs\weapon_designs.dm" +#include "modular_zubbers\master_files\code\modules\synths\code\surgery\robot_heart_surgery.dm" +#include "modular_zubbers\master_files\code\modules\synths\code\surgery\surgery_initiator.dm" #include "modular_zubbers\master_files\skyrat\modules\blueshield\code\blueshield.dm" #include "modular_zubbers\master_files\skyrat\modules\company_imports\code\armament_datums\deforest_medical.dm" #include "modular_zubbers\master_files\skyrat\modules\deforest_medical_items\code\cargo_packs.dm"