diff --git a/code/WorkInProgress/surgery.dm b/code/WorkInProgress/surgery.dm index 31a073a13ac..847b148a3f9 100644 --- a/code/WorkInProgress/surgery.dm +++ b/code/WorkInProgress/surgery.dm @@ -64,12 +64,18 @@ proc/build_surgery_steps_list() /datum/surgery_step/generic/ var/datum/organ/external/affected //affected organ can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + if (target_zone == "eyes") //there are specific steps for eye surgery + return 0 if (!hasorgans(target)) return 0 affected = target.get_organ(target_zone) if (affected == null) return 0 - return target_zone != "eyes" //there are specific steps for eye surgery + if (affected.status & ORGAN_DESTROYED) + return 0 + if (affected.status & ORGAN_ROBOT) + return 0 + return 1 /datum/surgery_step/generic/cut_open required_tool = /obj/item/weapon/scalpel @@ -848,6 +854,94 @@ proc/build_surgery_steps_list() return 0 return 1 + +/datum/surgery_step/limb/cut + required_tool = /obj/item/weapon/scalpel + + min_duration = 80 + max_duration = 100 + + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts cutting away flesh where [target]'s [affected.display_name] used to be with \the [tool].", \ + "You start cutting away flesh where [target]'s [affected.display_name] used to be with \the [tool].") + + end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] cuts away flesh where [target]'s [affected.display_name] used to be with \the [tool].", \ + "\blue You cut away flesh where [target]'s [affected.display_name] used to be with \the [tool].") + affected.status |= ORGAN_CUT_AWAY + + fail_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/affected = target.get_organ(target_zone) + if (affected.parent) + affected = affected.parent + user.visible_message("\red [user]'s hand slips, cutting [target]'s [affected.display_name] open!", \ + "\red Your hand slips, cutting [target]'s [affected.display_name] open!") + affected.createwound(CUT, 10) + + +/datum/surgery_step/limb/mend + required_tool = /obj/item/weapon/retractor + + min_duration = 80 + max_duration = 100 + + can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/affected = target.get_organ(target_zone) + return ..() && affected.status & ORGAN_CUT_AWAY + + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] is beginning reposition flesh and nerve endings where where [target]'s [affected.display_name] used to be with [tool].", \ + "You start repositioning flesh and nerve endings where where [target]'s [affected.display_name] used to be with [tool].") + + end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] has finished repositioning flesh and nerve endings where [target]'s [affected.display_name] used to be with [tool].", \ + "\blue You have finished repositioning flesh and nerve endings where [target]'s [affected.display_name] used to be with [tool].") + affected.open = 3 + + fail_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/affected = target.get_organ(target_zone) + if (affected.parent) + affected = affected.parent + user.visible_message("\red [user]'s hand slips, tearing flesh on [target]'s [affected.display_name]!", \ + "\red Your hand slips, tearing flesh on [target]'s [affected.display_name]!") + target.apply_damage(10, BRUTE, affected) + + +/datum/surgery_step/limb/prepeare + required_tool = /obj/item/weapon/cautery + + min_duration = 60 + max_duration = 70 + + can_use(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/affected = target.get_organ(target_zone) + return ..() && affected.open == 3 + + begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/affected = target.get_organ(target_zone) + user.visible_message("[user] starts adjusting area around [target]'s [affected.display_name] with \the [tool].", \ + "You start adjusting area around [target]'s [affected.display_name] with \the [tool]..") + + end_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/affected = target.get_organ(target_zone) + user.visible_message("\blue [user] has finished adjusting the area around [target]'s [affected.display_name] with \the [tool].", \ + "\blue You have finished adjusting the area around [target]'s [affected.display_name] with \the [tool].") + affected.status |= ORGAN_ATTACHABLE + affected.open = 0 + + fail_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/datum/organ/external/affected = target.get_organ(target_zone) + if (affected.parent) + affected = affected.parent + user.visible_message("\red [user]'s hand slips, searing [target]'s [affected.display_name]!", \ + "\red Your hand slips, searing [target]'s [affected.display_name]!") + target.apply_damage(10, BURN, affected) + + /datum/surgery_step/limb/attach required_tool = /obj/item/robot_parts @@ -860,7 +954,7 @@ proc/build_surgery_steps_list() if (!(target_zone in p.part)) return 0 var/datum/organ/external/affected = target.get_organ(target_zone) - return ..()// && affected.status & ORGAN_ATTACHABLE + return ..() && affected.status & ORGAN_ATTACHABLE begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/datum/organ/external/affected = target.get_organ(target_zone) @@ -881,5 +975,4 @@ proc/build_surgery_steps_list() var/datum/organ/external/affected = target.get_organ(target_zone) user.visible_message("\red [user]'s hand slips, damaging connectors on [target]'s [affected.display_name]!", \ "\red Your hand slips, damaging connectors on [target]'s [affected.display_name]!") - target.apply_damage(10, BRUTE, affected) - + target.apply_damage(10, BRUTE, affected) \ No newline at end of file