diff --git a/code/datums/diseases/_MobProcs.dm b/code/datums/diseases/_MobProcs.dm index 0b6d4e3404..a7a61802d3 100644 --- a/code/datums/diseases/_MobProcs.dm +++ b/code/datums/diseases/_MobProcs.dm @@ -21,7 +21,7 @@ return FALSE - if(!(type in D.viable_mobtypes)) + if(!D.viable_mobtypes[type]) return FALSE return TRUE diff --git a/code/datums/diseases/_disease.dm b/code/datums/diseases/_disease.dm index 940b61c9fe..9145a53642 100644 --- a/code/datums/diseases/_disease.dm +++ b/code/datums/diseases/_disease.dm @@ -18,7 +18,7 @@ var/stage_prob = 4 //Other - var/list/viable_mobtypes = list() //typepaths of viable mobs + var/list/viable_mobtypes = list() //typecache of viable mobs var/mob/living/carbon/affected_mob = null var/list/cures = list() //list of cures if the disease has the CURABLE flag, these are reagent ids var/infectivity = 65 @@ -34,6 +34,10 @@ var/process_dead = FALSE //if this ticks while the host is dead var/copy_type = null //if this is null, copies will use the type of the instance being copied +/datum/disease/New(make_typecache = TRUE) + if(make_typecache && length(viable_mobtypes)) + viable_mobtypes = typecacheof(viable_mobtypes) + /datum/disease/Destroy() . = ..() if(affected_mob) diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 1c21fb9528..330a3494d9 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -80,7 +80,8 @@ */ -/datum/disease/advance/New() +/datum/disease/advance/New(make_typecache = TRUE) + ..() Refresh() /datum/disease/advance/Destroy() diff --git a/code/datums/diseases/advance/presets.dm b/code/datums/diseases/advance/presets.dm index 68c3ceffea..b12b657101 100644 --- a/code/datums/diseases/advance/presets.dm +++ b/code/datums/diseases/advance/presets.dm @@ -2,7 +2,7 @@ /datum/disease/advance/cold copy_type = /datum/disease/advance -/datum/disease/advance/cold/New() +/datum/disease/advance/cold/New(make_typecache = TRUE) name = "Cold" symptoms = list(new/datum/symptom/sneeze) ..() @@ -11,7 +11,7 @@ /datum/disease/advance/flu copy_type = /datum/disease/advance -/datum/disease/advance/flu/New() +/datum/disease/advance/flu/New(make_typecache = TRUE) name = "Flu" symptoms = list(new/datum/symptom/cough) ..() @@ -21,7 +21,7 @@ name = "Experimental Disease" copy_type = /datum/disease/advance -/datum/disease/advance/random/New(max_symptoms, max_level = 8) +/datum/disease/advance/random/New(make_typecache = TRUE, max_symptoms, max_level = 8) if(!max_symptoms) max_symptoms = rand(1, VIRUS_SYMPTOM_LIMIT) var/list/datum/symptom/possible_symptoms = list() @@ -37,6 +37,6 @@ if(chosen_symptom) var/datum/symptom/S = new chosen_symptom symptoms += S - Refresh() - name = "Sample #[rand(1,10000)]" \ No newline at end of file + name = "Sample #[rand(1,10000)]" + ..() \ No newline at end of file diff --git a/code/datums/diseases/retrovirus.dm b/code/datums/diseases/retrovirus.dm index 160a9f98ad..5a638fcf1b 100644 --- a/code/datums/diseases/retrovirus.dm +++ b/code/datums/diseases/retrovirus.dm @@ -13,7 +13,7 @@ stage_prob = 2 var/restcure = 0 -/datum/disease/dna_retrovirus/New() +/datum/disease/dna_retrovirus/New(make_typecache = TRUE) ..() agent = "Virus class [pick("A","B","C","D","E","F")][pick("A","B","C","D","E","F")]-[rand(50,300)]" if(prob(40)) diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index f8dac1b100..d8a5f856f1 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -145,7 +145,7 @@ if(5) dat += "
Virus Database
" for(var/Dt in typesof(/datum/disease/)) - var/datum/disease/Dis = new Dt(0) + var/datum/disease/Dis = new Dt(FALSE) if(istype(Dis, /datum/disease/advance)) continue // TODO (tm): Add advance diseases to the virus database which no one uses. if(!Dis.desc) @@ -248,7 +248,7 @@ else if(href_list["vir"]) var/type = href_list["vir"] - var/datum/disease/Dis = new type(0) + var/datum/disease/Dis = new type(FALSE) var/AfS = "" for(var/mob/M in Dis.viable_mobtypes) AfS += " [initial(M.name)];" diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm index 7df089d49c..68c5d8c5c8 100644 --- a/code/modules/events/disease_outbreak.dm +++ b/code/modules/events/disease_outbreak.dm @@ -63,7 +63,7 @@ else D = new virus_type() else - D = new /datum/disease/advance/random(max_severity, max_severity) + D = new /datum/disease/advance/random(TRUE, max_severity, max_severity) D.carrier = TRUE H.ForceContractDisease(D, FALSE, TRUE) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index ccca90807b..0460819c4b 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -280,7 +280,7 @@ if(miasma_partialpressure > MINIMUM_MOLES_DELTA_TO_MOVE) if(prob(0.05 * miasma_partialpressure)) - var/datum/disease/advance/miasma_disease = new /datum/disease/advance/random(2,3) + var/datum/disease/advance/miasma_disease = new /datum/disease/advance/random(TRUE, 2,3) miasma_disease.name = "Unknown" ForceContractDisease(miasma_disease, TRUE, TRUE) diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index b774aaf793..ac2b34b855 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -350,7 +350,7 @@ //Miasma sickness if(prob(0.05 * miasma_pp)) - var/datum/disease/advance/miasma_disease = new /datum/disease/advance/random(2,3) + var/datum/disease/advance/miasma_disease = new /datum/disease/advance/random(TRUE, 2,3) miasma_disease.name = "Unknown" miasma_disease.try_infect(owner)