From e2acdcfe47100a55259fcdb6af2167a59bceaab6 Mon Sep 17 00:00:00 2001 From: "giacomand@gmail.com" Date: Sat, 17 Nov 2012 19:53:00 +0000 Subject: [PATCH] -Admins can now make their own advance diseases via the secret button! Instead of the useless "virus2" button, there will now be an option called "Create Your Own"! Use this button and pick from 5 symptoms to make your disease from. -Fixed a bug where blood/vomit decals would be creating new viruses. -Medical computer won't recognize advance diseases... for now. -Used english_list when displaying symptoms. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5100 316c924e-a436-60f5-8080-3fe189b3f50e --- code/datums/disease.dm | 4 +- code/datums/diseases/advance/advance.dm | 8 +-- .../datums/diseases/advance/symptoms/vomit.dm | 5 +- code/game/atoms.dm | 10 ++-- code/game/gamemodes/events.dm | 8 +-- code/game/machinery/computer/medical.dm | 2 + code/game/machinery/kitchen/processor.dm | 2 +- .../effects/decals/Cleanable/aliens.dm | 2 +- .../effects/decals/Cleanable/humans.dm | 2 +- code/game/objects/effects/gibs.dm | 2 +- code/modules/admin/topic.dm | 50 ++++++++++++++----- code/modules/reagents/Chemistry-Machinery.dm | 8 +-- 12 files changed, 66 insertions(+), 37 deletions(-) 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)