Viruses are properly transferred to spilled blood now.
Antigens prevent from infection properly.
Lowered frequency of blood puddle virus check to cut down on processing.
This commit is contained in:
Chinsky
2014-06-21 17:52:59 +04:00
parent b7832f862a
commit 15536d27a4
5 changed files with 37 additions and 21 deletions

View File

@@ -144,8 +144,11 @@
for(var/obj/effect/decal/cleanable/blood/B in contents) for(var/obj/effect/decal/cleanable/blood/B in contents)
if(!B.blood_DNA[M.dna.unique_enzymes]) if(!B.blood_DNA[M.dna.unique_enzymes])
B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
B.virus2 = virus_copylist(M.virus2)
return 1 //we bloodied the floor return 1 //we bloodied the floor
//if there isn't a blood decal already, make one. //if there isn't a blood decal already, make one.
var/obj/effect/decal/cleanable/blood/newblood = new /obj/effect/decal/cleanable/blood(src) var/obj/effect/decal/cleanable/blood/newblood = new /obj/effect/decal/cleanable/blood(src)
@@ -156,6 +159,7 @@
newblood.basecolor = "#A10808" newblood.basecolor = "#A10808"
newblood.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type newblood.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type
newblood.virus2 = virus_copylist(M.virus2)
newblood.update_icon() newblood.update_icon()
return 1 //we bloodied the floor return 1 //we bloodied the floor

View File

@@ -308,11 +308,11 @@
var/datum/gas_mixture/environment = loc.return_air() var/datum/gas_mixture/environment = loc.return_air()
var/datum/gas_mixture/breath var/datum/gas_mixture/breath
// HACK NEED CHANGING LATER // HACK NEED CHANGING LATER
if(health < config.health_threshold_crit && !reagents.has_reagent("inaprovaline")) if(health < config.health_threshold_crit && !reagents.has_reagent("inaprovaline"))
losebreath++ losebreath++
if(losebreath>0) //Suffocating so do not take a breath if(losebreath>0) //Suffocating so do not take a breath
losebreath-- losebreath--
if (prob(10)) //Gasp per 10 ticks? Sounds about right. if (prob(10)) //Gasp per 10 ticks? Sounds about right.
@@ -1487,21 +1487,21 @@
for (var/ID in virus2) for (var/ID in virus2)
var/datum/disease2/disease/V = virus2[ID] var/datum/disease2/disease/V = virus2[ID]
V.cure(src) 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)) else if(istype(O,/obj/effect/decal/cleanable/mucus))
if(istype(O,/obj/effect/decal/cleanable/blood)) var/obj/effect/decal/cleanable/mucus/M = O
var/obj/effect/decal/cleanable/blood/B = O if(M.virus2.len)
if(B.virus2.len) for (var/ID in M.virus2)
for (var/ID in B.virus2) var/datum/disease2/disease/V = M.virus2[ID]
var/datum/disease2/disease/V = B.virus2[ID] infect_virus2(src,V.getcopy())
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)
if(virus2.len) if(virus2.len)

View File

@@ -159,6 +159,9 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
this.icon_state = pick(iconL) this.icon_state = pick(iconL)
this.blood_DNA = list() this.blood_DNA = list()
this.blood_DNA[dna.unique_enzymes] = dna.b_type 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 if (species) this.basecolor = species.blood_color
this.update_icon() this.update_icon()

View File

@@ -118,10 +118,15 @@ datum
else //injected else //injected
M.contract_disease(D, 1, 0) M.contract_disease(D, 1, 0)
if(self.data && self.data["virus2"] && istype(M, /mob/living/carbon))//infecting... if(self.data && self.data["virus2"] && istype(M, /mob/living/carbon))//infecting...
if(method == TOUCH) var/list/vlist = self.data["virus2"]
infect_virus2(M,self.data["virus2"]) if (vlist.len)
else for (var/ID in vlist)
infect_virus2(M,self.data["virus2"],1) //injected, force infection! 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 if(self.data && self.data["antibodies"] && istype(M, /mob/living/carbon))//... and curing
var/mob/living/carbon/C = M var/mob/living/carbon/C = M
C.antibodies |= self.data["antibodies"] C.antibodies |= self.data["antibodies"]
@@ -146,6 +151,9 @@ datum
blood_prop.viruses += newVirus blood_prop.viruses += newVirus
newVirus.holder = blood_prop 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)) else if(istype(self.data["donor"], /mob/living/carbon/monkey))
var/obj/effect/decal/cleanable/blood/blood_prop = locate() in T var/obj/effect/decal/cleanable/blood/blood_prop = locate() in T

View File

@@ -68,10 +68,11 @@ proc/airborne_can_reach(turf/source, turf/target)
if ("[disease.uniqueID]" in M.virus2) if ("[disease.uniqueID]" in M.virus2)
return return
// if one of the antibodies in the mob's body matches one of the disease's antigens, don't infect // 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 return
if(M.reagents.has_reagent("spaceacillin")) if(M.reagents.has_reagent("spaceacillin"))
return return
if(istype(M,/mob/living/carbon/monkey)) if(istype(M,/mob/living/carbon/monkey))
var/mob/living/carbon/monkey/chimp = M var/mob/living/carbon/monkey/chimp = M
if (!(chimp.greaterform in disease.affected_species)) if (!(chimp.greaterform in disease.affected_species))