mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-01 20:42:08 +00:00
* Surgery code improvements * missed flag Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
87 lines
2.7 KiB
Plaintext
87 lines
2.7 KiB
Plaintext
/datum/surgery/dissection
|
|
name = "Dissection"
|
|
target_mobtypes = list(
|
|
/mob/living/carbon/human,
|
|
/mob/living/carbon/alien,
|
|
)
|
|
surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_REQUIRES_REAL_LIMB
|
|
possible_locs = list(BODY_ZONE_CHEST)
|
|
steps = list(
|
|
/datum/surgery_step/incise,
|
|
/datum/surgery_step/retract_skin,
|
|
/datum/surgery_step/clamp_bleeders,
|
|
/datum/surgery_step/dissection,
|
|
/datum/surgery_step/close,
|
|
)
|
|
|
|
/datum/surgery/dissection/can_start(mob/user, mob/living/patient)
|
|
. = ..()
|
|
|
|
// This isn't a real advanced tech, but it doesn't make sense using it without an operating computer
|
|
if (isnull(locate_operating_computer(get_turf(patient))))
|
|
return FALSE
|
|
|
|
if (HAS_TRAIT(patient, TRAIT_DISSECTED))
|
|
return FALSE
|
|
|
|
if (patient.stat != DEAD)
|
|
return FALSE
|
|
|
|
return TRUE
|
|
|
|
/datum/surgery_step/dissection
|
|
name = "dissect (scalpel)"
|
|
time = 16 SECONDS
|
|
implements = list(
|
|
TOOL_SCALPEL = 100,
|
|
/obj/item/melee/energy/sword = 75,
|
|
/obj/item/knife = 65,
|
|
/obj/item/shard = 45,
|
|
/obj/item = 30,
|
|
)
|
|
|
|
/datum/surgery_step/dissection/preop(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
|
var/ending = "..."
|
|
if (isnull(surgery.locate_operating_computer(get_turf(target))))
|
|
ending = "<b>, but without a linked operating computer, you won't get any research!</b>"
|
|
|
|
display_results(
|
|
user,
|
|
target,
|
|
span_notice("You start to dissect [target][ending]"),
|
|
span_notice("[user] starts to dissect [target]..."),
|
|
span_notice("[user] begins to start poking around inside your corpse...hey, wait a minute!"),
|
|
)
|
|
|
|
/datum/surgery_step/dissection/success(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results)
|
|
ADD_TRAIT(target, TRAIT_DISSECTED, REF(src))
|
|
|
|
var/obj/machinery/computer/operating/operating_computer = surgery.locate_operating_computer(get_turf(target))
|
|
if (!isnull(operating_computer))
|
|
SEND_SIGNAL(operating_computer, COMSIG_OPERATING_COMPUTER_DISSECTION_COMPLETE, target)
|
|
|
|
return TRUE
|
|
|
|
/datum/surgery_step/dissection/failure(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery, fail_prob)
|
|
display_results(
|
|
user,
|
|
target,
|
|
span_notice("You mess up, damaging some of the internal organs!"),
|
|
span_notice("[user] messes up, damaging some of the internal organs!"),
|
|
span_notice("[user] messes up, damaging some of your internal organs!"),
|
|
)
|
|
|
|
target.adjustOrganLoss(pick(
|
|
ORGAN_SLOT_APPENDIX,
|
|
ORGAN_SLOT_BRAIN,
|
|
ORGAN_SLOT_HEART,
|
|
ORGAN_SLOT_LIVER,
|
|
ORGAN_SLOT_LUNGS,
|
|
ORGAN_SLOT_STOMACH,
|
|
), 20)
|
|
|
|
return FALSE
|
|
|
|
/datum/surgery_step/dissection/tool_check(mob/user, obj/item/tool)
|
|
return implement_type != /obj/item || tool.get_sharpness() > 0
|