diff --git a/code/modules/surgery/amputation.dm b/code/modules/surgery/amputation.dm index 766107a0a994..fa820d1c242d 100644 --- a/code/modules/surgery/amputation.dm +++ b/code/modules/surgery/amputation.dm @@ -6,6 +6,23 @@ possible_locs = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_HEAD) requires_bodypart_type = 0 +/datum/surgery/amputation/mechanic + name = "Detach mechanical limb" + self_operable = TRUE + requires_bodypart_type = BODYPART_ROBOTIC + possible_locs = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) + target_mobtypes = list(/mob/living/carbon/human) + lying_required = FALSE + steps = list( + /datum/surgery_step/mechanic_open, + /datum/surgery_step/open_hatch, + /datum/surgery_step/mechanic_unwrench, + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/sever_limb/mechanic + ) + +/datum/surgery/amputation/mechanic/can_start(mob/user, mob/living/carbon/target) + return ispreternis(target) /datum/surgery_step/sever_limb name = "sever limb" @@ -27,3 +44,23 @@ target_limb.drop_limb() return 1 + +/datum/surgery_step/sever_limb/mechanic + name = "uninstall limb" + accept_hand = TRUE + +/datum/surgery_step/sever_limb/mechanic/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results(user, target, "You begin to detach [target]'s [parse_zone(target_zone)]...", + "[user] begins to detach [target]'s [parse_zone(target_zone)]!", + "[user] begins to detach [target]'s [parse_zone(target_zone)]!") + +/datum/surgery_step/sever_limb/mechanic/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + var/mob/living/carbon/human/L = target + display_results(user, target, "You detached [L]'s [parse_zone(target_zone)].", + "[user] detached [L]'s [parse_zone(target_zone)]!", + "[user] detached [L]'s [parse_zone(target_zone)]!") + if(surgery.operated_bodypart) + var/obj/item/bodypart/target_limb = surgery.operated_bodypart + target_limb.drop_limb() + + return 1 diff --git a/code/modules/surgery/prosthetic_replacement.dm b/code/modules/surgery/prosthetic_replacement.dm index 8bb4528c165c..1fdc2226675a 100644 --- a/code/modules/surgery/prosthetic_replacement.dm +++ b/code/modules/surgery/prosthetic_replacement.dm @@ -13,7 +13,23 @@ if(!C.get_bodypart(user.zone_selected)) //can only start if limb is missing return 1 +/datum/surgery/prosthetic_replacement/mechanic_limb + name = "Attach mechanical limb" + self_operable = TRUE + possible_locs = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) + target_mobtypes = list(/mob/living/carbon/human) + lying_required = FALSE + steps = list( + /datum/surgery_step/prepare_electronics, + /datum/surgery_step/add_prosthetic + ) +/datum/surgery/prosthetic_replacement/mechanic_limb/can_start(mob/user, mob/living/carbon/target) + if(!ispreternis(target)) + return FALSE + + var/mob/living/carbon/C = target + return !C.get_bodypart(user.zone_selected) //can only start if limb is missing /datum/surgery_step/add_prosthetic name = "add prosthetic" @@ -94,4 +110,3 @@ var/obj/item/melee/arm_blade/new_arm = new(target,TRUE,TRUE) target_zone == BODY_ZONE_R_ARM ? target.put_in_r_hand(new_arm) : target.put_in_l_hand(new_arm) return 1 -