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 += "