diff --git a/code/WorkInProgress/Chemistry-Holder.dm b/code/WorkInProgress/Chemistry-Holder.dm index 594f5bd0f23..07c4798548b 100644 --- a/code/WorkInProgress/Chemistry-Holder.dm +++ b/code/WorkInProgress/Chemistry-Holder.dm @@ -274,6 +274,13 @@ datum R.volume += amount update_total() my_atom.on_reagent_change() + + // mix dem viruses + if(R.data["viruses"] || data["viruses"]) + var/list/this = R.data["viruses"] + var/list/that = data["viruses"] + this += that // combine the two + return 0 for(var/A in typesof(/datum/reagent) - /datum/reagent) diff --git a/code/WorkInProgress/Chemistry-Machinery.dm b/code/WorkInProgress/Chemistry-Machinery.dm index 29602525570..6bc41363662 100644 --- a/code/WorkInProgress/Chemistry-Machinery.dm +++ b/code/WorkInProgress/Chemistry-Machinery.dm @@ -349,7 +349,7 @@ B.icon_state = "bottle3" var/type = text2path(href_list["create_virus_culture"])//the path is received as string - converting var/datum/disease/D = new type - var/list/data = list("virus"=D) + var/list/data = list("viruses"=list(D)) var/name = sanitize(input(usr,"Name:","Name the culture",D.name)) if(!name || name == " ") name = D.name B.name = "[name] culture bottle" @@ -416,11 +416,17 @@ dat += "

Blood sample data:

" dat += "Blood DNA: [(Blood.data["blood_DNA"]||"none")]
" dat += "Blood Type: [(Blood.data["blood_type"]||"none")]
" - var/datum/disease/D = Blood.data["virus"] - dat += "Agent of disease: [D?"[D.agent] - Create virus culture bottle":"none"]
" - if(D) - dat += "Common name: [(D.name||"none")]
" - dat += "Possible cure: [(D.cure||"none")]
" + + + if(Blood.data["viruses"]) + var/list/vir = Blood.data["viruses"] + if(vir.len) + for(var/datum/disease/D in Blood.data["viruses"]) + + dat += "Disease Agent: [D?"[D.agent] - Create virus culture bottle":"none"]
" + dat += "Common name: [(D.name||"none")]
" + dat += "Possible cure: [(D.cure||"none")]

