Revert/replaces a lot of #8024 with bleed_rate

Wearing armor reduces the blood loss you incur, no longer are you instantly deleted on blood.  Dripping blood WILL kill you if you don't solve that issue, medical gauze has been tripled as a QoL for medical staff as a result.
This commit is contained in:
Poojawa
2019-08-26 14:22:17 -05:00
parent bdae9e051b
commit 9558252b93
9 changed files with 163 additions and 21 deletions
+35 -4
View File
@@ -174,11 +174,38 @@
new /obj/effect/temp_visual/dir_setting/bloodsplatter(target_loca, splatter_dir, bloodtype_to_color(H.dna.blood_type))
else
new /obj/effect/temp_visual/dir_setting/bloodsplatter(target_loca, splatter_dir, bloodtype_to_color())
if(iscarbon(L))
var/mob/living/carbon/C = L
C.bleed(damage)
else
L.add_splatter_floor(target_loca)
if(ishuman(L)
var/mob/living/carbon/human/H = L
var/armorsave
if(flag == "bullet")
armorsave = H.getarmor(B, "bullet")
else if(flag == "energy")
armorsave = H.getarmor(B, "energy")
else if(flag == "magic")
armorsave = H.getarmor(B, "magic")
if(armorsave >= 30) // armor is useful again, yay.
H.bleed_rate += (damage * 0.15) // a tiny bit of shrapnel and internal bleeding, I guess.
else
H.bleed_rate += (damage * 0.50) //it's not a 1:1 deletion of blood, but it's worrysome enough that you should get treated asap
else
var/mob/living/carbon/C = L
C.bleed(damage)
if(prob(33))
var/list/shift = list("x" = 0, "y" = 0)
var/turf/step_over = get_step(target_loca, splatter_dir)
if(get_splatter_blockage(step_over, target, splatter_dir, target_loca)) //If you can't cross the tile or any of its relevant obstacles...
shift = pixel_shift_dir(splatter_dir) //Pixel shift the blood there instead (so you can't see wallsplatter through walls).
else
target_loca = step_over
L.add_splatter_floor(target_loca, shift_x = shift["x"], shift_y = shift["y"])
if(ishuman(L))
for(var/mob/living/carbon/human/M in step_over) //Bloody the mobs who're infront of the spray.
M.bloody_hands = rand(2, 4)
else if(impact_effect_type && !hitscan)
new impact_effect_type(target_loca, hitx, hity)
@@ -213,6 +240,10 @@
return L.apply_effects(stun, knockdown, unconscious, irradiate, slur, stutter, eyeblur, drowsy, blocked, stamina, jitter)
/obj/item/projectile/proc/get_splatter_blockage(var/turf/step_over, var/atom/target, var/splatter_dir, var/target_loca) //Check whether the place we want to splatter blood is blocked (i.e. by windows).
if(step_over.density && !step_over.CanPass(target, step_over, 1)) //Preliminary simple check.
return TRUE
/obj/item/projectile/proc/vol_by_damage()
if(src.damage)
return CLAMP((src.damage) * 0.67, 30, 100)// Multiply projectile damage by 0.67, then CLAMP the value between 30 and 100