diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 76b7263913a..dec9942b8b0 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -166,21 +166,22 @@ 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 - if (M.virus2.len) - B.virus2 |= virus_copylist(M.virus2) + B.virus2 = virus_copylist(M.virus2) return 1 //we bloodied the floor + + //if there isn't a blood decal already, make one. if(M.species.bloodflags &BLOOD_GREEN) var/obj/effect/decal/cleanable/blood/green/newblood = new /obj/effect/decal/cleanable/blood/green(src) - newblood.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - if (M.virus2.len) - newblood.virus2 |= virus_copylist(M.virus2) + else var/obj/effect/decal/cleanable/blood/newblood = new /obj/effect/decal/cleanable/blood(src) - newblood.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - if (M.virus2.len) - newblood.virus2 |= virus_copylist(M.virus2) + + 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 78dd962a5f7..6cb013a8610 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1696,8 +1696,21 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc 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()) - src.findAirborneVirii() + 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()) for (var/ID in virus2) diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index 2735a251346..d6939596d40 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -183,6 +183,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() else for(var/obj/effect/decal/cleanable/blood/drip/green/G in nums) del G @@ -201,6 +204,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() else for(var/obj/effect/decal/cleanable/blood/drip/G in nums) del G diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 879f8e9b9b2..2253216aac9 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -147,10 +147,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) + 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"] @@ -175,6 +180,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 9fb9792a8c0..c1fd6ea2139 100644 --- a/code/modules/virus2/helpers.dm +++ b/code/modules/virus2/helpers.dm @@ -63,10 +63,11 @@ proc/airborne_can_reach(turf/source, turf/target, var/radius=5) if ("[disease.uniqueID]" in M.virus2) 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) + 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))