diff --git a/code/datums/diseases/_MobProcs.dm b/code/datums/diseases/_MobProcs.dm index f1793c1cc0..86f26dba9e 100644 --- a/code/datums/diseases/_MobProcs.dm +++ b/code/datums/diseases/_MobProcs.dm @@ -79,6 +79,9 @@ if(!CanContractDisease(D)) return FALSE + if(species.virus_immune && !global_flag_check(D.virus_modifiers, BYPASSES_IMMUNITY)) + return FALSE + var/obj/item/clothing/Cl = null var/passed = TRUE diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 4e57552dab..2bb672a23b 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -72,15 +72,11 @@ GLOBAL_LIST_INIT(advance_cures, list( return TRUE /datum/disease/advance/IsSame(datum/disease/advance/D) - if(ispath(D)) - return FALSE - if(!istype(D, /datum/disease/advance)) return FALSE if(GetDiseaseID() != D.GetDiseaseID()) return FALSE - return TRUE /datum/disease/advance/cure(resistance = TRUE) @@ -91,14 +87,27 @@ GLOBAL_LIST_INIT(advance_cures, list( remove_virus() qdel(src) -/datum/disease/advance/Copy(process = 0) - return new /datum/disease/advance(process, src, 1) +/datum/disease/advance/Copy() + var/datum/disease/advance/A = ..() + QDEL_LIST(A.symptoms) + for(var/datum/symptom/S as anything in symptoms) + A.symptoms += S.Copy() + A.disease_flags = disease_flags + A.resistance = resistance + A.stealth = stealth + A.stage_rate = stage_rate + A.transmission = transmission + A.severity = severity + A.speed = speed + A.id = id + A.Refresh() + return A /datum/disease/advance/proc/Mix(datum/disease/advance/D) if(!(IsSame(D))) var/list/possible_symptoms = shuffle(D.symptoms) for(var/datum/symptom/S in possible_symptoms) - AddSymptom(new S.type) + AddSymptom(S.Copy()) /datum/disease/advance/proc/HasSymptom(datum/symptom/S) for(var/datum/symptom/symp in symptoms) @@ -180,12 +189,12 @@ GLOBAL_LIST_INIT(advance_cures, list( var/c2sev var/c3sev - for(var/datum/symptom/S as() in symptoms) + for(var/datum/symptom/S as anything in symptoms) resistance += S.resistance stealth += S.stealth stage_rate += S.stage_speed transmission += S.transmission - for(var/datum/symptom/S as() in symptoms) + for(var/datum/symptom/S as anything in symptoms) S.severityset(src) switch(S.severity) if(-INFINITY to 0) @@ -303,7 +312,10 @@ GLOBAL_LIST_INIT(advance_cures, list( if(!id) var/list/L = list() for(var/datum/symptom/S in symptoms) - L += S.id + if(S.neutered) + L += "[S.id]N" + else + L += S.id L = sortList(L) // Sort the list so it doesn't matter which order the symptoms are in. var/result = jointext(L, ":") id = result @@ -325,7 +337,7 @@ GLOBAL_LIST_INIT(advance_cures, list( else RemoveSymptom(pick(symptoms)) symptoms += S - return + Refresh() // Simply removes the symptom. /datum/disease/advance/proc/RemoveSymptom(datum/symptom/S) diff --git a/code/datums/diseases/advance/disease_preset.dm b/code/datums/diseases/advance/disease_preset.dm index 597d5a5dd5..0478603009 100644 --- a/code/datums/diseases/advance/disease_preset.dm +++ b/code/datums/diseases/advance/disease_preset.dm @@ -34,7 +34,6 @@ for(var/guaranteed_symptom in guaranteed_symptoms) symptoms += new guaranteed_symptom Finalize() - Refresh() /datum/disease/advance/random/macrophage setsymptom = /datum/symptom/macrophage diff --git a/code/datums/diseases/advance/symptoms/viral.dm b/code/datums/diseases/advance/symptoms/viral.dm index 43b00aec53..d8ad1fb2c3 100644 --- a/code/datums/diseases/advance/symptoms/viral.dm +++ b/code/datums/diseases/advance/symptoms/viral.dm @@ -77,7 +77,7 @@ BONUS if(!..()) return if(!used) - for(var/datum/symptom/S as() in A.symptoms) + for(var/datum/symptom/S as anything in A.symptoms) if(S == src) return S.power += power @@ -156,13 +156,13 @@ BONUS if(!..()) return if(A.stage >= 5) - for(var/datum/symptom/S as() in captives) + for(var/datum/symptom/S as anything in captives) S.stopped = FALSE captives -= S if(!LAZYLEN(captives)) stopped = TRUE else if(!used) - for(var/datum/symptom/S as() in A.symptoms) + for(var/datum/symptom/S as anything in A.symptoms) if(S.neutered) continue if(S == src) diff --git a/code/game/machinery/pandemic.dm b/code/game/machinery/pandemic.dm index 1a74c040c5..bb0d21993e 100644 --- a/code/game/machinery/pandemic.dm +++ b/code/game/machinery/pandemic.dm @@ -226,7 +226,7 @@ traits["name"] = disease.name traits["is_adv"] = TRUE traits["symptoms"] = list() - for(var/datum/symptom/symptom as() in adv_disease.symptoms) + for(var/datum/symptom/symptom as anything in adv_disease.symptoms) traits["symptoms"] += list(symptom.get_symptom_data()) traits["resistance"] = adv_disease.resistance traits["stealth"] = adv_disease.stealth @@ -286,7 +286,6 @@ /obj/machinery/computer/pandemic/proc/create_culture_bottle(index) var/id = get_virus_id_by_index(text2num(index)) var/datum/disease/advance/adv_disease = GLOB.archive_diseases[id] - var/old_name = adv_disease.name if(!istype(adv_disease)) to_chat(usr, span_warning("ERROR: Cannot replicate virus strain.")) @@ -294,7 +293,9 @@ if(!beaker.reagents.has_reagent(REAGENT_ID_BLOOD, 10)) to_chat(usr, span_warning("ERROR: Not enough blood in the sample.")) - return FALSE + return + + var/old_name = adv_disease.name use_power(active_power_usage) adv_disease = adv_disease.Copy()