From 2623f75e0d36643e987f7e3ed7d4667d097eeb42 Mon Sep 17 00:00:00 2001 From: Aurorablade Date: Wed, 6 Jan 2016 23:43:12 -0500 Subject: [PATCH] progress --- code/modules/surgery/bones.dm | 166 ++++++++------- code/modules/surgery/encased.dm | 256 ++++++++++++------------ code/modules/surgery/face.dm | 63 +++--- code/modules/surgery/generic.dm | 70 ++++--- code/modules/surgery/helpers.dm | 15 +- code/modules/surgery/implant.dm | 14 ++ code/modules/surgery/limb_reattach.dm | 149 +++++++------- code/modules/surgery/organs_internal.dm | 77 +++---- code/modules/surgery/other.dm | 202 ++++++++++--------- code/modules/surgery/robotics.dm | 6 +- code/modules/surgery/slime.dm | 48 +++-- 11 files changed, 576 insertions(+), 490 deletions(-) diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm index 8eb9f9e0b72..63d956e99c5 100644 --- a/code/modules/surgery/bones.dm +++ b/code/modules/surgery/bones.dm @@ -2,19 +2,19 @@ ////////////////////////////////////////////////////////////////// // BONE SURGERY // ////////////////////////////////////////////////////////////////// - +///Surgery Datums /datum/surgery/bone_repair name = "bone repair" - steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders,/datum/surgery_step/generic/retract_skin, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) possible_locs = list("chest","l_arm", "l_hand","r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","groin") /datum/surgery/bone_repair/skull name = "bone repair" - steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/glue_bone, /datum/surgery_step/mend_skull,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/glue_bone, /datum/surgery_step/mend_skull,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize) possible_locs = list("head") - +//surgery steps /datum/surgery_step/glue_bone allowed_tools = list( /obj/item/weapon/bonegel = 100, \ @@ -26,28 +26,31 @@ min_duration = 50 max_duration = 60 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/glue_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) return affected && !(affected.status & ORGAN_ROBOT) && affected.open == 2 && affected.stage == 0 - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if (affected.stage == 0) - user.visible_message("[user] starts applying medication to the damaged bones in [target]'s [affected.name] with \the [tool]." , \ - "You start applying medication to the damaged bones in [target]'s [affected.name] with \the [tool].") - target.custom_pain("Something in your [affected.name] is causing you a lot of pain!",1) - ..() +/datum/surgery_step/glue_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (affected.stage == 0) + user.visible_message("[user] starts applying medication to the damaged bones in [target]'s [affected.name] with \the [tool]." , \ + "You start applying medication to the damaged bones in [target]'s [affected.name] with \the [tool].") + target.custom_pain("Something in your [affected.name] is causing you a lot of pain!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/glue_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\blue [user] applies some [tool] to [target]'s bone in [affected.name]", \ "\blue You apply some [tool] to [target]'s bone in [affected.name] with \the [tool].") affected.stage = 1 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + return 1 + +/datum/surgery_step/glue_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ "\red Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") + return 0 /datum/surgery_step/set_bone allowed_tools = list( @@ -58,33 +61,36 @@ min_duration = 60 max_duration = 70 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && !(affected.status & ORGAN_ROBOT) && affected.limb_name != "head" && affected.open == 2 && affected.stage == 1 +/datum/surgery_step/set_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return affected && !(affected.status & ORGAN_ROBOT) && affected.limb_name != "head" && affected.open == 2 && affected.stage == 1 - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] is beginning to set the bone in [target]'s [affected.name] in place with \the [tool]." , \ - "You are beginning to set the bone in [target]'s [affected.name] in place with \the [tool].") - target.custom_pain("The pain in your [affected.name] is going to make you pass out!",1) - ..() +/datum/surgery_step/set_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] is beginning to set the bone in [target]'s [affected.name] in place with \the [tool]." , \ + "You are beginning to set the bone in [target]'s [affected.name] in place with \the [tool].") + target.custom_pain("The pain in your [affected.name] is going to make you pass out!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if (affected.status & ORGAN_BROKEN) - user.visible_message("\blue [user] sets the bone in [target]'s [affected.name] in place with \the [tool].", \ - "\blue You set the bone in [target]'s [affected.name] in place with \the [tool].") - affected.stage = 2 - else - user.visible_message("\blue [user] sets the bone in [target]'s [affected.name]\red in the WRONG place with \the [tool].", \ - "\blue You set the bone in [target]'s [affected.name]\red in the WRONG place with \the [tool].") - affected.fracture() +/datum/surgery_step/set_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (affected.status & ORGAN_BROKEN) + user.visible_message("\blue [user] sets the bone in [target]'s [affected.name] in place with \the [tool].", \ + "\blue You set the bone in [target]'s [affected.name] in place with \the [tool].") + affected.stage = 2 + return 1 + else + user.visible_message("\blue [user] sets the bone in [target]'s [affected.name]\red in the WRONG place with \the [tool].", \ + "\blue You set the bone in [target]'s [affected.name]\red in the WRONG place with \the [tool].") + affected.fracture() + return 0 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!" , \ - "\red Your hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!") - affected.createwound(BRUISE, 5) +/datum/surgery_step/set_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!" , \ + "\red Your hand slips, damaging the bone in [target]'s [affected.name] with \the [tool]!") + affected.createwound(BRUISE, 5) + return 0 /datum/surgery_step/mend_skull allowed_tools = list( @@ -95,28 +101,31 @@ min_duration = 60 max_duration = 70 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && !(affected.status & ORGAN_ROBOT) && affected.limb_name == "head" && affected.open == 2 && affected.stage == 1 +/datum/surgery_step/mend_skull/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return affected && !(affected.status & ORGAN_ROBOT) && affected.limb_name == "head" && affected.open == 2 && affected.stage == 1 - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user] is beginning piece together [target]'s skull with \the [tool]." , \ - "You are beginning piece together [target]'s skull with \the [tool].") - ..() +/datum/surgery_step/mend_skull/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("[user] is beginning piece together [target]'s skull with \the [tool]." , \ + "You are beginning piece together [target]'s skull with \the [tool].") + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] sets [target]'s skull with \the [tool]." , \ - "\blue You set [target]'s skull with \the [tool].") - affected.stage = 2 +/datum/surgery_step/mend_skull/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] sets [target]'s skull with \the [tool]." , \ + "\blue You set [target]'s skull with \the [tool].") + affected.stage = 2 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, damaging [target]'s face with \the [tool]!" , \ - "\red Your hand slips, damaging [target]'s face with \the [tool]!") - var/obj/item/organ/external/head/h = affected - h.createwound(BRUISE, 10) - h.disfigured = 1 + return 1 + +/datum/surgery_step/mend_skull/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, damaging [target]'s face with \the [tool]!" , \ + "\red Your hand slips, damaging [target]'s face with \the [tool]!") + var/obj/item/organ/external/head/h = affected + h.createwound(BRUISE, 10) + h.disfigured = 1 + return 0 /datum/surgery_step/finish_bone allowed_tools = list( @@ -129,26 +138,29 @@ min_duration = 50 max_duration = 60 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && !(affected.status & ORGAN_ROBOT) && affected.open == 2 && affected.stage == 2 +/datum/surgery_step/finish_bone/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return affected && !(affected.status & ORGAN_ROBOT) && affected.open == 2 && affected.stage == 2 - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts to finish mending the damaged bones in [target]'s [affected.name] with \the [tool].", \ - "You start to finish mending the damaged bones in [target]'s [affected.name] with \the [tool].") - ..() +/datum/surgery_step/finish_bone/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts to finish mending the damaged bones in [target]'s [affected.name] with \the [tool].", \ + "You start to finish mending the damaged bones in [target]'s [affected.name] with \the [tool].") + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has mended the damaged bones in [target]'s [affected.name] with \the [tool]." , \ - "\blue You have mended the damaged bones in [target]'s [affected.name] with \the [tool]." ) - affected.status &= ~ORGAN_BROKEN - affected.status &= ~ORGAN_SPLINTED - affected.stage = 0 - affected.perma_injury = 0 +/datum/surgery_step/finish_bone/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] has mended the damaged bones in [target]'s [affected.name] with \the [tool]." , \ + "\blue You have mended the damaged bones in [target]'s [affected.name] with \the [tool]." ) + affected.status &= ~ORGAN_BROKEN + affected.status &= ~ORGAN_SPLINTED + affected.stage = 0 + affected.perma_injury = 0 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ - "\red Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") \ No newline at end of file + return 1 + +/datum/surgery_step/finish_bone/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ + "\red Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") + return 0 \ No newline at end of file diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm index 6bf7d56de19..d7caa513a5c 100644 --- a/code/modules/surgery/encased.dm +++ b/code/modules/surgery/encased.dm @@ -6,13 +6,14 @@ priority = 2 can_infect = 1 blood_level = 1 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return 0 +/datum/surgery_step/open_encased/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && !(affected.status & ORGAN_ROBOT) && affected.encased && affected.open >= 2 + if (!hasorgans(target)) + return 0 + + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return affected && !(affected.status & ORGAN_ROBOT) && affected.encased && affected.open >= 2 /datum/surgery_step/open_encased/saw @@ -25,44 +26,47 @@ min_duration = 50 max_duration = 70 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected && affected.open == 2 +/datum/surgery_step/open_encased/saw/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected && affected.open == 2 - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/saw/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] begins to cut through [target]'s [affected.encased] with \the [tool].", \ - "You begin to cut through [target]'s [affected.encased] with \the [tool].") - target.custom_pain("Something hurts horribly in your [affected.name]!",1) - ..() + user.visible_message("[user] begins to cut through [target]'s [affected.encased] with \the [tool].", \ + "You begin to cut through [target]'s [affected.encased] with \the [tool].") + target.custom_pain("Something hurts horribly in your [affected.name]!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/saw/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has cut [target]'s [affected.encased] open with \the [tool].", \ - "\blue You have cut [target]'s [affected.encased] open with \the [tool].") - affected.open = 2.5 + user.visible_message("\blue [user] has cut [target]'s [affected.encased] open with \the [tool].", \ + "\blue You have cut [target]'s [affected.encased] open with \the [tool].") + affected.open = 2.5 + return 1 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/saw/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, cracking [target]'s [affected.encased] with \the [tool]!" , \ - "\red Your hand slips, cracking [target]'s [affected.encased] with \the [tool]!" ) + user.visible_message("\red [user]'s hand slips, cracking [target]'s [affected.encased] with \the [tool]!" , \ + "\red Your hand slips, cracking [target]'s [affected.encased] with \the [tool]!" ) - affected.createwound(CUT, 20) - affected.fracture() + affected.createwound(CUT, 20) + affected.fracture() + + return 0 /datum/surgery_step/open_encased/retract @@ -74,52 +78,56 @@ min_duration = 30 max_duration = 40 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected && affected.open == 2.5 +/datum/surgery_step/open_encased/retract/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected && affected.open == 2.5 - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/retract/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "[user] starts to force open the [affected.encased] in [target]'s [affected.name] with \the [tool]." - var/self_msg = "You start to force open the [affected.encased] in [target]'s [affected.name] with \the [tool]." - user.visible_message(msg, self_msg) - target.custom_pain("Something hurts horribly in your [affected.name]!",1) - ..() + var/msg = "[user] starts to force open the [affected.encased] in [target]'s [affected.name] with \the [tool]." + var/self_msg = "You start to force open the [affected.encased] in [target]'s [affected.name] with \the [tool]." + user.visible_message(msg, self_msg) + target.custom_pain("Something hurts horribly in your [affected.name]!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/retract/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "\blue [user] forces open [target]'s [affected.encased] with \the [tool]." - var/self_msg = "\blue You force open [target]'s [affected.encased] with \the [tool]." - user.visible_message(msg, self_msg) + var/msg = "\blue [user] forces open [target]'s [affected.encased] with \the [tool]." + var/self_msg = "\blue You force open [target]'s [affected.encased] with \the [tool]." + user.visible_message(msg, self_msg) - affected.open = 3 + affected.open = 3 - // Whoops! - if(prob(10)) - affected.fracture() + // Whoops! + if(prob(10) && !isrobot(user)) + affected.fracture()//WTF WHY?! - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + return 1 - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) +/datum/surgery_step/open_encased/retract/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/msg = "\red [user]'s hand slips, cracking [target]'s [affected.encased]!" - var/self_msg = "\red Your hand slips, cracking [target]'s [affected.encased]!" - user.visible_message(msg, self_msg) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - affected.createwound(BRUISE, 20) - affected.fracture() + var/msg = "\red [user]'s hand slips, cracking [target]'s [affected.encased]!" + var/self_msg = "\red Your hand slips, cracking [target]'s [affected.encased]!" + user.visible_message(msg, self_msg) + + affected.createwound(BRUISE, 20) + affected.fracture() + + return 0 /datum/surgery_step/open_encased/close allowed_tools = list( @@ -130,53 +138,53 @@ min_duration = 20 max_duration = 40 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/close/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected && affected.open == 3 + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected && affected.open == 3 - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/close/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "[user] starts bending [target]'s [affected.encased] back into place with \the [tool]." - var/self_msg = "You start bending [target]'s [affected.encased] back into place with \the [tool]." - user.visible_message(msg, self_msg) - target.custom_pain("Something hurts horribly in your [affected.name]!",1) - ..() + var/msg = "[user] starts bending [target]'s [affected.encased] back into place with \the [tool]." + var/self_msg = "You start bending [target]'s [affected.encased] back into place with \the [tool]." + user.visible_message(msg, self_msg) + target.custom_pain("Something hurts horribly in your [affected.name]!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/close/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "\blue [user] bends [target]'s [affected.encased] back into place with \the [tool]." - var/self_msg = "\blue You bend [target]'s [affected.encased] back into place with \the [tool]." - user.visible_message(msg, self_msg) + var/msg = "\blue [user] bends [target]'s [affected.encased] back into place with \the [tool]." + var/self_msg = "\blue You bend [target]'s [affected.encased] back into place with \the [tool]." + user.visible_message(msg, self_msg) - affected.open = 2.5 + affected.open = 2.5 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + return 1 - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) +/datum/surgery_step/open_encased/close/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/msg = "\red [user]'s hand slips, bending [target]'s [affected.encased] the wrong way!" - var/self_msg = "\red Your hand slips, bending [target]'s [affected.encased] the wrong way!" - user.visible_message(msg, self_msg) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - affected.createwound(BRUISE, 20) - affected.fracture() + var/msg = "\red [user]'s hand slips, bending [target]'s [affected.encased] the wrong way!" + var/self_msg = "\red Your hand slips, bending [target]'s [affected.encased] the wrong way!" + user.visible_message(msg, self_msg) - /*if (prob(40)) //TODO: ORGAN REMOVAL UPDATE. - user.visible_message("\red A rib pierces the lung!") - target.rupture_lung()*/ + affected.createwound(BRUISE, 20) + affected.fracture() + + return 0 /datum/surgery_step/open_encased/mend allowed_tools = list( @@ -187,33 +195,35 @@ min_duration = 20 max_duration = 40 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/mend/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected && affected.open == 2.5 + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected && affected.open == 2.5 - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/mend/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "[user] starts applying \the [tool] to [target]'s [affected.encased]." - var/self_msg = "You start applying \the [tool] to [target]'s [affected.encased]." - user.visible_message(msg, self_msg) - target.custom_pain("Something hurts horribly in your [affected.name]!",1) - ..() + var/msg = "[user] starts applying \the [tool] to [target]'s [affected.encased]." + var/self_msg = "You start applying \the [tool] to [target]'s [affected.encased]." + user.visible_message(msg, self_msg) + target.custom_pain("Something hurts horribly in your [affected.name]!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/open_encased/mend/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) - var/msg = "\blue [user] applied \the [tool] to [target]'s [affected.encased]." - var/self_msg = "\blue You applied \the [tool] to [target]'s [affected.encased]." - user.visible_message(msg, self_msg) + var/msg = "\blue [user] applied \the [tool] to [target]'s [affected.encased]." + var/self_msg = "\blue You applied \the [tool] to [target]'s [affected.encased]." + user.visible_message(msg, self_msg) - affected.open = 2 \ No newline at end of file + affected.open = 2 + + return 1 \ No newline at end of file diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm index 57c4dc29011..4f39d969232 100644 --- a/code/modules/surgery/face.dm +++ b/code/modules/surgery/face.dm @@ -10,13 +10,14 @@ /datum/surgery_step/face priority = 2 can_infect = 0 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!hasorgans(target)) - return 0 - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if (!affected || (affected.status & ORGAN_ROBOT)) - return 0 - return target_zone == "mouth" + +/datum/surgery_step/face/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if (!hasorgans(target)) + return 0 + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if (!affected || (affected.status & ORGAN_ROBOT)) + return 0 + return target_zone == "mouth" /datum/surgery_step/generic/cut_face allowed_tools = list( @@ -28,26 +29,30 @@ min_duration = 90 max_duration = 110 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - return ..() //&& target_zone == "mouth" && target.op_stage.face == 0//I NEED TO REPLACE THE OPSTAGE SHIT! +/datum/surgery_step/generic/cut_face/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + return ..() && target_zone == "mouth" //&& target.op_stage.face == 0//I NEED TO REPLACE THE OPSTAGE SHIT! - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/generic/cut_face/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("[user] starts to cut open [target]'s face and neck with \the [tool].", \ "You start to cut open [target]'s face and neck with \the [tool].") ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/generic/cut_face/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("\blue [user] has cut open [target]'s face and neck with \the [tool]." , \ "\blue You have cut open [target]'s face and neck with \the [tool].",) //target.op_stage.face = 1//DID I MENTION I NEED TO REPLACE THE OPSTAGE SHIT! - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + return 1 + +/datum/surgery_step/generic/cut_face/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, slicing [target]'s throat wth \the [tool]!" , \ "\red Your hand slips, slicing [target]'s throat wth \the [tool]!" ) affected.createwound(CUT, 60) target.losebreath += 4 + return 0 + /datum/surgery_step/face/mend_vocal allowed_tools = list( /obj/item/weapon/hemostat = 100, \ @@ -58,23 +63,25 @@ min_duration = 70 max_duration = 90 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/mend_vocal/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) return ..()// && target.op_stage.face == 1 //NO REALLY NED TO REPLACE, MAYBE WITH FUCKING istype(S.get_surgery_step(), /datum/surgery_step/cut_face)) OR SOMETHING - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/mend_vocal/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("[user] starts mending [target]'s vocal cords with \the [tool].", \ "You start mending [target]'s vocal cords with \the [tool].") ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/mend_vocal/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("\blue [user] mends [target]'s vocal cords with \the [tool].", \ "\blue You mend [target]'s vocal cords with \the [tool].") //target.op_stage.face = 2//I NEED TO REPLACE THE OPSTAGE SHIT! + return 1 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/mend_vocal/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("\red [user]'s hand slips, clamping [target]'s trachea shut for a moment with \the [tool]!", \ "\red Your hand slips, clamping [user]'s trachea shut for a moment with \the [tool]!") target.losebreath += 4 + return 0 /datum/surgery_step/face/fix_face allowed_tools = list( @@ -85,24 +92,26 @@ min_duration = 80 max_duration = 100 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/fix_face/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) return ..() //&& target.op_stage.face == 2//I NEED TO REPLACE THE OPSTAGE SHIT! - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/fix_face/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("[user] starts pulling skin on [target]'s face back in place with \the [tool].", \ "You start pulling skin on [target]'s face back in place with \the [tool].") ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/fix_face/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("\blue [user] pulls skin on [target]'s face back in place with \the [tool].", \ "\blue You pull skin on [target]'s face back in place with \the [tool].") //target.op_stage.face = 3//I NEED TO REPLACE THE OPSTAGE SHIT! + return 1 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/fix_face/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, tearing skin on [target]'s face with \the [tool]!", \ "\red Your hand slips, tearing skin on [target]'s face with \the [tool]!") target.apply_damage(10, BRUTE, affected, sharp=1, sharp=1) + return 0 /datum/surgery_step/face/cauterize allowed_tools = list( @@ -115,15 +124,15 @@ min_duration = 70 max_duration = 100 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/cauterize/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) return ..()// && target.op_stage.face > 0//I NEED TO REPLACE THE OPSTAGE SHIT! - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/cauterize/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) user.visible_message("[user] is beginning to cauterize the incision on [target]'s face and neck with \the [tool]." , \ "You are beginning to cauterize the incision on [target]'s face and neck with \the [tool].") ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/face/cauterize/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\blue [user] cauterizes the incision on [target]'s face and neck with \the [tool].", \ "\blue You cauterize the incision on [target]'s face and neck with \the [tool].") @@ -136,8 +145,12 @@ target.regenerate_icons() //target.op_stage.face = 0//I NEED TO REPLACE THE OPSTAGE SHIT! - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + return 1 + +/datum/surgery_step/face/cauterize/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, leaving a small burn on [target]'s face with \the [tool]!", \ "\red 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) + + return 0 \ No newline at end of file diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index 6deab483af8..0c8e7f9f69a 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -56,6 +56,7 @@ affected.createwound(CUT, 1) affected.clamp() spread_germs_to_organ(affected, user) + return 1 /datum/surgery_step/generic/cut_with_laser/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -63,6 +64,7 @@ "\red Your hand slips as the blade sputters, searing a long gash in [target]'s [affected.name] with \the [tool]!") affected.createwound(CUT, 7.5) affected.createwound(BURN, 12.5) + return 0 /datum/surgery_step/generic/incision_manager allowed_tools = list( @@ -97,12 +99,16 @@ affected.clamp() affected.open = 2 + return 1 + /datum/surgery_step/generic/incision_manager/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!", \ + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!", \ "\red Your hand jolts as the system sparks, ripping a gruesome hole in [target]'s [affected.name] with \the [tool]!") - affected.createwound(CUT, 20) - affected.createwound(BURN, 15) + affected.createwound(CUT, 20) + affected.createwound(BURN, 15) + + return 2 /datum/surgery_step/generic/cut_open allowed_tools = list( @@ -115,8 +121,6 @@ max_duration = 110 /datum/surgery_step/generic/cut_open/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!ishuman(target) || !isalien(target)) - return 0 var/obj/item/organ/external/affected = target.get_organ(target_zone) return ..() && affected.open == 0 && target_zone != "mouth" @@ -128,20 +132,22 @@ ..() /datum/surgery_step/generic/cut_open/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has made an incision on [target]'s [affected.name] with \the [tool].", \ - "\blue You have made an incision on [target]'s [affected.name] with \the [tool].",) - affected.open = 1 - affected.status |= ORGAN_BLEEDING - affected.createwound(CUT, 1) - //if (target_zone == "head") - // target.brain_op_stage = 1 + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] has made an incision on [target]'s [affected.name] with \the [tool].", \ + "\blue You have made an incision on [target]'s [affected.name] with \the [tool].",) + affected.open = 1 + affected.status |= ORGAN_BLEEDING + affected.createwound(CUT, 1) + //if (target_zone == "head") + // target.brain_op_stage = 1 + return 1 /datum/surgery_step/generic/cut_open/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, slicing open [target]'s [affected.name] in a wrong spot with \the [tool]!", \ - "\red Your hand slips, slicing open [target]'s [affected.name] in a wrong spot with \the [tool]!") - affected.createwound(CUT, 10) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, slicing open [target]'s [affected.name] in a wrong spot with \the [tool]!", \ + "\red Your hand slips, slicing open [target]'s [affected.name] in a wrong spot with \the [tool]!") + affected.createwound(CUT, 10) + return 0 /datum/surgery_step/generic/clamp_bleeders allowed_tools = list( @@ -167,17 +173,19 @@ ..() /datum/surgery_step/generic/clamp_bleeders/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] clamps bleeders in [target]'s [affected.name] with \the [tool].", \ - "\blue You clamp bleeders in [target]'s [affected.name] with \the [tool].") - affected.clamp() - spread_germs_to_organ(affected, user) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] clamps bleeders in [target]'s [affected.name] with \the [tool].", \ + "\blue You clamp bleeders in [target]'s [affected.name] with \the [tool].") + affected.clamp() + spread_germs_to_organ(affected, user) + return 1 /datum/surgery_step/generic/clamp_bleeders/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, tearing blood vessals and causing massive bleeding in [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, tearing blood vessels and causing massive bleeding in [target]'s [affected.name] with \the [tool]!",) - affected.createwound(CUT, 10) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, tearing blood vessals and causing massive bleeding in [target]'s [affected.name] with \the [tool]!", \ + "\red Your hand slips, tearing blood vessels and causing massive bleeding in [target]'s [affected.name] with \the [tool]!",) + affected.createwound(CUT, 10) + return 0 /datum/surgery_step/generic/retract_skin allowed_tools = list( @@ -219,6 +227,7 @@ self_msg = "\blue You keep the incision open on [target]'s lower abdomen with \the [tool]." user.visible_message(msg, self_msg) affected.open = 2 + return 1 /datum/surgery_step/generic/retract_skin/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) @@ -232,6 +241,7 @@ self_msg = "\red Your hand slips, damaging several organs [target]'s lower abdomen with \the [tool]!" user.visible_message(msg, self_msg) target.apply_damage(12, BRUTE, affected, sharp=1) + return 0 /datum/surgery_step/generic/cauterize allowed_tools = list( @@ -262,12 +272,14 @@ affected.open = 0 affected.germ_level = 0 affected.status &= ~ORGAN_BLEEDING + return 1 /datum/surgery_step/generic/cauterize/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, leaving a small burn on [target]'s [affected.name] with \the [tool]!", \ "\red Your hand slips, leaving a small burn on [target]'s [affected.name] with \the [tool]!") target.apply_damage(3, BURN, affected) + return 0 /datum/surgery_step/generic/amputate @@ -305,10 +317,12 @@ user.visible_message("\blue [user] amputates [target]'s [affected.name] at the [affected.amputation_point] with \the [tool].", \ "\blue You amputate [target]'s [affected.name] with \the [tool].") affected.droplimb(1,DROPLIMB_EDGE) + return 1 /datum/surgery_step/generic/amputate/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/obj/item/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, sawing through the bone in [target]'s [affected.name] with \the [tool]!", \ "\red Your hand slips, sawwing through the bone in [target]'s [affected.name] with \the [tool]!") affected.createwound(CUT, 30) - affected.fracture() \ No newline at end of file + affected.fracture() + return 0 \ No newline at end of file diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index 52d68c4fbd7..aa06301bf17 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -4,10 +4,8 @@ var/mob/living/carbon/human/H var/obj/item/organ/external/affecting var/selected_zone = user.zone_sel.selecting - world << "line 8" if(istype(M, /mob/living/carbon/human)) H = M - world <<"line 10" affecting = H.get_organ(check_zone(selected_zone)) if(can_operate(H)) //if they're prone or a slime @@ -17,37 +15,26 @@ for(var/datum/surgery/S in M.surgeries) if(S.location == selected_zone) current_surgery = S - world << "[S]" if(!current_surgery) var/list/all_surgeries = surgeries_list.Copy() var/list/available_surgeries = list() - world << "line 24" for(var/datum/surgery/S in all_surgeries) if(!S.possible_locs.Find(selected_zone)) - world << "line 29" - world << "[selected_zone]" continue if(affecting && S.requires_organic_bodypart && affecting.status == ORGAN_ROBOT) - world << "line 30" continue if(!S.can_start(user, M)) - world << "line 31" continue for(var/path in S.allowed_species) - world << "[path]" - world << "[M]" if(istype(M, path)) - world << "line 32" - world << "[path]" available_surgeries[S.name] = S break var/P = input("Begin which procedure?", "Surgery", null, null) as null|anything in available_surgeries if(P && user && user.Adjacent(M) && (I in user)) - world << "line 40" var/datum/surgery/S = available_surgeries[P] var/datum/surgery/procedure = new S.type if(procedure) @@ -89,5 +76,7 @@ proc/get_location_modifier(mob/M) else return 0.5 + +//just until i update maps.... /obj/item/organ/brain/New() new /obj/item/organ/internal/brain(src.loc) \ No newline at end of file diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index 0b188380754..b7f98c0cbb6 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -73,6 +73,8 @@ user.visible_message("\blue [user] makes some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", \ "\blue You make some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." ) + return 1 + /datum/surgery_step/cavity/close_space priority = 2 allowed_tools = list( @@ -102,6 +104,9 @@ user.visible_message("\blue [user] mends [target]'s [get_cavity(affected)] cavity walls with \the [tool].", \ "\blue You mend [target]'s [get_cavity(affected)] cavity walls with \the [tool]." ) + return 1 + + /datum/surgery_step/cavity/place_item priority = 0 allowed_tools = list(/obj/item = 100) @@ -129,6 +134,7 @@ if(istype(tool, /obj/item/weapon/disk/nuclear)) user << "Central command would kill you if you implanted the disk into someone." + return 0//fail else user.visible_message("\blue [user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ "\blue You put \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) @@ -143,6 +149,8 @@ tool.loc = target affected.cavity = 0 + return 1 + ////////////////////////////////////////////////////////////////// // IMPLANT/ITEM REMOVAL SURGERY // ////////////////////////////////////////////////////////////////// @@ -208,9 +216,12 @@ var/obj/item/weapon/implant/imp = obj imp.imp_in = null imp.implanted = 0 + + return 1 else user.visible_message("\blue [user] removes \the [tool] from [target]'s [affected.name].", \ "\blue There's something inside [target]'s [affected.name], but you just missed it this time." ) + return -1 //or maybe 0.... else if (affected.hidden) user.visible_message("\blue [user] takes something out of incision on [target]'s [affected.name] with \the [tool].", \ "\blue You take something out of incision on [target]'s [affected.name]s with \the [tool]." ) @@ -220,10 +231,12 @@ affected.hidden.blood_DNA[target.dna.unique_enzymes] = target.dna.b_type affected.hidden.update_icon() affected.hidden = null + return 1 else user.visible_message("\blue [user] could not find anything inside [target]'s [affected.name], and pulls \the [tool] out.", \ "\blue You could not find anything inside [target]'s [affected.name]." ) + return -1 /datum/surgery_step/cavity/implant_removal/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) ..() @@ -237,4 +250,5 @@ playsound(imp.loc, 'sound/items/countdown.ogg', 75, 1, -3) spawn(25) imp.activate() + return 0 diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index e264753633f..0bea5b7c4ee 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -3,6 +3,7 @@ // LIMB SURGERY // ////////////////////////////////////////////////////////////////// + /datum/surgery_step/limb/ priority = 3 // Must be higher than /datum/surgery_step/internal can_infect = 0 @@ -21,27 +22,27 @@ min_duration = 50 max_duration = 70 - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/E = tool - user.visible_message("[user] starts attaching [E.name] to [target]'s [E.amputation_point].", \ - "You start attaching [E.name] to [target]'s [E.amputation_point].") +/datum/surgery_step/limb/attach/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/E = tool + user.visible_message("[user] starts attaching [E.name] to [target]'s [E.amputation_point].", \ + "You start attaching [E.name] to [target]'s [E.amputation_point].") - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/E = tool - user.visible_message("[user] has attached [target]'s [E.name] to the [E.amputation_point].", \ - "You have attached [target]'s [E.name] to the [E.amputation_point].") - user.unEquip(E) - E.replaced(target) - E.forceMove(target) - target.update_body() - target.updatehealth() - target.UpdateDamageIcon() +/datum/surgery_step/limb/attach/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/E = tool + user.visible_message("[user] has attached [target]'s [E.name] to the [E.amputation_point].", \ + "You have attached [target]'s [E.name] to the [E.amputation_point].") + user.unEquip(E) + E.replaced(target) + E.forceMove(target) + target.update_body() + target.updatehealth() + target.UpdateDamageIcon() - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/E = tool - user.visible_message("[user]'s hand slips, damaging [target]'s [E.amputation_point]!", \ - "Your hand slips, damaging [target]'s [E.amputation_point]!") - target.apply_damage(10, BRUTE, null, sharp=1) +/datum/surgery_step/limb/attach/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/E = tool + user.visible_message("[user]'s hand slips, damaging [target]'s [E.amputation_point]!", \ + "Your hand slips, damaging [target]'s [E.amputation_point]!") + target.apply_damage(10, BRUTE, null, sharp=1) /datum/surgery_step/limb/connect allowed_tools = list( @@ -54,32 +55,32 @@ min_duration = 100 max_duration = 120 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/E = target.get_organ(target_zone) - return E && !E.is_stump() && (E.status & ORGAN_DESTROYED) +/datum/surgery_step/limb/connect/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/E = target.get_organ(target_zone) + return E && !E.is_stump() && (E.status & ORGAN_DESTROYED) - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/E = target.get_organ(target_zone) - user.visible_message("[user] starts connecting tendons and muscles in [target]'s [E.amputation_point] with [tool].", \ - "You start connecting tendons and muscle in [target]'s [E.amputation_point].") +/datum/surgery_step/limb/connect/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/E = target.get_organ(target_zone) + user.visible_message("[user] starts connecting tendons and muscles in [target]'s [E.amputation_point] with [tool].", \ + "You start connecting tendons and muscle in [target]'s [E.amputation_point].") - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/E = target.get_organ(target_zone) - user.visible_message("[user] has connected tendons and muscles in [target]'s [E.amputation_point] with [tool].", \ - "You have connected tendons and muscles in [target]'s [E.amputation_point] with [tool].") - E.status &= ~ORGAN_DESTROYED - if(E.children) - for(var/obj/item/organ/external/C in E.children) - C.status &= ~ORGAN_DESTROYED - target.update_body() - target.updatehealth() - target.UpdateDamageIcon() +/datum/surgery_step/limb/connect/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/E = target.get_organ(target_zone) + user.visible_message("[user] has connected tendons and muscles in [target]'s [E.amputation_point] with [tool].", \ + "You have connected tendons and muscles in [target]'s [E.amputation_point] with [tool].") + E.status &= ~ORGAN_DESTROYED + if(E.children) + for(var/obj/item/organ/external/C in E.children) + C.status &= ~ORGAN_DESTROYED + target.update_body() + target.updatehealth() + target.UpdateDamageIcon() - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/organ/external/E = tool - user.visible_message("[user]'s hand slips, damaging [target]'s [E.amputation_point]!", \ - "Your hand slips, damaging [target]'s [E.amputation_point]!") - target.apply_damage(10, BRUTE, null, sharp=1) +/datum/surgery_step/limb/connect/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/organ/external/E = tool + user.visible_message("[user]'s hand slips, damaging [target]'s [E.amputation_point]!", \ + "Your hand slips, damaging [target]'s [E.amputation_point]!") + target.apply_damage(10, BRUTE, null, sharp=1) /datum/surgery_step/limb/mechanize allowed_tools = list(/obj/item/robot_parts = 100) @@ -87,43 +88,43 @@ min_duration = 80 max_duration = 100 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - if(..()) - var/obj/item/robot_parts/p = tool - if (p.part) - if (!(target_zone in p.part)) - return 0 - return isnull(target.get_organ(target_zone)) +/datum/surgery_step/limb/connect/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + if(..()) + var/obj/item/robot_parts/p = tool + if (p.part) + if (!(target_zone in p.part)) + return 0 + return isnull(target.get_organ(target_zone)) - begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) +/datum/surgery_step/limb/connect/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("[user] starts attaching \the [tool] to [target].", \ "You start attaching \the [tool] to [target].") - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - var/obj/item/robot_parts/L = tool - user.visible_message("[user] has attached \the [tool] to [target].", \ - "You have attached \the [tool] to [target].") +/datum/surgery_step/limb/connect/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/robot_parts/L = tool + user.visible_message("[user] has attached \the [tool] to [target].", \ + "You have attached \the [tool] to [target].") - if(L.part) - for(var/part_name in L.part) - if(!isnull(target.get_organ(part_name))) - continue - var/list/organ_data = target.species.has_limbs["[part_name]"] - if(!organ_data) - continue - var/new_limb_type = organ_data["path"] - var/obj/item/organ/external/new_limb = new new_limb_type(target) - new_limb.robotize(L.model_info) - if(L.sabotaged) - new_limb.sabotaged = 1 + if(L.part) + for(var/part_name in L.part) + if(!isnull(target.get_organ(part_name))) + continue + var/list/organ_data = target.species.has_limbs["[part_name]"] + if(!organ_data) + continue + var/new_limb_type = organ_data["path"] + var/obj/item/organ/external/new_limb = new new_limb_type(target) + new_limb.robotize(L.model_info) + if(L.sabotaged) + new_limb.sabotaged = 1 - target.update_body() - target.updatehealth() - target.UpdateDamageIcon() + target.update_body() + target.updatehealth() + target.UpdateDamageIcon() - qdel(tool) + qdel(tool) - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) - user.visible_message("[user]'s hand slips, damaging [target]'s flesh!", \ - "Your hand slips, damaging [target]'s flesh!") - target.apply_damage(10, BRUTE, null, sharp=1) +/datum/surgery_step/limb/connect/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + user.visible_message("[user]'s hand slips, damaging [target]'s flesh!", \ + "Your hand slips, damaging [target]'s flesh!") + target.apply_damage(10, BRUTE, null, sharp=1) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 6e9d1228ecd..a6a561468d0 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -70,6 +70,8 @@ ticker.mode.remove_thrall(target.mind,0) new /obj/item/organ/internal/shadowtumor(get_turf(target)) + return 1 + /datum/surgery_step/internal/dethrall/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/braincase = target.named_organ_parent("brain") if(prob(50)) @@ -77,8 +79,11 @@ "You fumble and tear out [target]'s tumor!") target.adjustBrainLoss(110) // This is so you can't just defib'n go ticker.mode.remove_thrall(target.mind,1) + + return 0 else user.visible_message("[user]'s hand slips and fumbles! Luckily, they didn't damage anything!") + return 0 ////////////////////////////////////////////////////////////////// // ALIEN EMBRYO SURGERY // @@ -88,7 +93,7 @@ possible_locs = list("chest") -/datum/surgery_step/internal/remove_embryo +/datum/surgery_step/internal/remove_embryo//might can just do this in organ mainpulation..but this is TARGETED for.. allowed_tools = list( /obj/item/weapon/hemostat = 100, \ /obj/item/weapon/wirecutters = 75, \ @@ -99,51 +104,55 @@ min_duration = 80 max_duration = 100 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/embryo = 0 - var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) - if(A) - embryo = 1 - //break +/datum/surgery_step/internal/remove_embryo/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/embryo = 0 + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) + embryo = 1 + //break - if (!hasorgans(target)) - return - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return ..() && affected && embryo && affected.open_enough_for_surgery() && target_zone == "chest" + if (!hasorgans(target)) + return + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return ..() && affected && embryo && affected.open_enough_for_surgery() && target_zone == "chest" - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) +/datum/surgery_step/internal/remove_embryo/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) var/msg = "[user] starts to pull something out from [target]'s ribcage with \the [tool]." var/self_msg = "You start to pull something out from [target]'s ribcage with \the [tool]." user.visible_message(msg, self_msg) target.custom_pain("Something hurts horribly in your chest!",1) ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", - "You rip the larva out of [target]'s ribcage!") +/datum/surgery_step/internal/remove_embryo/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + user.visible_message("\red [user] rips the larva out of [target]'s ribcage!", + "You rip the larva out of [target]'s ribcage!") - var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) - if(A) - user << "You found an unknown alien organism in [target]'s chest!" - if(prob(10)) - A.AttemptGrow() + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) + user << "You found an unknown alien organism in [target]'s chest!" + if(prob(10)) + A.AttemptGrow() - A.remove(target) - A.loc = get_turf(target) + A.remove(target) + A.loc = get_turf(target) - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + return 1 - if (!hasorgans(target)) - return +/datum/surgery_step/internal/remove_embryo/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) - if(A) - if(prob(50)) - A.AttemptGrow(0) - user.visible_message("[user] accidentally pokes the xenomorph in [target]!", "You accidentally poke the xenomorph in [target]!") - else - target.adjustOxyLoss(30) - user.visible_message("[user] accidentally pokes [target] in the lungs!", "You accidentally poke [target] in the lungs!") + if (!hasorgans(target)) + return + + var/obj/item/organ/internal/body_egg/alien_embryo/A = target.get_int_organ(/obj/item/organ/internal/body_egg/alien_embryo) + if(A) + if(prob(50)) + A.AttemptGrow(0) + user.visible_message("[user] accidentally pokes the xenomorph in [target]!", "You accidentally poke the xenomorph in [target]!") + else + target.adjustOxyLoss(30) + user.visible_message("[user] accidentally pokes [target] in the lungs!", "You accidentally poke [target] in the lungs!") + + return 0 /datum/surgery_step/internal/manipulate_organs @@ -192,7 +201,7 @@ current_type = "extract" var/list/organs = target.get_organs_zone(target_zone) if(!organs.len) - user << "There is no removeable organs in [target]'s [parse_zone(target_zone)]!" + user << "There are no removeable organs in [target]'s [parse_zone(target_zone)]!" return -1 else for(var/obj/item/organ/internal/O in organs) diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index 7c2d455f319..b0aaea718a1 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -16,39 +16,45 @@ min_duration = 70 max_duration = 90 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - if(!affected) return 0 +/datum/surgery_step/fix_vein/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + if(!affected) return 0 - var/internal_bleeding = 0 - for(var/datum/wound/W in affected.wounds) if(W.internal) - internal_bleeding = 1 - break + var/internal_bleeding = 0 + for(var/datum/wound/W in affected.wounds) if(W.internal) + internal_bleeding = 1 + break - return affected.open == 2 && internal_bleeding + return affected.open == 2 && internal_bleeding - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts patching the damaged vein in [target]'s [affected.name] with \the [tool]." , \ - "You start patching the damaged vein in [target]'s [affected.name] with \the [tool].") - target.custom_pain("The pain in [affected.name] is unbearable!",1) - ..() +/datum/surgery_step/fix_vein/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts patching the damaged vein in [target]'s [affected.name] with \the [tool]." , \ + "You start patching the damaged vein in [target]'s [affected.name] with \the [tool].") + target.custom_pain("The pain in [affected.name] is unbearable!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has patched the damaged vein in [target]'s [affected.name] with \the [tool].", \ - "\blue You have patched the damaged vein in [target]'s [affected.name] with \the [tool].") +/datum/surgery_step/fix_vein/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] has patched the damaged vein in [target]'s [affected.name] with \the [tool].", \ + "\blue You have patched the damaged vein in [target]'s [affected.name] with \the [tool].") - for(var/datum/wound/W in affected.wounds) if(W.internal) - affected.wounds -= W - affected.update_damages() - if (ishuman(user) && prob(40)) user:bloody_hands(target, 0) + for(var/datum/wound/W in affected.wounds) if(W.internal) + affected.wounds -= W + affected.update_damages() + if (ishuman(user) && prob(40)) + var/mob/living/carbon/human/U = user + U.bloody_hands(target, 0) - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ - "\red Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") - affected.take_damage(5, 0) + return 1 + +/datum/surgery_step/fix_vein/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ + "\red Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") + affected.take_damage(5, 0) + + return 0 /datum/surgery_step/fix_dead_tissue //Debridement priority = 2 @@ -64,35 +70,39 @@ min_duration = 110 max_duration = 160 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if(!hasorgans(target)) - return 0 +/datum/surgery_step/fix_dead_tissue/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if(!hasorgans(target)) + return 0 - if (target_zone == "mouth" || target_zone == "eyes") - return 0 + if (target_zone == "mouth" || target_zone == "eyes") + return 0 - var/obj/item/organ/external/affected = target.get_organ(target_zone) + var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected && affected.open == 2 && (affected.status & ORGAN_DEAD) + return affected && affected.open == 2 && (affected.status & ORGAN_DEAD) - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts cutting away necrotic tissue in [target]'s [affected.name] with \the [tool]." , \ - "You start cutting away necrotic tissue in [target]'s [affected.name] with \the [tool].") - target.custom_pain("The pain in [affected.name] is unbearable!",1) - ..() +/datum/surgery_step/fix_dead_tissue/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts cutting away necrotic tissue in [target]'s [affected.name] with \the [tool]." , \ + "You start cutting away necrotic tissue in [target]'s [affected.name] with \the [tool].") + target.custom_pain("The pain in [affected.name] is unbearable!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\blue [user] has cut away necrotic tissue in [target]'s [affected.name] with \the [tool].", \ - "\blue You have cut away necrotic tissue in [target]'s [affected.name] with \the [tool].") - affected.open = 3 +/datum/surgery_step/fix_dead_tissue/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] has cut away necrotic tissue in [target]'s [affected.name] with \the [tool].", \ + "\blue You have cut away necrotic tissue in [target]'s [affected.name] with \the [tool].") + affected.open = 3 - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("\red [user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!", \ - "\red Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!") - affected.createwound(CUT, 20, 1) + return 1 + +/datum/surgery_step/fix_dead_tissue/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\red [user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!", \ + "\red Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!") + affected.createwound(CUT, 20, 1) + + return 0 /datum/surgery_step/treat_necrosis priority = 2 @@ -110,60 +120,62 @@ min_duration = 50 max_duration = 60 - can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - if (!istype(tool, /obj/item/weapon/reagent_containers)) - return 0 +/datum/surgery_step/fix_dead_tissue/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + if (!istype(tool, /obj/item/weapon/reagent_containers)) + return 0 - var/obj/item/weapon/reagent_containers/container = tool - if(!container.reagents.has_reagent("mitocholide")) - return 0 + var/obj/item/weapon/reagent_containers/container = tool + if(!container.reagents.has_reagent("mitocholide")) + return 0 - if(!hasorgans(target)) - return 0 + if(!hasorgans(target)) + return 0 - if (target_zone == "mouth" || target_zone == "eyes") - return 0 + if (target_zone == "mouth" || target_zone == "eyes") + return 0 - var/obj/item/organ/external/affected = target.get_organ(target_zone) - return affected.open == 3 && (affected.status & ORGAN_DEAD) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + return affected.open == 3 && (affected.status & ORGAN_DEAD) - begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - user.visible_message("[user] starts applying medication to the affected tissue in [target]'s [affected.name] with \the [tool]." , \ - "You start applying medication to the affected tissue in [target]'s [affected.name] with \the [tool].") - target.custom_pain("Something in your [affected.name] is causing you a lot of pain!",1) - ..() +/datum/surgery_step/fix_dead_tissue/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts applying medication to the affected tissue in [target]'s [affected.name] with \the [tool]." , \ + "You start applying medication to the affected tissue in [target]'s [affected.name] with \the [tool].") + target.custom_pain("Something in your [affected.name] is causing you a lot of pain!",1) + ..() - end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) +/datum/surgery_step/fix_dead_tissue/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) - if (!istype(tool, /obj/item/weapon/reagent_containers)) - return + if (!istype(tool, /obj/item/weapon/reagent_containers)) + return - var/obj/item/weapon/reagent_containers/container = tool + var/obj/item/weapon/reagent_containers/container = tool - var/trans = container.reagents.trans_to(target, container.amount_per_transfer_from_this) - if (trans > 0) - container.reagents.reaction(target, INGEST) //technically it's contact, but the reagents are being applied to internal tissue - - if(container.reagents.has_reagent("mitocholide")) - affected.status &= ~ORGAN_DEAD - - user.visible_message("\blue [user] applies [trans] units of the solution to affected tissue in [target]'s [affected.name]", \ - "\blue You apply [trans] units of the solution to affected tissue in [target]'s [affected.name] with \the [tool].") - - fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) - var/obj/item/organ/external/affected = target.get_organ(target_zone) - - if (!istype(tool, /obj/item/weapon/reagent_containers)) - return - - var/obj/item/weapon/reagent_containers/container = tool - - var/trans = container.reagents.trans_to(target, container.amount_per_transfer_from_this) + var/trans = container.reagents.trans_to(target, container.amount_per_transfer_from_this) + if (trans > 0) container.reagents.reaction(target, INGEST) //technically it's contact, but the reagents are being applied to internal tissue - user.visible_message("\red [user]'s hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!" , \ - "\red Your hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!") + if(container.reagents.has_reagent("mitocholide")) + affected.status &= ~ORGAN_DEAD - //no damage or anything, just wastes medicine + user.visible_message("\blue [user] applies [trans] units of the solution to affected tissue in [target]'s [affected.name]", \ + "\blue You apply [trans] units of the solution to affected tissue in [target]'s [affected.name] with \the [tool].") + + return 1 + +/datum/surgery_step/fix_dead_tissue/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery) + var/obj/item/organ/external/affected = target.get_organ(target_zone) + + if (!istype(tool, /obj/item/weapon/reagent_containers)) + return + + var/obj/item/weapon/reagent_containers/container = tool + + var/trans = container.reagents.trans_to(target, container.amount_per_transfer_from_this) + container.reagents.reaction(target, INGEST) //technically it's contact, but the reagents are being applied to internal tissue + + user.visible_message("\red [user]'s hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!" , \ + "\red Your hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!") + + //no damage or anything, just wastes medicine diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index d0fe89dcd41..30fcaa7be5d 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -8,12 +8,16 @@ steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/robotics/external/repair_brute,/datum/surgery_step/robotics/external/repair_burn,/datum/surgery_step/robotics/external/close_hatch) possible_locs = list("chest","head","l_arm", "l_hand","r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","groin") requires_organic_bodypart = 0 + allowed_species = list(/mob/living/carbon/human/machine) + disallowed_species = list(/mob/living/carbon/human) /datum/surgery/cybernetic_repair - name = "Cybernetic Mainpulation" + name = "Internal Cybernetic Mainpulation" steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/robotics/manipulate_robotic_organs) possible_locs = list("chest","head","groin") requires_organic_bodypart = 0 + allowed_species = list(/mob/living/carbon/human/machine) + disallowed_species = list(/mob/living/carbon/human) //to do, moar surgerys or condense down ala mainpulate organs. diff --git a/code/modules/surgery/slime.dm b/code/modules/surgery/slime.dm index f4e0b999c44..9a478484864 100644 --- a/code/modules/surgery/slime.dm +++ b/code/modules/surgery/slime.dm @@ -24,21 +24,24 @@ min_duration = 30 max_duration = 50 - can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) +/datum/surgery_step/slime/cut_flesh/can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) return ..() && istype(target) && target.core_removal_stage == 0 - begin_step(mob/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) +/datum/surgery_step/slime/cut_flesh/begin_step(mob/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) user.visible_message("[user] starts cutting through [target]'s flesh with \the [tool].", \ "You start cutting through [target]'s flesh with \the [tool].") - end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) +/datum/surgery_step/slime/cut_flesh/end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) user.visible_message("\blue [user] cuts through [target]'s flesh with \the [tool].", \ "\blue You cut through [target]'s flesh with \the [tool], revealing its silky innards.") target.core_removal_stage = 1 - fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) + return 1 + +/datum/surgery_step/slime/cut_flesh/fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) user.visible_message("\red [user]'s hand slips, tearing [target]'s flesh with \the [tool]!", \ "\red Your hand slips, tearing [target]'s flesh with \the [tool]!") + return 0 /datum/surgery_step/slime/cut_innards allowed_tools = list( @@ -50,21 +53,23 @@ min_duration = 30 max_duration = 50 - can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) +/datum/surgery_step/slime/cut_innards/can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) return ..() && istype(target) && target.core_removal_stage == 1 - begin_step(mob/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) +/datum/surgery_step/slime/cut_innards/begin_step(mob/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) user.visible_message("[user] starts cutting [target]'s silky innards apart with \the [tool].", \ "You start cutting [target]'s silky innards apart with \the [tool].") - end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) +/datum/surgery_step/slime/cut_innards/end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) user.visible_message("\blue [user] cuts [target]'s innards apart with \the [tool], exposing the cores.", \ "\blue You cut [target]'s innards apart with \the [tool], exposing the cores.") target.core_removal_stage = 2 + return 1 - fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) +/datum/surgery_step/slime/cut_innards/fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) user.visible_message("\red [user]'s hand slips, tearing [target]'s innards with \the [tool]!", \ "\red Your hand slips, tearing [target]'s innards with \the [tool]!") + return 0 /datum/surgery_step/slime/saw_core allowed_tools = list( @@ -75,23 +80,26 @@ min_duration = 50 max_duration = 70 - can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) +/datum/surgery_step/slime/saw_core/can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) return ..() && (istype(target) && target.core_removal_stage == 2 && target.cores > 0) //This is being passed a human as target, unsure why. - begin_step(mob/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) +/datum/surgery_step/slime/saw_core/begin_step(mob/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) user.visible_message("[user] starts cutting out one of [target]'s cores with \the [tool].", \ "You start cutting out one of [target]'s cores with \the [tool].") - end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) - target.cores-- - user.visible_message("\blue [user] cuts out one of [target]'s cores with \the [tool].",, \ - "\blue You cut out one of [target]'s cores with \the [tool]. [target.cores] cores left.") +/datum/surgery_step/slime/saw_core/end_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) + target.cores-- + user.visible_message("\blue [user] cuts out one of [target]'s cores with \the [tool].",, \ + "\blue You cut out one of [target]'s cores with \the [tool]. [target.cores] cores left.") - if(target.cores >= 0) - new target.coretype(target.loc) - if(target.cores <= 0) - target.icon_state = "[target.colour] baby slime dead-nocore" + if(target.cores >= 0) + new target.coretype(target.loc) + if(target.cores <= 0) + target.icon_state = "[target.colour] baby slime dead-nocore" - fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) + return 1 + +/datum/surgery_step/slime/saw_core/fail_step(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool) user.visible_message("\red [user]'s hand slips, causing \him to miss the core!", \ - "\red Your hand slips, causing you to miss the core!") \ No newline at end of file + "\red Your hand slips, causing you to miss the core!") + return 0 \ No newline at end of file