diff --git a/code/datums/disease.dm b/code/datums/disease.dm index b016234ef8e..956f721ce6e 100644 --- a/code/datums/disease.dm +++ b/code/datums/disease.dm @@ -182,8 +182,8 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease return 1 return 0 -/datum/disease/proc/Copy() - return new type(0, src) +/datum/disease/proc/Copy(var/process = 0) + return new type(process, src) /* /datum/disease/Del() diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 36ace2d6b39..90be5558962 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -96,8 +96,8 @@ var/list/archive_diseases = list() return // Returns the advance disease with a different reference memory. -/datum/disease/advance/Copy() - return new /datum/disease/advance(0, src, 1) +/datum/disease/advance/Copy(var/process = 0) + return new /datum/disease/advance(process, src, 1) /* @@ -288,7 +288,7 @@ var/list/archive_diseases = list() var/s = safepick(GenerateSymptoms(level, 1)) if(s) AddSymptom(s) - Refresh() + Refresh(1) return // Randomly remove a symptom. @@ -297,7 +297,7 @@ var/list/archive_diseases = list() var/s = safepick(symptoms) if(s) RemoveSymptom(s) - Refresh() + Refresh(1) return // Name the disease. diff --git a/code/datums/diseases/advance/symptoms/vomit.dm b/code/datums/diseases/advance/symptoms/vomit.dm index d97ca858f9b..1fe08646e88 100644 --- a/code/datums/diseases/advance/symptoms/vomit.dm +++ b/code/datums/diseases/advance/symptoms/vomit.dm @@ -30,7 +30,7 @@ Bonus /datum/symptom/vomit/Activate(var/datum/disease/advance/A) ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) + if(prob(SYMPTOM_ACTIVATION_PROB / 2)) var/mob/living/M = A.affected_mob switch(A.stage) if(1, 2, 3, 4) @@ -42,7 +42,6 @@ Bonus /datum/symptom/vomit/proc/Vomit(var/mob/living/M) - M.Stun(5) M.visible_message("[M] vomits on the floor!") M.nutrition -= 20 @@ -82,7 +81,7 @@ Bonus /datum/symptom/vomit/blood/Vomit(var/mob/living/M) - M.Stun(5) + M.Stun(1) M.visible_message("[M] vomits on the floor!") // They lose blood and health. diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 871ebc2cdce..008a9691983 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -459,7 +459,7 @@ its easier to just keep the beam vertical. if(!B.blood_DNA[M.dna.unique_enzymes]) B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type for(var/datum/disease/D in M.viruses) - var/datum/disease/newDisease = new D.type + var/datum/disease/newDisease = D.Copy(1) B.viruses += newDisease newDisease.holder = B return 1 //we bloodied the floor @@ -468,7 +468,7 @@ its easier to just keep the beam vertical. var/obj/effect/decal/cleanable/blood/newblood = new /obj/effect/decal/cleanable/blood(T) newblood.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type for(var/datum/disease/D in M.viruses) - var/datum/disease/newDisease = new D.type + var/datum/disease/newDisease = D.Copy(1) newblood.viruses += newDisease newDisease.holder = newblood return 1 //we bloodied the floor @@ -493,7 +493,7 @@ its easier to just keep the beam vertical. this.icon_state = "vomittox_[pick(1,4)]" for(var/datum/disease/D in M.viruses) - var/datum/disease/newDisease = new D.type + var/datum/disease/newDisease = D.Copy(1) this.viruses += newDisease newDisease.holder = this @@ -505,7 +505,7 @@ its easier to just keep the beam vertical. var/obj/effect/decal/cleanable/blood/this = new /obj/effect/decal/cleanable/blood(source1) this.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type for(var/datum/disease/D in M.viruses) - var/datum/disease/newDisease = new D.type + var/datum/disease/newDisease = D.Copy(1) this.viruses += newDisease newDisease.holder = this @@ -515,7 +515,7 @@ its easier to just keep the beam vertical. var/obj/effect/decal/cleanable/xenoblood/this = new /obj/effect/decal/cleanable/xenoblood(source2) this.blood_DNA["UNKNOWN BLOOD"] = "X*" for(var/datum/disease/D in M.viruses) - var/datum/disease/newDisease = new D.type + var/datum/disease/newDisease = D.Copy(1) this.viruses += newDisease newDisease.holder = this diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 031f638fb10..d435ff2d6fd 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -206,7 +206,7 @@ // world << sound('sound/AI/outbreak7.ogg') var/virus_type if(!virus) - virus_type = pick(/datum/disease/dnaspread,/datum/disease/flu,/datum/disease/cold,/datum/disease/brainrot,/datum/disease/magnitis,/datum/disease/pierrot_throat) + virus_type = pick(/datum/disease/dnaspread,/datum/disease/advance/flu,/datum/disease/advance/cold,/datum/disease/brainrot,/datum/disease/magnitis,/datum/disease/pierrot_throat) else switch(virus) if("fake gbs") @@ -220,16 +220,16 @@ if("brain rot") virus_type = /datum/disease/brainrot if("cold") - virus_type = /datum/disease/cold + virus_type = /datum/disease/advance/cold if("retrovirus") virus_type = /datum/disease/dnaspread if("flu") - virus_type = /datum/disease/flu + virus_type = /datum/disease/advance/flu // if("t-virus") // virus_type = /datum/disease/t_virus if("pierrot's throat") virus_type = /datum/disease/pierrot_throat - for(var/mob/living/carbon/human/H in living_mob_list) + for(var/mob/living/carbon/human/H in shuffle(living_mob_list)) var/foundAlready = 0 // don't infect someone that already has the virus for(var/datum/disease/D in H.viruses) diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 6f960887af3..58f63b6128c 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -74,6 +74,8 @@ dat += "
Virus Database
" for(var/Dt in typesof(/datum/disease/)) var/datum/disease/Dis = new Dt(0) + if(istype(Dis, /datum/disease/advance)) + continue // TODO (tm): Add advance diseases to the virus database which no one uses. if(!Dis.desc) continue dat += "
[Dis.name]" diff --git a/code/game/machinery/kitchen/processor.dm b/code/game/machinery/kitchen/processor.dm index db1cfc52fc9..b0e2d2ad4c0 100644 --- a/code/game/machinery/kitchen/processor.dm +++ b/code/game/machinery/kitchen/processor.dm @@ -82,7 +82,7 @@ for(var/datum/disease/D in O.viruses) if(D.spread_type != SPECIAL) - B.data["viruses"] = new D.type(0, D) + B.data["viruses"] = D.Copy() B.data["blood_DNA"] = copytext(O.dna.unique_enzymes,1,0) if(O.resistances&&O.resistances.len) diff --git a/code/game/objects/effects/decals/Cleanable/aliens.dm b/code/game/objects/effects/decals/Cleanable/aliens.dm index 65878310ad7..b8b990f6ff0 100644 --- a/code/game/objects/effects/decals/Cleanable/aliens.dm +++ b/code/game/objects/effects/decals/Cleanable/aliens.dm @@ -26,7 +26,7 @@ if (i > 0) var/obj/effect/decal/cleanable/xenoblood/b = new /obj/effect/decal/cleanable/xenoblood/xsplatter(src.loc) for(var/datum/disease/D in src.viruses) - b.viruses += new D.type(0, D, 1) + b.viruses += D.Copy() if (step_to(src, get_step(src, direction), 0)) break diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index f26b3147f07..a520de941f9 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -69,6 +69,6 @@ if (i > 0) var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc) for(var/datum/disease/D in src.viruses) - b.viruses += new D.type(0, D, 1) + b.viruses += D.Copy() if (step_to(src, get_step(src, direction), 0)) break \ No newline at end of file diff --git a/code/game/objects/effects/gibs.dm b/code/game/objects/effects/gibs.dm index 9e3c65628ae..92be8ed4ddf 100644 --- a/code/game/objects/effects/gibs.dm +++ b/code/game/objects/effects/gibs.dm @@ -47,7 +47,7 @@ if(viruses.len > 0) for(var/datum/disease/D in viruses) if(prob(virusProb)) - var/datum/disease/viruus = new D.type(0, D, 1) + var/datum/disease/viruus = D.Copy() gib.viruses += viruus viruus.holder = gib viruus.spread_type = CONTACT_FEET diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 9a49ef42deb..0db2a70e48d 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2064,7 +2064,7 @@ if("virus") feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","V") - var/answer = alert("Do you want this to be a random disease or do you have something in mind?",,"Virus2","Random","Choose") + var/answer = alert("Do you want this to be a random disease or do you have something in mind?",,"Make Your Own","Random","Choose") if(answer=="Random") viral_outbreak() message_admins("[key_name_admin(usr)] has triggered a virus outbreak", 1) @@ -2074,17 +2074,43 @@ viral_outbreak(V) message_admins("[key_name_admin(usr)] has triggered a virus outbreak of [V]", 1) else - usr << "Nope" - /* - var/lesser = (alert("Do you want to infect the mob with a major or minor disease?",,"Major","Minor") == "Minor") - var/mob/living/carbon/victim = input("Select a mob to infect", "Virus2") as null|mob in world - if(!istype(victim)) return - if(lesser) - infect_mob_random_lesser(victim) - else - infect_mob_random_greater(victim) - message_admins("[key_name_admin(usr)] has infected [victim] with a [lesser ? "minor" : "major"] virus2.", 1) - */ + var/i = 5 + + var/datum/disease/advance/D = new(0, null) + D.symptoms = list() + + var/list/symptoms = list() + symptoms += "Done" + symptoms += list_symptoms.Copy() + do + var/symptom = input("Choose a symptom to add ([i] remaining)", "Choose a Symptom") in symptoms + if(istext(symptom)) + i = 0 + else if(ispath(symptom)) + var/datum/symptom/S = new symptom + if(!D.HasSymptom(S)) + D.symptoms += S + i -= 1 + while(i > 0) + + if(D.symptoms.len > 0) + + var/new_name = input("Name your new disease.", "New Name") + D.AssignName(new_name) + D.Refresh() + + for(var/datum/disease/advance/AD in active_diseases) + AD.Refresh() + + for(var/mob/living/carbon/human/H in shuffle(living_mob_list)) + if(!H.has_disease(D)) + H.contract_disease(D, 1) + break + + var/list/name_symptoms = list() + for(var/datum/symptom/S in D.symptoms) + name_symptoms += S.name + message_admins("[key_name_admin(usr)] has triggered a custom virus outbreak of [D.name]! It has these symptoms: [english_list(name_symptoms)]", 1) if("retardify") feedback_inc("admin_secrets_fun_used",1) feedback_add_details("admin_secrets_fun_used","RET") diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index a7d1b984894..1a52bd1e952 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -648,12 +648,14 @@ if(istype(D, /datum/disease/advance)) var/datum/disease/advance/A = D - dat += "Symptoms:" + dat += "Symptoms: " + var/english_symptoms = list() for(var/datum/symptom/S in A.symptoms) - dat += " [S.name] " + english_symptoms += S.name + dat += english_list(english_symptoms) - dat += "Contains antibodies to: " + dat += "
Contains antibodies to: " if(Blood.data["resistances"]) var/list/res = Blood.data["resistances"] if(res.len)