Files
Bubberstation/code/modules/surgery/amputation.dm
Bloop a9c80a29a3 [MISSED MIRROR] Implements a macro for checking mind traits (#76548) (#22447)
* Implements a macro for checking mind traits (#76548)

![image](https://github.com/tgstation/tgstation/assets/82850673/f85d0556-1806-40bf-92b8-597e46ccb4af)
Seeing this pattern repeated over various sections of code was starting
to piss me off

Lessens chance to cause errors with mind traits, ensures consistent
behavior, makes it easier to change how mind traits work if necessary.

hopefully not player facing

---------

Co-authored-by: san7890 <the@san7890.com>

* modular stuff

---------

Co-authored-by: ChungusGamer666 <82850673+ChungusGamer666@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
2023-07-18 21:32:47 -04:00

71 lines
2.4 KiB
Plaintext

/datum/surgery/amputation
name = "Amputation"
requires_bodypart_type = NONE
surgery_flags = SURGERY_REQUIRE_RESTING | SURGERY_REQUIRE_LIMB | SURGERY_MORBID_CURIOSITY
possible_locs = list(
BODY_ZONE_R_ARM,
BODY_ZONE_L_ARM,
BODY_ZONE_L_LEG,
BODY_ZONE_R_LEG,
BODY_ZONE_HEAD,
)
steps = list(
/datum/surgery_step/incise,
/datum/surgery_step/retract_skin,
/datum/surgery_step/clamp_bleeders,
/datum/surgery_step/saw,
/datum/surgery_step/clamp_bleeders,
/datum/surgery_step/sever_limb,
)
removes_target_bodypart = TRUE // SKYRAT EDIT ADDITION - Surgically unremovable limbs
/datum/surgery/amputation/can_start(mob/user, mob/living/patient)
if(HAS_TRAIT(patient, TRAIT_NODISMEMBER))
return FALSE
return ..()
/datum/surgery_step/sever_limb
name = "sever limb (circular saw)"
implements = list(
/obj/item/shears = 300,
TOOL_SCALPEL = 100,
TOOL_SAW = 100,
/obj/item/shovel/serrated = 75,
/obj/item/melee/arm_blade = 80,
/obj/item/fireaxe = 50,
/obj/item/hatchet = 40,
/obj/item/knife/butcher = 25)
time = 64
preop_sound = 'sound/surgery/scalpel1.ogg'
success_sound = 'sound/surgery/organ2.ogg'
/datum/surgery_step/sever_limb/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
display_results(
user,
target,
span_notice("You begin to sever [target]'s [parse_zone(target_zone)]..."),
span_notice("[user] begins to sever [target]'s [parse_zone(target_zone)]!"),
span_notice("[user] begins to sever [target]'s [parse_zone(target_zone)]!"),
)
display_pain(target, "You feel a gruesome pain in your [parse_zone(target_zone)]'s joint!")
/datum/surgery_step/sever_limb/success(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
display_results(
user,
target,
span_notice("You sever [target]'s [parse_zone(target_zone)]."),
span_notice("[user] severs [target]'s [parse_zone(target_zone)]!"),
span_notice("[user] severs [target]'s [parse_zone(target_zone)]!"),
)
display_pain(target, "You can no longer feel your severed [parse_zone(target_zone)]!")
if(HAS_MIND_TRAIT(user, TRAIT_MORBID) && ishuman(user))
var/mob/living/carbon/human/morbid_weirdo = user
morbid_weirdo.add_mood_event("morbid_dismemberment", /datum/mood_event/morbid_dismemberment)
if(surgery.operated_bodypart)
var/obj/item/bodypart/target_limb = surgery.operated_bodypart
target_limb.drop_limb()
return ..()