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