/datum/surgery/limb_augmentation
name = "Augment Limb"
steps = list(
/datum/surgery_step/generic/cut_open,
/datum/surgery_step/generic/clamp_bleeders,
/datum/surgery_step/generic/retract_skin,
/datum/surgery_step/proxy/open_organ,
/datum/surgery_step/augment
)
possible_locs = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)
/datum/surgery/limb_augmentation/can_start(mob/user, mob/living/carbon/target)
. = ..()
if(!.)
return FALSE
if(ishuman(target))
var/mob/living/carbon/human/H = target
var/obj/item/organ/external/affected = H.get_organ(user.zone_selected)
if(affected.status & ~(ORGAN_SPLINTED | ORGAN_SALVED)) //Checks the inverse of these flags, for example if the targeted limb was broken or burned. The limb must be in good condition to augment.
return FALSE
return TRUE
/datum/surgery_step/augment
name = "augment limb with robotic part"
allowed_tools = list(/obj/item/robot_parts = 100)
time = 3.2 SECONDS
/datum/surgery_step/augment/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/robot_parts/p = tool
if(p.part)
if(target_zone in p.part)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message(
"[user] starts augmenting [affected] with [tool].",
"You start augmenting [affected] with [tool]."
)
return ..()
to_chat(user, "[tool] cannot be used to augment this limb!")
return SURGERY_BEGINSTEP_ABORT
/datum/surgery_step/augment/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/robot_parts/L = tool
var/obj/item/organ/external/affected = target.get_organ(target_zone)
user.visible_message(
"[user] has finished augmenting [affected] with [tool].",
"You augment [affected] with [tool]."
)
if(L.part)
for(var/part_name in L.part)
if(!target.get_organ(part_name))
continue
affected.robotize(L.model_info, make_tough = TRUE, convert_all = FALSE)
if(L.sabotaged)
affected.sabotaged = TRUE
break
target.update_body()
target.updatehealth()
target.UpdateDamageIcon()
qdel(tool)
affected.open = ORGAN_CLOSED
affected.germ_level = 0
return SURGERY_STEP_CONTINUE