diff --git a/code/modules/surgery/amputation.dm b/code/modules/surgery/amputation.dm index fa8d035a8f1..873a70e1b10 100644 --- a/code/modules/surgery/amputation.dm +++ b/code/modules/surgery/amputation.dm @@ -9,7 +9,7 @@ /datum/surgery_step/sever_limb name = "sever limb" - implements = list(TOOL_SCALPEL = 100, TOOL_SAW = 100, /obj/item/melee/arm_blade = 80, /obj/item/twohanded/fireaxe = 50, /obj/item/hatchet = 40, /obj/item/kitchen/knife/butcher = 25) + implements = list(/obj/item/shears = 300, TOOL_SCALPEL = 100, TOOL_SAW = 100, /obj/item/melee/arm_blade = 80, /obj/item/twohanded/fireaxe = 50, /obj/item/hatchet = 40, /obj/item/kitchen/knife/butcher = 25) time = 64 experience_given = 5 diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 9920244e8c6..02f0bf81a39 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -330,3 +330,73 @@ /obj/item/surgicaldrill/advanced/examine() . = ..() . += " It's set to [tool_behaviour == TOOL_DRILL ? "drilling" : "mending"] mode." + +/obj/item/shears + name = "amputation shears" + desc = "A type of heavy duty surgical shears used for achieving a clean separation between limb and patient. Keeping the patient still is imperative to be able to secure and align the shears." + icon = 'icons/obj/surgery.dmi' + icon_state = "shears" + flags_1 = CONDUCT_1 + item_flags = SURGICAL_TOOL + toolspeed = 1 + force = 12 + w_class = WEIGHT_CLASS_NORMAL + throwforce = 6 + throw_speed = 2 + throw_range = 5 + custom_materials = list(/datum/material/iron=8000, /datum/material/titanium=6000) + attack_verb = list("sheared", "snipped") + sharpness = IS_SHARP + custom_premium_price = 1800 + +/obj/item/shears/attack(mob/living/M, mob/user) + if(!iscarbon(M) || user.a_intent != INTENT_HELP) + return ..() + + if(user.zone_selected == BODY_ZONE_CHEST) + return ..() + + var/mob/living/carbon/patient = M + + if(HAS_TRAIT(patient, TRAIT_NODISMEMBER)) + to_chat(user, "The patient's limbs look too sturdy to amputate.") + return + + var/candidate_name + var/obj/item/organ/tail_snip_candidate + var/obj/item/bodypart/limb_snip_candidate + + if(user.zone_selected == BODY_ZONE_PRECISE_GROIN) + tail_snip_candidate = patient.getorganslot(ORGAN_SLOT_TAIL) + if(!tail_snip_candidate) + to_chat(user, "[patient] does not have a tail.") + return + candidate_name = tail_snip_candidate.name + + else + limb_snip_candidate = patient.get_bodypart(check_zone(user.zone_selected)) + if(!limb_snip_candidate) + to_chat(user, "[patient] is already missing that limb, what more do you want?") + return + candidate_name = limb_snip_candidate.name + + var/amputation_speed_mod + + patient.visible_message("[user] begins to secure [src] around [patient]'s [candidate_name].", "[user] begins to secure [src] around your [candidate_name]!") + playsound(get_turf(patient), 'sound/items/ratchet.ogg', 20, TRUE) + if(patient.stat == DEAD || patient.stat == UNCONSCIOUS || patient.IsStun()) //Stun is used by paralytics like curare it should not be confused with the more common paralyze. + amputation_speed_mod = 0.5 + else if(patient.jitteriness >= 1) + amputation_speed_mod = 1.5 + else + amputation_speed_mod = 1 + + if(do_after(user, toolspeed * 150 * amputation_speed_mod, target = patient)) + playsound(get_turf(patient), 'sound/weapons/bladeslice.ogg', 250, TRUE) + if(user.zone_selected == BODY_ZONE_PRECISE_GROIN) //OwO + tail_snip_candidate.Remove(patient) + tail_snip_candidate.forceMove(get_turf(patient)) + else + limb_snip_candidate.dismember() + user.visible_message("[src] violently slams shut, amputating [patient]'s [candidate_name].", "You amputate [patient]'s [candidate_name] with [src].") + diff --git a/code/modules/vending/medical.dm b/code/modules/vending/medical.dm index fcc2207f2cf..cfadc833106 100644 --- a/code/modules/vending/medical.dm +++ b/code/modules/vending/medical.dm @@ -32,10 +32,11 @@ /obj/item/reagent_containers/pill/multiver = 6, /obj/item/storage/box/hug/medical = 1) premium = list(/obj/item/reagent_containers/medigel/instabitaluri = 2, - /obj/item/storage/pill_bottle/psicodine = 2, - /obj/item/reagent_containers/hypospray/medipen = 3, - /obj/item/storage/belt/medical = 3, - /obj/item/storage/firstaid/advanced = 2) + /obj/item/storage/pill_bottle/psicodine = 2, + /obj/item/reagent_containers/hypospray/medipen = 3, + /obj/item/storage/belt/medical = 3, + /obj/item/storage/firstaid/advanced = 2, + /obj/item/shears = 1) armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF refill_canister = /obj/item/vending_refill/medical diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index eb32a869da5..17ebcf6b4c9 100755 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