From bd67128dacd8cccc3f55df7f6a20b438c6c4804d Mon Sep 17 00:00:00 2001 From: "giacomand@gmail.com" Date: Thu, 1 Nov 2012 23:59:27 +0000 Subject: [PATCH] -More work to advance diseases. The Pandemic should be more compatible with advance diseases. Currently it's pretty ugly but when I get rid of the broken diseases and convert the rest to advance diseases I will clean up the pandemic. Vaccines will now work properly with advance diseases. Soon I'll add a system so that you are able to name your own diseases, as I've added ways for me to do that with the archive_diseases list. Gave names to symptoms for the Pandemic. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4989 316c924e-a436-60f5-8080-3fe189b3f50e --- code/datums/disease.dm | 7 +-- code/datums/diseases/advance/advance.dm | 12 ++++- .../diseases/advance/symptoms/confusion.dm | 1 + .../datums/diseases/advance/symptoms/cough.dm | 1 + .../advance/symptoms/damage_converter.dm | 1 + .../datums/diseases/advance/symptoms/dizzy.dm | 1 + .../diseases/advance/symptoms/headache.dm | 1 + .../diseases/advance/symptoms/sneeze.dm | 3 +- .../diseases/advance/symptoms/symptoms.dm | 2 + .../datums/diseases/advance/symptoms/vomit.dm | 2 + code/game/gamemodes/events/space_ninja.dm | 1 - .../objects/items/weapons/surgery_tools.dm | 2 +- code/modules/admin/verbs/striketeam.dm | 1 - .../admin/verbs/striketeam_syndicate.dm | 1 - code/modules/reagents/Chemistry-Machinery.dm | 50 ++++++++++++++++--- code/modules/reagents/Chemistry-Reagents.dm | 9 +++- 16 files changed, 77 insertions(+), 18 deletions(-) diff --git a/code/datums/disease.dm b/code/datums/disease.dm index e8a74e99900..d698bc8f5a7 100644 --- a/code/datums/disease.dm +++ b/code/datums/disease.dm @@ -94,7 +94,7 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease - /datum/disease/ad return result -/datum/disease/proc/spread(var/atom/source=null, var/airborne_range = 2, var/force_spread) +/datum/disease/proc/spread(var/atom/source=null, var/airborne_range = 3, var/force_spread) //world << "Disease [src] proc spread was called from holder [source]" // If we're overriding how we spread, say so here @@ -118,10 +118,11 @@ var/list/diseases = typesof(/datum/disease) - /datum/disease - /datum/disease/ad var/check_range = airborne_range//defaults to airborne - range 2 if(how_spread != AIRBORNE && how_spread != SPECIAL) - check_range = 0 // everything else, like infect-on-contact things, only infect things on top of it + check_range = 1 // everything else, like infect-on-contact things, only infect things on top of it for(var/mob/living/carbon/M in oview(check_range, source)) - M.contract_disease(src) + if(AStar(affected_mob.loc, M.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance, check_range)) + M.contract_disease(src) return diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 4c40a49db7d..fda0c6eebd6 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -9,6 +9,8 @@ #define RANDOM_STARTING_LEVEL 2 +var/list/archive_diseases = list() + /* PROPERTIES @@ -36,6 +38,13 @@ */ /datum/disease/advance/New(var/process = 1, var/datum/disease/advance/D) + + // Setup our dictionary if it hasn't already. + if(!dictionary_symptoms.len) + for(var/symp in list_symptoms) + var/datum/symptom/S = new symp + dictionary_symptoms[S.id] = symp + if(!istype(D)) D = null // Generate symptoms if we weren't given any. @@ -70,7 +79,7 @@ if(affected_mob) var/id = "[GetDiseaseID()]" if(resistance && !(id in affected_mob.resistances)) - affected_mob.resistances[id] = /datum/disease/advance + affected_mob.resistances[id] = id affected_mob.viruses -= src //remove the datum from the list del(src) //delete the datum to stop it processing return @@ -119,6 +128,7 @@ //world << "[src.name] \ref[src] - REFRESH!" var/list/properties = GenerateProperties() AssignProperties(properties) + archive_diseases[GetDiseaseID()] = src //Generate disease properties based on the effects. Returns an associated list. /datum/disease/advance/proc/GenerateProperties() diff --git a/code/datums/diseases/advance/symptoms/confusion.dm b/code/datums/diseases/advance/symptoms/confusion.dm index accd461d2ca..87854e005d3 100644 --- a/code/datums/diseases/advance/symptoms/confusion.dm +++ b/code/datums/diseases/advance/symptoms/confusion.dm @@ -16,6 +16,7 @@ Bonus /datum/symptom/confusion + name = "Confusion" stealth = 1 resistance = -1 stage_speed = -3 diff --git a/code/datums/diseases/advance/symptoms/cough.dm b/code/datums/diseases/advance/symptoms/cough.dm index c17636a1607..5991d083240 100644 --- a/code/datums/diseases/advance/symptoms/cough.dm +++ b/code/datums/diseases/advance/symptoms/cough.dm @@ -16,6 +16,7 @@ BONUS /datum/symptom/cough + name = "Cough" stealth = -1 resistance = 0 stage_speed = 0 diff --git a/code/datums/diseases/advance/symptoms/damage_converter.dm b/code/datums/diseases/advance/symptoms/damage_converter.dm index 02cbb6a69e5..3ae71a98865 100644 --- a/code/datums/diseases/advance/symptoms/damage_converter.dm +++ b/code/datums/diseases/advance/symptoms/damage_converter.dm @@ -16,6 +16,7 @@ Bonus /datum/symptom/damage_converter // Not the egg + name = "Toxic Compensation" stealth = 1 resistance = -5 stage_speed = -5 diff --git a/code/datums/diseases/advance/symptoms/dizzy.dm b/code/datums/diseases/advance/symptoms/dizzy.dm index a0b0481fc06..67cb9072223 100644 --- a/code/datums/diseases/advance/symptoms/dizzy.dm +++ b/code/datums/diseases/advance/symptoms/dizzy.dm @@ -16,6 +16,7 @@ Bonus /datum/symptom/dizzy // Not the egg + name = "Dizziness" stealth = 1 resistance = -2 stage_speed = -3 diff --git a/code/datums/diseases/advance/symptoms/headache.dm b/code/datums/diseases/advance/symptoms/headache.dm index 98277ffc0db..86dd12ad5d1 100644 --- a/code/datums/diseases/advance/symptoms/headache.dm +++ b/code/datums/diseases/advance/symptoms/headache.dm @@ -17,6 +17,7 @@ BONUS /datum/symptom/cough + name = "Headache" stealth = -1 resistance = 4 stage_speed = 0 diff --git a/code/datums/diseases/advance/symptoms/sneeze.dm b/code/datums/diseases/advance/symptoms/sneeze.dm index e894fc3b178..5bd7413da4f 100644 --- a/code/datums/diseases/advance/symptoms/sneeze.dm +++ b/code/datums/diseases/advance/symptoms/sneeze.dm @@ -17,6 +17,7 @@ Bonus /datum/symptom/sneeze + name = "Sneezing" stealth = -2 resistance = -1 stage_speed = 0 @@ -31,5 +32,5 @@ Bonus M.emote("sniffs") else M.emote("sneeze") - A.spread(A.holder, 4, AIRBORNE) + A.spread(A.holder, 5, AIRBORNE) return \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/symptoms.dm b/code/datums/diseases/advance/symptoms/symptoms.dm index 0015591f6a9..e1ae6640da1 100644 --- a/code/datums/diseases/advance/symptoms/symptoms.dm +++ b/code/datums/diseases/advance/symptoms/symptoms.dm @@ -1,11 +1,13 @@ // Symptoms are the effects that engineered advanced diseases do. var/list/list_symptoms = typesof(/datum/symptom) - /datum/symptom +var/list/dictionary_symptoms = list() var/global/const/SYMPTOM_ACTIVATION_PROB = 1 /datum/symptom // Buffs/Debuffs the symptom has to the overall engineered disease. + var/name = "" var/stealth = 0 var/resistance = 0 var/stage_speed = 0 diff --git a/code/datums/diseases/advance/symptoms/vomit.dm b/code/datums/diseases/advance/symptoms/vomit.dm index b574a97a2b0..5acbfde1998 100644 --- a/code/datums/diseases/advance/symptoms/vomit.dm +++ b/code/datums/diseases/advance/symptoms/vomit.dm @@ -20,6 +20,7 @@ Bonus /datum/symptom/vomit + name = "Vomiting" stealth = -2 resistance = -1 stage_speed = 0 @@ -69,6 +70,7 @@ Bonus /datum/symptom/vomit/blood + name = "Blood Vomiting" stealth = -2 resistance = -1 stage_speed = -1 diff --git a/code/game/gamemodes/events/space_ninja.dm b/code/game/gamemodes/events/space_ninja.dm index 51cebd65e49..8ca52c6f7a1 100644 --- a/code/game/gamemodes/events/space_ninja.dm +++ b/code/game/gamemodes/events/space_ninja.dm @@ -500,7 +500,6 @@ As such, it's hard-coded for now. No reason for it not to be, really. equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_r_store) equip_to_slot_or_del(new /obj/item/weapon/plastique(src), slot_l_store) equip_to_slot_or_del(new /obj/item/weapon/tank/emergency_oxygen(src), slot_s_store) - resistances += "alien_embryo" return 1 //=======//HELPER PROCS//=======// diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index 30aa7a8330a..0ccfacd1f78 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -188,7 +188,7 @@ M:appendix_op_stage = 6.0 for(var/datum/disease/appendicitis in M.viruses) appendicitis.cure() - M.resistances += appendicitis + M.resistances += appendicitis.type return if (user.zone_sel.selecting == "eyes") diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm index 409ec43124c..13ba97ff36d 100644 --- a/code/modules/admin/verbs/striketeam.dm +++ b/code/modules/admin/verbs/striketeam.dm @@ -181,5 +181,4 @@ var/global/sent_strike_team = 0 W.registered_name = real_name equip_to_slot_or_del(W, slot_wear_id) - resistances += "alien_embryo" return 1 \ No newline at end of file diff --git a/code/modules/admin/verbs/striketeam_syndicate.dm b/code/modules/admin/verbs/striketeam_syndicate.dm index 8df19ba4d2c..5b82cb026de 100644 --- a/code/modules/admin/verbs/striketeam_syndicate.dm +++ b/code/modules/admin/verbs/striketeam_syndicate.dm @@ -178,5 +178,4 @@ var/global/sent_syndicate_strike_team = 0 W.registered_name = real_name equip_to_slot_or_del(W, slot_wear_id) - resistances += "alien_embryo" return 1 \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 011cdd68a24..be6a5fd9bbe 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -495,8 +495,16 @@ if(!src.wait) var/obj/item/weapon/reagent_containers/glass/bottle/B = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc) if(B) - var/vaccine_type = text2path(href_list["create_vaccine"])//the path is received as string - converting - var/datum/disease/D = new vaccine_type + var/path = href_list["create_vaccine"] + var/vaccine_type = text2path(path) + var/datum/disease/D = null + + if(!vaccine_type) + D = archive_diseases[path] + vaccine_type = path + else + D = new vaccine_type(0, null) + if(D) B.name = "[D.name] vaccine bottle" B.reagents.add_reagent("vaccine",15,vaccine_type) @@ -520,7 +528,12 @@ var/obj/item/weapon/reagent_containers/glass/bottle/B = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc) B.icon_state = "bottle3" var/type = text2path(href_list["create_virus_culture"])//the path is received as string - converting - var/datum/disease/D = new type + var/datum/disease/D = null + if(!type) + var/datum/disease/advance/A = archive_diseases[href_list["create_virus_culture"]] + D = new A.type(0, A) + else + D = new type(0, null) var/list/data = list("viruses"=list(D)) var/name = sanitize(input(usr,"Name:","Name the culture",D.name)) if(!name || name == " ") name = D.name @@ -596,20 +609,43 @@ for(var/datum/disease/D in Blood.data["viruses"]) if(!D.hidden[PANDEMIC]) - dat += "Disease Agent: [D?"[D.agent] - Create virus culture bottle":"none"]
" + + var/disease_creation = D.type + if(istype(D, /datum/disease/advance)) + + var/datum/disease/advance/A = D + D = archive_diseases[A.GetDiseaseID()] + disease_creation = A.GetDiseaseID() + + dat += "Disease Agent: [D?"[D.agent] - Create virus culture bottle":"none"]
" dat += "Common name: [(D.name||"none")]
" dat += "Description: [(D.desc||"none")]
" dat += "Possible cure: [(D.cure||"none")]

" + if(istype(D, /datum/disease/advance)) + var/datum/disease/advance/A = D + dat += "Symptoms:" + for(var/datum/symptom/S in A.symptoms) + dat += " [S.name] " + + dat += "Contains antibodies to: " if(Blood.data["resistances"]) var/list/res = Blood.data["resistances"] if(res.len) dat += "
" else dat += "nothing
" diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 15d1a4e05ca..790975c0ad3 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -194,8 +194,13 @@ datum src = null if(self.data&&method == INGEST) for(var/datum/disease/D in M.viruses) - if(D.type == self.data) - D.cure() + if(istype(D, /datum/disease/advance)) + var/datum/disease/advance/A = D + if(A.GetDiseaseID() == self.data) + D.cure() + else + if(D.type == self.data) + D.cure() M.resistances += self.data return