/* CONTAINS: SCALPEL CIRCULAR SAW STAPLE GUN DEFIBRILLATOR SUTURE BANDAGE BLOOD BAG (unused) BODY BAG */ /* ================================================= */ /* -------------------- Scalpel -------------------- */ /* ================================================= */ /obj/item/scalpel name = "scalpel" desc = "A surgeon's tool, used to cut precisely into a subject's body." icon = 'icons/obj/surgery.dmi' icon_state = "scalpel1" inhand_image_icon = 'icons/mob/inhand/hand_medical.dmi' item_state = "scalpel" flags = FPRINT | TABLEPASS | CONDUCT hit_type = DAMAGE_CUT hitsound = 'sound/weapons/slashcut.ogg' force = 3.0 w_class = 1.0 throwforce = 5.0 throw_speed = 3 throw_range = 5 m_amt = 10000 g_amt = 5000 stamina_damage = 5 stamina_cost = 5 stamina_crit_chance = 35 var/mob/Poisoner = null module_research = list("tools" = 3, "medicine" = 3, "weapons" = 0.25) New() ..() if (src.icon_state == "scalpel1") icon_state = pick("scalpel1", "scalpel2") src.create_reagents(5) attack(mob/living/carbon/M as mob, mob/user as mob) if (src.reagents && src.reagents.total_volume) logTheThing("combat", user, M, "used [src] on %target% (Intent: [user.a_intent]) (Targeting: [user.zone_sel.selecting]) [log_reagents(src)]") src.reagents.trans_to(M,5) else logTheThing("combat", user, M, "used [src] on %target% (Intent: [user.a_intent]) (Targeting: [user.zone_sel.selecting])") if (!scalpel_surgery(M, user)) return ..() else return suicide(var/mob/user as mob) user.visible_message("[user] slashes \his own throat with [src]!") blood_slash(user, 25) playsound(user.loc, src.hitsound, 50, 1) user.TakeDamage("head", 150, 0) user.updatehealth() spawn(100) if (user) user.suiciding = 0 return 1 /obj/item/scalpel/vr icon = 'icons/effects/VR.dmi' icon_state = "scalpel" /* ====================================================== */ /* -------------------- Circular Saw -------------------- */ /* ====================================================== */ /obj/item/circular_saw name = "circular saw" desc = "A saw used to cut bone with precision." icon = 'icons/obj/surgery.dmi' icon_state = "saw1" inhand_image_icon = 'icons/mob/inhand/hand_medical.dmi' item_state = "saw1" flags = FPRINT | TABLEPASS | CONDUCT hit_type = DAMAGE_CUT hitsound = 'sound/weapons/slashcut.ogg' force = 3 w_class = 1.0 throwforce = 3.0 throw_speed = 3 throw_range = 5 m_amt = 20000 g_amt = 10000 stamina_damage = 5 stamina_cost = 5 stamina_crit_chance = 35 var/mob/Poisoner = null module_research = list("tools" = 3, "medicine" = 3, "weapons" = 0.25) New() ..() if (src.icon_state == "saw1") icon_state = pick("saw1", "saw2", "saw3") src.create_reagents(5) attack(mob/living/carbon/M as mob, mob/user as mob) if (src.reagents && src.reagents.total_volume) logTheThing("combat", user, M, "used [src] on %target% (Intent: [user.a_intent]) (Targeting: [user.zone_sel.selecting]) [log_reagents(src)]") src.reagents.trans_to(M,5) else logTheThing("combat", user, M, "used [src] on %target% (Intent: [user.a_intent]) (Targeting: [user.zone_sel.selecting])") if (!saw_surgery(M, user)) return ..() else return suicide(var/mob/user as mob) user.visible_message("[user] slashes \his own throat with [src]!") blood_slash(user, 25) playsound(user.loc, src.hitsound, 50, 1) user.TakeDamage("head", 150, 0) user.updatehealth() spawn(100) if (user) user.suiciding = 0 return 1 /obj/item/circular_saw/vr icon = 'icons/effects/VR.dmi' icon_state = "saw" /* =========================================================== */ /* -------------------- Enucleation Spoon -------------------- */ /* =========================================================== */ /obj/item/surgical_spoon name = "enucleation spoon" desc = "A surgeon's tool, used to protect the globe of the eye during eye removal surgery, and to lift the eye out of the socket. You could eat food with it too, I guess." icon = 'icons/obj/surgery.dmi' icon_state = "spoon" inhand_image_icon = 'icons/mob/inhand/hand_medical.dmi' item_state = "scalpel" flags = FPRINT | TABLEPASS | CONDUCT hit_type = DAMAGE_STAB hitsound = 'sound/effects/bloody_stab.ogg' force = 3.0 w_class = 1.0 throwforce = 5.0 throw_speed = 3 throw_range = 5 m_amt = 10000 g_amt = 5000 stamina_damage = 5 stamina_cost = 5 stamina_crit_chance = 35 var/mob/Poisoner = null module_research = list("tools" = 3, "medicine" = 3, "weapons" = 0.25) New() ..() src.create_reagents(5) attack(mob/living/carbon/M as mob, mob/user as mob) if (src.reagents && src.reagents.total_volume) logTheThing("combat", user, M, "used [src] on %target% (Intent: [user.a_intent]) (Targeting: [user.zone_sel.selecting]) [log_reagents(src)]") src.reagents.trans_to(M,5) else logTheThing("combat", user, M, "used [src] on %target% (Intent: [user.a_intent]) (Targeting: [user.zone_sel.selecting])") if (!spoon_surgery(M, user)) return ..() else return suicide(var/mob/user as mob) user.visible_message("[user] jabs [src] straight through \his eye and into \his brain!") blood_slash(user, 25) playsound(user.loc, src.hitsound, 50, 1) user.TakeDamage("head", 150, 0) user.updatehealth() spawn(100) if (user) user.suiciding = 0 return 1 /* ==================================================== */ /* -------------------- Staple Gun -------------------- */ /* ==================================================== */ /obj/item/staple_gun name = "staple gun" desc = "A medical staple gun for securely reattaching limbs." icon = 'icons/obj/gun.dmi' icon_state = "staplegun" w_class = 1 throw_speed = 4 throw_range = 20 force = 5 var/datum/projectile/staple = new/datum/projectile/bullet/staple var/ammo = 20 stamina_damage = 15 stamina_cost = 15 stamina_crit_chance = 15 module_research = list("tools" = 1, "medicine" = 1, "weapons" = 1) // Every bit of usability helps (Convair880). examine() src.desc = "A medical staple gun for securely reattaching limbs. There are [src.ammo] staples left." ..() return attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) if (!istype(M, /mob)) return src.add_fingerprint(user) if (src.ammo < 1) user.show_text("*click* *click*", "red") return ..() if (user.a_intent != "help" && ishuman(M)) var/mob/living/carbon/human/H = M H.visible_message("[user] shoots [H] point-blank with [src]!") hit_with_projectile(user, staple, H) src.ammo-- if (H && H.stat == 0) H.lastgasp() return if (!(user.zone_sel.selecting in list("l_arm","r_arm","l_leg","r_leg", "head")) || !ishuman(M)) return ..() var/mob/living/carbon/human/H = M //Attach butt to head if (user.zone_sel.selecting == "head" && istype(H.head, /obj/item/clothing/head/butt)) var/obj/item/clothing/head/butt/B = H.head B.staple() if (src.staple.shot_sound) playsound(user, src.staple.shot_sound, 50, 1) if (user == H) user.visible_message("[user] staples \the [B.name] to their own head! [prob(10) ? pick("Woah!", "What a goof!", "Wow!", "WHY!?"): null]") else user.visible_message("[user] staples \the [B.name] to [H.name]'s head!") if (H.stat!=2) H.emote(pick("cry", "wail", "weep", "sob", "shame", "twitch")) src.ammo-- logTheThing("combat",user, H, "staples a butt to %target%'s head") return if (!surgeryCheck(H, user)) return ..() // Marq fix for undefined variable /datum/human_limbs/var/head if (user.zone_sel.selecting in H.limbs.vars) var/obj/item/parts/surgery_limb = H.limbs.vars[user.zone_sel.selecting] if (istype(surgery_limb)) src.ammo-- surgery_limb.surgery(src) return attackby(obj/item/W, mob/user) ..() if (istype(W,/obj/item/pipebomb/frame)) var/obj/item/pipebomb/frame/F = W if (F.state < 2) user.show_text("This might work better if [F] was hollowed out.") else if (F.state == 2) user.show_text("You combine [F] and [src]. This looks pretty unsafe!") user.u_equip(F) user.u_equip(src) var/turf/T = get_turf(src) playsound(T, "sound/items/Deconstruct.ogg", 50, 1) new/obj/item/gun/kinetic/zipgun(T) qdel(F) qdel(src) else user.show_text("You can't seem to combine these two items this way.") return /* =============================================== */ /* -------------------- Defib -------------------- */ /* =============================================== */ /obj/item/robodefibrilator name = "defibrillator" desc = "Used to resuscitate critical patients." flags = FPRINT | TABLEPASS | CONDUCT icon = 'icons/obj/surgery.dmi' inhand_image_icon = 'icons/mob/inhand/hand_medical.dmi' icon_state = "defib-on" item_state = "defib" var/icon_base = "defib" var/charged = 1 var/charge_time = 100 var/emagged = 0 var/makeshift = 0 var/obj/item/cell/cell = null mats = 10 emag_act(var/mob/user) if (src.makeshift) if (user) user.show_text("You prod at [src], but it doesn't do anything.", "red") return 0 if (!src.emagged) if (user) user.show_text("You short out the on board medical scanner!", "blue") src.desc += " The screen only shows the word KILL flashing over and over." src.emagged = 1 return 1 else if (user) user.show_text("This has already been tampered with.", "red") return 0 demag(var/mob/user) if (!src.emagged) return 0 if (user) user.show_text("You reapair the on board medical scanner.", "blue") src.desc = null src.desc = "Used to resuscitate critical patients." src.emagged = 0 return 1 attack(mob/living/M as mob, mob/user as mob) if (!ishuman(M)) return ..() if (src.charged == 0) user.show_text("[src] is still charging!", "red") return if (src.defibrillate(M, user, src.emagged, src.makeshift, src.cell)) src.charged = 0 src.icon_state = "[src.icon_base]-shock" spawn(10) src.icon_state = "[src.icon_base]-off" spawn(src.charge_time) src.charged = 1 src.icon_state = "[src.icon_base]-on" playsound(user.loc, "sound/weapons/flash.ogg", 75, 1) disposing() ..() if (src.cell) src.cell.dispose() src.cell = null get_desc(dist) ..() if (istype(src.cell)) if (src.cell.artifact) return else . += "The charge meter reads [round(src.cell.percent())]%." /obj/item/robodefibrilator/emagged emagged = 1 desc = "Used to resuscitate critical patients. The screen only shows the word KILL flashing over and over." /obj/item/robodefibrilator/vr icon = 'icons/effects/VR.dmi' /obj/item/robodefibrilator/makeshift name = "shoddy-looking makeshift defibrilator" desc = "It might restart your heart, I guess, or it might barbeque your insides." icon_state = "cell-on" inhand_image_icon = 'icons/mob/inhand/hand_medical.dmi' item_state = "cell" icon_base = "cell" makeshift = 1 New(var/location, var/obj/item/cell/newcell) ..() if (!istype(newcell)) newcell = new /obj/item/cell/charged(src) src.cell = newcell newcell.set_loc(src) /* ================================================ */ /* -------------------- Suture -------------------- */ /* ================================================ */ /obj/item/suture name = "suture" desc = "A fine, curved needle with a length of absorbable polyglycolide suture thread." icon = 'icons/obj/surgery.dmi' icon_state = "suture" inhand_image_icon = 'icons/mob/inhand/hand_medical.dmi' item_state = "suture" flags = FPRINT | TABLEPASS | CONDUCT hit_type = DAMAGE_STAB w_class = 1.0 force = 1 throwforce = 1.0 throw_speed = 4 throw_range = 20 m_amt = 5000 stamina_damage = 1 stamina_cost = 1 stamina_crit_chance = 0 var/in_use = 0 attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) if (!suture_surgery(M,user)) if (ishuman(M)) var/mob/living/carbon/human/H = M var/zone = user.zone_sel.selecting var/surgery_status = H.get_surgery_status(zone) if (surgery_status && H.organHolder) H.visible_message("[user] begins suturing the incisions on [H == user ? "[H.gender == "male" ? "his" : "her"]" : "[H]'s"] [zone_sel2name[zone]] closed with [src].", \ "[H == user ? "You begin" : "[user] begins"] suturing the incisions on your [zone_sel2name[zone]] closed with [src].") src.in_use = 1 if (do_mob(user, H, 20 * surgery_status)) H.visible_message("[user] sutures the incisions on [H == user ? "[H.gender == "male" ? "his" : "her"]" : "[H]'s"] [zone_sel2name[zone]] closed.", \ "[H == user ? "You suture" : "[user] sutures"] the incisions on your [zone_sel2name[zone]] closed.") if (zone == "chest") if (H.organHolder.heart) H.organHolder.heart.op_stage = 0.0 if (H.butt_op_stage) H.butt_op_stage = 0.0 H.TakeDamage("chest", 2, 0) else if (zone == "head") if (H.organHolder.head) H.organHolder.head.op_stage = 0.0 if (H.organHolder.skull) H.organHolder.skull.op_stage = 0.0 if (H.organHolder.brain) H.organHolder.brain.op_stage = 0.0 if (H.bleeding) repair_bleeding_damage(H, 50, rand(1,3)) src.in_use = 0 return else user.show_text("You were interrupted!", "red") src.in_use = 0 return else if (H.bleeding) H.visible_message("[user] begins suturing [H == user ? "[H.gender == "male" ? "his" : "her"]" : "[H]'s"] wounds closed with [src].", \ "[H == user ? "You begin" : "[user] begins"] suturing your wounds closed with [src].") src.in_use = 1 if (do_mob(user, H, 20 * H.bleeding)) H.visible_message("[user] sutures [H == user ? "[H.gender == "male" ? "his" : "her"]" : "[H]'s"] wounds closed.", \ "[H == user ? "You suture" : "[user] sutures"] your wounds closed.") repair_bleeding_damage(M, 100, 10) src.in_use = 0 return else user.show_text("You were interrupted!", "red") src.in_use = 0 return else user.show_text("[H] has no wounds to close!", "red") return else return suicide(var/mob/user as mob) user.visible_message("[user] rapidly sews \his mouth and nose closed with [src]! Holy shit, how?!") user.take_oxygen_deprivation(160) user.updatehealth() spawn(100) if (user) user.suiciding = 0 return 1 /obj/item/suture/vr icon = 'icons/effects/VR.dmi' /* ================================================= */ /* -------------------- Bandage -------------------- */ /* ================================================= */ /obj/item/bandage name = "bandage" desc = "A length of gauze that will help stop bleeding." icon = 'icons/obj/surgery.dmi' icon_state = "bandage-item-3" inhand_image_icon = 'icons/mob/inhand/hand_medical.dmi' item_state = "bandage" flags = FPRINT | TABLEPASS w_class = 1.0 force = 0 throwforce = 1.0 throw_speed = 4 throw_range = 20 stamina_damage = 0 stamina_cost = 0 stamina_crit_chance = 0 var/uses = 6 var/in_use = 0 get_desc(dist) ..() if (src.uses >= 0) switch (src.uses) if (-INFINITY to 0) . += "There's none left." if (1) // grhg w/e I'm half asleep this is good enough . += "There's enough left to bandage about [src.uses] wound." if (2 to 5) . += "There's enough left to bandage about [src.uses] wounds." if (6 to INFINITY) . += "None of it's been used." attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) if (!src.uses || src.icon_state == "bandage-item-0") user.show_text("There's nothing left of [src]!", "red") return if (src.in_use) return if (ishuman(M)) var/mob/living/carbon/human/H = M if (H.bleeding) H.visible_message("[user] begins bandaging [H == user ? "[H.gender == "male" ? "his" : "her"]" : "[H]'s"] wounds with [src].", \ "[H == user ? "You begin" : "[user] begins"] bandaging your wounds with [src].") src.in_use = 1 if (do_mob(user, H, 15)) H.visible_message("[user] dresses [H == user ? "[H.gender == "male" ? "his" : "her"]" : "[H]'s"] wounds.", \ "[H == user ? "You dress" : "[user] dresses"] your wounds.") repair_bleeding_damage(M, 100, rand(2,5)) src.uses -- src.in_use = 0 src.update_icon() var/target = user.zone_sel.selecting if (!H.bandaged.Find(target)) H.bandaged += target H.update_body() else user.show_text("You were interrupted!", "red") src.in_use = 0 return else user.show_text("[H] has no wounds to bandage!", "red") return else return ..() proc/update_icon() switch (src.uses) if (0 to -INFINITY) src.icon_state = "bandage-item-0" if (1 to 2) src.icon_state = "bandage-item-1" if (3 to 4) src.icon_state = "bandage-item-2" if (5 to INFINITY) src.icon_state = "bandage-item-3" /obj/item/bandage/vr icon = 'icons/effects/VR.dmi' /* =================================================== */ /* -------------------- Blood Bag -------------------- */ /* =================================================== */ /* /obj/item/bloodbag name = "blood bag" desc = "A bag filled with donated O- blood. There's a fine needle at the end that can be used to transfer the blood to someone." icon = 'icons/obj/surgery.dmi' icon_state = "bloodbag-10" inhand_image_icon = 'icons/mob/inhand/hand_medical.dmi' item_state = "bloodbag" flags = FPRINT | TABLEPASS w_class = 1.0 force = 0 throwforce = 1.0 throw_speed = 4 throw_range = 20 stamina_damage = 0 stamina_cost = 0 stamina_crit_chance = 0 var/volume = 100 // aaa why did they hold SO MUCH BLOOD?? 500 IS THE SAME AS A PERSON WHY DID THEY HAVE A PERSON WORTH OF BLOOD IN THEM var/in_use = 0 get_desc(dist) ..() if (src.volume >= 0) switch (src.volume) if (-INFINITY to 0) . += "It's empty." if (1 to 29) . += "It's getting low." if (30 to 69) . += "Some of it's been used." if (70 to 99) . += "It's nearly full." if (100 to INFINITY) . += "It's full." attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) if (volume <= 0) user.show_text("There's nothing left in [src]!", "red") return if (in_use) return if (ishuman(M)) var/mob/living/carbon/human/H = M if (H.blood_volume < 500) H.tri_message("[user] attaches [src]'s needle to [H == user ? "[H.gender == "male" ? "his" : "her"]" : "[H]'s"] arm and begins transferring blood.",\ user, "You attach [src]'s needle to [H == user ? "your" : "[H]'s"] arm and begin transferring blood.",\ H, "[H == user ? "You attach" : "[user] attaches"] [src]'s needle to your arm and begin transferring blood.") src.in_use = 1 for (var/i) if (H.blood_volume >= 500) H.visible_message("[H]'s blood transfusion finishes.", \ "Your blood transfusion finishes.") src.in_use = 0 break if (src.volume <= 0) H.visible_message("[src] runs out of blood!") src.in_use = 0 break if (get_dist(src, H) > 1) var/fluff = pick("pulled", "yanked", "ripped") H.visible_message("[src]'s needle gets [fluff] out of [H]'s arm!", \ "[src]'s needle gets [fluff] out of your arm!") src.in_use = 0 break else H.blood_volume ++ src.volume -- src.update_icon() if (prob(5)) var/fluff = pick("better", "a little better", "a bit better", "warmer", "a little warmer", "a bit warmer", "less cold") H.visible_message("[H] looks [fluff].", \ "You feel [fluff].") sleep(5) else user.show_text("[H] already has enough blood!", "red") return else return ..() attackby(obj/item/W, mob/user) if (istype(W, /obj/item/reagent_containers/hypospray) || istype(W, /obj/item/reagent_containers/syringe) || istype(W, /obj/item/reagent_containers/emergency_injector)) if (W.reagents && W.reagents.has_reagent("blood")) var/blood_volume = W.reagents.get_reagent_amount("blood") if (blood_volume < W.reagents.total_volume) user.show_text("This blood is impure!", "red") return else if (src.volume > 100 - W:amount_per_transfer_from_this) user.show_text("[src] is too full!", "red") return user.visible_message("[user] transfers blood to [src].", \ "You transfer blood from [W] to [src].") W.reagents.remove_reagent("blood", W:amount_per_transfer_from_this) src.volume += W:amount_per_transfer_from_this return else return ..() proc/update_icon() var/iv_state = max(min(round(src.volume, 10) / 10, 100), 0) icon_state = "bloodbag-[iv_state]" /* switch (src.volume) if (90 to INFINITY) src.icon_state = "bloodbag-10" if (80 to 89) src.icon_state = "bloodbag-9" if (70 to 79) src.icon_state = "bloodbag-8" if (60 to 69) src.icon_state = "bloodbag-7" if (50 to 59) src.icon_state = "bloodbag-6" if (40 to 49) src.icon_state = "bloodbag-5" if (30 to 39) src.icon_state = "bloodbag-4" if (20 to 29) src.icon_state = "bloodbag-3" if (10 to 19) src.icon_state = "bloodbag-2" if (1 to 9) src.icon_state = "bloodbag-1" if (-INFINITY to 0) src.icon_state = "bloodbag-0" */ */ /* ================================================== */ /* -------------------- Body Bag -------------------- */ /* ================================================== */ /obj/item/body_bag name = "body bag" desc = "A heavy bag, used for carrying stuff around. The stuff is usually dead bodies. Hence the name." icon = 'icons/obj/surgery.dmi' icon_state = "bodybag" flags = FPRINT | TABLEPASS w_class = 1.0 force = 0 throwforce = 1.0 throw_speed = 4 throw_range = 20 stamina_damage = 0 stamina_cost = 0 stamina_crit_chance = 0 var/open = 0 var/image/open_image = null var/sound_zipper = 'sound/items/zipper.ogg' New() ..() src.open_image = image(src.icon, src, "bodybag-open1", EFFECTS_LAYER_BASE) disposing() for(var/atom/movable/AM in src) AM.set_loc(src.loc) ..() proc/update_icon() if (src.open && src.open_image) src.overlays += src.open_image src.icon_state = "bodybag-open" src.w_class = 4.0 else if (!src.open) src.overlays -= src.open_image if (src.contents && src.contents.len) src.icon_state = "bodybag-closed1" else src.icon_state = "bodybag-closed0" src.w_class = 4.0 else src.overlays -= src.open_image src.icon_state = "bodybag" src.w_class = 1.0 attack_self(mob/user as mob) if (src.icon_state == "bodybag" && src.w_class == 1.0) user.visible_message("[user] unfolds [src].",\ "You unfold [src].") user.drop_item() src.update_icon() else return attack_hand(mob/user as mob) add_fingerprint(user) if (src.icon_state == "bodybag" && src.w_class == 1.0) return ..() else if (src.open) src.close() else src.open() return relaymove(mob/user as mob) if (user.stat) return if (prob(75)) user.show_text("You fuss with [src], trying to find the zipper, but it's no use!", "red") for (var/mob/M in hearers(src, null)) M.show_text("...rustle...") return src.open() src.visible_message("[user] unzips themselves from [src]!") MouseDrop(mob/user as mob) ..() if (!(src.contents && src.contents.len) && (usr == user && !usr.restrained() && !usr.stat && in_range(src, usr) && !issilicon(usr))) if (src.icon_state != "bodybag") usr.visible_message("[usr] folds up [src].",\ "You fold up [src].") src.overlays -= src.open_image src.icon_state = "bodybag" src.w_class = 1.0 src.attack_hand(usr) proc/open() playsound(src.loc, src.sound_zipper, 100, 1, , 6) for (var/obj/O in src) O.set_loc(get_turf(src)) for (var/mob/M in src) M.weakened += 2 spawn(3) M.set_loc(get_turf(src)) src.open = 1 src.update_icon() proc/close() playsound(src.loc, src.sound_zipper, 100, 1, , 6) for (var/obj/O in get_turf(src)) if (O.density || O.anchored || O == src) continue O.set_loc(src) for (var/mob/M in get_turf(src)) if (!M.lying || M.anchored || M.buckled) continue M.set_loc(src) src.open = 0 src.update_icon() /* ================================================== */ /* -------------------- Hemostat -------------------- */ /* ================================================== */ /obj/item/hemostat name = "hemostat" desc = "A surgical tool used for the control and reduction of bleeding during surgery." icon = 'icons/obj/surgery.dmi' icon_state = "hemostat" inhand_image_icon = 'icons/mob/inhand/hand_medical.dmi' item_state = "hemostat" flags = FPRINT | TABLEPASS | CONDUCT hit_type = DAMAGE_STAB hitsound = 'sound/effects/bloody_stab.ogg' force = 1.5 w_class = 1.0 throwforce = 3.0 throw_speed = 3 throw_range = 6 m_amt = 7000 g_amt = 3500 stamina_damage = 2 stamina_cost = 2 stamina_crit_chance = 15 module_research = list("tools" = 2, "medicine" = 3, "weapons" = 0.1) attack(mob/M as mob, mob/user as mob) if (!ishuman(M)) if (user.a_intent == INTENT_HELP) return return ..() var/mob/living/carbon/human/H = M var/surgery_status = H.get_surgery_status(user.zone_sel.selecting) if (!surgery_status) if (user.a_intent == INTENT_HELP) return return ..() if (!surgeryCheck(H, user)) if (user.a_intent == INTENT_HELP) return return ..() H.tri_message("[user] begins clamping the bleeders in [H == user ? "[his_or_her(H)]" : "[H]'s"] incision with [src].",\ user, "You begin clamping the bleeders in [user == H ? "your" : "[H]'s"] incision with [src].",\ H, "[H == user ? "You begin" : "[user] begins"] clamping the bleeders in your incision with [src].") if (!do_mob(user, H, minmax(surgery_status * 4, 0, 100))) user.visible_message("[user] was interrupted!",\ "You were interrupted!") return H.tri_message("[user] clamps the bleeders in [H == user ? "[his_or_her(H)]" : "[H]'s"] incision with [src].",\ user, "You clamp the bleeders in [user == H ? "your" : "[H]'s"] incision with [src].",\ H, "[H == user ? "You clamp" : "[user] clamps"] the bleeders in your incision with [src].") if (H.bleeding) repair_bleeding_damage(H, 50, rand(2,5)) return