/obj/item/stack/medical name = "medical pack" singular_name = "medical pack" icon = 'icons/obj/stack_objects.dmi' amount = 12 max_amount = 12 w_class = WEIGHT_CLASS_TINY full_w_class = WEIGHT_CLASS_TINY throw_speed = 3 throw_range = 7 resistance_flags = FLAMMABLE max_integrity = 40 novariants = FALSE item_flags = NOBLUDGEON var/self_delay = 50 var/other_delay = 0 var/repeating = FALSE /obj/item/stack/medical/attack(mob/living/M, mob/user) . = ..() try_heal(M, user) /obj/item/stack/medical/proc/try_heal(mob/living/M, mob/user, silent = FALSE) if(!M.can_inject(user, TRUE)) return if(M == user) if(!silent) user.visible_message("[user] starts to apply \the [src] on [user.p_them()]self...", "You begin applying \the [src] on yourself...") if(!do_mob(user, M, self_delay, extra_checks=CALLBACK(M, /mob/living/proc/can_inject, user, TRUE))) return else if(other_delay) if(!silent) user.visible_message("[user] starts to apply \the [src] on [M].", "You begin applying \the [src] on [M]...") if(!do_mob(user, M, other_delay, extra_checks=CALLBACK(M, /mob/living/proc/can_inject, user, TRUE))) return if(heal(M, user)) log_combat(user, M, "healed", src.name) use(1) if(repeating && amount > 0) try_heal(M, user, TRUE) /obj/item/stack/medical/proc/heal(mob/living/M, mob/user) return /obj/item/stack/medical/proc/heal_carbon(mob/living/carbon/C, mob/user, brute, burn) var/obj/item/bodypart/affecting = C.get_bodypart(check_zone(user.zone_selected)) if(!affecting) //Missing limb? to_chat(user, "[C] doesn't have \a [parse_zone(user.zone_selected)]!") return if(affecting.status == BODYPART_ORGANIC) //Limb must be organic to be healed - RR if(affecting.brute_dam && brute || affecting.burn_dam && burn) user.visible_message("[user] applies \the [src] on [C]'s [affecting.name].", "You apply \the [src] on [C]'s [affecting.name].") if(affecting.heal_damage(brute, burn)) C.update_damage_overlays() return TRUE to_chat(user, "[C]'s [affecting.name] can not be healed with \the [src].") return to_chat(user, "\The [src] won't work on a robotic limb!") /obj/item/stack/medical/get_belt_overlay() return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "pouch") /obj/item/stack/medical/bruise_pack name = "bruise pack" singular_name = "bruise pack" desc = "A therapeutic gel pack and bandages designed to treat blunt-force trauma." icon_state = "brutepack" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' var/heal_brute = 20 self_delay = 20 grind_results = list(/datum/reagent/medicine/styptic_powder = 10) /obj/item/stack/medical/bruise_pack/one amount = 1 /obj/item/stack/medical/bruise_pack/heal(mob/living/M, mob/user) if(M.stat == DEAD) to_chat(user, " [M] is dead. You can not help [M.p_them()]!") return if(isanimal(M)) var/mob/living/simple_animal/critter = M if (!(critter.healable)) to_chat(user, " You cannot use \the [src] on [M]!") return FALSE else if (critter.health == critter.maxHealth) to_chat(user, " [M] is at full health.") return FALSE user.visible_message("[user] applies \the [src] on [M].", "You apply \the [src] on [M].") if(AmBloodsucker(M)) return M.heal_bodypart_damage((heal_brute/2)) return TRUE if(iscarbon(M)) return heal_carbon(M, user, heal_brute, 0) to_chat(user, "You can't heal [M] with the \the [src]!") /obj/item/stack/medical/bruise_pack/suicide_act(mob/user) user.visible_message("[user] is bludgeoning [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!") return (BRUTELOSS) /obj/item/stack/medical/gauze name = "medical gauze" desc = "A roll of elastic cloth that is extremely effective at stopping bleeding, heals minor wounds." gender = PLURAL singular_name = "medical gauze" icon_state = "gauze" var/stop_bleeding = 1800 var/heal_brute = 5 self_delay = 10 custom_price = PRICE_REALLY_CHEAP /obj/item/stack/medical/gauze/heal(mob/living/M, mob/user) if(ishuman(M)) var/mob/living/carbon/human/H = M if(!H.bleedsuppress && H.bleed_rate) //so you can't stack bleed suppression H.suppress_bloodloss(stop_bleeding) to_chat(user, "You stop the bleeding of [M]!") H.adjustBruteLoss(-(heal_brute)) return TRUE to_chat(user, "You can not use \the [src] on [M]!") /obj/item/stack/medical/gauze/attackby(obj/item/I, mob/user, params) if(I.tool_behaviour == TOOL_WIRECUTTER || I.get_sharpness()) if(get_amount() < 2) to_chat(user, "You need at least two gauzes to do this!") return new /obj/item/stack/sheet/cloth(user.drop_location()) user.visible_message("[user] cuts [src] into pieces of cloth with [I].", \ "You cut [src] into pieces of cloth with [I].", \ "You hear cutting.") use(2) else return ..() /obj/item/stack/medical/gauze/suicide_act(mob/living/user) user.visible_message("[user] begins tightening \the [src] around [user.p_their()] neck! It looks like [user.p_they()] forgot how to use medical supplies!") return OXYLOSS /obj/item/stack/medical/gauze/improvised name = "improvised gauze" singular_name = "improvised gauze" desc = "A roll of cloth roughly cut from something that can stop bleeding, but does not heal wounds." stop_bleeding = 900 heal_brute = 0 /obj/item/stack/medical/gauze/adv name = "sterilized medical gauze" desc = "A roll of elastic sterilized cloth that is extremely effective at stopping bleeding, heals minor wounds and cleans them." singular_name = "sterilized medical gauze" self_delay = 5 /obj/item/stack/medical/gauze/adv/one amount = 1 /obj/item/stack/medical/gauze/cyborg custom_materials = null is_cyborg = 1 cost = 250 /obj/item/stack/medical/ointment name = "ointment" desc = "Used to treat those nasty burn wounds." gender = PLURAL singular_name = "ointment" icon_state = "ointment" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' var/heal_burn = 20 self_delay = 20 grind_results = list(/datum/reagent/medicine/silver_sulfadiazine = 10) /obj/item/stack/medical/ointment/one amount = 1 /obj/item/stack/medical/ointment/heal(mob/living/M, mob/user) if(M.stat == DEAD) to_chat(user, " [M] is dead. You can not help [M.p_them()]!") return if(iscarbon(M)) return heal_carbon(M, user, 0, heal_burn) if(AmBloodsucker(M)) return to_chat(user, "You can't heal [M] with the \the [src]!") /obj/item/stack/medical/ointment/suicide_act(mob/living/user) user.visible_message("[user] is squeezing \the [src] into [user.p_their()] mouth! [user.p_do(TRUE)]n't [user.p_they()] know that stuff is toxic?") return TOXLOSS /obj/item/stack/medical/suture name = "suture" desc = "Sterile sutures used to seal up cuts and lacerations." gender = PLURAL singular_name = "suture" icon_state = "suture" self_delay = 30 other_delay = 10 amount = 15 max_amount = 15 repeating = TRUE var/heal_brute = 10 grind_results = list(/datum/reagent/medicine/spaceacillin = 2) /obj/item/stack/medical/suture/one amount = 1 /obj/item/stack/medical/suture/heal(mob/living/M, mob/user) . = ..() if(M.stat == DEAD) to_chat(user, "[M] is dead! You can not help [M.p_them()].") return if(iscarbon(M)) return heal_carbon(M, user, heal_brute, 0) if(isanimal(M)) var/mob/living/simple_animal/critter = M if (!(critter.healable)) to_chat(user, "You cannot use \the [src] on [M]!") return FALSE else if (critter.health == critter.maxHealth) to_chat(user, "[M] is at full health.") return FALSE user.visible_message("[user] applies \the [src] on [M].", "You apply \the [src] on [M].") M.heal_bodypart_damage(heal_brute) return TRUE to_chat(user, "You can't heal [M] with the \the [src]!") /obj/item/stack/medical/mesh name = "regenerative mesh" desc = "A bacteriostatic mesh used to dress burns." gender = PLURAL singular_name = "regenerative mesh" icon_state = "regen_mesh" self_delay = 30 other_delay = 10 amount = 15 max_amount = 15 repeating = TRUE var/heal_burn = 10 var/is_open = TRUE ///This var determines if the sterile packaging of the mesh has been opened. grind_results = list(/datum/reagent/medicine/spaceacillin = 2) /obj/item/stack/medical/mesh/one amount = 1 /obj/item/stack/medical/mesh/Initialize() . = ..() if(amount == max_amount) //only seal full mesh packs is_open = FALSE update_icon() /obj/item/stack/medical/mesh/update_icon_state() if(!is_open) icon_state = "regen_mesh_closed" else return ..() /obj/item/stack/medical/mesh/heal(mob/living/M, mob/user) . = ..() if(M.stat == DEAD) to_chat(user, "[M] is dead! You can not help [M.p_them()].") return if(iscarbon(M)) return heal_carbon(M, user, 0, heal_burn) to_chat(user, "You can't heal [M] with the \the [src]!") /obj/item/stack/medical/mesh/try_heal(mob/living/M, mob/user, silent = FALSE) if(!is_open) to_chat(user, "You need to open [src] first.") return . = ..() /obj/item/stack/medical/mesh/AltClick(mob/living/user) if(!is_open) to_chat(user, "You need to open [src] first.") return . = ..() /obj/item/stack/medical/mesh/attack_hand(mob/user) if(!is_open & user.get_inactive_held_item() == src) to_chat(user, "You need to open [src] first.") return . = ..() /obj/item/stack/medical/mesh/attack_self(mob/user) if(!is_open) is_open = TRUE to_chat(user, "You open the sterile mesh package.") update_icon() playsound(src, 'sound/items/poster_ripped.ogg', 20, TRUE) return . = ..()