diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm
index fd0a685038e..d594d365d5c 100644
--- a/code/modules/mob/living/carbon/human/human_attackhand.dm
+++ b/code/modules/mob/living/carbon/human/human_attackhand.dm
@@ -59,14 +59,19 @@
switch(M.a_intent)
if(I_HELP)
+ if(can_operate(M))
+ if(health >= config.health_threshold_crit)
+ for(var/datum/surgery/S in M.surgeries)
+ if(istype(S.get_surgery_step(), /datum/surgery_step/cavity/place_item))
+ return 1
+ else
+ help_shake_act(M)
+ add_logs(src, M, "shaked")
+ return 1
if(health >= config.health_threshold_crit)
- for(var/datum/surgery/S in M.surgeries)
- if(istype(S.get_surgery_step(), /datum/surgery_step/cavity/place_item))
- return 1
- else
- help_shake_act(M)
- add_logs(src, M, "shaked")
- return 1
+ help_shake_act(M)
+ add_logs(src, M, "shaked")
+ return 1
if(!H.check_has_mouth())
H << "You don't have a mouth, you cannot perform CPR!"
return
diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm
index 8bf203a8414..fe2acd815c3 100644
--- a/code/modules/surgery/implant.dm
+++ b/code/modules/surgery/implant.dm
@@ -18,6 +18,14 @@
possible_locs = list("groin")
+/datum/surgery/cavity_implant/synth
+ name = "cavity implant"
+ steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/cavity/place_item,/datum/surgery_step/robotics/external/close_hatch)
+ possible_locs = list("chest","head","groin")
+
+/datum/surgery/cavity_implant/synth/can_start(mob/user, mob/living/carbon/target)
+ return target.get_species() == "Machine"
+
/datum/surgery_step/cavity
priority = 1
@@ -145,7 +153,7 @@
"You start putting \the [tool] inside [target]'s [get_cavity(affected)] cavity." )
else if(IC)
user.visible_message("[user] checks for items in [target]'s [target_zone].", "You check for items in [target]'s [target_zone]...")
- target.custom_pain("The pain in your chest is living hell!",1)
+ target.custom_pain("The pain in your [target_zone] is living hell!",1)
..()
/datum/surgery_step/cavity/place_item/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool,datum/surgery/surgery)
@@ -193,6 +201,14 @@
steps = list(/datum/surgery_step/generic/cut_open, /datum/surgery_step/generic/clamp_bleeders, /datum/surgery_step/generic/retract_skin, /datum/surgery_step/generic/cut_open,/datum/surgery_step/cavity/implant_removal,/datum/surgery_step/cavity/close_space,/datum/surgery_step/generic/cauterize/)
possible_locs = list("chest","head")//head is for borers..i can put it elsewhere
+/datum/surgery/cavity_implant_rem/synth
+ name = "implant removal"
+ steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/cavity/implant_removal,/datum/surgery_step/robotics/external/close_hatch)
+ possible_locs = list("chest","head")//head is for borers..i can put it elsewhere
+
+/datum/surgery/cavity_implant_rem/synth/can_start(mob/user, mob/living/carbon/target)
+ return target.get_species() == "Machine"
+
/datum/surgery_step/cavity/implant_removal
name = "extract implant"
allowed_tools = list(
diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm
index f774953bc58..88585afeaa2 100644
--- a/code/modules/surgery/limb_reattach.dm
+++ b/code/modules/surgery/limb_reattach.dm
@@ -34,6 +34,21 @@
return 0
+/datum/surgery/reattach/synth
+ name = "limb attachment"
+ steps = list(/datum/surgery_step/limb/attach)
+ possible_locs = list("head","l_arm", "l_hand","r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","groin")
+
+/datum/surgery/reattach/synth/can_start(mob/user, mob/living/carbon/target)
+ 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 && (target.get_species() == "Machine"))
+ return 1
+
+ return 0
+
+
/datum/surgery/robo_attach
name = "robotic limb attachment"
steps = list(/datum/surgery_step/limb/mechanize)
@@ -77,6 +92,11 @@
user.unEquip(E)
E.replaced(target)
E.forceMove(target)
+ if(target.get_species() == "Machine")//as this is the only step needed for ipc put togethers
+ 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()
@@ -114,6 +134,9 @@
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
+ var/obj/item/organ/external/stump = target.get_organ(target_zone)
+ if(stump.is_stump())
+ stump.removed(target)
if(E.children)
for(var/obj/item/organ/external/C in E.children)
C.status &= ~ORGAN_DESTROYED
@@ -159,6 +182,9 @@
var/list/organ_data = target.species.has_limbs["[part_name]"]
if(!organ_data)
continue
+ var/obj/item/organ/external/stump = target.get_organ(target_zone)
+ if(stump.is_stump())
+ stump.removed(target)
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)
diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm
index 82ce2b8e5d9..c8df4adf7cc 100644
--- a/code/modules/surgery/organs/augments_internal.dm
+++ b/code/modules/surgery/organs/augments_internal.dm
@@ -266,23 +266,23 @@ datumvars//note i am putting External in robolimbs.
/obj/item/organ/internal/cyberimp/chest/arm_mod/ui_action_click()
if(overloaded)//ensure the implant isn't broken
- owner.visible_message("The implant doesn't respond. It seems to be broken...")
+ owner << "The implant doesn't respond. It seems to be broken..."
return
if(out)//check if the owner has the item out already
owner.unEquip(holder, 1)//if he does, take it away. then,
holder.loc = null//stash it in nullspace
out = 0//and set this to clarify the item isn't out.
- owner.visible_message("You retract [holder].")
+ owner.visible_message("[owner] retracts [holder].","You retract [holder].")
playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1)
else//if he doesn't have the item out
if(owner.put_in_hands(holder))//put it in his hands.
lasthand = owner.get_active_hand()
out = 1
- owner.visible_message("You extend [holder]!")
+ owner.visible_message("[owner] extends [holder]!","You extend [holder]!")
playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1)
else//if this fails to put the item in his hands,
holder.loc = null//keep it in nullspace
- owner.visible_message("You can't extend [holder] if you can't use your hands!")
+ owner << "You can't extend [holder] if you can't use your hands!"
/obj/item/organ/internal/cyberimp/chest/arm_mod/emp_act(severity)//if the implant gets EMPed...
if(!owner || overloaded)//ensure that it's in an owner and that it's not already EMPed, then...
@@ -291,7 +291,7 @@ datumvars//note i am putting External in robolimbs.
owner.unEquip(holder, 1)//if he does, take it away.
holder.loc = null
out = 0
- owner.visible_message("[holder] forcibly retracts into your arm.")
+ owner.visible_message("[holder] forcibly retracts into [owner]'s arm.")
owner.visible_message("A loud bang comes from [owner]...")
playsound(get_turf(owner), 'sound/effects/bang.ogg', 100, 1)
owner << "You feel an explosion erupt inside you as your chest implant breaks. Is it hot in here?"
diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm
index d435ed6b87e..531e49526b1 100644
--- a/code/modules/surgery/organs/organ_external.dm
+++ b/code/modules/surgery/organs/organ_external.dm
@@ -76,7 +76,7 @@
//qdel(O)
return ..()
-/*
+
/obj/item/organ/external/attackby(obj/item/weapon/W as obj, mob/user as mob)
switch(stage)
if(0)
@@ -110,7 +110,7 @@
user.visible_message("[user] fishes around fruitlessly in [src] with [W].")
return
..()
- */
+
/obj/item/organ/external/update_health()
damage = min(max_damage, (brute_dam + burn_dam))
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index c0d1da13daf..4a6f84e9b2f 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -3,7 +3,7 @@
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/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize)
possible_locs = list("chest","head")
- requires_organic_bodypart = 0
+ requires_organic_bodypart = 1
/datum/surgery/organ_manipulation/soft
possible_locs = list("groin", "eyes", "mouth")
@@ -26,7 +26,7 @@
if(istype(target,/mob/living/carbon/human))
var/mob/living/carbon/human/H = target
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
- if(affected.status & ORGAN_ROBOT)
+ if(affected && (affected.status & ORGAN_ROBOT))
return 0
return 1
@@ -226,7 +226,6 @@
"You start treating damage to [target]'s [I.name] with [tool_name]." )
user << "No organs appear to be damaged."
- return -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))
diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm
index a821c8987e7..c79eb220c38 100644
--- a/code/modules/surgery/other.dm
+++ b/code/modules/surgery/other.dm
@@ -4,12 +4,11 @@
//////////////////////////////////////////////////////////////////
/datum/surgery/bleeding
name = "internal bleeding"
- steps = list(/datum/surgery_step/generic/cut_open,/datum/surgery_step/generic/clamp_bleeders,/datum/surgery_step/generic/retract_skin,/datum/surgery_step/generic/retract_skin, /datum/surgery_step/open_encased/saw,
- /datum/surgery_step/open_encased/retract,/datum/surgery_step/fix_vein,/datum/surgery_step/open_encased/close, /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/fix_vein,/datum/surgery_step/generic/cauterize)
possible_locs = list("chest","head","groin")
/datum/surgery/bleeding/can_start(mob/user, mob/living/carbon/target)
- if(ishuman(target)
+ 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) return 0
@@ -201,12 +200,23 @@
//////////////////////////////////////////////////////////////////
/datum/surgery/remove_thrall
name = "clense contaminations"//RENAME MEH
- 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)
+ 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,/datum/surgery_step/glue_bone, /datum/surgery_step/set_bone,/datum/surgery_step/finish_bone,/datum/surgery_step/generic/cauterize)
possible_locs = list("head")
+/datum/surgery/remove_thrall/synth
+ name = "clense contaminations"//RENAME MEH
+ steps = list(/datum/surgery_step/robotics/external/unscrew_hatch,/datum/surgery_step/robotics/external/open_hatch,/datum/surgery_step/internal/dethrall,/datum/surgery_step/robotics/external/close_hatch)
+ possible_locs = list("chest")
+
+
+
/datum/surgery/remove_thrall/can_start(mob/user, mob/living/carbon/target)
return is_thrall(target)//would this be too meta?
+/datum/surgery/remove_thrall/synth/can_start(mob/user, mob/living/carbon/target)
+ return is_thrall(target) && target.get_species() == "Machine"
+
+
/datum/surgery_step/dethrall
name = "cleanse contamination"
allowed_tools = list(/obj/item/device/flash = 100, /obj/item/device/flashlight/pen = 80, /obj/item/device/flashlight = 40)