From 6f552d6eabdf2e2b10b1f6df79640175c5ac396a Mon Sep 17 00:00:00 2001 From: ZomgPonies Date: Sun, 20 Oct 2013 19:59:10 -0400 Subject: [PATCH] Virus optimizations --- code/modules/mob/living/carbon/human/life.dm | 43 ++++++++++++------- code/modules/mob/living/carbon/monkey/life.dm | 41 +++++++++++------- code/modules/virus2/helpers.dm | 10 +++-- 3 files changed, 60 insertions(+), 34 deletions(-) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index b3569321557..eeea1b53bb7 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1384,6 +1384,32 @@ if(!currentTurf.lighting_lumcount) playsound_local(src,pick(scarySounds),50, 1, -1) + // Separate proc so we can jump out of it when we've succeeded in spreading disease. + proc/findAirborneVirii() + for(var/obj/effect/decal/cleanable/blood/B in get_turf(src)) + if(B.virus2.len) + for (var/ID in B.virus2) + var/datum/disease2/disease/V = B.virus2[ID] + if (infect_virus2(src,V)) + return 1 + + for(var/obj/effect/decal/cleanable/mucus/M in get_turf(src)) + if(M.virus2.len) + for (var/ID in M.virus2) + var/datum/disease2/disease/V = M.virus2[ID] + if (infect_virus2(src,V)) + return 1 + + for(var/obj/effect/decal/cleanable/poop/P in get_turf(src)) + if(P.virus2.len) + for (var/ID in P.virus2) + var/datum/disease2/disease/V = P.virus2[ID] + if (infect_virus2(src,V)) + return 1 + + + return 0 + proc/handle_virus_updates() if(status_flags & GODMODE) return 0 //godmode if(bodytemperature > 406) @@ -1393,21 +1419,8 @@ var/datum/disease2/disease/V = virus2[ID] V.cure(src) - for(var/obj/effect/decal/cleanable/blood/B in view(1,src)) - if(B.virus2.len) - for (var/ID in B.virus2) - var/datum/disease2/disease/V = B.virus2[ID] - infect_virus2(src,V) - for(var/obj/effect/decal/cleanable/mucus/M in view(1,src)) - if(M.virus2.len) - for (var/ID in M.virus2) - var/datum/disease2/disease/V = M.virus2[ID] - infect_virus2(src,V) - for(var/obj/effect/decal/cleanable/poop/P in view(1,src)) - if(P.virus2.len) - for (var/ID in P.virus2) - var/datum/disease2/disease/V = P.virus2[ID] - infect_virus2(src,V) + src.findAirborneVirii() + for (var/ID in virus2) var/datum/disease2/disease/V = virus2[ID] diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index d7cbfbd52f5..e477abbc6fb 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -164,6 +164,31 @@ emote("gasp") updatehealth() + // Separate proc so we can jump out of it when we've succeeded in spreading disease. + proc/findAirborneVirii() + for(var/obj/effect/decal/cleanable/blood/B in get_turf(src)) + if(B.virus2.len) + for (var/ID in B.virus2) + var/datum/disease2/disease/V = B.virus2[ID] + if (infect_virus2(src,V)) + return 1 + + for(var/obj/effect/decal/cleanable/mucus/M in get_turf(src)) + if(M.virus2.len) + for (var/ID in M.virus2) + var/datum/disease2/disease/V = M.virus2[ID] + if (infect_virus2(src,V)) + return 1 + + for(var/obj/effect/decal/cleanable/poop/P in get_turf(src)) + if(P.virus2.len) + for (var/ID in P.virus2) + var/datum/disease2/disease/V = P.virus2[ID] + if (infect_virus2(src,V)) + return 1 + + return 0 + proc/handle_virus_updates() if(status_flags & GODMODE) return 0 //godmode if(bodytemperature > 406) @@ -173,21 +198,7 @@ var/datum/disease2/disease/V = virus2[ID] V.cure(src) - for(var/obj/effect/decal/cleanable/blood/B in view(1,src)) - if(B.virus2.len) - for (var/ID in B.virus2) - var/datum/disease2/disease/V = B.virus2[ID] - infect_virus2(src,V) - for(var/obj/effect/decal/cleanable/mucus/M in view(1,src)) - if(M.virus2.len) - for (var/ID in M.virus2) - var/datum/disease2/disease/V = M.virus2[ID] - infect_virus2(src,V) - for(var/obj/effect/decal/cleanable/poop/P in view(1,src)) - if(P.virus2.len) - for (var/ID in P.virus2) - var/datum/disease2/disease/V = P.virus2[ID] - infect_virus2(src,V) + src.findAirborneVirii() for (var/ID in virus2) var/datum/disease2/disease/V = virus2[ID] diff --git a/code/modules/virus2/helpers.dm b/code/modules/virus2/helpers.dm index b94bb80a9c4..73fdd4c5544 100644 --- a/code/modules/virus2/helpers.dm +++ b/code/modules/virus2/helpers.dm @@ -51,14 +51,14 @@ proc/airborne_can_reach(turf/source, turf/target) //Attemptes to infect mob M with virus. Set forced to 1 to ignore protective clothnig /proc/infect_virus2(var/mob/living/carbon/M,var/datum/disease2/disease/disease,var/forced = 0) if(!istype(disease)) - return + return 0 if(!istype(M)) - return + return 0 if ("[disease.uniqueID]" in M.virus2) - return + return 0 // if one of the antibodies in the mob's body matches one of the disease's antigens, don't infect if(M.antibodies & disease.antigen != 0) - return + return 0 if(prob(disease.infectionchance) || forced) // certain clothes can prevent an infection @@ -68,6 +68,8 @@ proc/airborne_can_reach(turf/source, turf/target) var/datum/disease2/disease/D = disease.getcopy() D.minormutate() M.virus2["[D.uniqueID]"] = D + return 1 + return 0 //Infects mob M with random lesser disease, if he doesn't have one /proc/infect_mob_random_lesser(var/mob/living/carbon/M)