mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-27 23:29:10 +01:00
Merge branch 'release' of https://github.com/VOREStation/VOREStation into izac
This commit is contained in:
@@ -44,6 +44,20 @@ var/global/mob/living/carbon/human/dummy/mannequin/sleevemate_mob
|
||||
|
||||
|
||||
/obj/item/device/sleevemate/attack(mob/living/M, mob/living/user)
|
||||
// Gather potential subtargets
|
||||
var/list/choices = list(M)
|
||||
if(istype(M))
|
||||
for(var/belly in M.vore_organs)
|
||||
var/obj/belly/B = belly
|
||||
for(var/mob/living/carbon/human/H in B) // I do want an istype
|
||||
choices += H
|
||||
// Subtargets
|
||||
if(choices.len > 1)
|
||||
var/mob/living/new_M = input(user, "Ambiguous target. Please validate target:", "Target Validation", M) as null|anything in choices
|
||||
if(!new_M || !M.Adjacent(user))
|
||||
return
|
||||
M = new_M
|
||||
|
||||
if(ishuman(M))
|
||||
scan_mob(M, user)
|
||||
else
|
||||
|
||||
@@ -24,6 +24,11 @@
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return 1
|
||||
|
||||
var/available = get_amount()
|
||||
if(!available)
|
||||
to_chat(user, "<span class='warning'>There's not enough [uses_charge ? "charge" : "items"] left to use that!</span>")
|
||||
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, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>")
|
||||
return 1
|
||||
else
|
||||
var/available = get_amount()
|
||||
user.visible_message("<span class='notice'>\The [user] starts bandaging [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You start bandaging [M]'s [affecting.name].</span>" )
|
||||
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, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>")
|
||||
return 1
|
||||
|
||||
if(used >= available)
|
||||
to_chat(user, "<span class='warning'>You run out of [src]!</span>")
|
||||
break
|
||||
|
||||
if (W.current_stage <= W.max_bleeding_stage)
|
||||
user.visible_message("<span class='notice'>\The [user] bandages \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You bandage \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
@@ -164,6 +174,7 @@
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>")
|
||||
return 1
|
||||
else
|
||||
var/available = get_amount()
|
||||
user.visible_message("<span class='notice'>\The [user] starts treating [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You start treating [M]'s [affecting.name].</span>" )
|
||||
var/used = 0
|
||||
@@ -182,6 +193,10 @@
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>")
|
||||
return 1
|
||||
|
||||
if(used >= available)
|
||||
to_chat(user, "<span class='warning'>You run out of [src]!</span>")
|
||||
break
|
||||
|
||||
if (W.current_stage <= W.max_bleeding_stage)
|
||||
user.visible_message("<span class='notice'>\The [user] bandages \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You bandage \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
@@ -271,6 +286,7 @@
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been treated.</span>")
|
||||
return 1
|
||||
else
|
||||
var/available = get_amount()
|
||||
user.visible_message("<span class='notice'>\The [user] starts treating [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You start treating [M]'s [affecting.name].</span>" )
|
||||
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, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>")
|
||||
return 1
|
||||
|
||||
if(used >= available)
|
||||
to_chat(user, "<span class='warning'>You run out of [src]!</span>")
|
||||
break
|
||||
|
||||
if (W.current_stage <= W.max_bleeding_stage)
|
||||
user.visible_message("<span class='notice'>\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.</span>", \
|
||||
"<span class='notice'>You clean and seal \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
|
||||
@@ -18,4 +18,59 @@
|
||||
if(9)
|
||||
icon_state = "[initial(icon_state)]_9"
|
||||
else
|
||||
icon_state = "[initial(icon_state)]_10"
|
||||
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 = "<span class='notice'>You spray [src] onto [H], sealing [clotted ? clotted : "no"] wounds.</span>"
|
||||
if(too_far_gone)
|
||||
healmessage += " <span class='warning'>You can see some wounds that are too large where the spray is not taking effect.</span>"
|
||||
|
||||
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]"
|
||||
@@ -364,10 +364,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/stack/proc/combine_in_loc()
|
||||
for(var/obj/item/stack/S in loc)
|
||||
if(S == src)
|
||||
continue
|
||||
S.transfer_to(src) // them to us, so if we're being pulled, we can keep being pulled
|
||||
return //STUBBED for now, as it seems to randomly delete stacks
|
||||
|
||||
/obj/item/stack/dropped(atom/old_loc)
|
||||
. = ..()
|
||||
|
||||
Reference in New Issue
Block a user