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)