diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 20f098e5d19..acf17d97359 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -24,6 +24,11 @@ to_chat(user, "You don't have the dexterity to do this!") return 1 + var/available = get_amount() + if(!available) + to_chat(user, "There's not enough [uses_charge ? "charge" : "items"] left to use that!") + return 1 + if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting) @@ -101,11 +106,12 @@ to_chat(user, "The wounds on [M]'s [affecting.name] have already been bandaged.") return 1 else + var/available = get_amount() user.visible_message("\The [user] starts bandaging [M]'s [affecting.name].", \ "You start bandaging [M]'s [affecting.name]." ) var/used = 0 for (var/datum/wound/W in affecting.wounds) - if (W.internal) + if(W.internal) continue if(W.bandaged) continue @@ -119,6 +125,10 @@ to_chat(user, "The wounds on [M]'s [affecting.name] have already been bandaged.") return 1 + if(used >= available) + to_chat(user, "You run out of [src]!") + break + if (W.current_stage <= W.max_bleeding_stage) user.visible_message("\The [user] bandages \a [W.desc] on [M]'s [affecting.name].", \ "You bandage \a [W.desc] on [M]'s [affecting.name]." ) @@ -164,6 +174,7 @@ to_chat(user, "The wounds on [M]'s [affecting.name] have already been bandaged.") return 1 else + var/available = get_amount() user.visible_message("\The [user] starts treating [M]'s [affecting.name].", \ "You start treating [M]'s [affecting.name]." ) var/used = 0 @@ -182,6 +193,10 @@ to_chat(user, "The wounds on [M]'s [affecting.name] have already been bandaged.") return 1 + if(used >= available) + to_chat(user, "You run out of [src]!") + break + if (W.current_stage <= W.max_bleeding_stage) user.visible_message("\The [user] bandages \a [W.desc] on [M]'s [affecting.name].", \ "You bandage \a [W.desc] on [M]'s [affecting.name]." ) @@ -271,6 +286,7 @@ to_chat(user, "The wounds on [M]'s [affecting.name] have already been treated.") return 1 else + var/available = get_amount() user.visible_message("\The [user] starts treating [M]'s [affecting.name].", \ "You start treating [M]'s [affecting.name]." ) var/used = 0 @@ -287,6 +303,11 @@ if(affecting.is_bandaged() && affecting.is_disinfected()) // We do a second check after the delay, in case it was bandaged after the first check. to_chat(user, "The wounds on [M]'s [affecting.name] have already been bandaged.") return 1 + + if(used >= available) + to_chat(user, "You run out of [src]!") + break + if (W.current_stage <= W.max_bleeding_stage) user.visible_message("\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.", \ "You clean and seal \a [W.desc] on [M]'s [affecting.name]." ) diff --git a/code/game/objects/items/stacks/medical_vr.dm b/code/game/objects/items/stacks/medical_vr.dm index eda72a3fce9..4599bb43f9c 100644 --- a/code/game/objects/items/stacks/medical_vr.dm +++ b/code/game/objects/items/stacks/medical_vr.dm @@ -18,4 +18,59 @@ if(9) icon_state = "[initial(icon_state)]_9" else - icon_state = "[initial(icon_state)]_10" \ No newline at end of file + icon_state = "[initial(icon_state)]_10" + + +/obj/item/stack/medical/advanced/clotting + name = "liquid bandage kit" + singular_name = "liquid bandage kit" + desc = "A spray that stops bleeding using a patented chemical cocktail. Non-refillable. Only one use required per patient." + icon_state = "clotkit" + heal_burn = 0 + heal_brute = 2 // Only applies to non-humans, to give this some slight application on animals + origin_tech = list(TECH_BIO = 3) + apply_sounds = list('sound/effects/spray.ogg', 'sound/effects/spray2.ogg', 'sound/effects/spray3.ogg') + amount = 5 + max_amount = 5 + +/obj/item/stack/medical/advanced/clotting/attack(mob/living/carbon/human/H, var/mob/user) + if(..()) + return 1 + + if(!istype(H)) + return + + var/clotted = 0 + var/too_far_gone = 0 + + for(var/org in H.organs) //'organs' is just external organs, as opposed to 'internal_organs' + var/obj/item/organ/external/affecting = org + + // No amount of clotting is going to help you here. + if(affecting.open) + too_far_gone++ + continue + + for(var/wnd in affecting.wounds) + var/datum/wound/W = wnd + // No need + if(W.bandaged) + continue + // It's not that amazing + if(W.internal) + continue + if(W.current_stage <= W.max_bleeding_stage) + clotted++ + W.bandage() + + var/healmessage = "You spray [src] onto [H], sealing [clotted ? clotted : "no"] wounds." + if(too_far_gone) + healmessage += " You can see some wounds that are too large where the spray is not taking effect." + + to_chat(user, healmessage) + use(1) + playsound(src, pick(apply_sounds), 25) + update_icon() + +/obj/item/stack/medical/advanced/clotting/update_icon() + icon_state = "[initial(icon_state)]_[amount]" \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm index 8d368233df9..7f7d601c330 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm @@ -252,6 +252,15 @@ src.modules += new /obj/item/weapon/shockpaddles/robot/hound(src) //Paws of life src.emag = new /obj/item/weapon/dogborg/pounce(src) //Pounce + var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(2000) + synths += medicine + + var/obj/item/stack/medical/advanced/clotting/C = new (src) + C.uses_charge = 1 + C.charge_costs = list(1000) + C.synths = list(medicine) + src.modules += C + var/datum/matter_synth/water = new /datum/matter_synth(500) water.name = "Water reserves" water.recharge_rate = 0 diff --git a/icons/obj/stacks_vr.dmi b/icons/obj/stacks_vr.dmi index 54fe25d911f..34d49af81bc 100644 Binary files a/icons/obj/stacks_vr.dmi and b/icons/obj/stacks_vr.dmi differ