diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index 99427712b43..ee2d7c56cf7 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -38,8 +38,6 @@
if(!attempt_initiate_surgery(src, M, user))
return 0
if(is_sharp(src))
- if(isslime(M) && !attempt_initiate_surgery(src, M, user))
- return 0
if(!attempt_initiate_surgery(src, M, user))
return 0
return
diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm
index e253f469da4..6ef6ef0707c 100644
--- a/code/modules/mob/living/carbon/brain/brain_item.dm
+++ b/code/modules/mob/living/carbon/brain/brain_item.dm
@@ -57,7 +57,7 @@
else
user << "This one seems particularly lifeless. Perhaps it will regain some of its luster later.."
-/obj/item/organ/internal/brain/remove(var/mob/living/user)
+/obj/item/organ/internal/brain/remove(var/mob/living/user,var/special)
if(!owner) return ..() // Probably a redundant removal; just bail
diff --git a/code/modules/mob/living/carbon/slime/slime.dm b/code/modules/mob/living/carbon/slime/slime.dm
index 952a7095564..2db822d3a67 100644
--- a/code/modules/mob/living/carbon/slime/slime.dm
+++ b/code/modules/mob/living/carbon/slime/slime.dm
@@ -349,6 +349,12 @@
step_away(src,M)
return
+ else
+ if(stat == DEAD && surgeries.len)
+ if(M.a_intent == I_HELP)
+ for(var/datum/surgery/S in surgeries)
+ if(S.next_step(M, src))
+ return 1
/*
if(M.gloves && istype(M.gloves,/obj/item/clothing/gloves))
@@ -482,6 +488,11 @@
return
/mob/living/carbon/slime/attackby(obj/item/W, mob/user, params)
+ if(stat == DEAD && surgeries.len)
+ if(user.a_intent == I_HELP)
+ for(var/datum/surgery/S in surgeries)
+ if(S.next_step(user, src))
+ return 1
if(istype(W,/obj/item/stack/sheet/mineral/plasma)) //Lets you feed slimes plasma.
if (user in Friends)
++Friends[user]
diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm
index f8fad583f34..2c422812033 100644
--- a/code/modules/surgery/helpers.dm
+++ b/code/modules/surgery/helpers.dm
@@ -8,7 +8,7 @@
H = M
affecting = H.get_organ(check_zone(selected_zone))
- if(isslime(M) ||isalien(M) ||can_operate(H)) //if they're prone or a slime
+ if(can_operate(M)) //if they're prone or a slime
var/datum/surgery/current_surgery
for(var/datum/surgery/S in M.surgeries)
@@ -64,9 +64,10 @@
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
+ if(affecting)
+ 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 acca5d25ef4..58399e84f84 100644
--- a/code/modules/surgery/limb_reattach.dm
+++ b/code/modules/surgery/limb_reattach.dm
@@ -14,7 +14,7 @@
var/mob/living/carbon/human/H = target
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
- if(affected.is_stump())
+ if(affected)
return 0
return 1
@@ -29,7 +29,7 @@
if(ishuman(target))
var/mob/living/carbon/human/H = target
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
- if(affected && (affected.status && ORGAN_DESTROYED))
+ if(!affected)
return 1
return 0
@@ -43,7 +43,7 @@
if(ishuman(target))
var/mob/living/carbon/human/H = target
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
- if(affected && (affected.status && ORGAN_DESTROYED))
+ if(!affected)
return 1
return 0
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index 5ef964b372b..8f6625be9a0 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -19,7 +19,7 @@
possible_locs = list("chest", "head", "groin", "eyes", "mouth")
allowed_mob = list(/mob/living/carbon/alien/humanoid)
disallowed_mob = list(/mob/living/carbon/human)
- steps = list(/datum/surgery_step/saw_carapace,/datum/surgery_step/cut_carapace, /datum/surgery_step/retract_carapace, /datum/surgery_step/open_encased/saw, /datum/surgery_step/internal/manipulate_organs)
+ steps = list(/datum/surgery_step/saw_carapace,/datum/surgery_step/cut_carapace, /datum/surgery_step/retract_carapace,/datum/surgery_step/internal/manipulate_organs)
/datum/surgery/organ_manipulation/can_start(mob/user, mob/living/carbon/target)
@@ -134,10 +134,13 @@
-/datum/surgery_step/internal/manipulate_organs/begin_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
+/datum/surgery_step/internal/manipulate_organs/begin_step(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool,datum/surgery/surgery)
I = null
- affected = target.get_organ(target_zone)
+ var/mob/living/carbon/human/H
+ if(istype(target,/mob/living/carbon/human))
+ H = target
+ affected = H.get_organ(target_zone)
if(is_int_organ(tool))
current_type = "insert"
I = tool
@@ -152,15 +155,18 @@
if(target.get_int_organ(I))
user << " \The [target] already has [I]."
return -1
-
- user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \
- "You start transplanting \the [tool] into [target]'s [affected.name].")
- target.custom_pain("Someone's rooting around in your [affected.name]!",1)
+ if(affected)
+ user.visible_message("[user] starts transplanting \the [tool] into [target]'s [affected.name].", \
+ "You start transplanting \the [tool] into [target]'s [affected.name].")
+ H.custom_pain("Someone's rooting around in your [affected.name]!",1)
+ else
+ user.visible_message("[user] starts transplanting \the [tool] into [target]'s [parse_zone(target_zone)].", \
+ "You start transplanting \the [tool] into [target]'s [parse_zone(target_zone)].")
else if(implement_type in implements_finsh)
//same as surgery step /datum/surgery_step/open_encased/close/
current_type = "finish"
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
+
if(affected.encased)
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]."
@@ -169,7 +175,8 @@
var/msg = "[user] starts pulling [target]'s skin back into place with \the [tool]."
var/self_msg = "You start pulling [target]'s skin back into place with \the [tool]."
user.visible_message(msg, self_msg)
- target.custom_pain("Something hurts horribly in your [affected.name]!",1)
+ if(affected)
+ H.custom_pain("Something hurts horribly in your [affected.name]!",1)
else if(implement_type in implements_extract)
current_type = "extract"
var/list/organs = target.get_organs_zone(target_zone)
@@ -188,7 +195,8 @@
if(!I) return -1
user.visible_message("[user] starts to separate [target]'s [I] with \the [tool].", \
"You start to separate [target]'s [I] with \the [tool] for removal." )
- target.custom_pain("The pain in your [affected.name] is living hell!",1)
+ if(affected)
+ H.custom_pain("The pain in your [affected.name] is living hell!",1)
else
return -1
@@ -219,7 +227,7 @@
user << "No organs appear to be damaged."
return -1
- target.custom_pain("The pain in your [affected.name] is living hell!",1)
+ H.custom_pain("The pain in your [affected.name] is living hell!",1)
else if(istype(tool, /obj/item/weapon/reagent_containers/food/snacks/organ))
user << "[tool] was biten by someone! It's too damaged to use!"
@@ -256,9 +264,12 @@
user.drop_item()
I.insert(target)
spread_germs_to_organ(I, user)
- user.visible_message(" [user] has transplanted \the [tool] into [target]'s [affected.name].", \
- " You have transplanted \the [tool] into [target]'s [affected.name].")
-
+ if(affected)
+ user.visible_message(" [user] has transplanted \the [tool] into [target]'s [affected.name].", \
+ " You have transplanted \the [tool] into [target]'s [affected.name].")
+ else
+ user.visible_message(" [user] has transplanted \the [tool] into [target]'s [affected.name].", \
+ " You have transplanted \the [tool] into [target]'s [parse_zone(target_zone)].")
I.status &= ~ORGAN_CUT_AWAY
else if(current_type == "extract")
@@ -276,7 +287,6 @@
"You can't extract anything from [target]'s [parse_zone(target_zone)]!")
else if(current_type == "finish")
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
if(affected.encased)
var/msg = " [user] bends [target]'s [affected.encased] back into place with \the [tool]."
var/self_msg = " You bend [target]'s [affected.encased] back into place with \the [tool]."
@@ -296,7 +306,6 @@
if(current_type == "mend")
if (!hasorgans(target))
return
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message(" [user]'s hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!", \
" Your hand slips, getting mess and tearing the inside of [target]'s [affected.name] with \the [tool]!")
@@ -327,7 +336,6 @@
else if(current_type == "extract")
if(I && I.owner == target)
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message(" [user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \
" Your hand slips, damaging [target]'s [affected.name] with \the [tool]!")
affected.createwound(BRUISE, 20)
diff --git a/code/modules/surgery/slime.dm b/code/modules/surgery/slime.dm
index 41c2f43c76c..e1a72ff3065 100644
--- a/code/modules/surgery/slime.dm
+++ b/code/modules/surgery/slime.dm
@@ -12,7 +12,7 @@
return istype(target, /mob/living/carbon/slime/)
can_use(mob/living/user, mob/living/carbon/slime/target, target_zone, obj/item/tool)
- return target.stat == 2
+ return target.stat == DEAD
/datum/surgery_step/slime/cut_flesh
allowed_tools = list(
diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm
index 7854f45daff..9530ed4ee72 100644
--- a/code/modules/surgery/surgery.dm
+++ b/code/modules/surgery/surgery.dm
@@ -159,10 +159,11 @@
// does stuff to begin the step, usually just printing messages. Moved germs transfering and bloodying here too
/datum/surgery_step/proc/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)
- if (can_infect && affected)
- spread_germs_to_organ(affected, user)
- if (ishuman(user) && prob(60))
+ if(ishuman(target))
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ if (can_infect && affected)
+ spread_germs_to_organ(affected, user)
+ if (ishuman(user) && !(istype(target,/mob/living/carbon/alien)) && prob(60))
var/mob/living/carbon/human/H = user
if (blood_level)
H.bloody_hands(target,0)