diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 5dd92752716..9e51ee6aff1 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -167,6 +167,7 @@ var/list/admin_verbs_debug = list(
/client/proc/make_invulnerable,
/client/proc/cmd_admin_dump_delprofile,
/client/proc/mob_list,
+ /client/proc/cure_disease,
#ifdef PROFILE_MACHINES
/client/proc/cmd_admin_dump_macprofile,
#endif
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index dc54666e49e..32238af71f6 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -1310,4 +1310,42 @@ client/proc/mob_list()
usr << msg
if(foundnull)
usr << "Found [foundnull] null entries in the mob list, running null clearer."
- listclearnulls(mob_list)
\ No newline at end of file
+ listclearnulls(mob_list)
+
+client/proc/cure_disease()
+ set name = "Cure Disease"
+ set category = "Debug"
+ if(!holder) return
+
+ var/list/disease_by_name = list("-Cure All-" = null) + disease2_list + active_diseases
+
+ var/disease_name = input(src, "Disease to cure?") as null|anything in sortTim(disease_by_name, /proc/cmp_text_asc)
+ if(!disease_name) return
+ var/count = 0
+ if(disease_name == "-Cure All-")
+ for(var/mob/living/carbon/C in mob_list)
+ for(var/ID in C.virus2)
+ if(ID && C.virus2[ID])
+ var/datum/disease2/disease/DD = C.virus2[ID]
+ DD.cure(C)
+ count++
+ for(var/datum/disease/D in C.viruses)
+ if(D)
+ D.cure(1)
+ count++
+ active_diseases -= D
+ else
+ for(var/mob/living/carbon/C in mob_list)
+ for(var/ID in C.virus2)
+ if(ID == disease_name)
+ var/datum/disease2/disease/DD = C.virus2[ID]
+ DD.cure(C)
+ count++
+ for(var/datum/disease/D in C.viruses)
+ if(D && D.name == disease_name)
+ D.cure(1)
+ count++
+ active_diseases -= D
+ src << "Cured [count] mob\s of [disease_name == "-Cure All-" ? "all diseases." : "[disease_name]"]"
+ log_admin("[src]/([ckey(src.key)] Cured all mobs of [disease_name == "-Cure All-" ? "all diseases." : "[disease_name]"]")
+ message_admins("[src]/([ckey(src.key)] Cured all mobs of [disease_name == "-Cure All-" ? "all diseases." : "[disease_name]"]")
\ No newline at end of file
diff --git a/code/modules/virus2/disease2.dm b/code/modules/virus2/disease2.dm
index d2b55892d8b..1a9da4106b4 100644
--- a/code/modules/virus2/disease2.dm
+++ b/code/modules/virus2/disease2.dm
@@ -1,3 +1,4 @@
+var/global/list/disease2_list = list()
/datum/disease2/disease
var/infectionchance = 70
var/speed = 1
@@ -17,6 +18,7 @@
/datum/disease2/disease/New(var/notes="No notes.")
uniqueID = rand(0,10000)
log += "
[timestamp()] CREATED - [notes]
"
+ disease2_list["[uniqueID]"] = src
..()
/datum/disease2/disease/proc/makerandom(var/greater=0)
@@ -29,6 +31,7 @@
holder.getrandomeffect()
effects += holder
uniqueID = rand(0,10000)
+ disease2_list["[uniqueID]"] = src
infectionchance = rand(60,90)
antigen |= text2num(pick(ANTIGENS))
antigen |= text2num(pick(ANTIGENS))
@@ -55,7 +58,9 @@
D.log += "[f.name] [holder.chance]%
"
D.effects += holder // add the holder to the disease
+ disease2_list -= D.uniqueID
D.uniqueID = rand(0, 10000)
+ disease2_list["[D.uniqueID]"] = D
D.infectionchance = input(C, "Choose an infection rate percent", "Infection Rate") as num
if(D.infectionchance > 100 || D.infectionchance < 0)
return 0
diff --git a/code/unused/disease2/base.dm b/code/unused/disease2/base.dm
index eab69ba69cb..a69833024c5 100644
--- a/code/unused/disease2/base.dm
+++ b/code/unused/disease2/base.dm
@@ -39,6 +39,7 @@
M.virus2 = disease.getcopy()
M.virus2.minormutate()
+ M.virus2.uniqueID = disease.uniqueID
for(var/datum/disease2/resistance/res in M.resistances)
if(res.resistsdisease(M.virus2))