mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-21 04:57:57 +01:00
[READY]Da amputation update. New premium surgical tool / tail harvesting device. (#48271)
* base * Felinid's worst nightmare * Apply suggestions from code review Co-Authored-By: PKPenguin321 <pkpenguin321.git@gmail.com> * Stronger outlines / desc / no skill benefit * fixies for review Co-authored-by: PKPenguin321 <pkpenguin321.git@gmail.com>
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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, "<span class='warning'>The patient's limbs look too sturdy to amputate.</span>")
|
||||
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, "<span class='warning'>[patient] does not have a tail.</span>")
|
||||
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, "<span class='warning'>[patient] is already missing that limb, what more do you want?</span>")
|
||||
return
|
||||
candidate_name = limb_snip_candidate.name
|
||||
|
||||
var/amputation_speed_mod
|
||||
|
||||
patient.visible_message("<span class='danger'>[user] begins to secure [src] around [patient]'s [candidate_name].</span>", "<span class='userdanger'>[user] begins to secure [src] around your [candidate_name]!</span>")
|
||||
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("<span class='danger'>[src] violently slams shut, amputating [patient]'s [candidate_name].</span>", "<span class='notice'>You amputate [patient]'s [candidate_name] with [src].</span>")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user