diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 4ea713bb2b7..36ace2d6b39 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -31,6 +31,7 @@ var/list/archive_diseases = list() // NEW VARS var/list/symptoms = list() // The symptoms of the disease. + var/id = "" /* @@ -38,7 +39,7 @@ var/list/archive_diseases = list() */ -/datum/disease/advance/New(var/process = 1, var/datum/disease/advance/D, var/copy = 0) +/datum/disease/advance/New(var/process = 1, var/datum/disease/advance/D) // Setup our dictionary if it hasn't already. if(!dictionary_symptoms.len) @@ -57,9 +58,8 @@ var/list/archive_diseases = list() else for(var/datum/symptom/S in D.symptoms) symptoms += new S.type - name = D.name - Refresh(!copy) + Refresh() ..(process, D) return @@ -149,13 +149,20 @@ var/list/archive_diseases = list() return generated -/datum/disease/advance/proc/Refresh(var/save = 1) +/datum/disease/advance/proc/Refresh(var/new_name = 0) //world << "[src.name] \ref[src] - REFRESH!" var/list/properties = GenerateProperties() AssignProperties(properties) - if(save) + + if(!archive_diseases[GetDiseaseID()]) + if(new_name) + AssignName() + archive_diseases[GetDiseaseID()] = src // So we don't infinite loop archive_diseases[GetDiseaseID()] = new /datum/disease/advance(0, src, 1) + var/datum/disease/advance/A = archive_diseases[GetDiseaseID()] + AssignName(A.name) + //Generate disease properties based on the effects. Returns an associated list. /datum/disease/advance/proc/GenerateProperties() @@ -184,7 +191,7 @@ var/list/archive_diseases = list() // The more symptoms we have, the less transmittable it is but some symptoms can make up for it. SetSpread(max(BLOOD, min(properties["transmittable"] - symptoms.len, AIRBORNE))) permeability_mod = max(round(0.5 * properties["transmittable"]), 1) - stage_prob = max(properties["stage_rate"], 1) + stage_prob = max(properties["stage_rate"], 2) SetSeverity(properties["severity"]) GenerateCure(properties) else @@ -213,7 +220,7 @@ var/list/archive_diseases = list() switch(level_sev) - if(0) + if(-INFINITY to 0) severity = "Non-Threat" if(1) severity = "Minor" @@ -223,7 +230,7 @@ var/list/archive_diseases = list() severity = "Harmful" if(4) severity = "Dangerous!" - if(5) + if(5 to INFINITY) severity = "BIOHAZARD THREAT!" else severity = "Unknown" @@ -300,11 +307,15 @@ var/list/archive_diseases = list() // Return a unique ID of the disease. /datum/disease/advance/proc/GetDiseaseID() + var/list/L = list() for(var/datum/symptom/S in symptoms) L += S.id L = sortList(L) // Sort the list so it doesn't matter which order the symptoms are in. - return dd_list2text(L, ":") + var/result = dd_list2text(L, ":") + id = result + return result + // Add a symptom, if it is over the limit (with a small chance to be able to go over) // we take a random symptom away and add the new one. @@ -313,7 +324,7 @@ var/list/archive_diseases = list() if(HasSymptom(S)) return - if(symptoms.len < 3 + rand(-1, 1)) + if(symptoms.len < 5 + rand(-1, 1)) symptoms += S else RemoveSymptom(pick(symptoms)) @@ -338,7 +349,7 @@ var/list/archive_diseases = list() var/list/diseases = list() - for(var/datum/disease/advance/A in D_list.Copy()) + for(var/datum/disease/advance/A in D_list) diseases += A.Copy() if(!diseases.len) @@ -361,7 +372,7 @@ var/list/archive_diseases = list() // Should be only 1 entry left, but if not let's only return a single entry //world << "END MIXING!!!!!" var/datum/disease/advance/to_return = pick(diseases) - to_return.Refresh() + to_return.Refresh(1) return to_return /proc/SetViruses(var/datum/reagent/R, var/list/data) diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm index 0db8c0c14e0..09fb8faa2a7 100644 --- a/code/game/machinery/atmoalter/meter.dm +++ b/code/game/machinery/atmoalter/meter.dm @@ -54,10 +54,8 @@ ) radio_connection.post_signal(src, signal) -/obj/machinery/meter/examine() - set src in view(3) - - var/t = "A gas flow meter. " +/obj/machinery/meter/proc/status() + var/t = "" if (src.target) var/datum/gas_mixture/environment = target.return_air() if(environment) @@ -66,7 +64,13 @@ t += "The sensor error light is blinking." else t += "The connect error light is blinking." + return t +/obj/machinery/meter/examine() + set src in view(3) + + var/t = "A gas flow meter. " + t += status() usr << t @@ -78,16 +82,10 @@ var/t = null if (get_dist(usr, src) <= 3 || istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/dead)) - if (src.target) - var/datum/gas_mixture/environment = target.return_air() - if(environment) - t = "Pressure: [round(environment.return_pressure(), 0.01)] kPa; Temperature: [round(environment.temperature,0.01)]°K ([round(environment.temperature-T0C,0.01)]°C)" - else - t = "\red Results: Sensor Error!" - else - t = "\red Results: Connection Error!" + t += status() else usr << "\blue You are too far away." + return 1 usr << t return 1 diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm index 9582616e7a5..4bc1c63fd16 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/life.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm @@ -446,12 +446,6 @@ return 1 - proc/handle_virus_updates() - if(bodytemperature > 406) - for(var/datum/disease/D in viruses) - D.cure() - return - proc/handle_stomach() spawn(0) for(var/mob/living/M in stomach_contents) diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index 8c63041d644..e8b51722fbb 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -364,11 +364,6 @@ proc/handle_random_events() return - proc/handle_virus_updates() - if(bodytemperature > 406) - for(var/datum/disease/D in viruses) - D.cure() - return proc/handle_stomach() spawn(0) diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm index cf5ee8ce95c..9919317fce1 100644 --- a/code/modules/mob/living/carbon/brain/life.dm +++ b/code/modules/mob/living/carbon/brain/life.dm @@ -270,11 +270,6 @@ return 1 - proc/handle_virus_updates() - if(bodytemperature > 409) - for(var/datum/disease/D in viruses) - D.cure() - return /*/mob/living/carbon/brain/emp_act(severity) if(!(container && istype(container, /obj/item/device/mmi))) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index e056e18e730..d87445919ae 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -67,9 +67,6 @@ var/obj/location_as_object = loc location_as_object.handle_internal_lifeform(src, 0) - //Disease Check - handle_virus_updates() - //Updates the number of stored chemicals for powers handle_changeling() @@ -1220,12 +1217,6 @@ if(!currentTurf.lighting_lumcount) playsound_local(src,pick(scarySounds),50, 1, -1) - proc/handle_virus_updates() - if(bodytemperature > 406) - for(var/datum/disease/D in viruses) - D.cure() - return - proc/handle_stomach() spawn(0) for(var/mob/living/M in stomach_contents) diff --git a/code/modules/mob/living/carbon/metroid/life.dm b/code/modules/mob/living/carbon/metroid/life.dm index 95c1f517093..fc60aa4f819 100644 --- a/code/modules/mob/living/carbon/metroid/life.dm +++ b/code/modules/mob/living/carbon/metroid/life.dm @@ -361,12 +361,6 @@ A.rabid = rabid del(src) -/mob/living/carbon/metroid/proc/handle_virus_updates() - if(bodytemperature > 406) - for(var/datum/disease/D in viruses) - D.cure() - return - /mob/living/carbon/metroid/proc/handle_targets() if(Tempstun) if(!Victim) // not while they're eating! diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index 3fc8609cf65..1ae9a904a97 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -29,8 +29,6 @@ var/obj/location_as_object = loc location_as_object.handle_internal_lifeform(src, 0) - //Disease Check - handle_virus_updates() //Updates the number of stored chemicals for powers handle_changeling() @@ -566,11 +564,6 @@ emote("scratch") return - proc/handle_virus_updates() - if(bodytemperature > 406) - for(var/datum/disease/D in viruses) - D.cure() - return proc/handle_changeling() if(mind && mind.changeling) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index e024ac1cc32..333747b5c37 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -341,7 +341,14 @@ var/list/department_radio_keys = list( for (var/M in heard_a) if(hascall(M,"show_message")) - M:show_message(rendered, 2) + var/deaf_message = "" + var/deaf_type = 1 + if(M != src) + deaf_message = "[name][alt_name] talks but you cannot hear them." + else + deaf_message = "You cannot hear yourself!" + deaf_type = 2 // Since you should be able to hear yourself without looking + M:show_message(rendered, 2, deaf_message, deaf_type) if (length(heard_b)) var/message_b diff --git a/code/modules/mob/mob_cleanup.dm b/code/modules/mob/mob_cleanup.dm index 6161ee97fca..6b032a9c077 100644 --- a/code/modules/mob/mob_cleanup.dm +++ b/code/modules/mob/mob_cleanup.dm @@ -22,6 +22,12 @@ Put (mob/proc)s here that are in dire need of a code cleanup. if(A.GetDiseaseID() in resistances) //world << "It resisted us!" return + var/count = 0 + for(var/datum/disease/advance/AD in viruses) + count++ + if(count >= 3) + return + else if(src.resistances.Find(virus.type)) //world << "Normal virus and resisted" diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 23ad3db0826..e1aee9117b9 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -565,6 +565,20 @@ src.temphtml = "" src.updateUsrDialog() return + else if(href_list["name_disease"]) + var/new_name = stripped_input(usr, "Name the Disease", "New Name", "", MAX_NAME_LEN) + if(stat & (NOPOWER|BROKEN)) return + if(usr.stat || usr.restrained()) return + if(!in_range(src, usr)) return + var/id = href_list["name_disease"] + if(archive_diseases[id]) + var/datum/disease/advance/A = archive_diseases[id] + A.AssignName(new_name) + for(var/datum/disease/advance/AD in active_diseases) + AD.Refresh() + src.updateUsrDialog() + + else usr << browse(null, "window=pandemic") src.updateUsrDialog() @@ -621,6 +635,8 @@ var/datum/disease/advance/A = D D = archive_diseases[A.GetDiseaseID()] disease_creation = A.GetDiseaseID() + if(D.name == "Unknown") + dat += "Name Disease
" if(!D) CRASH("We weren't able to get the advance disease from the archive.") diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index ee2c0ad62a0..9a411a0ee45 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -785,7 +785,7 @@ datum id = "m_tele" result = null required_reagents = list("sacid" = 1, "blood" = 1) - required_catalysts = list("plasma" = 1, "mutagen" = 1) + required_catalysts = list("plasma" = 1) result_amount = 1 required_container = /obj/item/metroid_core required_other = 4 diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm index 07aa9ed79e2..0fc0d239cf6 100644 --- a/code/modules/reagents/reagent_containers/glass/bottle.dm +++ b/code/modules/reagents/reagent_containers/glass/bottle.dm @@ -77,6 +77,16 @@ ..() reagents.add_reagent("anti_toxin", 30) +/obj/item/weapon/reagent_containers/glass/bottle/mutagen + name = "unstable mutagen bottle" + desc = "A small bottle of unstable mutagen. Randomly changes the DNA structure of whoever comes in contact." + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle20" + + New() + ..() + reagents.add_reagent("mutagen", 30) + /obj/item/weapon/reagent_containers/glass/bottle/ammonia name = "ammonia bottle" desc = "A small bottle."