" + dat += "Contains antibodies to: " if(Blood.data["resistances"]) var/list/res = Blood.data["resistances"] diff --git a/code/WorkInProgress/Chemistry-Reagents.dm b/code/WorkInProgress/Chemistry-Reagents.dm index 499a42f63bc..779cf6746b6 100644 --- a/code/WorkInProgress/Chemistry-Reagents.dm +++ b/code/WorkInProgress/Chemistry-Reagents.dm @@ -15,6 +15,7 @@ datum var/data = null var/volume = 0 var/nutriment_factor = 0 + //var/list/viruses = list() proc reaction_mob(var/mob/M, var/method=TOUCH, var/volume) //By default we have a chance to transfer some @@ -68,15 +69,22 @@ datum blood - data = new/list("donor"=null,"virus"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null) + data = new/list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null) name = "Blood" id = "blood" reagent_state = LIQUID reaction_mob(var/mob/M, var/method=TOUCH, var/volume) - if(M.virus) return //to prevent the healing of some serious shit with common cold injection. var/datum/reagent/blood/self = src src = null + for(var/datum/disease/D in self.data["viruses"]) + var/datum/disease/virus = new D.type + if(method == TOUCH) + M.contract_disease(virus) + + else //injected + M.contract_disease(virus, 1, 0) + /* if(self.data["virus"]) var/datum/disease/V = self.data["virus"] if(M.resistances.Find(V.type)) return @@ -85,52 +93,67 @@ datum else //injected M.contract_disease(V, 1, 0) return + */ reaction_turf(var/turf/simulated/T, var/volume)//splash the blood all over the place if(!istype(T)) return var/datum/reagent/blood/self = src src = null - var/datum/disease/D = self.data["virus"] + //var/datum/disease/D = self.data["virus"] if(!self.data["donor"] || istype(self.data["donor"], /mob/living/carbon/human)) var/obj/decal/cleanable/blood/blood_prop = locate() in T //find some blood here if(!blood_prop) //first blood! blood_prop = new(T) blood_prop.blood_DNA = self.data["blood_DNA"] blood_prop.blood_type = self.data["blood_type"] - if(D && !blood_prop.virus) //TODO: multiple viruses - blood_prop.virus = new D.type - blood_prop.virus.holder = blood_prop + + for(var/datum/disease/D in self.data["viruses"]) + var/datum/disease/newVirus = new D.type + blood_prop.viruses += newVirus + newVirus.holder = blood_prop + + // this makes it almost impossible for airborne diseases to spread + // THIS SHIT HAS TO GO, SORRY! + /* if(T.density==0) - blood_prop.virus.spread_type = CONTACT_FEET + newVirus.spread_type = CONTACT_FEET else - blood_prop.virus.spread_type = CONTACT_HANDS + newVirus.spread_type = CONTACT_HANDS + */ else if(istype(self.data["donor"], /mob/living/carbon/monkey)) var/obj/decal/cleanable/blood/blood_prop = locate() in T if(!blood_prop) blood_prop = new(T) blood_prop.blood_DNA = self.data["blood_DNA"] - if(D && !blood_prop.virus) - blood_prop.virus = new D.type - blood_prop.virus.holder = blood_prop + for(var/datum/disease/D in self.data["viruses"]) + var/datum/disease/newVirus = new D.type + blood_prop.viruses += newVirus + newVirus.holder = blood_prop + + /* if(T.density==0) - blood_prop.virus.spread_type = CONTACT_FEET + newVirus.spread_type = CONTACT_FEET else - blood_prop.virus.spread_type = CONTACT_HANDS + newVirus.spread_type = CONTACT_HANDS + */ else if(istype(self.data["donor"], /mob/living/carbon/alien)) var/obj/decal/cleanable/xenoblood/blood_prop = locate() in T if(!blood_prop) blood_prop = new(T) blood_prop.blood_DNA = self.data["blood_DNA"] - if(D && !blood_prop.virus) - blood_prop.virus = new D.type - blood_prop.virus.holder = blood_prop + for(var/datum/disease/D in self.data["viruses"]) + var/datum/disease/newVirus = new D.type + blood_prop.viruses += newVirus + newVirus.holder = blood_prop + /* if(T.density==0) - blood_prop.virus.spread_type = CONTACT_FEET + newVirus.spread_type = CONTACT_FEET else - blood_prop.virus.spread_type = CONTACT_HANDS + newVirus.spread_type = CONTACT_HANDS + */ return /* Must check the transfering of reagents and their data first. They all can point to one disease datum. @@ -151,10 +174,11 @@ datum var/datum/reagent/vaccine/self = src src = null if(self.data&&method == INGEST) - if(M.virus && M.virus.type == self.data) - M.virus.cure() - else if(!(self.data in M.resistances)) - M.resistances += self.data + for(var/datum/disease/D in M.viruses) + if(M.virus && D.type == self.data["viruses"]) + D.cure() + + M.resistances += self.data return @@ -997,10 +1021,11 @@ datum M:confused = 0 M:sleeping = 0 M:jitteriness = 0 - M.virus.spread = "Remissive" - M.virus.stage-- - if(M.virus.stage < 1) - M.virus.cure() + for(var/datum/disease/D in M.viruses) + D.spread = "Remissive" + D.stage-- + if(D.stage < 1) + D.cure() ..() return @@ -1532,8 +1557,10 @@ datum M:heal_organ_damage(1,1) ..() return + ..() + dry_ramen name = "Dry Ramen" id = "dry_ramen" @@ -1775,6 +1802,7 @@ datum if(data >= 40 && prob(33)) if (!M:confused) M:confused = 1 M:confused += 2 + ..() return @@ -1960,6 +1988,9 @@ datum reagent_state = LIQUID on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom + if(M:oxyloss && prob(20)) M:oxyloss-- + if(M:bruteloss && prob(20)) M:heal_organ_damage(1,0) + if(M:fireloss && prob(20)) M:heal_organ_damage(0,1) if(M:toxloss && prob(20)) M:toxloss-- M:nutrition++ ..() @@ -2027,6 +2058,12 @@ datum ..() return + cream + name = "Cream" + id = "cream" + description = "The fatty, still liquid part of milk. Why don't you mix this with sum scotch, eh?" + reagent_state = LIQUID + hooch name = "Hooch" id = "hooch" diff --git a/code/WorkInProgress/Chemistry-Tools.dm b/code/WorkInProgress/Chemistry-Tools.dm index aacfc57f5ac..3e56f46eb6b 100644 --- a/code/WorkInProgress/Chemistry-Tools.dm +++ b/code/WorkInProgress/Chemistry-Tools.dm @@ -783,8 +783,20 @@ B.volume = amount //set reagent data B.data["donor"] = T + /* if(T.virus && T.virus.spread_type != SPECIAL) B.data["virus"] = new T.virus.type(0) + */ + + + + for(var/datum/disease/D in T.viruses) + if(!B.data["viruses"]) + B.data["viruses"] = list() + + + B.data["virus"] += new D.type + B.data["blood_DNA"] = copytext(T.dna.unique_enzymes,1,0) if(T.resistances&&T.resistances.len) B.data["resistances"] = T.resistances.Copy() @@ -1611,7 +1623,7 @@ New() ..() var/datum/disease/F = new /datum/disease/flu(0) - var/list/data = list("virus"= F) + var/list/data = list("viruses"= list(F)) reagents.add_reagent("blood", 20, data) /obj/item/weapon/reagent_containers/glass/bottle/pierrot_throat @@ -1622,7 +1634,7 @@ New() ..() var/datum/disease/F = new /datum/disease/pierrot_throat(0) - var/list/data = list("virus"= F) + var/list/data = list("viruses"= list(F)) reagents.add_reagent("blood", 20, data) /obj/item/weapon/reagent_containers/glass/bottle/cold @@ -1633,7 +1645,7 @@ New() ..() var/datum/disease/F = new /datum/disease/cold(0) - var/list/data = list("virus"= F) + var/list/data = list("viruses"= list(F)) reagents.add_reagent("blood", 20, data) /* @@ -1660,7 +1672,7 @@ New() ..() var/datum/disease/F = new /datum/disease/fake_gbs(0) - var/list/data = list("virus"= F) + var/list/data = list("viruses"= list(F)) reagents.add_reagent("blood", 20, data) /* /obj/item/weapon/reagent_containers/glass/bottle/rhumba_beat @@ -1687,7 +1699,7 @@ New() ..() var/datum/disease/F = new /datum/disease/brainrot(0) - var/list/data = list("virus"= F) + var/list/data = list("viruses"= list(F)) reagents.add_reagent("blood", 20, data) /obj/item/weapon/reagent_containers/glass/bottle/magnitis @@ -1698,7 +1710,7 @@ New() ..() var/datum/disease/F = new /datum/disease/magnitis(0) - var/list/data = list("virus"= F) + var/list/data = list("viruses"= list(F)) reagents.add_reagent("blood", 20, data) @@ -1710,7 +1722,7 @@ New() ..() var/datum/disease/F = new /datum/disease/wizarditis(0) - var/list/data = list("virus"= F) + var/list/data = list("viruses"= list(F)) reagents.add_reagent("blood", 20, data) diff --git a/code/WorkInProgress/buildmode.dm b/code/WorkInProgress/buildmode.dm index 6140edf60f2..aa6a1b993ae 100644 --- a/code/WorkInProgress/buildmode.dm +++ b/code/WorkInProgress/buildmode.dm @@ -154,7 +154,7 @@ else if (dd_hasprefix(objholder, "/mob") && !(usr.client.holder.rank in list("Game Master", "Game Admin", "Badmin"))) objholder = "/obj/closet" if(3) - var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "cuffed", "ka", "last_eaten", "urine") + var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine") master.buildmode.varholder = input(usr,"Enter variable name:" ,"Name", "name") if(master.buildmode.varholder in locked && !(usr.client.holder.rank in list("Game Master", "Game Admin"))) diff --git a/code/WorkInProgress/cloning.dm b/code/WorkInProgress/cloning.dm index eae697bdcd4..17848277502 100644 --- a/code/WorkInProgress/cloning.dm +++ b/code/WorkInProgress/cloning.dm @@ -318,6 +318,9 @@ if ((!subject.ckey) || (!subject.client)) src.temp = "Error: Mental interface failure." return + if (subject.mutations & HUSK) + src.temp = "Error: Mental interface failure." + return if (!isnull(find_record(subject.ckey))) src.temp = "Subject already in database." return diff --git a/code/datums/disease.dm b/code/datums/disease.dm index c3e33e65b13..a7c59cc3dea 100644 --- a/code/datums/disease.dm +++ b/code/datums/disease.dm @@ -84,6 +84,13 @@ to null does not delete the object itself. Thank you. /mob/proc/contract_disease(var/datum/disease/virus, var/skip_this = 0, var/force_species_check=1) // world << "Contract_disease called by [src] with virus [virus]" if(stat >=2) return + if(virus.type in resistances) + if(prob(99.9)) return + resistances.Remove(virus.type)//the resistance is futile + + for(var/datum/disease/D in viruses) + if(istype(D, virus.type)) + return // two viruses of the same kind can't infect a body at once!! if(force_species_check) @@ -95,23 +102,21 @@ to null does not delete the object itself. Thank you. break if(fail) return - if(skip_this == 1)//be wary, it replaces the current disease... - if(src.virus) - src.virus.cure(0) - src.virus = new virus.type - src.virus.affected_mob = src - src.virus.strain_data = virus.strain_data.Copy() - src.virus.holder = src + if(skip_this == 1) + //if(src.virus) < -- this used to replace the current disease. Not anymore! + //src.virus.cure(0) + + var/datum/disease/v = new virus.type + src.viruses += v + v.affected_mob = src + v.strain_data = v.strain_data.Copy() + v.holder = src if(prob(5)) - src.virus.carrier = 1 + v.carrier = 1 return - if(src.virus) - return - - if(virus.type in resistances) - if(prob(99.9)) return - resistances.Remove(virus.type)//the resistance is futile + //if(src.virus) // + //return // /* @@ -223,7 +228,7 @@ to null does not delete the object itself. Thank you. passed = (prob(50*virus.permeability_mod)) if(passed) -// world << "Infection in the mob [src]. YAY" + //world << "Infection in the mob [src]. YAY" /* @@ -253,18 +258,20 @@ to null does not delete the object itself. Thank you. else if(prob(15)) return else*/ - src.virus = new virus.type - src.virus.strain_data = virus.strain_data.Copy() - src.virus.affected_mob = src - src.virus.holder = src + var/datum/disease/v = new virus.type + src.viruses += v + v.affected_mob = src + v.strain_data = v.strain_data.Copy() + v.holder = src if(prob(5)) - src.virus.carrier = 1 + v.carrier = 1 return return -/datum/disease/proc/spread(var/source=null) +/datum/disease/proc/spread(var/atom/source=null) //world << "Disease [src] proc spread was called from holder [source]" + if(spread_type == SPECIAL)//does not spread return @@ -279,8 +286,9 @@ to null does not delete the object itself. Thank you. var/check_range = AIRBORNE//defaults to airborne - range 4 + if(spread_type != AIRBORNE) - check_range = 0 + check_range = 0 // everything else, like infect-on-contact things, only infect things on top of it for(var/mob/living/carbon/M in oviewers(check_range, source)) M.contract_disease(src) @@ -290,8 +298,15 @@ to null does not delete the object itself. Thank you. /datum/disease/proc/process() if(!holder) return - if(prob(40)) + if(prob(65)) spread(holder) + + if(affected_mob) + for(var/datum/disease/D in affected_mob.viruses) + if(D != src) + if(istype(src, D.type)) + del(D) // if there are somehow two viruses of the same kind in the system, delete the other one + if(holder == affected_mob) if(affected_mob.stat < 2) //he's alive stage_act() @@ -301,8 +316,19 @@ to null does not delete the object itself. Thank you. affected_mob = null if(!affected_mob) //the virus is in inanimate obj // world << "[src] longevity = [longevity]" - if(--longevity<=0) - cure(0) + /* + if(holder) + + // spreads the love. Why hasn't anyone coded this in yet?!?!?!? + for(var/mob/living/M in view(1, holder)) + if(M.stat != 2) + if(prob(90)) + M.contract_disease(src) + */ + + if(prob(70)) + if(--longevity<=0) + cure(0) return /datum/disease/proc/cure(var/resistance=1)//if resistance = 0, the mob won't develop resistance to disease diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 1dfdcdae6eb..f1f7781bffe 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -181,10 +181,15 @@ datum/mind if (istype(current, /mob/living/carbon/human)) text += "healthy|infected|HUMAN|other" else if (istype(current, /mob/living/carbon/monkey)) - if(istype(current.virus, /datum/disease/jungle_fever)) + var/found = 0 + for(var/datum/disease/D in current.viruses) + if(istype(D, /datum/disease/jungle_fever)) found = 1 + + if(found) text += "healthy|INFECTED|human|other" else text += "HEALTHY|infected|human|other" + else text += "healthy|infected|human|OTHER" sections["monkey"] = text @@ -675,9 +680,10 @@ datum/mind M = H.monkeyize() src = M.mind //world << "DEBUG: \"healthy\": M=[M], M.mind=[M.mind], src=[src]!" - else if (istype(M) && M.virus) - M.virus.cure(0) - sleep(0) //because deleting of virus is doing throught spawn(0) + else if (istype(M) && length(M.viruses)) + for(var/datum/disease/D in M.viruses) + D.cure(0) + sleep(0) //because deleting of virus is done through spawn(0) if("infected") if (usr.client.holder.level >= 3) var/mob/living/carbon/human/H = current @@ -694,9 +700,10 @@ datum/mind if("human") var/mob/living/carbon/monkey/M = current if (istype(M)) - if (istype(M.virus,/datum/disease/jungle_fever)) - M.virus.cure(0) - sleep(0) //because deleting of virus is doing throught spawn(0) + for(var/datum/disease/D in M.viruses) + if (istype(D,/datum/disease/jungle_fever)) + D.cure(0) + sleep(0) //because deleting of virus is doing throught spawn(0) log_admin("[key_name(usr)] attempting to humanize [key_name(current)]") message_admins("\blue [key_name_admin(usr)] attempting to humanize [key_name_admin(current)]", 1) var/obj/item/weapon/dnainjector/m2h/m2h = new diff --git a/code/defines/mob/mob.dm b/code/defines/mob/mob.dm index 2f14939d222..a9135e83c5f 100644 --- a/code/defines/mob/mob.dm +++ b/code/defines/mob/mob.dm @@ -184,6 +184,10 @@ //Wizard mode, but can be used in other modes thanks to the brand new "Give Spell" badmin button var/obj/proc_holder/spell/list/spell_list = list() +//List of active diseases + + var/viruses = list() // replaces var/datum/disease/virus + //Monkey/infected mode var/list/resistances = list() var/datum/disease/virus = null diff --git a/code/defines/obj/decal.dm b/code/defines/obj/decal.dm index 9ba9caef1ba..df610beb740 100644 --- a/code/defines/obj/decal.dm +++ b/code/defines/obj/decal.dm @@ -47,13 +47,13 @@ icon = 'blood.dmi' icon_state = "floor1" random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7") - var/datum/disease/virus = null + var/list/viruses = list() blood_DNA = null blood_type = null Del() - if(virus) - virus.cure(0) + for(var/datum/disease/D in viruses) + D.cure(0) ..() /obj/decal/cleanable/blood/splatter @@ -99,11 +99,11 @@ icon = 'blood.dmi' icon_state = "xfloor1" random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7") - var/datum/disease/virus = null + var/list/viruses = list() Del() - if(virus) - virus.cure(0) + for(var/datum/disease/D in viruses) + D.cure(0) ..() /obj/decal/cleanable/xenoblood/xsplatter @@ -164,12 +164,12 @@ layer = 2 icon = 'robots.dmi' icon_state = "floor1" - var/datum/disease/virus = null + var/viruses = list() random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7") Del() - if(virus) - virus.cure(0) + for(var/datum/disease/D in viruses) + D.cure(0) ..() /obj/decal/cleanable/oil/streak diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm index e9acfd13be3..f50621988d2 100644 --- a/code/game/atom_procs.dm +++ b/code/game/atom_procs.dm @@ -111,9 +111,10 @@ var/obj/decal/cleanable/blood/this = new /obj/decal/cleanable/blood(source2) this.blood_DNA = M.dna.unique_enzymes this.blood_type = M.b_type - if (M.virus) - this.virus = new M.virus.type - this.virus.holder = this + for(var/datum/disease/D in M.viruses) + var/datum/disease/newDisease = new D.type + this.viruses += newDisease + newDisease.holder = this else if (istype(src, /mob/living/carbon/human)) src.blood_DNA = M.dna.unique_enzymes src.blood_type = M.b_type @@ -136,25 +137,28 @@ var/turf/simulated/source1 = src var/obj/decal/cleanable/blood/this = new /obj/decal/cleanable/blood(source1) this.blood_DNA = M.dna.unique_enzymes - if(M.virus) - this.virus = new M.virus.type - this.virus.holder = this + for(var/datum/disease/D in M.viruses) + var/datum/disease/newDisease = new D.type + this.viruses += newDisease + newDisease.holder = this else if( istype(M, /mob/living/carbon/alien )) if( istype(src, /turf/simulated) ) var/turf/simulated/source2 = src var/obj/decal/cleanable/xenoblood/this = new /obj/decal/cleanable/xenoblood(source2) - if(M.virus) - this.virus = new M.virus.type - this.virus.holder = this + for(var/datum/disease/D in M.viruses) + var/datum/disease/newDisease = new D.type + this.viruses += newDisease + newDisease.holder = this else if( istype(M, /mob/living/silicon/robot )) if( istype(src, /turf/simulated) ) var/turf/simulated/source2 = src var/obj/decal/cleanable/oil/this = new /obj/decal/cleanable/oil(source2) - if(M.virus) - this.virus = new M.virus.type - this.virus.holder = this + for(var/datum/disease/D in M.viruses) + var/datum/disease/newDisease = new D.type + this.viruses += newDisease + newDisease.holder = this diff --git a/code/game/dna.dm b/code/game/dna.dm index 3401cd1bd8a..706bc3e3fa7 100644 --- a/code/game/dna.dm +++ b/code/game/dna.dm @@ -368,10 +368,10 @@ M.dna = null - O.virus = M.virus - M.virus = null - if (O.virus) - O.virus.affected_mob = O + for(var/datum/disease/D in M.viruses) + O.viruses += D + D.affected_mob = O + M.viruses -= D for(var/obj/T in (M.contents-implants)) @@ -433,10 +433,10 @@ O.dna = M.dna M.dna = null - O.virus = M.virus - M.virus = null - if (O.virus) - O.virus.affected_mob = O + for(var/datum/disease/D in M.viruses) + O.viruses += D + D.affected_mob = O + M.viruses -= D //for(var/obj/T in M) // del(T) diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 9a7f1e7d0a2..4b3eaae05b5 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -242,8 +242,13 @@ if("pierrot's throat") virus_type = /datum/disease/pierrot_throat for(var/mob/living/carbon/human/H in world) - if((H.virus) || (H.stat == 2)) + + var/foundAlready = 0 // don't infect someone that already has the virus + for(var/datum/disease/D in H.viruses) + foundAlready = 1 + if(H.stat == 2 || foundAlready) continue + if(virus_type == /datum/disease/dnaspread) //Dnaspread needs strain_data set to work. if((!H.dna) || (H.sdisabilities & 1)) //A blindness disease would be the worst. continue @@ -254,13 +259,14 @@ D.carrier = 1 D.holder = H D.affected_mob = H - H.virus = D + H.viruses += D break else - H.virus = new virus_type - H.virus.affected_mob = H - H.virus.holder = H - H.virus.carrier = 1 + var/datum/disease/D = new virus_type + D.carrier = 1 + D.holder = H + D.affected_mob = H + H.viruses += D break /proc/alien_infestation() // -- TLE diff --git a/code/game/gamemodes/events/ninja_equipment.dm b/code/game/gamemodes/events/ninja_equipment.dm index 9ee2798ef5b..d179e9f2702 100644 --- a/code/game/gamemodes/events/ninja_equipment.dm +++ b/code/game/gamemodes/events/ninja_equipment.dm @@ -293,8 +293,9 @@ ________________________________________________________________________________ dat += " | Brute trauma: [U.bruteloss]
" dat += "Radiation Level: [U.radiation] rad
" dat += "Body Temperature: [U.bodytemperature-T0C]°C ([U.bodytemperature*1.8-459.67]°F)
" - if(U.virus) - dat += "Warning Virus Detected. Name: [U.virus.name].Type: [U.virus.spread]. Stage: [U.virus.stage]/[U.virus.max_stages]. Possible Cure: [U.virus.cure].
" + + for(var/datum/disease/D in U.viruses) + dat += "Warning: Virus Detected. Name: [D.name].Type: [D.spread]. Stage: [D.stage]/[D.max_stages]. Possible Cure: [D.cure].
" dat += "