From f8ab07679447c5f83a94c30d8e48614b641e321e Mon Sep 17 00:00:00 2001 From: skull132 Date: Sun, 20 Nov 2016 18:21:41 +0200 Subject: [PATCH] Runtime fixes for life() (#1172) Basically, missing safety checks. Apparently blood_dna is conditionally defined and filled out. This should stop some surprisingly common runtime errors from life() that we've been seeing. Bypassed review. --- .../effects/decals/Cleanable/humans.dm | 37 ++++++++++--------- code/modules/mob/living/carbon/viruses.dm | 8 ++-- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 482c3d8abdf..34e1fcd185d 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -91,14 +91,16 @@ var/global/list/image/splatter_cache=list() S.blood_overlay.color = basecolor S.overlays.Cut() S.overlays += S.blood_overlay - S.blood_DNA |= blood_DNA.Copy() + if(blood_DNA) + S.blood_DNA |= blood_DNA.Copy() else if (hasfeet)//Or feet perp.feet_blood_color = basecolor perp.track_blood = max(amount,perp.track_blood) if(!perp.feet_blood_DNA) perp.feet_blood_DNA = list() - perp.feet_blood_DNA |= blood_DNA.Copy() + if (blood_DNA) + perp.feet_blood_DNA |= blood_DNA.Copy() else if (perp.buckled && istype(perp.buckled, /obj/structure/bed/chair/wheelchair)) var/obj/structure/bed/chair/wheelchair/W = perp.buckled W.bloodiness = 4 @@ -124,7 +126,8 @@ var/global/list/image/splatter_cache=list() user << "You get some of \the [src] on your hands." if (!user.blood_DNA) user.blood_DNA = list() - user.blood_DNA |= blood_DNA.Copy() + if (blood_DNA) + user.blood_DNA |= blood_DNA.Copy() user.bloody_hands += taken user.hand_blood_color = basecolor user.update_inv_gloves(1) @@ -213,21 +216,21 @@ var/global/list/image/splatter_cache=list() /obj/effect/decal/cleanable/blood/gibs/proc/streak(var/list/directions) - spawn (0) - var/direction = pick(directions) - for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) - sleep(3) - if (i > 0) - var/obj/effect/decal/cleanable/blood/b = PoolOrNew(/obj/effect/decal/cleanable/blood/splatter, src.loc) - b.basecolor = src.basecolor - b.update_icon() - for(var/datum/disease/D in src.viruses) - var/datum/disease/ND = D.Copy(1) - b.viruses += ND - ND.holder = b + spawn (0) + var/direction = pick(directions) + for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) + sleep(3) + if (i > 0) + var/obj/effect/decal/cleanable/blood/b = PoolOrNew(/obj/effect/decal/cleanable/blood/splatter, src.loc) + b.basecolor = src.basecolor + b.update_icon() + for(var/datum/disease/D in src.viruses) + var/datum/disease/ND = D.Copy(1) + b.viruses += ND + ND.holder = b - if (step_to(src, get_step(src, direction), 0)) - break + if (step_to(src, get_step(src, direction), 0)) + break /obj/effect/decal/cleanable/mucus diff --git a/code/modules/mob/living/carbon/viruses.dm b/code/modules/mob/living/carbon/viruses.dm index fed6d59e438..1d454f3b0e5 100644 --- a/code/modules/mob/living/carbon/viruses.dm +++ b/code/modules/mob/living/carbon/viruses.dm @@ -13,19 +13,19 @@ for(var/obj/effect/decal/cleanable/O in view(1,src)) if(istype(O,/obj/effect/decal/cleanable/blood)) var/obj/effect/decal/cleanable/blood/B = O - if(B.virus2.len) + if(B.virus2 && B.virus2.len) for (var/ID in B.virus2) var/datum/disease2/disease/V = B.virus2[ID] infect_virus2(src,V) else if(istype(O,/obj/effect/decal/cleanable/mucus)) var/obj/effect/decal/cleanable/mucus/M = O - if(M.virus2.len) + if(M.virus2 && M.virus2.len) for (var/ID in M.virus2) var/datum/disease2/disease/V = M.virus2[ID] infect_virus2(src,V) - if(virus2.len) + if(virus2 && virus2.len) for (var/ID in virus2) var/datum/disease2/disease/V = virus2[ID] if(isnull(V)) // Trying to figure out a runtime error that keeps repeating @@ -40,4 +40,4 @@ if(common_antibodies.len) V.dead = 1 - return \ No newline at end of file + return