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 b016234ef8..956f721ce6 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 36ace2d6b3..90be555896 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 d97ca858f9..1fe08646e8 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 871ebc2cdc..008a969198 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 031f638fb1..d435ff2d6f 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 6f960887af..58f63b6128 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 db1cfc52fc..b0e2d2ad4c 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 65878310ad..b8b990f6ff 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 f26b3147f0..a520de941f 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 9e3c65628a..92be8ed4dd 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 9a49ef42de..0db2a70e48 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 a7d1b98489..1a52bd1e95 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)