Ports arterial bleeding and tendon severing (#7432)

This commit is contained in:
Matt Atlas
2019-11-21 14:45:19 +01:00
committed by Werner
parent a8ffad24bc
commit ce6c12f8a6
27 changed files with 437 additions and 277 deletions
@@ -174,6 +174,12 @@
if(W.hitsound)
playsound(loc, W.hitsound, 50, 1, -1)
if(ishuman(src))
var/mob/living/carbon/human/H = src
var/obj/item/organ/external/head = H.get_organ("head")
if(head)
head.sever_artery()
G.last_action = world.time
flick(G.hud.icon_state, G.hud)
@@ -208,8 +208,11 @@
//splints
for(var/organ in list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_R_FOOT,BP_L_FOOT))
var/obj/item/organ/external/o = get_organ(organ)
if(o && o.status & ORGAN_SPLINTED)
msg += "<span class='warning'>[T.He] [T.has] a splint on [T.his] [o.name]!</span>\n"
if(o)
if(o.status & ORGAN_SPLINTED)
msg += "<span class='warning'>[T.He] [T.has] a splint on [T.his] [o.name]!</span>\n"
if(o.applied_pressure == src)
msg += "<span class='warning'>[T.He] [T.is] applying pressure to [T.his] [o.name]!</span>\n"
if(mSmallsize in mutations)
msg += "[T.He] [T.is] small halfling!\n"
@@ -139,7 +139,7 @@
to_chat(src, "<span class='notice'>You feel a breath of fresh air enter your lungs. It feels good.</span>")
to_chat(H, "<span class='warning'>Repeat at least every 7 seconds.</span>")
else
else if(!(apply_pressure(M, M.zone_sel.selecting)))
help_shake_act(M)
return 1
@@ -527,6 +527,36 @@
qdel(rgrab)
return success
//Apply pressure to wounds.
/mob/living/carbon/human/proc/apply_pressure(mob/living/user, var/target_zone)
var/obj/item/organ/external/organ = get_organ(target_zone)
if(!organ || !(organ.status & ORGAN_BLEEDING) || organ.status & ORGAN_ROBOT)
return 0
if(organ.applied_pressure)
var/message = "<span class='warning'>[ismob(organ.applied_pressure)? "Someone" : "\A [organ.applied_pressure]"] is already applying pressure to [user == src? "your [organ.name]" : "[src]'s [organ.name]"].</span>"
to_chat(user, message)
return 0
if(user == src)
user.visible_message("<span class='notice'>\The [user] starts applying pressure to \his [organ.name]!</span>", "<span class='notice'>You start applying pressure to your [organ.name]!</span>")
else
user.visible_message("<span class='notice'>\The [user] starts applying pressure to [src]'s [organ.name]!</span>", "<span class='notice'>You start applying pressure to [src]'s [organ.name]!</span>")
spawn(0)
organ.applied_pressure = user
//apply pressure as long as they stay still and keep grabbing
do_after(user, INFINITY, TRUE, display_progress = FALSE)
organ.applied_pressure = null
if(user == src)
user.visible_message("<span class='notice'>\The [user] stops applying pressure to \his [organ.name]!</span>", "<span class='notice'>You stop applying pressure to your [organ.name]!</span>")
else
user.visible_message("<span class='notice'>\The [user] stops applying pressure to [src]'s [organ.name]!</span>", "<span class='notice'>You stop applying pressure to [src]'s [organ.name]!</span>")
return 1
/mob/living/carbon/human/verb/check_attacks()
set name = "Check Attacks"
@@ -77,7 +77,7 @@
body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not
appearance_flags = HAS_HAIR_COLOR
flags = NO_BREATHE | NO_SCAN | IS_PLANT | NO_BLOOD | NO_PAIN | NO_SLIP | NO_CHUBBY
flags = NO_BREATHE | NO_SCAN | IS_PLANT | NO_BLOOD | NO_PAIN | NO_SLIP | NO_CHUBBY | NO_ARTERIES | NO_TENDONS
spawn_flags = CAN_JOIN | IS_WHITELISTED | NO_AGE_MINIMUM
blood_color = "#97dd7c"
@@ -59,7 +59,7 @@
heat_level_1 = 330 //Default 360
heat_level_2 = 380 //Default 400
heat_level_3 = 600 //Default 1000
flags = NO_SLIP | NO_CHUBBY
flags = NO_SLIP | NO_CHUBBY | NO_ARTERIES
spawn_flags = CAN_JOIN | IS_WHITELISTED | NO_AGE_MINIMUM
appearance_flags = HAS_SKIN_COLOR | HAS_HAIR_COLOR
blood_color = "#E6E600" // dark yellow
+2 -3
View File
@@ -1062,9 +1062,8 @@ mob/proc/yank_out_object()
affected.take_damage((selection.w_class * 3), 0, 0, 1, "Embedded object extraction")
if(prob(selection.w_class * 5)) //I'M SO ANEMIC I COULD JUST -DIE-.
var/datum/wound/internal_bleeding/I = new (min(selection.w_class * 5, 15))
affected.wounds += I
H.custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 1)
affected.sever_artery()
H.custom_pain("Something tears wetly in your [affected] as [selection] is pulled free!", 50)
if (ishuman(U))
var/mob/living/carbon/human/human_user = U