From 47230cac4feaae6a2ae2cb9e00785bb21d57d8cb Mon Sep 17 00:00:00 2001 From: "C.L" Date: Mon, 3 Oct 2022 04:44:49 -0400 Subject: [PATCH] Makes surgery steps have names. Exclusive Steps. --- code/modules/surgery/bones.dm | 7 +++++- code/modules/surgery/encased.dm | 8 +++++++ code/modules/surgery/external_repair.dm | 4 ++++ code/modules/surgery/face.dm | 7 +++++- code/modules/surgery/generic.dm | 25 +++++++++++++++++---- code/modules/surgery/implant.dm | 5 +++++ code/modules/surgery/limb_reattach.dm | 4 ++++ code/modules/surgery/neck.dm | 7 ++++++ code/modules/surgery/organs_internal.dm | 1 + code/modules/surgery/other.dm | 11 +++++++++- code/modules/surgery/robotics.dm | 12 +++++++++- code/modules/surgery/slimes.dm | 6 ++++- code/modules/surgery/surgery.dm | 29 ++++++++++++++++++++----- 13 files changed, 112 insertions(+), 14 deletions(-) diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm index 6a48eb198d..1a0bd6271b 100644 --- a/code/modules/surgery/bones.dm +++ b/code/modules/surgery/bones.dm @@ -8,6 +8,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/glue_bone + surgery_name = "Glue Bone" allowed_tools = list( /obj/item/weapon/surgical/bonegel = 100 ) @@ -52,6 +53,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/set_bone + surgery_name = "Set Bone" allowed_tools = list( /obj/item/weapon/surgical/bonesetter = 100 ) @@ -98,6 +100,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/mend_skull + surgery_name = "Mend Skull" allowed_tools = list( /obj/item/weapon/surgical/bonesetter = 100 ) @@ -139,6 +142,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/finish_bone + surgery_name = "Finish Mending Bone" allowed_tools = list( /obj/item/weapon/surgical/bonegel = 100 ) @@ -182,6 +186,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/clamp_bone + surgery_name = "Clamp Bone" allowed_tools = list( /obj/item/weapon/surgical/bone_clamp = 100 ) @@ -218,4 +223,4 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("[user]'s hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!" , \ "Your hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!") - affected.createwound(BRUISE, 5) \ No newline at end of file + affected.createwound(BRUISE, 5) diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm index d69c456f7c..f0fe0b9d46 100644 --- a/code/modules/surgery/encased.dm +++ b/code/modules/surgery/encased.dm @@ -3,6 +3,7 @@ // GENERIC RIBCAGE SURGERY // ////////////////////////////////////////////////////////////////// /datum/surgery_step/open_encased + surgery_name = "Open Encased" priority = 2 can_infect = 1 blood_level = 1 @@ -21,6 +22,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/open_encased/saw + surgery_name = "Cut Ribs" allowed_tools = list( /obj/item/weapon/surgical/circular_saw = 100, \ /obj/item/weapon/material/knife/machete/hatchet = 75 @@ -70,6 +72,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/open_encased/retract + surgery_name = "Retract Ribs Open" allowed_tools = list( /obj/item/weapon/surgical/retractor = 100 ) @@ -123,6 +126,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/open_encased/close + surgery_name = "Retract Ribs Closed" allowed_tools = list( /obj/item/weapon/surgical/retractor = 100, ) @@ -181,6 +185,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/open_encased/mend + surgery_name = "Mend Bones" allowed_tools = list( /obj/item/weapon/surgical/bonegel = 100 ) @@ -222,6 +227,7 @@ // Saw/Retractor/Gel Combi-open and close. /////////////////////////////////////////////////////////////// /datum/surgery_step/open_encased/advancedsaw_open + surgery_name = "Advanced Cut Ribs" allowed_tools = list( /obj/item/weapon/surgical/circular_saw/manager = 100 ) @@ -230,6 +236,7 @@ min_duration = 60 max_duration = 90 + excludes_steps = list(/datum/surgery_step/open_encased/saw) /datum/surgery_step/open_encased/advancedsaw_open/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) if (!hasorgans(target)) @@ -271,6 +278,7 @@ /datum/surgery_step/open_encased/advancedsaw_mend + surgery_name = "Advanced Mend Ribs" allowed_tools = list( /obj/item/weapon/surgical/circular_saw/manager = 100 ) diff --git a/code/modules/surgery/external_repair.dm b/code/modules/surgery/external_repair.dm index 4f8707e82d..820ae4e559 100644 --- a/code/modules/surgery/external_repair.dm +++ b/code/modules/surgery/external_repair.dm @@ -3,6 +3,7 @@ // LIMB REPAIR SURGERY // ////////////////////////////////////////////////////////////////// /datum/surgery_step/repairflesh/ + surgery_name = "Repair Flesh" priority = 1 can_infect = 1 blood_level = 1 @@ -36,6 +37,7 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/repairflesh/scan_injury + surgery_name = "Scan Injury" allowed_tools = list( /obj/item/weapon/autopsy_scanner = 100, /obj/item/device/analyzer = 10 @@ -86,6 +88,7 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/repairflesh/repair_burns + surgery_name = "Repair Burns" allowed_tools = list( /obj/item/stack/medical/advanced/ointment = 100, /obj/item/stack/medical/ointment = 50, @@ -152,6 +155,7 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/repairflesh/repair_brute + surgery_name = "Repair Brute" allowed_tools = list( /obj/item/stack/medical/advanced/bruise_pack = 100, /obj/item/stack/medical/bruise_pack = 50, diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm index fc10ecfcca..9ecef80252 100644 --- a/code/modules/surgery/face.dm +++ b/code/modules/surgery/face.dm @@ -4,6 +4,7 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/face + surgery_name = "Facial Surgery" priority = 2 req_open = 0 can_infect = 0 @@ -23,6 +24,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/cut_face + surgery_name = "Cut Face" allowed_tools = list( /obj/item/weapon/surgical/scalpel = 100, \ /obj/item/weapon/material/knife = 75, \ @@ -57,6 +59,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/face/mend_vocal + surgery_name = "Mend Vocal Cords" allowed_tools = list( /obj/item/weapon/surgical/hemostat = 100, \ /obj/item/stack/cable_coil = 75, \ @@ -89,6 +92,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/face/fix_face + surgery_name = "Fix Face" allowed_tools = list( /obj/item/weapon/surgical/retractor = 100, \ /obj/item/weapon/material/kitchen/utensil/fork = 75 @@ -123,6 +127,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/face/cauterize + surgery_name = "Cauterize Face" allowed_tools = list( /obj/item/weapon/surgical/cautery = 100, \ /obj/item/clothing/mask/smokable/cigarette = 75, \ @@ -156,4 +161,4 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("[user]'s hand slips, leaving a small burn on [target]'s face with \the [tool]!", \ "Your hand slips, leaving a small burn on [target]'s face with \the [tool]!") - target.apply_damage(4, BURN, affected) \ No newline at end of file + target.apply_damage(4, BURN, affected) diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index d26ea6c0c1..38a694e0c6 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -29,6 +29,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/cut_open + surgery_name = "Create Incision" allowed_tools = list( /obj/item/weapon/surgical/scalpel = 100, \ /obj/item/weapon/material/knife = 75, \ @@ -73,16 +74,18 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/cut_with_laser + surgery_name = "Create Bloodless Incision" allowed_tools = list( - /obj/item/weapon/surgical/scalpel/laser3 = 95, \ - /obj/item/weapon/surgical/scalpel/laser2 = 85, \ - /obj/item/weapon/surgical/scalpel/laser1 = 75, \ + /obj/item/weapon/surgical/scalpel/laser3 = 100, \ + /obj/item/weapon/surgical/scalpel/laser2 = 100, \ + /obj/item/weapon/surgical/scalpel/laser1 = 100, \ /obj/item/weapon/melee/energy/sword = 5 ) priority = 2 req_open = 0 min_duration = 90 max_duration = 110 + excludes_steps = list(/datum/surgery_step/generic/cut_open) /datum/surgery_step/generic/cut_with_laser/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) if(..()) @@ -104,7 +107,15 @@ affected.open = 1 affected.createwound(CUT, 1) - affected.organ_clamp() + var/clamp_chance = 0 //I hate this. Make all laser scalpels a /laser subtype and give them a clamp_chance var??? + if(istype(tool,/obj/item/weapon/surgical/scalpel/laser1)) + clamp_chance = 75 + if(istype(tool,/obj/item/weapon/surgical/scalpel/laser2)) + clamp_chance = 85 + if(istype(tool,/obj/item/weapon/surgical/scalpel/laser3)) + clamp_chance = 95 + if(clamp_chance) + affected.organ_clamp() spread_germs_to_organ(affected, user) /datum/surgery_step/generic/cut_with_laser/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -119,6 +130,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/incision_manager + surgery_name = "Create Prepared Incision" allowed_tools = list( /obj/item/weapon/surgical/scalpel/manager = 100 ) @@ -127,6 +139,7 @@ req_open = 0 min_duration = 80 max_duration = 120 + excludes_steps = list(/datum/surgery_step/generic/cut_open) /datum/surgery_step/generic/incision_manager/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) if(..()) @@ -165,6 +178,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/clamp_bleeders + surgery_name = "Clamp Bleeders" allowed_tools = list( /obj/item/weapon/surgical/hemostat = 100, \ /obj/item/stack/cable_coil = 75, \ @@ -204,6 +218,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/retract_skin + surgery_name = "Retract Skin" allowed_tools = list( /obj/item/weapon/surgical/retractor = 100, \ /obj/item/weapon/material/kitchen/utensil/fork = 50 @@ -264,6 +279,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/cauterize + surgery_name = "Cauterize Incision" allowed_tools = list( /obj/item/weapon/surgical/cautery = 100, \ /obj/item/clothing/mask/smokable/cigarette = 75, \ @@ -305,6 +321,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/generic/amputate + surgery_name = "Amputate Limb" allowed_tools = list( /obj/item/weapon/surgical/circular_saw = 100, \ /obj/item/weapon/material/knife/machete/hatchet = 75 diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 656fffbff5..c3c2496cfd 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -5,6 +5,7 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/cavity + surgery_name = "Cavity" priority = 1 /datum/surgery_step/cavity/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -46,6 +47,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/cavity/make_space + surgery_name = "Create Cavity" allowed_tools = list( /obj/item/weapon/surgical/surgicaldrill = 100, \ /obj/item/weapon/pen = 75, \ @@ -78,6 +80,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/cavity/close_space + surgery_name = "Close Cavity" priority = 2 allowed_tools = list( /obj/item/weapon/surgical/cautery = 100, \ @@ -112,6 +115,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/cavity/place_item + surgery_name = "Implant Object" priority = 0 allowed_tools = list(/obj/item = 100) @@ -175,6 +179,7 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/cavity/implant_removal + surgery_name = "Remove Implant" allowed_tools = list( /obj/item/weapon/surgical/hemostat = 100, \ /obj/item/weapon/material/kitchen/utensil/fork = 20 diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index 8a25be5b51..56c0ccccc1 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -4,6 +4,7 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/limb/ + surgery_name = "Limb" priority = 3 // Must be higher than /datum/surgery_step/internal req_open = 0 can_infect = 0 @@ -22,6 +23,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/limb/attach + surgery_name = "Attach Limb" allowed_tools = list(/obj/item/organ/external = 100) min_duration = 50 @@ -81,6 +83,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/limb/connect + surgery_name = "Connect Limb" allowed_tools = list( /obj/item/weapon/surgical/hemostat = 100, \ /obj/item/stack/cable_coil = 75, \ @@ -120,6 +123,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/limb/mechanize + surgery_name = "Mechanize Limb" allowed_tools = list(/obj/item/robot_parts = 100) min_duration = 80 diff --git a/code/modules/surgery/neck.dm b/code/modules/surgery/neck.dm index 6b970ad4c2..5b59075612 100644 --- a/code/modules/surgery/neck.dm +++ b/code/modules/surgery/neck.dm @@ -4,6 +4,7 @@ ////////////////////////////////////////////////////////////////////// /datum/surgery_step/brainstem + surgery_name = "Brainstem" priority = 2 req_open = 1 can_infect = 1 @@ -23,6 +24,7 @@ ///////////////////////////// /datum/surgery_step/brainstem/mend_vessels + surgery_name = "Mend Vessels" priority = 1 allowed_tools = list( /obj/item/weapon/surgical/FixOVein = 100, @@ -57,6 +59,7 @@ ///////////////////////////// /datum/surgery_step/brainstem/drill_vertebrae + surgery_name = "Drill Vertebrae" priority = 3 //Do this instead of expanding the skull cavity allowed_tools = list( /obj/item/weapon/surgical/surgicaldrill = 100, @@ -100,6 +103,7 @@ ///////////////////////////// /datum/surgery_step/brainstem/clean_chips + surgery_name = "Remove Bone Chips" priority = 3 //Do this instead of picking around for implants. allowed_tools = list( /obj/item/weapon/surgical/hemostat = 100, @@ -139,6 +143,7 @@ ///////////////////////////// /datum/surgery_step/brainstem/mend_cord + surgery_name = "Mend Spinal Cord" priority = 1 //Do this after IB. allowed_tools = list( /obj/item/weapon/surgical/FixOVein = 100, @@ -179,6 +184,7 @@ ///////////////////////////// /datum/surgery_step/brainstem/mend_vertebrae + surgery_name = "Mend Vertebrae" priority = 3 //Do this instead of fixing bones. allowed_tools = list( /obj/item/weapon/surgical/bonegel = 100, @@ -217,6 +223,7 @@ ///////////////////////////// /datum/surgery_step/brainstem/realign_tissue + surgery_name = "Realign Tissue" priority = 3 //Do this instead of searching for objects in the skull. allowed_tools = list( /obj/item/weapon/surgical/hemostat = 100, diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index fa7ebc3214..55c37ae92a 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -445,6 +445,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/internal/rip_organ + surgery_name = "Rip Organ" allowed_tools = list( /obj/item/weapon/surgical/scalpel/ripper = 100 diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index 9cde26f240..c0c081e05b 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -8,6 +8,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/fix_vein + surgery_name = "Fix Vein" priority = 2 allowed_tools = list( /obj/item/weapon/surgical/FixOVein = 100, \ @@ -61,6 +62,7 @@ // Necrosis Surgery Step 1 /////////////////////////////////////////////////////////////// /datum/surgery_step/fix_dead_tissue //Debridement + surgery_name = "Remove Dead Tissue" priority = 2 allowed_tools = list( /obj/item/weapon/surgical/scalpel = 100, \ @@ -110,6 +112,7 @@ // Necrosis Surgery Step 2 /////////////////////////////////////////////////////////////// /datum/surgery_step/treat_necrosis + surgery_name = "Treat Necrosis" priority = 2 allowed_tools = list( /obj/item/weapon/reagent_containers/dropper = 100, @@ -187,6 +190,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/hardsuit + surgery_name = "Remove Hardsuit" allowed_tools = list( /obj/item/weapon/weldingtool = 80, /obj/item/weapon/surgical/circular_saw = 60, @@ -241,6 +245,7 @@ var/dehusk = 0 /datum/surgery_step/dehusk/ + surgery_name = "Dehusk" priority = 1 can_infect = 0 blood_level = 1 @@ -256,6 +261,7 @@ return target_zone == BP_TORSO && (HUSK in target.mutations) /datum/surgery_step/dehusk/structinitial + surgery_name = "Create Structure" allowed_tools = list( /obj/item/weapon/surgical/bioregen = 100 ) @@ -285,6 +291,7 @@ ..() /datum/surgery_step/dehusk/relocateflesh + surgery_name = "Relocate Flesh" allowed_tools = list( /obj/item/weapon/surgical/hemostat = 100, \ /obj/item/stack/cable_coil = 75, \ @@ -316,6 +323,7 @@ ..() /datum/surgery_step/dehusk/structfinish + surgery_name = "Finish Structure" allowed_tools = list( /obj/item/weapon/surgical/bioregen = 100, \ /obj/item/weapon/surgical/FixOVein = 30 @@ -357,6 +365,7 @@ ..() /datum/surgery_step/internal/detoxify + surgery_name = "Detoxify" blood_level = 1 allowed_tools = list(/obj/item/weapon/surgical/bioregen=100) min_duration = 90 @@ -385,4 +394,4 @@ "Your hand slips, failing to finish the surgery, and damaging [target] with \the [tool].") affected.createwound(CUT, 15) affected.createwound(BRUISE, 10) - ..() \ No newline at end of file + ..() diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index b424852ad9..e55056cadf 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -4,6 +4,7 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/ + surgery_name = "Robotic Surgery" can_infect = 0 /datum/surgery_step/robotics/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) @@ -29,6 +30,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/unscrew_hatch + surgery_name = "Unscrew Hatch" allowed_tools = list( /obj/item/weapon/coin = 50, /obj/item/weapon/material/knife = 50 @@ -68,6 +70,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/open_hatch + surgery_name = "Open Hatch" allowed_tools = list( /obj/item/weapon/surgical/retractor = 100, /obj/item/weapon/material/kitchen/utensil = 50 @@ -105,6 +108,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/close_hatch + surgery_name = "Close Hatch" allowed_tools = list( /obj/item/weapon/surgical/retractor = 100, /obj/item/weapon/material/kitchen/utensil = 50 @@ -143,6 +147,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/repair_brute + surgery_name = "Repair Brute" allowed_tools = list( /obj/item/weapon/weldingtool = 100, /obj/item/weapon/pickaxe/plasmacutter = 50 @@ -184,6 +189,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/repair_burn + surgery_name = "Repair Burn" allowed_tools = list( /obj/item/stack/cable_coil = 100 ) @@ -232,6 +238,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/fix_organ_robotic //For artificial organs + surgery_name = "Fix Internal Components" allowed_tools = list( /obj/item/stack/nanopaste = 100, \ /obj/item/weapon/surgical/bonegel = 30, \ @@ -302,7 +309,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/detatch_organ_robotic - + surgery_name = "Remove Organ" allowed_tools = list( /obj/item/device/multitool = 100 ) @@ -355,6 +362,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/attach_organ_robotic + surgery_name = "Attach Organ" allowed_procs = list(IS_SCREWDRIVER = 100) min_duration = 100 @@ -404,6 +412,7 @@ /////////////////////////////////////////////////////////////// /datum/surgery_step/robotics/install_mmi + surgery_name = "Install MMI" allowed_tools = list( /obj/item/device/mmi = 100 ) @@ -488,6 +497,7 @@ */ /datum/surgery_step/robotics/install_nymph + surgery_name = "Install Nymph" allowed_tools = list( /obj/item/weapon/holder/diona = 100 ) diff --git a/code/modules/surgery/slimes.dm b/code/modules/surgery/slimes.dm index e73633397a..84d697272c 100644 --- a/code/modules/surgery/slimes.dm +++ b/code/modules/surgery/slimes.dm @@ -3,6 +3,7 @@ ////////////////////////////////////////////////////////////////// /datum/surgery_step/slime + surgery_name = "Slime Surgery" is_valid_target(mob/living/simple_mob/slime/target) return istype(target, /mob/living/simple_mob/slime/) @@ -12,6 +13,7 @@ /datum/surgery_step/slime/cut_flesh + surgery_name = "Cut Flesh" allowed_tools = list( /obj/item/weapon/surgical/scalpel = 100, \ /obj/item/weapon/material/knife = 75, \ @@ -40,6 +42,7 @@ /datum/surgery_step/slime/cut_innards + surgery_name = "Cut Innards" allowed_tools = list( /obj/item/weapon/surgical/scalpel = 100, \ /obj/item/weapon/material/knife = 75, \ @@ -68,6 +71,7 @@ /datum/surgery_step/slime/saw_core + surgery_name = "Remove Core" allowed_tools = list( /obj/item/weapon/surgical/circular_saw = 100, \ /obj/item/weapon/material/knife/machete/hatchet = 75 @@ -97,4 +101,4 @@ /datum/surgery_step/slime/saw_core/fail_step(mob/living/user, mob/living/simple_mob/slime/target, target_zone, obj/item/tool) var/datum/gender/T = gender_datums[user.get_visible_gender()] user.visible_message("[user]'s hand slips, causing [T.him] to miss the core!", \ - "Your hand slips, causing you to miss the core!") \ No newline at end of file + "Your hand slips, causing you to miss the core!") diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 3fdd8b3d4e..404d4dba8f 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -27,7 +27,10 @@ // How much blood this step can get on surgeon. 1 - hands, 2 - full body. var/blood_level = 0 // What the surgery will be called in the rare event of multiple surgery steps being shown to the user. - var/surgery_name + var/surgery_name = "CONTACT A DEVELOPER TO NAME THIS STEP." + // If the surgery stops you from being able to perform another surgery. + var/list/excludes_steps = list() + //returns how well tool is suited for this step /datum/surgery_step/proc/tool_quality(obj/item/tool) @@ -136,13 +139,14 @@ if(!istype(M)) return 0 if (user.a_intent == I_HURT) //check for Hippocratic Oath + //Insert intentional hurt medical code here. return 0 var/zone = user.zone_sel.selecting if(zone in M.op_stage.in_progress) //Can't operate on someone repeatedly. to_chat(user, "You can't operate on this area while surgery is already in progress.") return 1 - var/list/available_surgeries = list() + var/list/datum/surgery_step/available_surgeries = list() for(var/datum/surgery_step/S in surgery_steps) //check if tool is right or close enough and if this step is possible if(S.tool_quality(src)) @@ -150,26 +154,41 @@ if(step_is_valid && S.is_valid_target(M)) if(step_is_valid == SURGERY_FAILURE) continue - available_surgeries += S //Add the surgery to a list of 'We can perform this step' + available_surgeries[S.surgery_name] = S //Adds the surgery name to the list and sets it equal to S. (Ex: "Cauterize" = surgery_step/cauterize) continue if(!available_surgeries.len) //No available surgeries. Failure. return 0 + // Having trouble with an ASSOSCIATED LIST? or REMOVING SOMETHING FROM AN ASSOCIATED LIST? Look here for a quick guide, developed out of frustration. + // Note: This is an ultra edge case. Like, what is being done here is horrible and is so rare this should never happen again in the code. + // This block of code caused hours of suffering. + + for(var/surgical_check_name in available_surgeries) // Get the name from available_surgeries. available_surgeries = list("NAME" = DATUM) + var/datum/surgery_step/surgical_check = available_surgeries[surgical_check_name] // We then get the datum. + if(isnull(surgical_check)) // This is here so it doesn't try to keep searching if the thing we're about to check has been deleted. + continue + if(surgical_check.excludes_steps.len) // We check for it's 'excluded_steps' list and see if it has anything in it. + for(var/removal_candidate_name in available_surgeries) // We then look in available_surgeries once again, grabbing the name. + var/datum/surgery_step/removal_candidate = available_surgeries[removal_candidate_name] // We then get the datum while searching. + if(is_path_in_list(removal_candidate.type, surgical_check.excludes_steps)) // We then check the datum and see if it's a path in the list that we want to remove. + available_surgeries -= removal_candidate_name // We then, finally, remove the surgery step. + // All of this just to make it so you are forced to do bloodless surgery with a laser scalpel. + if(M == user) // Once we determine if we can actually do a step at all, give a slight delay to self-surgery to confirm attempts. to_chat(user, "You focus on attempting to perform surgery upon yourself.") if(!do_after(user, 3 SECONDS, M)) return 0 - var/datum/surgery_step/selected_surgery if(available_surgeries.len > 1) //More than one possible? Ask them which one. - selected_surgery = tgui_input_list(user, "Select which surgery step you wish to perform", "Surgery Select", available_surgeries) + selected_surgery = tgui_input_list(user, "Select which surgery step you wish to perform", "Surgery Select", available_surgeries) //Shows the name in the list. else selected_surgery = pick(available_surgeries) if(isnull(selected_surgery)) //They clicked 'cancel' return 1 + selected_surgery = available_surgeries[selected_surgery] //Sets the name they selected to be the datum. M.op_stage.in_progress += zone selected_surgery.begin_step(user, M, zone, src) //start on it