diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index dd70ad37ea..b62c32b81a 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -144,8 +144,11 @@ for(var/obj/effect/decal/cleanable/blood/B in contents) if(!B.blood_DNA[M.dna.unique_enzymes]) B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type + B.virus2 = virus_copylist(M.virus2) return 1 //we bloodied the floor + + //if there isn't a blood decal already, make one. var/obj/effect/decal/cleanable/blood/newblood = new /obj/effect/decal/cleanable/blood(src) @@ -156,6 +159,7 @@ newblood.basecolor = "#A10808" newblood.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type + newblood.virus2 = virus_copylist(M.virus2) newblood.update_icon() return 1 //we bloodied the floor diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 2bec7cc7e3..cf39160aad 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -308,11 +308,11 @@ var/datum/gas_mixture/environment = loc.return_air() var/datum/gas_mixture/breath - + // HACK NEED CHANGING LATER if(health < config.health_threshold_crit && !reagents.has_reagent("inaprovaline")) losebreath++ - + if(losebreath>0) //Suffocating so do not take a breath losebreath-- if (prob(10)) //Gasp per 10 ticks? Sounds about right. @@ -1487,21 +1487,21 @@ for (var/ID in virus2) var/datum/disease2/disease/V = virus2[ID] V.cure(src) + if(life_tick % 3) //don't spam checks over all objects in view every tick. + 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) + for (var/ID in B.virus2) + var/datum/disease2/disease/V = B.virus2[ID] + infect_virus2(src,V.getcopy()) - 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) - 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) - for (var/ID in M.virus2) - var/datum/disease2/disease/V = M.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) + for (var/ID in M.virus2) + var/datum/disease2/disease/V = M.virus2[ID] + infect_virus2(src,V.getcopy()) if(virus2.len) diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index c100e74725..e9f1563c15 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -159,6 +159,9 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 this.icon_state = pick(iconL) this.blood_DNA = list() this.blood_DNA[dna.unique_enzymes] = dna.b_type + for (var/ID in virus2) + var/datum/disease2/disease/V = virus2[ID] + this.virus2[ID] = V.getcopy() if (species) this.basecolor = species.blood_color this.update_icon() diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 70e442a73d..fc2f420c0e 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -118,10 +118,15 @@ datum else //injected M.contract_disease(D, 1, 0) if(self.data && self.data["virus2"] && istype(M, /mob/living/carbon))//infecting... - if(method == TOUCH) - infect_virus2(M,self.data["virus2"]) - else - infect_virus2(M,self.data["virus2"],1) //injected, force infection! + var/list/vlist = self.data["virus2"] + if (vlist.len) + for (var/ID in vlist) + var/datum/disease2/disease/V = vlist[ID] + + if(method == TOUCH) + infect_virus2(M,V.getcopy()) + else + infect_virus2(M,V.getcopy(),1) //injected, force infection! if(self.data && self.data["antibodies"] && istype(M, /mob/living/carbon))//... and curing var/mob/living/carbon/C = M C.antibodies |= self.data["antibodies"] @@ -146,6 +151,9 @@ datum blood_prop.viruses += newVirus newVirus.holder = blood_prop + if(self.data["virus2"]) + blood_prop.virus2 = virus_copylist(self.data["virus2"]) + else if(istype(self.data["donor"], /mob/living/carbon/monkey)) var/obj/effect/decal/cleanable/blood/blood_prop = locate() in T diff --git a/code/modules/virus2/helpers.dm b/code/modules/virus2/helpers.dm index 93acbd6ef4..6118dade42 100644 --- a/code/modules/virus2/helpers.dm +++ b/code/modules/virus2/helpers.dm @@ -68,10 +68,11 @@ proc/airborne_can_reach(turf/source, turf/target) if ("[disease.uniqueID]" in M.virus2) return // 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) + if((M.antibodies & disease.antigen) != 0) return if(M.reagents.has_reagent("spaceacillin")) return + if(istype(M,/mob/living/carbon/monkey)) var/mob/living/carbon/monkey/chimp = M if (!(chimp.greaterform in disease.affected_species))