diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 893d0ce8cce..ee2d7c56cf7 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -31,13 +31,16 @@ var/messagesource = M if (can_operate(M)) //Checks if mob is lying down on table for surgery + if(istype(src,/obj/item/robot_parts))//popup ovveride for direct attach + if(!attempt_initiate_surgery(src, M, user,1)) + return 0 + if(istype(src,/obj/item/weapon/screwdriver) && M.get_species() == "Machine") + if(!attempt_initiate_surgery(src, M, user)) + return 0 if(is_sharp(src)) - if(istype(src,/obj/item/weapon/circular_saw) || istype(src,/obj/item/weapon/melee/energy/sword/cyborg/saw) || istype(src,/obj/item/robot_parts))//popup ovveride for direct amputation - if(!attempt_initiate_surgery(src, M, user,1)) - return - else - if(!attempt_initiate_surgery(src, M, user)) - return + if(!attempt_initiate_surgery(src, M, user)) + return 0 + return if (istype(M,/mob/living/carbon/brain)) messagesource = M:container diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index 0c8e7f9f69a..d29b0b0dc9c 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -25,7 +25,8 @@ /obj/item/weapon/scalpel/laser3 = 95, \ /obj/item/weapon/scalpel/laser2 = 85, \ /obj/item/weapon/scalpel/laser1 = 75, \ - /obj/item/weapon/melee/energy/sword/saber = 5 + /obj/item/weapon/melee/energy/ = 5, \ + /obj/item/weapon/pen/edagger = 5, \ ) min_duration = 90 @@ -115,6 +116,9 @@ /obj/item/weapon/scalpel = 100, \ /obj/item/weapon/kitchenknife = 75, \ /obj/item/weapon/shard = 50, \ + /obj/item/weapon/scissors = 10, \ + /obj/item/weapon/twohanded/chainsaw = 1, \ + /obj/item/weapon/claymore = 5, \ ) min_duration = 90 @@ -316,6 +320,9 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) 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].") + + add_logs(target,user, "surgically removed [affected.name] from", addition="INTENT: [uppertext(user.a_intent)]") + affected.droplimb(1,DROPLIMB_EDGE) return 1 diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index 72ad82ef2b1..53eab87bd96 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -34,16 +34,7 @@ break if(override) - if(I == /obj/item/weapon/circular_saw) - var/datum/surgery/S = available_surgeries["amputation"] - if(S)//we might be targetting a zone without the named procedure. - var/datum/surgery/procedure = new S.type - if(procedure) - procedure.location = selected_zone - M.surgeries += procedure - procedure.organ_ref = affecting - procedure.next_step(user, M) - else if(I == /obj/item/robot_parts) + if(I == /obj/item/robot_parts) var/datum/surgery/S = available_surgeries["robotic limb attachment"] if(S)//we might be targetting a zone without the named procedure. var/datum/surgery/procedure = new S.type @@ -76,6 +67,9 @@ M.surgeries -= current_surgery user.visible_message("[user] mends the incision on [M]'s [parse_zone(selected_zone)] with the [I] .", \ "You mend the incision on [M]'s [parse_zone(selected_zone)].") + affecting.open = 0 + affecting.germ_level = 0 + affecting.status &= ~ORGAN_BLEEDING qdel(current_surgery) else if(current_surgery.can_cancel) user << "You need to hold a cautery in inactive hand to stop [M]'s surgery!" diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm index eb9be00752b..41098580c48 100644 --- a/code/modules/surgery/limb_reattach.dm +++ b/code/modules/surgery/limb_reattach.dm @@ -18,7 +18,7 @@ if(affected.status && ORGAN_DESTROYED) return 0 - return 1 + return 1 /datum/surgery/reattach @@ -31,10 +31,10 @@ var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - if(affected.status && ~ORGAN_DESTROYED) - return 0 + if(affected.status && ORGAN_DESTROYED) + return 1 - return 1 + return 0 cannot_amputate /datum/surgery/robo_attach @@ -47,10 +47,10 @@ cannot_amputate var/mob/living/carbon/human/H = target var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting) - if(affected.status && ~ORGAN_DESTROYED) - return 0 + if(affected.status && ORGAN_DESTROYED) + return 1 - return 1 + return 0 /datum/surgery_step/limb/ priority = 3 // Must be higher than /datum/surgery_step/internal diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 9b33c4f2f6e..8a4c79b5f40 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -1,10 +1,16 @@ /datum/surgery/organ_manipulation name = "organ manipulation" steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, - /datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/manipulate_organs) - possible_locs = list("chest", "head") + /datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/manipulate_organs, /datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone) + possible_locs = list("chest") requires_organic_bodypart = 0 +/datum/surgery/organ_manipulation/head //for adding a mendskull step... + name = "organ manipulation" + steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw, + /datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/manipulate_organs, /datum/surgery_step/glue_bone, /datum/surgery_step/mend_skull ,/datum/surgery_step/finish_bone) + possible_locs = list("head") + /datum/surgery/organ_manipulation/soft possible_locs = list("groin", "eyes", "mouth") steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/internal/manipulate_organs) @@ -35,7 +41,7 @@ // Dethrall Shadowling // ////////////////////////////////////////////////////////////////// /datum/surgery/remove_thrall - name = "dethralling" + name = "clense contaminations" steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,/datum/surgery_step/open_encased/retract, /datum/surgery_step/internal/dethrall) possible_locs = list("head") @@ -159,7 +165,7 @@ allowed_tools = list(/obj/item/organ/internal = 100, /obj/item/weapon/reagent_containers/food/snacks/organ = 0) var/implements_extract = list(/obj/item/weapon/hemostat = 100, /obj/item/weapon/crowbar = 55) - var/implements_mend = list(/obj/item/stack/medical/advanced/bruise_pack= 100,/obj/item/stack/nanopaste = 100,/obj/item/stack/medical/bruise_pack = 20 + var/implements_mend = list(/obj/item/stack/medical/advanced/bruise_pack = 100,/obj/item/stack/nanopaste = 100,/obj/item/stack/medical/bruise_pack = 20 ) var/current_type var/obj/item/organ/internal/I = null @@ -178,8 +184,9 @@ I = null affected = target.get_organ(target_zone) - if(isorgan(tool)) - world << "Insert" + world << "[implement_type]" + world << "[is_int_organ(implement_type)]" + if(is_int_organ(tool)) current_type = "insert" I = tool if(target_zone != I.parent_organ || target.get_organ_slot(I.slot)) @@ -231,7 +238,8 @@ else if (istype(tool, /obj/item/stack/nanopaste)) tool_name = "\the [tool]" //what else do you call nanopaste medically? - if (!hasorgans(target)) + if(!hasorgans(target)) + user << "They do not have organs to mend!" return for(var/obj/item/organ/internal/I in affected.internal_organs) if(I && I.damage > 0) @@ -243,6 +251,9 @@ else if(I.robotic > 2 && istype(tool, /obj/item/stack/nanopaste)) user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \ "You start treating damage to [target]'s [I.name] with [tool_name]." ) + + user << "No organs appear to be damaged." + return target.custom_pain("The pain in your [affected.name] is living hell!",1) else if(istype(tool, /obj/item/weapon/reagent_containers/food/snacks/organ)) @@ -288,7 +299,7 @@ user.visible_message("\blue [user] has separated and extracts [target]'s [I] with \the [tool]." , \ "\blue You have separated and extracted [target]'s [I] with \the [tool].") - add_logs(user, target, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]") + add_logs(target,user, "surgically removed [I.name] from", addition="INTENT: [uppertext(user.a_intent)]") spread_germs_to_organ(I, user) I.status |= ORGAN_CUT_AWAY I.remove(target) diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index f092a657d1c..37de91743e2 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -11,7 +11,7 @@ allowed_species = list(/mob/living/carbon/human/machine) disallowed_species = list(/mob/living/carbon/human) -/datum/surgery/cybernetic_repair +/datum/surgery/cybernetic_repair/internal 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") diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index af7be7b4661..3f7da2d800f 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -47,6 +47,7 @@ src = null + /* SURGERY STEPS */ /datum/surgery_step var/priority = 0 //steps with higher priority would be attempted first