From 194a6b7aa9f867547e95d7cee5c388f52fb7a228 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 13 Jul 2017 17:46:25 -0500 Subject: [PATCH] [Seriously, it's ready]Virology Rework: The Thresholdening --- code/datums/diseases/advance/advance.dm | 36 +++-- code/datums/diseases/advance/presets.dm | 18 +-- .../datums/diseases/advance/symptoms/beard.dm | 45 +++--- .../diseases/advance/symptoms/choking.dm | 96 ++++++++----- .../diseases/advance/symptoms/confusion.dm | 32 +++-- .../datums/diseases/advance/symptoms/cough.dm | 44 ++++-- .../diseases/advance/symptoms/deafness.dm | 30 +++- .../datums/diseases/advance/symptoms/dizzy.dm | 30 ++-- .../datums/diseases/advance/symptoms/fever.dm | 34 +++-- code/datums/diseases/advance/symptoms/fire.dm | 125 ++++++++++------ .../diseases/advance/symptoms/flesh_eating.dm | 76 +++++++--- .../diseases/advance/symptoms/genetics.dm | 45 +++--- .../diseases/advance/symptoms/hallucigen.dm | 45 ++++-- .../diseases/advance/symptoms/headache.dm | 31 +++- code/datums/diseases/advance/symptoms/heal.dm | 85 +++++++---- .../diseases/advance/symptoms/itching.dm | 23 ++- .../diseases/advance/symptoms/narcolepsy.dm | 89 ++++++++++++ .../diseases/advance/symptoms/oxygen.dm | 21 ++- .../diseases/advance/symptoms/sensory.dm.rej | 134 ++++++++++++++++++ .../diseases/advance/symptoms/shedding.dm | 43 +++--- .../diseases/advance/symptoms/shivering.dm | 34 +++-- code/datums/diseases/advance/symptoms/skin.dm | 60 ++++---- .../diseases/advance/symptoms/sneeze.dm | 28 ++-- .../diseases/advance/symptoms/symptoms.dm | 29 +++- .../datums/diseases/advance/symptoms/viral.dm | 54 +++---- .../diseases/advance/symptoms/vision.dm.rej | 19 +++ .../diseases/advance/symptoms/voice_change.dm | 66 ++++++--- .../diseases/advance/symptoms/vomit.dm.rej | 30 ++++ .../diseases/advance/symptoms/weight.dm | 75 ++++++---- .../datums/diseases/advance/symptoms/youth.dm | 57 ++++---- .../kitchen_machinery/smartfridge.dm | 3 +- .../reagents/chemistry/recipes/others.dm | 17 ++- .../reagents/reagent_containers/bottle.dm | 6 + tgstation.dme | 2 +- 34 files changed, 1124 insertions(+), 438 deletions(-) create mode 100644 code/datums/diseases/advance/symptoms/narcolepsy.dm create mode 100644 code/datums/diseases/advance/symptoms/sensory.dm.rej create mode 100644 code/datums/diseases/advance/symptoms/vision.dm.rej create mode 100644 code/datums/diseases/advance/symptoms/vomit.dm.rej diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 3aa4dab99b..2e22fd59e0 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -7,7 +7,7 @@ */ -#define SYMPTOM_LIMIT 8 +#define SYMPTOM_LIMIT 6 @@ -18,7 +18,6 @@ */ /datum/disease/advance - name = "Unknown" // We will always let our Virologist name our disease. desc = "An engineered disease which can contain a multitude of symptoms." form = "Advance Disease" // Will let med-scanners know that this disease was engineered. @@ -58,7 +57,10 @@ symptoms = GenerateSymptoms(0, 2) else for(var/datum/symptom/S in D.symptoms) - symptoms += new S.type + var/datum/symptom/new_symp = new S.type + new_symp.name = S.name + new_symp.neutered = S.neutered + symptoms += new_symp Refresh() ..(process, D) @@ -119,7 +121,7 @@ if(!(src.IsSame(D))) var/list/possible_symptoms = shuffle(D.symptoms) for(var/datum/symptom/S in possible_symptoms) - AddSymptom(new S.type) + AddSymptom(S.Copy()) /datum/disease/advance/proc/HasSymptom(datum/symptom/S) for(var/datum/symptom/symp in symptoms) @@ -155,7 +157,7 @@ return generated -/datum/disease/advance/proc/Refresh(new_name = 0) +/datum/disease/advance/proc/Refresh(new_name = FALSE) //to_chat(world, "[src.name] \ref[src] - REFRESH!") GenerateProperties() AssignProperties() @@ -192,10 +194,8 @@ if(properties && properties.len) switch(properties["stealth"]) - if(2,3) + if(2 to INFINITY) visibility_flags = HIDDEN_SCANNER - if(4 to INFINITY) - visibility_flags = HIDDEN_SCANNER|HIDDEN_PANDEMIC // The more symptoms we have, the less transmittable it is but some symptoms can make up for it. SetSpread(Clamp(2 ** (properties["transmittable"] - symptoms.len), BLOOD, AIRBORNE)) @@ -263,7 +263,7 @@ var/s = safepick(GenerateSymptoms(min_level, max_level, 1)) if(s) AddSymptom(s) - Refresh(1) + Refresh(TRUE) return // Randomly remove a symptom. @@ -272,7 +272,16 @@ var/s = safepick(symptoms) if(s) RemoveSymptom(s) - Refresh(1) + Refresh(TRUE) + return + +// Randomly neuter a symptom. +/datum/disease/advance/proc/Neuter() + if(symptoms.len) + var/s = safepick(symptoms) + if(s) + NeuterSymptom(s) + Refresh(TRUE) return // Name the disease. @@ -311,6 +320,13 @@ symptoms -= S return +// Neuter a symptom, so it will only affect stats +/datum/disease/advance/proc/NeuterSymptom(datum/symptom/S) + if(!S.neutered) + S.neutered = TRUE + S.name += " (neutered)" + S.id += "N" //new disease is unique + /* Static Procs diff --git a/code/datums/diseases/advance/presets.dm b/code/datums/diseases/advance/presets.dm index 1517201612..07809d3555 100644 --- a/code/datums/diseases/advance/presets.dm +++ b/code/datums/diseases/advance/presets.dm @@ -1,6 +1,6 @@ // Cold -/datum/disease/advance/cold/New(var/process = 1, var/datum/disease/advance/D, var/copy = 0) +/datum/disease/advance/cold/New(var/process = TRUE, var/datum/disease/advance/D, var/copy = FALSE) if(!D) name = "Cold" symptoms = list(new/datum/symptom/sneeze) @@ -9,7 +9,7 @@ // Flu -/datum/disease/advance/flu/New(var/process = 1, var/datum/disease/advance/D, var/copy = 0) +/datum/disease/advance/flu/New(var/process = TRUE, var/datum/disease/advance/D, var/copy = FALSE) if(!D) name = "Flu" symptoms = list(new/datum/symptom/cough) @@ -18,7 +18,7 @@ // Voice Changing -/datum/disease/advance/voice_change/New(var/process = 1, var/datum/disease/advance/D, var/copy = 0) +/datum/disease/advance/voice_change/New(var/process = TRUE, var/datum/disease/advance/D, var/copy = FALSE) if(!D) name = "Epiglottis Mutation" symptoms = list(new/datum/symptom/voice_change) @@ -27,7 +27,7 @@ // Toxin Filter -/datum/disease/advance/heal/New(var/process = 1, var/datum/disease/advance/D, var/copy = 0) +/datum/disease/advance/heal/New(var/process = TRUE, var/datum/disease/advance/D, var/copy = FALSE) if(!D) name = "Liver Enhancer" symptoms = list(new/datum/symptom/heal) @@ -36,7 +36,7 @@ // Hullucigen -/datum/disease/advance/hullucigen/New(var/process = 1, var/datum/disease/advance/D, var/copy = 0) +/datum/disease/advance/hullucigen/New(var/process = TRUE, var/datum/disease/advance/D, var/copy = FALSE) if(!D) name = "Reality Impairment" symptoms = list(new/datum/symptom/hallucigen) @@ -44,7 +44,7 @@ // Sensory Restoration -/datum/disease/advance/sensory_restoration/New(var/process = 1, var/datum/disease/advance/D, var/copy = 0) +/datum/disease/advance/sensory_restoration/New(var/process = TRUE, var/datum/disease/advance/D, var/copy = FALSE) if(!D) name = "Reality Enhancer" symptoms = list(new/datum/symptom/sensory_restoration) @@ -52,8 +52,8 @@ // Sensory Destruction -/datum/disease/advance/sensory_destruction/New(var/process = 1, var/datum/disease/advance/D, var/copy = 0) +/datum/disease/advance/narcolepsy/New(var/process = TRUE, var/datum/disease/advance/D, var/copy = FALSE) if(!D) - name = "Reality Destruction" - symptoms = list(new/datum/symptom/sensory_destruction) + name = "Experimental Insomnia Cure" + symptoms = list(new/datum/symptom/narcolepsy) ..(process, D, copy) \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/beard.dm b/code/datums/diseases/advance/symptoms/beard.dm index 8698787dd5..2f8635301e 100644 --- a/code/datums/diseases/advance/symptoms/beard.dm +++ b/code/datums/diseases/advance/symptoms/beard.dm @@ -23,27 +23,28 @@ BONUS transmittable = -1 level = 4 severity = 1 + symptom_delay_min = 18 + symptom_delay_max = 36 /datum/symptom/beard/Activate(datum/disease/advance/A) - ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob - if(ishuman(M)) - var/mob/living/carbon/human/H = M - switch(A.stage) - if(1, 2) - to_chat(H, "Your chin itches.") - if(H.facial_hair_style == "Shaved") - H.facial_hair_style = "Jensen Beard" - H.update_hair() - if(3, 4) - to_chat(H, "You feel tough.") - if(!(H.facial_hair_style == "Dwarf Beard") && !(H.facial_hair_style == "Very Long Beard") && !(H.facial_hair_style == "Full Beard")) - H.facial_hair_style = "Full Beard" - H.update_hair() - else - to_chat(H, "You feel manly!") - if(!(H.facial_hair_style == "Dwarf Beard") && !(H.facial_hair_style == "Very Long Beard")) - H.facial_hair_style = pick("Dwarf Beard", "Very Long Beard") - H.update_hair() - return \ No newline at end of file + if(!..()) + return + var/mob/living/M = A.affected_mob + if(ishuman(M)) + var/mob/living/carbon/human/H = M + switch(A.stage) + if(1, 2) + to_chat(H, "Your chin itches.") + if(H.facial_hair_style == "Shaved") + H.facial_hair_style = "Jensen Beard" + H.update_hair() + if(3, 4) + to_chat(H, "You feel tough.") + if(!(H.facial_hair_style == "Dwarf Beard") && !(H.facial_hair_style == "Very Long Beard") && !(H.facial_hair_style == "Full Beard")) + H.facial_hair_style = "Full Beard" + H.update_hair() + else + to_chat(H, "You feel manly!") + if(!(H.facial_hair_style == "Dwarf Beard") && !(H.facial_hair_style == "Very Long Beard")) + H.facial_hair_style = pick("Dwarf Beard", "Very Long Beard") + H.update_hair() \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/choking.dm b/code/datums/diseases/advance/symptoms/choking.dm index 492657f97c..a46ef690ef 100644 --- a/code/datums/diseases/advance/symptoms/choking.dm +++ b/code/datums/diseases/advance/symptoms/choking.dm @@ -24,32 +24,44 @@ Bonus transmittable = -4 level = 3 severity = 3 + base_message_chance = 15 + symptom_delay_min = 10 + symptom_delay_max = 30 -/datum/symptom/choking/Activate(datum/disease/advance/A) +/datum/symptom/choking/Start(datum/disease/advance/A) ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob - switch(A.stage) - if(1, 2) + if(A.properties["stage_rate"] >= 8) + symptom_delay_min = 7 + symptom_delay_max = 24 + if(A.properties["stealth"] >= 4) + suppress_warning = TRUE + +/datum/symptom/choking/Activate(datum/disease/advance/A) + if(!..()) + return + var/mob/living/M = A.affected_mob + switch(A.stage) + if(1, 2) + if(prob(base_message_chance) && !suppress_warning) to_chat(M, "[pick("You're having difficulty breathing.", "Your breathing becomes heavy.")]") - if(3, 4) - to_chat(M, "[pick("Your windpipe feels like a straw.", "Your breathing becomes tremendously difficult.")]") - Choke_stage_3_4(M, A) - M.emote("gasp") + if(3, 4) + if(!suppress_warning) + to_chat(M, "[pick("Your windpipe feels like a straw.", "Your breathing becomes tremendously difficult.")]") else - to_chat(M, "[pick("You're choking!", "You can't breathe!")]") - Choke(M, A) - M.emote("gasp") - return + to_chat(M, "You feel very [pick("dizzy","woozy","faint")].") //fake bloodloss messages + Choke_stage_3_4(M, A) + M.emote("gasp") + else + to_chat(M, "[pick("You're choking!", "You can't breathe!")]") + Choke(M, A) + M.emote("gasp") /datum/symptom/choking/proc/Choke_stage_3_4(mob/living/M, datum/disease/advance/A) - var/get_damage = sqrt(21+A.totalStageSpeed()*0.5)+sqrt(max(16+A.totalStealth(),0)) - M.adjustOxyLoss(get_damage) + M.adjustOxyLoss(rand(6,13)) return 1 /datum/symptom/choking/proc/Choke(mob/living/M, datum/disease/advance/A) - var/get_damage = sqrt(21+A.totalStageSpeed()*0.5)+sqrt(max(16+A.totalStealth()*5,0)) - M.adjustOxyLoss(get_damage) + M.adjustOxyLoss(rand(10,18)) return 1 /* @@ -78,38 +90,50 @@ Bonus transmittable = -2 level = 7 severity = 3 + base_message_chance = 15 + symptom_delay_min = 14 + symptom_delay_max = 30 + var/paralysis = FALSE -/datum/symptom/asphyxiation/Activate(datum/disease/advance/A) +/datum/symptom/asphyxiation/Start(datum/disease/advance/A) ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob - switch(A.stage) - if(3, 4) - to_chat(M, "[pick("Your windpipe feels thin.", "Your lungs feel small.")]") - Asphyxiate_stage_3_4(M, A) - M.emote("gasp") - else - to_chat(M, "[pick("Your lungs hurt!", "It hurts to breathe!")]") - Asphyxiate(M, A) - M.emote("gasp") - if(M.getOxyLoss() >= 120) - M.visible_message("[M] stops breathing, as if their lungs have totally collapsed!") - Asphyxiate_death(M, A) + if(A.properties["stage_rate"] >= 8) + paralysis = TRUE + if(A.properties["transmission"] >= 8) + power = 2 + +/datum/symptom/asphyxiation/Activate(datum/disease/advance/A) + if(!..()) + return + var/mob/living/M = A.affected_mob + switch(A.stage) + if(3, 4) + to_chat(M, "[pick("Your windpipe feels thin.", "Your lungs feel small.")]") + Asphyxiate_stage_3_4(M, A) + M.emote("gasp") + else + to_chat(M, "[pick("Your lungs hurt!", "It hurts to breathe!")]") + Asphyxiate(M, A) + M.emote("gasp") + if(M.getOxyLoss() >= 120) + M.visible_message("[M] stops breathing, as if their lungs have totally collapsed!") + Asphyxiate_death(M, A) return /datum/symptom/asphyxiation/proc/Asphyxiate_stage_3_4(mob/living/M, datum/disease/advance/A) - var/get_damage = sqrt(abs(21+A.totalStageSpeed()*0.7))+sqrt(abs(16+A.totalStealth())) + var/get_damage = rand(10,15) * power M.adjustOxyLoss(get_damage) return 1 /datum/symptom/asphyxiation/proc/Asphyxiate(mob/living/M, datum/disease/advance/A) - var/get_damage = sqrt(abs(21+A.totalStageSpeed()))+sqrt(abs(16+A.totalStealth()*5)) + var/get_damage = rand(15,21) * power M.adjustOxyLoss(get_damage) - M.reagents.add_reagent_list(list("pancuronium" = 2, "sodium_thiopental" = 2)) + if(paralysis) + M.reagents.add_reagent_list(list("pancuronium" = 3, "sodium_thiopental" = 3)) return 1 /datum/symptom/asphyxiation/proc/Asphyxiate_death(mob/living/M, datum/disease/advance/A) - var/get_damage = sqrt(abs(21+A.totalStageSpeed()*1.5))+sqrt(abs(16+A.totalStealth()*7)) + var/get_damage = rand(25,35) * power M.adjustOxyLoss(get_damage) M.adjustBrainLoss(get_damage/2) return 1 diff --git a/code/datums/diseases/advance/symptoms/confusion.dm b/code/datums/diseases/advance/symptoms/confusion.dm index 8f388c45ed..45bf5d6182 100644 --- a/code/datums/diseases/advance/symptoms/confusion.dm +++ b/code/datums/diseases/advance/symptoms/confusion.dm @@ -24,17 +24,33 @@ Bonus transmittable = 0 level = 4 severity = 2 + base_message_chance = 25 + symptom_delay_min = 10 + symptom_delay_max = 30 + var/brain_damage = FALSE +/datum/symptom/confusion/Start(datum/disease/advance/A) + ..() + if(A.properties["resistance"] >= 6) + brain_damage = TRUE + if(A.properties["transmittable"] >= 6) + power = 1.5 + if(A.properties["stealth"] >= 4) + suppress_warning = TRUE /datum/symptom/confusion/Activate(datum/disease/advance/A) - ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/carbon/M = A.affected_mob - switch(A.stage) - if(1, 2, 3, 4) + if(!..()) + return + var/mob/living/carbon/M = A.affected_mob + switch(A.stage) + if(1, 2, 3, 4) + if(prob(base_message_chance) && !suppress_warning) to_chat(M, "[pick("Your head hurts.", "Your mind blanks for a moment.")]") - else - to_chat(M, "You can't think straight!") - M.confused = min(100, M.confused + 8) + else + to_chat(M, "You can't think straight!") + M.confused = min(100 * power, M.confused + 8) + if(brain_damage && M.getBrainLoss()<=80) + M.adjustBrainLoss(5 * power) + M.updatehealth() return diff --git a/code/datums/diseases/advance/symptoms/cough.dm b/code/datums/diseases/advance/symptoms/cough.dm index 13fdb5ea1b..e264b331e7 100644 --- a/code/datums/diseases/advance/symptoms/cough.dm +++ b/code/datums/diseases/advance/symptoms/cough.dm @@ -24,17 +24,45 @@ BONUS transmittable = 2 level = 1 severity = 1 + base_message_chance = 15 + symptom_delay_min = 2 + symptom_delay_max = 15 + var/infective = FALSE -/datum/symptom/cough/Activate(datum/disease/advance/A) +/datum/symptom/cough/Start(datum/disease/advance/A) ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob - switch(A.stage) - if(1, 2, 3) + if(A.properties["stealth"] >= 4) + suppress_warning = TRUE + if(A.spread_flags &= AIRBORNE) //infect bystanders + infective = TRUE + if(A.properties["resistance"] >= 3) //strong enough to drop items + power = 1.5 + if(A.properties["resistance"] >= 10) //strong enough to stun (rarely) + power = 2 + if(A.properties["stage_rate"] >= 6) //cough more often + symptom_delay_max = 10 + +/datum/symptom/cough/Activate(datum/disease/advance/A) + if(!..()) + return + var/mob/living/M = A.affected_mob + switch(A.stage) + if(1, 2, 3) + if(prob(base_message_chance) && !suppress_warning) to_chat(M, "[pick("You swallow excess mucus.", "You lightly cough.")]") - else - M.emote("cough") + else + M.emote("cough") + if(power >= 1.5) var/obj/item/I = M.get_active_held_item() if(I && I.w_class == WEIGHT_CLASS_TINY) M.drop_item() - return + if(power >= 2 && prob(10)) + to_chat(M, "[pick("You have a coughing fit!", "You can't stop coughing!")]") + M.Stun(20) + M.emote("cough") + addtimer(CALLBACK(M, /mob/.proc/emote, "cough"), 6) + addtimer(CALLBACK(M, /mob/.proc/emote, "cough"), 12) + addtimer(CALLBACK(M, /mob/.proc/emote, "cough"), 18) + if(infective) + A.spread(A.holder, 1) + diff --git a/code/datums/diseases/advance/symptoms/deafness.dm b/code/datums/diseases/advance/symptoms/deafness.dm index 92269ce8db..b6163a72a1 100644 --- a/code/datums/diseases/advance/symptoms/deafness.dm +++ b/code/datums/diseases/advance/symptoms/deafness.dm @@ -24,14 +24,32 @@ Bonus transmittable = -3 level = 4 severity = 3 + base_message_chance = 100 + symptom_delay_min = 25 + symptom_delay_max = 80 + +/datum/symptom/deafness/Start(datum/disease/advance/A) + ..() + if(A.properties["stealth"] >= 4) + suppress_warning = TRUE + if(A.properties["resistance"] >= 9) //permanent deafness + power = 2 /datum/symptom/deafness/Activate(datum/disease/advance/A) - ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob - switch(A.stage) - if(3, 4) + if(!..()) + return + var/mob/living/carbon/M = A.affected_mob + switch(A.stage) + if(3, 4) + if(prob(base_message_chance) && !suppress_warning) to_chat(M, "[pick("You hear a ringing in your ear.", "Your ears pop.")]") - if(5) + if(5) + if(power > 2) + var/obj/item/organ/ears/ears = M.getorganslot("ears") + if(istype(ears) && ears.ear_damage < UNHEALING_EAR_DAMAGE) + to_chat(M, "Your ears pop painfully and start bleeding!") + ears.ear_damage = max(ears.ear_damage, UNHEALING_EAR_DAMAGE) + M.emote("scream") + else to_chat(M, "Your ears pop and begin ringing loudly!") M.minimumDeafTicks(20) diff --git a/code/datums/diseases/advance/symptoms/dizzy.dm b/code/datums/diseases/advance/symptoms/dizzy.dm index c594298b11..60e9989d4a 100644 --- a/code/datums/diseases/advance/symptoms/dizzy.dm +++ b/code/datums/diseases/advance/symptoms/dizzy.dm @@ -24,15 +24,27 @@ Bonus transmittable = -1 level = 4 severity = 2 + base_message_chance = 50 + symptom_delay_min = 15 + symptom_delay_max = 40 -/datum/symptom/dizzy/Activate(datum/disease/advance/A) +/datum/symptom/dizzy/Start(datum/disease/advance/A) ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob - switch(A.stage) - if(1, 2, 3, 4) + if(A.properties["stealth"] >= 4) + suppress_warning = TRUE + if(A.properties["transmittable"] >= 6) //druggy + power = 2 + +/datum/symptom/dizzy/Activate(datum/disease/advance/A) + if(!..()) + return + var/mob/living/M = A.affected_mob + switch(A.stage) + if(1, 2, 3, 4) + if(prob(base_message_chance) && !suppress_warning) to_chat(M, "[pick("You feel dizzy.", "Your head spins.")]") - else - to_chat(M, "A wave of dizziness washes over you!") - M.Dizzy(5) - return \ No newline at end of file + else + to_chat(M, "A wave of dizziness washes over you!") + M.Dizzy(5) + if(power >= 2) + M.set_drugginess(5) \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/fever.dm b/code/datums/diseases/advance/symptoms/fever.dm index 53cc3b6c0d..e69c3bf0a2 100644 --- a/code/datums/diseases/advance/symptoms/fever.dm +++ b/code/datums/diseases/advance/symptoms/fever.dm @@ -24,18 +24,34 @@ Bonus transmittable = 2 level = 2 severity = 2 + base_message_chance = 20 + symptom_delay_min = 10 + symptom_delay_max = 30 + var/unsafe = FALSE //over the heat threshold -/datum/symptom/fever/Activate(datum/disease/advance/A) +/datum/symptom/fever/Start(datum/disease/advance/A) ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/carbon/M = A.affected_mob - to_chat(M, "[pick("You feel hot.", "You feel like you're burning.")]") - if(M.bodytemperature < BODYTEMP_HEAT_DAMAGE_LIMIT) - Heat(M, A) + if(A.properties["resistance"] >= 5) //dangerous fever + power = 1.5 + unsafe = TRUE + if(A.properties["resistance"] >= 10) + power = 2.5 - return +/datum/symptom/fever/Activate(datum/disease/advance/A) + if(!..()) + return + var/mob/living/carbon/M = A.affected_mob + if(!unsafe || A.stage < 4) + to_chat(M, "[pick("You feel hot.", "You feel like you're burning.")]") + else + to_chat(M, "[pick("You feel too hot.", "You feel like your blood is boiling.")]") + if(M.bodytemperature < BODYTEMP_HEAT_DAMAGE_LIMIT || unsafe) + Heat(M, A) /datum/symptom/fever/proc/Heat(mob/living/M, datum/disease/advance/A) - var/get_heat = (sqrt(max(21,21+A.totalTransmittable()*2)))+(sqrt(max(21,20+A.totalStageSpeed()*3))) - M.bodytemperature = min(M.bodytemperature + (get_heat * A.stage), BODYTEMP_HEAT_DAMAGE_LIMIT - 1) + var/get_heat = 6 * power + if(!unsafe) + M.bodytemperature = min(M.bodytemperature + (get_heat * A.stage), BODYTEMP_HEAT_DAMAGE_LIMIT - 1) + else + M.bodytemperature += (get_heat * A.stage) return 1 diff --git a/code/datums/diseases/advance/symptoms/fire.dm b/code/datums/diseases/advance/symptoms/fire.dm index 90bfcbc6e3..5e430b3297 100644 --- a/code/datums/diseases/advance/symptoms/fire.dm +++ b/code/datums/diseases/advance/symptoms/fire.dm @@ -24,36 +24,53 @@ Bonus transmittable = -4 level = 6 severity = 5 + base_message_chance = 20 + symptom_delay_min = 20 + symptom_delay_max = 75 + var/infective = FALSE + +/datum/symptom/fire/Start(datum/disease/advance/A) + ..() + if(A.properties["stage_rate"] >= 4) + power = 1.5 + if(A.properties["stage_rate"] >= 8) + power = 2 + if(A.properties["stealth"] >= 4) + suppress_warning = TRUE + if(A.properties["transmittable"] >= 8) //burning skin spreads the virus through smoke + infective = TRUE /datum/symptom/fire/Activate(datum/disease/advance/A) - ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob - switch(A.stage) - if(3) + if(!..()) + return + var/mob/living/M = A.affected_mob + switch(A.stage) + if(3) + if(prob(base_message_chance) && !suppress_warning) to_chat(M, "[pick("You feel hot.", "You hear a crackling noise.", "You smell smoke.")]") - if(4) - Firestacks_stage_4(M, A) - M.IgniteMob() - to_chat(M, "Your skin bursts into flames!") - M.emote("scream") - if(5) - Firestacks_stage_5(M, A) - M.IgniteMob() - to_chat(M, "Your skin erupts into an inferno!") - M.emote("scream") - return + if(4) + Firestacks_stage_4(M, A) + M.IgniteMob() + to_chat(M, "Your skin bursts into flames!") + M.emote("scream") + if(5) + Firestacks_stage_5(M, A) + M.IgniteMob() + to_chat(M, "Your skin erupts into an inferno!") + M.emote("scream") /datum/symptom/fire/proc/Firestacks_stage_4(mob/living/M, datum/disease/advance/A) - var/get_stacks = (sqrt(20+A.totalStageSpeed()*2))-(sqrt(max(0, 16+A.totalStealth()))) - M.adjust_fire_stacks(get_stacks) - M.adjustFireLoss(get_stacks/2) + M.adjust_fire_stacks(1 * power) + M.adjustFireLoss(3 * power) + if(infective) + A.spread(A.holder, 2) return 1 /datum/symptom/fire/proc/Firestacks_stage_5(mob/living/M, datum/disease/advance/A) - var/get_stacks = (sqrt(max(0, 20+A.totalStageSpeed()*3)))-(sqrt(max(0, 16+A.totalStealth()))) - M.adjust_fire_stacks(get_stacks) - M.adjustFireLoss(get_stacks) + M.adjust_fire_stacks(3 * power) + M.adjustFireLoss(5 * power) + if(infective) + A.spread(A.holder, 4) return 1 /* @@ -83,40 +100,58 @@ Bonus transmittable = -2 level = 7 severity = 6 + base_message_chance = 100 + symptom_delay_min = 30 + symptom_delay_max = 90 + var/chems = FALSE + var/explosion_power = 1 + +/datum/symptom/alkali/Start(datum/disease/advance/A) + ..() + if(A.properties["resistance"] >= 9) //intense but sporadic effect + power = 2 + symptom_delay_min = 50 + symptom_delay_max = 140 + if(A.properties["stage_rate"] >= 8) //serious boom when wet + explosion_power = 2 + if(A.properties["transmission"] >= 8) //extra chemicals + chems = TRUE /datum/symptom/alkali/Activate(datum/disease/advance/A) - ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob - switch(A.stage) - if(3) + if(!..()) + return + var/mob/living/M = A.affected_mob + switch(A.stage) + if(3) + if(prob(base_message_chance)) to_chat(M, "[pick("Your veins boil.", "You feel hot.", "You smell meat cooking.")]") - if(4) - Alkali_fire_stage_4(M, A) - M.IgniteMob() - to_chat(M, "Your sweat bursts into flames!") - M.emote("scream") - if(5) + if(4) + Alkali_fire_stage_4(M, A) + M.IgniteMob() + to_chat(M, "Your sweat bursts into flames!") + M.emote("scream") + if(5) + Alkali_fire_stage_5(M, A) + M.IgniteMob() + to_chat(M, "Your skin erupts into an inferno!") + M.emote("scream") + if(M.fire_stacks < 0) + M.visible_message("[M]'s sweat sizzles and pops on contact with water!") + explosion(get_turf(M),0,0,2 * explosion_power) Alkali_fire_stage_5(M, A) - M.IgniteMob() - to_chat(M, "Your skin erupts into an inferno!") - M.emote("scream") - if(M.fire_stacks < 0) - M.visible_message("[M]'s sweat sizzles and pops on contact with water!") - explosion(M.loc,0,0,2) - Alkali_fire_stage_5(M, A) - return /datum/symptom/alkali/proc/Alkali_fire_stage_4(mob/living/M, datum/disease/advance/A) - var/get_stacks = (sqrt(20+A.totalStageSpeed()*5)) + var/get_stacks = 6 * power M.adjust_fire_stacks(get_stacks) M.adjustFireLoss(get_stacks/2) - M.reagents.add_reagent("clf3", 1) + if(chems) + M.reagents.add_reagent("clf3", 2 * power) return 1 /datum/symptom/alkali/proc/Alkali_fire_stage_5(mob/living/M, datum/disease/advance/A) - var/get_stacks = (sqrt(20+A.totalStageSpeed()*8)) + var/get_stacks = 8 * power M.adjust_fire_stacks(get_stacks) M.adjustFireLoss(get_stacks) - M.reagents.add_reagent_list(list("napalm" = 3, "clf3" = 3)) + if(chems) + M.reagents.add_reagent_list(list("napalm" = 4 * power, "clf3" = 4 * power)) return 1 diff --git a/code/datums/diseases/advance/symptoms/flesh_eating.dm b/code/datums/diseases/advance/symptoms/flesh_eating.dm index a819560ee1..838d4481b5 100644 --- a/code/datums/diseases/advance/symptoms/flesh_eating.dm +++ b/code/datums/diseases/advance/symptoms/flesh_eating.dm @@ -24,22 +24,40 @@ Bonus transmittable = -4 level = 6 severity = 5 + base_message_chance = 50 + symptom_delay_min = 15 + symptom_delay_max = 60 + var/bleed = FALSE + var/pain = FALSE -/datum/symptom/flesh_eating/Activate(datum/disease/advance/A) +/datum/symptom/flesh_eating/Start(datum/disease/advance/A) ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob - switch(A.stage) - if(2,3) + if(A.properties["resistance"] >= 7) //extra bleeding + bleed = TRUE + if(A.properties["transmittable"] >= 8) //extra stamina damage + pain = TRUE + +/datum/symptom/flesh_eating/Activate(datum/disease/advance/A) + if(!..()) + return + var/mob/living/M = A.affected_mob + switch(A.stage) + if(2,3) + if(prob(base_message_chance)) to_chat(M, "[pick("You feel a sudden pain across your body.", "Drops of blood appear suddenly on your skin.")]") - if(4,5) - to_chat(M, "[pick("You cringe as a violent pain takes over your body.", "It feels like your body is eating itself inside out.", "IT HURTS.")]") - Flesheat(M, A) - return + if(4,5) + to_chat(M, "[pick("You cringe as a violent pain takes over your body.", "It feels like your body is eating itself inside out.", "IT HURTS.")]") + Flesheat(M, A) /datum/symptom/flesh_eating/proc/Flesheat(mob/living/M, datum/disease/advance/A) - var/get_damage = ((sqrt(16-A.totalStealth()))*5) + var/get_damage = rand(15,25) * power M.adjustBruteLoss(get_damage) + if(pain) + M.adjustStaminaLoss(get_damage) + if(bleed) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + H.bleed_rate += 5 * power return 1 /* @@ -68,21 +86,37 @@ Bonus transmittable = -2 level = 7 severity = 6 + base_message_chance = 50 + symptom_delay_min = 3 + symptom_delay_max = 6 + var/chems = FALSE + var/zombie = FALSE -/datum/symptom/flesh_death/Activate(datum/disease/advance/A) +/datum/symptom/flesh_death/Start(datum/disease/advance/A) ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob - switch(A.stage) - if(2,3) + if(A.properties["stealth"] >= 5) + suppress_warning = TRUE + if(A.properties["stage_rate"] >= 7) //bleeding and hunger + chems = TRUE + +/datum/symptom/flesh_death/Activate(datum/disease/advance/A) + if(!..()) + return + var/mob/living/M = A.affected_mob + switch(A.stage) + if(2,3) + if(prob(base_message_chance) && !suppress_warning) to_chat(M, "[pick("You feel your body break apart.", "Your skin rubs off like dust.")]") - if(4,5) - to_chat(M, "[pick("You feel your muscles weakening.", "Your skin begins detaching itself.", "You feel sandy.")]") - Flesh_death(M, A) - return + if(4,5) + if(prob(base_message_chance / 2)) //reduce spam + to_chat(M, "[pick("You feel your muscles weakening.", "Some of your skin detaches itself.", "You feel sandy.")]") + Flesh_death(M, A) /datum/symptom/flesh_death/proc/Flesh_death(mob/living/M, datum/disease/advance/A) - var/get_damage = ((sqrt(16-A.totalStealth()))*6) + var/get_damage = rand(6,10) M.adjustBruteLoss(get_damage) - M.reagents.add_reagent_list(list("heparin" = 5, "lipolicide" = 5)) + if(chems) + M.reagents.add_reagent_list(list("heparin" = 2, "lipolicide" = 2)) + if(zombie) + M.reagents.add_reagent("romerol", 1) return 1 \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/genetics.dm b/code/datums/diseases/advance/symptoms/genetics.dm index a900dbb7c8..0b6ea5f808 100644 --- a/code/datums/diseases/advance/symptoms/genetics.dm +++ b/code/datums/diseases/advance/symptoms/genetics.dm @@ -26,22 +26,34 @@ Bonus severity = 3 var/list/possible_mutations var/archived_dna = null + base_message_chance = 50 + symptom_delay_min = 60 + symptom_delay_max = 120 + var/no_reset = FALSE /datum/symptom/genetic_mutation/Activate(datum/disease/advance/A) - ..() - if(prob(SYMPTOM_ACTIVATION_PROB * 3)) // 15% chance - var/mob/living/carbon/C = A.affected_mob - if(!C.has_dna()) - return - switch(A.stage) - if(4, 5) - to_chat(C, "[pick("Your skin feels itchy.", "You feel light headed.")]") - C.dna.remove_mutation_group(possible_mutations) + if(!..()) + return + var/mob/living/carbon/C = A.affected_mob + if(!C.has_dna()) + return + switch(A.stage) + if(4, 5) + to_chat(C, "[pick("Your skin feels itchy.", "You feel light headed.")]") + C.dna.remove_mutation_group(possible_mutations) + for(var/i in 1 to power) C.randmut(possible_mutations) - return // Archive their DNA before they were infected. /datum/symptom/genetic_mutation/Start(datum/disease/advance/A) + ..() + if(A.properties["stealth"] >= 5) //don't restore dna after curing + no_reset = TRUE + if(A.properties["stage_rate"] >= 10) //mutate more often + symptom_delay_min = 20 + symptom_delay_max = 60 + if(A.properties["resistance"] >= 8) //mutate twice + power = 2 possible_mutations = (GLOB.bad_mutations | GLOB.not_good_mutations) - GLOB.mutations_list[RACEMUT] var/mob/living/carbon/M = A.affected_mob if(M) @@ -51,9 +63,10 @@ Bonus // Give them back their old DNA when cured. /datum/symptom/genetic_mutation/End(datum/disease/advance/A) - var/mob/living/carbon/M = A.affected_mob - if(M && archived_dna) - if(!M.has_dna()) - return - M.dna.struc_enzymes = archived_dna - M.domutcheck() + if(!no_reset) + var/mob/living/carbon/M = A.affected_mob + if(M && archived_dna) + if(!M.has_dna()) + return + M.dna.struc_enzymes = archived_dna + M.domutcheck() diff --git a/code/datums/diseases/advance/symptoms/hallucigen.dm b/code/datums/diseases/advance/symptoms/hallucigen.dm index 0c42101ea1..f913d49573 100644 --- a/code/datums/diseases/advance/symptoms/hallucigen.dm +++ b/code/datums/diseases/advance/symptoms/hallucigen.dm @@ -24,18 +24,39 @@ Bonus transmittable = -1 level = 5 severity = 3 + base_message_chance = 25 + symptom_delay_min = 25 + symptom_delay_max = 90 + var/fake_healthy = FALSE -/datum/symptom/hallucigen/Activate(datum/disease/advance/A) +/datum/symptom/hallucigen/Start(datum/disease/advance/A) ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/carbon/M = A.affected_mob - switch(A.stage) - if(1, 2) - to_chat(M, "[pick("Something appears in your peripheral vision, then winks out.", "You hear a faint whispher with no source.", "Your head aches.")]") - if(3, 4) - to_chat(M, "[pick("Something is following you.", "You are being watched.", "You hear a whisper in your ear.", "Thumping footsteps slam toward you from nowhere.")]") - else - to_chat(M, "[pick("Oh, your head...", "Your head pounds.", "They're everywhere! Run!", "Something in the shadows...")]") - M.hallucination += 25 + if(A.properties["stealth"] >= 4) //fake good symptom messages + fake_healthy = TRUE + base_message_chance = 50 + if(A.properties["stage_rate"] >= 7) //stronger hallucinations + power = 2 - return +/datum/symptom/hallucigen/Activate(datum/disease/advance/A) + if(!..()) + return + var/mob/living/carbon/M = A.affected_mob + var/list/healthy_messages = list("Your lungs feel great.", "You realize you haven't been breathing.", "You don't feel the need to breathe.",\ + "Your eyes feel great.", "You are now blinking manually.", "You don't feel the need to blink.") + switch(A.stage) + if(1, 2) + if(prob(base_message_chance)) + if(!fake_healthy) + to_chat(M, "[pick("Something appears in your peripheral vision, then winks out.", "You hear a faint whispher with no source.", "Your head aches.")]") + else + to_chat(M, "[pick(healthy_messages)]") + if(3, 4) + if(prob(base_message_chance)) + if(!fake_healthy) + to_chat(M, "[pick("Something is following you.", "You are being watched.", "You hear a whisper in your ear.", "Thumping footsteps slam toward you from nowhere.")]") + else + to_chat(M, "[pick(healthy_messages)]") + else + if(prob(base_message_chance)) + to_chat(M, "[pick("Oh, your head...", "Your head pounds.", "They're everywhere! Run!", "Something in the shadows...")]") + M.hallucination += (15 * power) diff --git a/code/datums/diseases/advance/symptoms/headache.dm b/code/datums/diseases/advance/symptoms/headache.dm index 526ab93836..3baeedea19 100644 --- a/code/datums/diseases/advance/symptoms/headache.dm +++ b/code/datums/diseases/advance/symptoms/headache.dm @@ -25,10 +25,31 @@ BONUS transmittable = 0 level = 1 severity = 1 + base_message_chance = 100 + symptom_delay_min = 15 + symptom_delay_max = 30 -/datum/symptom/headache/Activate(datum/disease/advance/A) +/datum/symptom/headache/Start(datum/disease/advance/A) ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob - to_chat(M, "[pick("Your head hurts.", "Your head starts pounding.")]") - return \ No newline at end of file + if(A.properties["stealth"] >= 4) + base_message_chance = 50 + if(A.properties["stage_rate"] >= 6) //severe pain + power = 2 + if(A.properties["stage_rate"] >= 9) //cluster headaches + symptom_delay_min = 30 + symptom_delay_max = 60 + power = 3 + +/datum/symptom/headache/Activate(datum/disease/advance/A) + if(!..()) + return + var/mob/living/M = A.affected_mob + if(power < 2) + if(prob(base_message_chance)) + to_chat(M, "[pick("Your head hurts.", "Your head pounds.")]") + if(power >= 2) + to_chat(M, "[pick("Your head hurts a lot.", "Your head pounds incessantly.")]") + M.adjustStaminaLoss(25) + if(power >= 3) + to_chat(M, "[pick("Your head hurts!", "You feel a burning knife inside your brain!", "A wave of pain fills your head!")]") + M.Stun(35) \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm index 8fc9e05fd1..5dcba57ca3 100644 --- a/code/datums/diseases/advance/symptoms/heal.dm +++ b/code/datums/diseases/advance/symptoms/heal.dm @@ -1,7 +1,41 @@ +/datum/symptom/heal + name = "Basic Healing (does nothing)" //warning for adminspawn viruses + stealth = 1 + resistance = -4 + stage_speed = -4 + transmittable = -4 + level = 0 //not obtainable + base_message_chance = 20 //here used for the overlays + symptom_delay_min = 1 + symptom_delay_max = 1 + var/hide_healing = FALSE + +/datum/symptom/heal/Start(datum/disease/advance/A) + ..() + if(A.properties["stealth"] >= 4) //invisible healing + hide_healing = TRUE + if(A.properties["stage_rate"] >= 6) //stronger healing + power = 2 + if(A.properties["stage_rate"] >= 11) //even stronger healing + power = 3 + +/datum/symptom/heal/Activate(datum/disease/advance/A) + if(!..()) + return + //100% chance to activate for slow but consistent healing + var/mob/living/M = A.affected_mob + switch(A.stage) + if(4, 5) + Heal(M, A) + return + +/datum/symptom/heal/proc/Heal(mob/living/M, datum/disease/advance/A) + return 1 + /* ////////////////////////////////////// -Healing +Toxin Filter Little bit hidden. Lowers resistance tremendously. @@ -15,8 +49,7 @@ Bonus ////////////////////////////////////// */ -/datum/symptom/heal - +/datum/symptom/heal/toxin name = "Toxic Filter" stealth = 1 resistance = -4 @@ -24,18 +57,9 @@ Bonus transmittable = -4 level = 6 -/datum/symptom/heal/Activate(datum/disease/advance/A) - ..() - //100% chance to activate for slow but consistent healing - var/mob/living/M = A.affected_mob - switch(A.stage) - if(4, 5) - Heal(M, A) - return - -/datum/symptom/heal/proc/Heal(mob/living/M, datum/disease/advance/A) - var/heal_amt = 0.5 - if(M.toxloss > 0 && prob(20)) +/datum/symptom/heal/toxin/Heal(mob/living/M, datum/disease/advance/A) + var/heal_amt = 0.5 * power + if(M.toxloss > 0 && prob(base_message_chance) && !hide_healing) new /obj/effect/temp_visual/heal(get_turf(M), "#66FF99") M.adjustToxLoss(-heal_amt) return 1 @@ -55,7 +79,7 @@ Bonus ////////////////////////////////////// */ -/datum/symptom/heal/plus +/datum/symptom/heal/toxin/plus name = "Apoptoxin filter" stealth = 0 @@ -64,9 +88,9 @@ Bonus transmittable = -2 level = 8 -/datum/symptom/heal/plus/Heal(mob/living/M, datum/disease/advance/A) - var/heal_amt = 1 - if(M.toxloss > 0 && prob(20)) +/datum/symptom/heal/toxin/plus/Heal(mob/living/M, datum/disease/advance/A) + var/heal_amt = 1 * power + if(M.toxloss > 0 && prob(base_message_chance) && !hide_healing) new /obj/effect/temp_visual/heal(get_turf(M), "#00FF00") M.adjustToxLoss(-heal_amt) return 1 @@ -98,7 +122,7 @@ Bonus level = 6 /datum/symptom/heal/brute/Heal(mob/living/carbon/M, datum/disease/advance/A) - var/heal_amt = 1 + var/heal_amt = 1 * power var/list/parts = M.get_damaged_bodyparts(1,1) //1,1 because it needs inputs. @@ -109,7 +133,7 @@ Bonus if(L.heal_damage(heal_amt/parts.len, 0)) M.update_damage_overlays() - if(prob(20)) + if(prob(base_message_chance) && !hide_healing) new /obj/effect/temp_visual/heal(get_turf(M), "#FF3333") return 1 @@ -141,14 +165,15 @@ Bonus level = 8 /datum/symptom/heal/brute/plus/Heal(mob/living/carbon/M, datum/disease/advance/A) - var/heal_amt = 2 + var/heal_amt = 2 * power var/list/parts = M.get_damaged_bodyparts(1,1) //1,1 because it needs inputs. if(M.getCloneLoss() > 0) M.adjustCloneLoss(-1) M.take_bodypart_damage(0, 1) //Deals BURN damage, which is not cured by this symptom - new /obj/effect/temp_visual/heal(get_turf(M), "#33FFCC") + if(!hide_healing) + new /obj/effect/temp_visual/heal(get_turf(M), "#33FFCC") if(!parts.len) return @@ -157,7 +182,7 @@ Bonus if(L.heal_damage(heal_amt/parts.len, 0)) M.update_damage_overlays() - if(prob(20)) + if(prob(base_message_chance) && !hide_healing) new /obj/effect/temp_visual/heal(get_turf(M), "#CC1100") return 1 @@ -189,7 +214,7 @@ Bonus level = 6 /datum/symptom/heal/burn/Heal(mob/living/carbon/M, datum/disease/advance/A) - var/heal_amt = 1 + var/heal_amt = 1 * power var/list/parts = M.get_damaged_bodyparts(1,1) //1,1 because it needs inputs. @@ -200,7 +225,7 @@ Bonus if(L.heal_damage(0, heal_amt/parts.len)) M.update_damage_overlays() - if(prob(20)) + if(prob(base_message_chance) && !hide_healing) new /obj/effect/temp_visual/heal(get_turf(M), "#FF9933") return 1 @@ -231,7 +256,7 @@ Bonus level = 8 /datum/symptom/heal/burn/plus/Heal(mob/living/carbon/M, datum/disease/advance/A) - var/heal_amt = 2 + var/heal_amt = 2 * power var/list/parts = M.get_damaged_bodyparts(1,1) //1,1 because it needs inputs. @@ -247,7 +272,7 @@ Bonus if(L.heal_damage(0, heal_amt/parts.len)) M.update_damage_overlays() - if(prob(20)) + if(prob(base_message_chance) && !hide_healing) new /obj/effect/temp_visual/heal(get_turf(M), "#CC6600") return 1 @@ -277,9 +302,11 @@ Bonus stage_speed = 0 transmittable = -3 level = 5 + symptom_delay_min = 3 + symptom_delay_max = 8 /datum/symptom/heal/dna/Heal(mob/living/carbon/M, datum/disease/advance/A) - var/amt_healed = 1 + var/amt_healed = 1 * power M.adjustBrainLoss(-amt_healed) //Non-power mutations, excluding race, so the virus does not force monkey -> human transformations. var/list/unclean_mutations = (GLOB.not_good_mutations|GLOB.bad_mutations) - GLOB.mutations_list[RACEMUT] diff --git a/code/datums/diseases/advance/symptoms/itching.dm b/code/datums/diseases/advance/symptoms/itching.dm index 8563520b09..880ac1f3e6 100644 --- a/code/datums/diseases/advance/symptoms/itching.dm +++ b/code/datums/diseases/advance/symptoms/itching.dm @@ -25,10 +25,23 @@ BONUS transmittable = 1 level = 1 severity = 1 + symptom_delay_min = 5 + symptom_delay_max = 25 + var/scratch = FALSE -/datum/symptom/itching/Activate(datum/disease/advance/A) +/datum/symptom/itching/Start(datum/disease/advance/A) ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob - to_chat(M, "Your [pick("back", "arm", "leg", "elbow", "head")] itches.") - return \ No newline at end of file + if(A.properties["transmittable"] >= 6) //itch more often + symptom_delay_min = 1 + symptom_delay_max = 4 + if(A.properties["stage_rate"] >= 7) //scratch + scratch = TRUE + +/datum/symptom/itching/Activate(datum/disease/advance/A) + if(!..()) + return + var/mob/living/M = A.affected_mob + var/can_scratch = scratch && !M.incapacitated() + to_chat(M, "Your [pick("back", "arm", "leg", "elbow", "head")] itches. [can_scratch ? " You scratch it." : ""]") + if(can_scratch) + M.adjustBruteLoss(0.5) \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/narcolepsy.dm b/code/datums/diseases/advance/symptoms/narcolepsy.dm new file mode 100644 index 0000000000..a5a2bd7a4c --- /dev/null +++ b/code/datums/diseases/advance/symptoms/narcolepsy.dm @@ -0,0 +1,89 @@ + +/* +////////////////////////////////////// +Narcolepsy + Noticeable. + Lowers resistance + Decreases stage speed tremendously. + Decreases transmittablity tremendously. + +Bonus + Causes drowsiness and sleep. + +////////////////////////////////////// +*/ +/datum/symptom/narcolepsy + name = "Narcolepsy" + stealth = -1 + resistance = -2 + stage_speed = -3 + transmittable = -4 + level = 6 + symptom_delay_min = 15 + symptom_delay_max = 80 + severity = 5 + var/sleep_level = 0 + var/sleepy_ticks = 0 + var/stamina = FALSE + +/datum/symptom/narcolepsy/Start(datum/disease/advance/A) + ..() + if(A.properties["transmittable"] >= 7) //stamina damage + stamina = TRUE + if(A.properties["resistance"] >= 10) //act more often + symptom_delay_min = 10 + symptom_delay_max = 60 + +/datum/symptom/narcolepsy/Activate(var/datum/disease/advance/A) + var/mob/living/M = A.affected_mob + //this ticks even when on cooldown + switch(sleep_level) //Works sorta like morphine + if(10 to 19) + M.drowsyness += 1 + if(20 to INFINITY) + M.Sleeping(30, 0) + sleep_level = 0 + sleepy_ticks = 0 + + if(sleepy_ticks && A.stage>=5) + sleep_level++ + sleepy_ticks-- + else + sleep_level = 0 + + if(!..()) + return + + switch(A.stage) + if(1) + if(prob(10)) + to_chat(M, "You feel tired.") + if(2) + if(prob(10)) + to_chat(M, "You feel very tired.") + sleepy_ticks += rand(10,14) + if(stamina) + M.adjustStaminaLoss(10) + if(3) + if(prob(15)) + to_chat(M, "You try to focus on staying awake.") + sleepy_ticks += rand(10,14) + if(stamina) + M.adjustStaminaLoss(15) + if(4) + if(prob(20)) + to_chat(M, "You nod off for a moment.") + sleepy_ticks += rand(10,14) + if(stamina) + M.adjustStaminaLoss(20) + if(5) + if(prob(25)) + to_chat(M, "[pick("So tired...","You feel very sleepy.","You have a hard time keeping your eyes open.","You try to stay awake.")]") + M.drowsyness = max(M.drowsyness, 2) + sleepy_ticks += rand(10,14) + if(stamina) + M.adjustStaminaLoss(30) + + + + diff --git a/code/datums/diseases/advance/symptoms/oxygen.dm b/code/datums/diseases/advance/symptoms/oxygen.dm index 99866a3544..70d41363f5 100644 --- a/code/datums/diseases/advance/symptoms/oxygen.dm +++ b/code/datums/diseases/advance/symptoms/oxygen.dm @@ -23,16 +23,27 @@ Bonus stage_speed = -3 transmittable = -4 level = 6 + base_message_chance = 5 + symptom_delay_min = 1 + symptom_delay_max = 1 + var/regenerate_blood = FALSE -/datum/symptom/oxygen/Activate(datum/disease/advance/A) +/datum/symptom/oxygen/Start(datum/disease/advance/A) ..() - var/mob/living/M = A.affected_mob + if(A.properties["resistance"] >= 8) //blood regeneration + regenerate_blood = TRUE + +/datum/symptom/oxygen/Activate(datum/disease/advance/A) + if(!..()) + return + var/mob/living/carbon/M = A.affected_mob switch(A.stage) if(4, 5) M.adjustOxyLoss(-3, 0) - if(M.losebreath >= 4) - M.losebreath -= 2 + M.losebreath = max(0, M.losebreath - 2) + if(regenerate_blood && M.blood_volume < BLOOD_VOLUME_NORMAL) + M.blood_volume += 1 else - if(prob(SYMPTOM_ACTIVATION_PROB * 3)) + if(prob(base_message_chance)) to_chat(M, "[pick("Your lungs feel great.", "You realize you haven't been breathing.", "You don't feel the need to breathe.")]") return diff --git a/code/datums/diseases/advance/symptoms/sensory.dm.rej b/code/datums/diseases/advance/symptoms/sensory.dm.rej new file mode 100644 index 0000000000..fbf27328fa --- /dev/null +++ b/code/datums/diseases/advance/symptoms/sensory.dm.rej @@ -0,0 +1,134 @@ +diff a/code/datums/diseases/advance/symptoms/sensory.dm b/code/datums/diseases/advance/symptoms/sensory.dm (rejected hunks) +@@ -23,106 +23,43 @@ Bonus + transmittable = -3 + level = 5 + severity = 0 ++ symptom_delay_min = 5 ++ symptom_delay_max = 10 ++ var/purge_alcohol = FALSE ++ var/brain_heal = FALSE + +-/datum/symptom/sensory_restoration/Activate(var/datum/disease/advance/A) ++/datum/symptom/sensory_restoration/Start(datum/disease/advance/A) + ..() ++ if(A.properties["resistance"] >= 6) //heal brain damage ++ brain_heal = TRUE ++ if(A.properties["transmittable"] >= 8) //purge alcohol ++ purge_alcohol = TRUE ++ ++/datum/symptom/sensory_restoration/Activate(var/datum/disease/advance/A) ++ if(!..()) ++ return + var/mob/living/M = A.affected_mob + if(A.stage >= 2) + M.restoreEars() + + if(A.stage >= 3) +- M.dizziness = 0 +- M.drowsyness = 0 +- M.slurring = 0 +- M.confused = 0 +- M.reagents.remove_all_type(/datum/reagent/consumable/ethanol, 3) +- if(ishuman(M)) +- var/mob/living/carbon/human/H = M +- H.drunkenness = max(H.drunkenness - 10, 0) ++ M.dizziness = max(0, M.dizziness - 2) ++ M.drowsyness = max(0, M.drowsyness - 2) ++ M.slurring = max(0, M.slurring - 2) ++ M.confused = max(0, M.confused - 2) ++ if(purge_alcohol) ++ M.reagents.remove_all_type(/datum/reagent/consumable/ethanol, 3) ++ if(ishuman(M)) ++ var/mob/living/carbon/human/H = M ++ H.drunkenness = max(H.drunkenness - 5, 0) + + if(A.stage >= 4) +- M.drowsyness = max(M.drowsyness-5, 0) ++ M.drowsyness = max(0, M.drowsyness - 2) + if(M.reagents.has_reagent("mindbreaker")) + M.reagents.remove_reagent("mindbreaker", 5) + if(M.reagents.has_reagent("histamine")) + M.reagents.remove_reagent("histamine", 5) + M.hallucination = max(0, M.hallucination - 10) + +- if(A.stage >= 5) +- M.adjustBrainLoss(-3) +- +-/* +-////////////////////////////////////// +-Sensory-Destruction +- noticable. +- Lowers resistance +- Decreases stage speed tremendously. +- Decreases transmittablity tremendously. +- the drugs hit them so hard they have to focus on not dying +- +-Bonus +- The body generates Sensory destructive chemicals. +- You cannot taste anything anymore. +- ethanol for extremely drunk victim +- mindbreaker to break the mind +- impedrezene to ruin the brain +- +-////////////////////////////////////// +-*/ +-/datum/symptom/sensory_destruction +- name = "Sensory destruction" +- stealth = -1 +- resistance = -2 +- stage_speed = -3 +- transmittable = -4 +- level = 6 +- severity = 5 +- var/sleepy = 0 +- var/sleepy_ticks = 0 +- +-/datum/symptom/sensory_destruction/Activate(var/datum/disease/advance/A) +- ..() +- var/mob/living/M = A.affected_mob +- if(prob(SYMPTOM_ACTIVATION_PROB)) +- switch(A.stage) +- if(1) +- to_chat(M, "You can't feel anything.") +- if(2) +- to_chat(M, "You feel absolutely hammered.") +- if(prob(10)) +- sleepy_ticks += rand(10,14) +- if(3) +- M.reagents.add_reagent("ethanol",rand(5,7)) +- to_chat(M, "You try to focus on not dying.") +- if(prob(15)) +- sleepy_ticks += rand(10,14) +- if(4) +- M.reagents.add_reagent("ethanol",rand(6,10)) +- to_chat(M, "u can count 2 potato!") +- if(prob(20)) +- sleepy_ticks += rand(10,14) +- if(5) +- M.reagents.add_reagent("ethanol",rand(7,13)) +- if(prob(25)) +- sleepy_ticks += rand(10,14) +- +- if(sleepy_ticks) +- if(A.stage>=4) +- M.hallucination = min(M.hallucination + 10, 50) +- if(A.stage>=5) +- if(prob(80)) +- M.adjustBrainLoss(1) +- if(prob(50)) +- M.drowsyness = max(M.drowsyness, 3) +- sleepy++ +- sleepy_ticks-- +- else +- sleepy = 0 +- +- switch(sleepy) //Works like morphine +- if(11) +- to_chat(M, "You start to feel tired...") +- if(12 to 24) +- M.drowsyness += 1 +- if(24 to INFINITY) +- M.Sleeping(2, 0) ++ if(brain_heal && A.stage >= 5) ++ M.adjustBrainLoss(-3) +\ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/shedding.dm b/code/datums/diseases/advance/symptoms/shedding.dm index 44c241a25f..cf88fcf6db 100644 --- a/code/datums/diseases/advance/symptoms/shedding.dm +++ b/code/datums/diseases/advance/symptoms/shedding.dm @@ -2,8 +2,8 @@ ////////////////////////////////////// Alopecia - Noticable. - Decreases resistance slightly. + Not Noticeable. + Increases resistance slightly. Reduces stage speed slightly. Transmittable. Intense Level. @@ -17,29 +17,34 @@ BONUS /datum/symptom/shedding name = "Alopecia" - stealth = -1 - resistance = -1 + stealth = 0 + resistance = 1 stage_speed = -1 - transmittable = 2 + transmittable = 3 level = 4 severity = 1 + base_message_chance = 50 + symptom_delay_min = 45 + symptom_delay_max = 90 /datum/symptom/shedding/Activate(datum/disease/advance/A) - ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob + if(!..()) + return + + var/mob/living/M = A.affected_mob + if(prob(base_message_chance)) to_chat(M, "[pick("Your scalp itches.", "Your skin feels flakey.")]") - if(ishuman(M)) - var/mob/living/carbon/human/H = M - switch(A.stage) - if(3, 4) - if(!(H.hair_style == "Bald") && !(H.hair_style == "Balding Hair")) - to_chat(H, "Your hair starts to fall out in clumps...") - addtimer(CALLBACK(src, .proc/Shed, H, FALSE), 50) - if(5) - if(!(H.facial_hair_style == "Shaved") || !(H.hair_style == "Bald")) - to_chat(H, "Your hair starts to fall out in clumps...") - addtimer(CALLBACK(src, .proc/Shed, H, TRUE), 50) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + switch(A.stage) + if(3, 4) + if(!(H.hair_style == "Bald") && !(H.hair_style == "Balding Hair")) + to_chat(H, "Your hair starts to fall out in clumps...") + addtimer(CALLBACK(src, .proc/Shed, H, FALSE), 50) + if(5) + if(!(H.facial_hair_style == "Shaved") || !(H.hair_style == "Bald")) + to_chat(H, "Your hair starts to fall out in clumps...") + addtimer(CALLBACK(src, .proc/Shed, H, TRUE), 50) /datum/symptom/shedding/proc/Shed(mob/living/carbon/human/H, fullbald) if(fullbald) diff --git a/code/datums/diseases/advance/symptoms/shivering.dm b/code/datums/diseases/advance/symptoms/shivering.dm index a26a19de04..4c9ec94a2b 100644 --- a/code/datums/diseases/advance/symptoms/shivering.dm +++ b/code/datums/diseases/advance/symptoms/shivering.dm @@ -24,17 +24,33 @@ Bonus transmittable = 2 level = 2 severity = 2 + symptom_delay_min = 10 + symptom_delay_max = 30 + var/unsafe = FALSE //over the cold threshold -/datum/symptom/shivering/Activate(datum/disease/advance/A) +/datum/symptom/fever/Start(datum/disease/advance/A) ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/carbon/M = A.affected_mob - to_chat(M, "[pick("You feel cold.", "You start shivering.")]") - if(M.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT) - Chill(M, A) - return + if(A.properties["stage_speed"] >= 5) //dangerous cold + power = 1.5 + unsafe = TRUE + if(A.properties["stage_speed"] >= 10) + power = 2.5 + +/datum/symptom/shivering/Activate(datum/disease/advance/A) + if(!..()) + return + var/mob/living/carbon/M = A.affected_mob + if(!unsafe || A.stage < 4) + to_chat(M, "[pick("You feel cold.", "You shiver.")]") + else + to_chat(M, "[pick("You feel your blood run cold.", "You feel ice in your veins.", "You feel like you can't heat up.", "You shiver violently." )]") + if(M.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT || unsafe) + Chill(M, A) /datum/symptom/shivering/proc/Chill(mob/living/M, datum/disease/advance/A) - var/get_cold = (sqrt(16+A.totalStealth()*2))+(sqrt(21+A.totalResistance()*2)) - M.bodytemperature = min(M.bodytemperature - (get_cold * A.stage), BODYTEMP_COLD_DAMAGE_LIMIT + 1) + var/get_cold = 6 * power + if(!unsafe) + M.bodytemperature = min(M.bodytemperature - (get_cold * A.stage), BODYTEMP_COLD_DAMAGE_LIMIT + 1) + else + M.bodytemperature -= (get_cold * A.stage) return 1 \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/skin.dm b/code/datums/diseases/advance/symptoms/skin.dm index bcd6f80e13..09eea77520 100644 --- a/code/datums/diseases/advance/symptoms/skin.dm +++ b/code/datums/diseases/advance/symptoms/skin.dm @@ -23,23 +23,23 @@ BONUS transmittable = -2 level = 5 severity = 1 + symptom_delay_min = 25 + symptom_delay_max = 75 /datum/symptom/vitiligo/Activate(datum/disease/advance/A) - ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.skin_tone == "albino") - return - switch(A.stage) - if(5) - H.skin_tone = "albino" - H.update_body(0) - else - H.visible_message("[H] looks a bit pale...", "Your skin suddenly appears lighter...") - - return + if(!..()) + return + var/mob/living/M = A.affected_mob + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.skin_tone == "albino") + return + switch(A.stage) + if(5) + H.skin_tone = "albino" + H.update_body(0) + else + H.visible_message("[H] looks a bit pale...", "Your skin suddenly appears lighter...") /* @@ -67,20 +67,20 @@ BONUS transmittable = -2 level = 5 severity = 1 + symptom_delay_min = 7 + symptom_delay_max = 14 /datum/symptom/revitiligo/Activate(datum/disease/advance/A) - ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.skin_tone == "african2") - return - switch(A.stage) - if(5) - H.skin_tone = "african2" - H.update_body(0) - else - H.visible_message("[H] looks a bit dark...", "Your skin suddenly appears darker...") - - return + if(!..()) + return + var/mob/living/M = A.affected_mob + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.skin_tone == "african2") + return + switch(A.stage) + if(5) + H.skin_tone = "african2" + H.update_body(0) + else + H.visible_message("[H] looks a bit dark...", "Your skin suddenly appears darker...") diff --git a/code/datums/diseases/advance/symptoms/sneeze.dm b/code/datums/diseases/advance/symptoms/sneeze.dm index 9413eea5db..43caf6d34e 100644 --- a/code/datums/diseases/advance/symptoms/sneeze.dm +++ b/code/datums/diseases/advance/symptoms/sneeze.dm @@ -17,7 +17,6 @@ Bonus */ /datum/symptom/sneeze - name = "Sneezing" stealth = -2 resistance = 3 @@ -25,15 +24,24 @@ Bonus transmittable = 4 level = 1 severity = 1 + symptom_delay_min = 5 + symptom_delay_max = 35 -/datum/symptom/sneeze/Activate(datum/disease/advance/A) +/datum/symptom/sneeze/Start(datum/disease/advance/A) ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob - switch(A.stage) - if(1, 2, 3) + if(A.properties["transmittable"] >= 9) //longer spread range + power = 2 + if(A.properties["stealth"] >= 4) + suppress_warning = TRUE + +/datum/symptom/sneeze/Activate(datum/disease/advance/A) + if(!..()) + return + var/mob/living/M = A.affected_mob + switch(A.stage) + if(1, 2, 3) + if(!suppress_warning) M.emote("sniff") - else - M.emote("sneeze") - A.spread(A.holder, 5) - return \ No newline at end of file + else + M.emote("sneeze") + A.spread(A.holder, 4 + power) \ 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 44d7db5709..1e60485a1e 100644 --- a/code/datums/diseases/advance/symptoms/symptoms.dm +++ b/code/datums/diseases/advance/symptoms/symptoms.dm @@ -13,7 +13,18 @@ var/severity = 0 // The hash tag for our diseases, we will add it up with our other symptoms to get a unique id! ID MUST BE UNIQUE!!! var/id = "" - var/static/SYMPTOM_ACTIVATION_PROB = 5 + //Base chance of sending warning messages, so it can be modified + var/base_message_chance = 10 + //If the early warnings are suppressed or not + var/suppress_warning = FALSE + //Ticks between each activation + var/symptom_counter = 0 + var/symptom_delay_min = 1 + var/symptom_delay_max = 1 + //Can be used to multiply virus effects + var/power = 1 + //A neutered symptom has no effect, and only affects statistics. + var/neutered = FALSE /datum/symptom/New() var/list/S = SSdisease.list_symptoms @@ -25,6 +36,7 @@ // Called when processing of the advance disease, which holds this symptom, starts. /datum/symptom/proc/Start(datum/disease/advance/A) + symptom_counter = rand(symptom_delay_min, symptom_delay_max) return // Called when the advance disease is going to be deleted or when the advance disease stops processing. @@ -32,5 +44,18 @@ return /datum/symptom/proc/Activate(datum/disease/advance/A) - return + if(neutered) + return FALSE + if(symptom_counter) + symptom_counter-- + return FALSE + else + symptom_counter = rand(symptom_delay_min, symptom_delay_max) + return TRUE +/datum/symptom/proc/Copy() + var/datum/symptom/new_symp = new type + new_symp.name = name + new_symp.id = id + new_symp.neutered = neutered + return new_symp diff --git a/code/datums/diseases/advance/symptoms/viral.dm b/code/datums/diseases/advance/symptoms/viral.dm index 3f75ad5196..49bb2d674c 100644 --- a/code/datums/diseases/advance/symptoms/viral.dm +++ b/code/datums/diseases/advance/symptoms/viral.dm @@ -21,16 +21,6 @@ BONUS transmittable = 0 level = 3 -/datum/symptom/viraladaptation/Activate(datum/disease/advance/A) - ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob - switch(A.stage) - if(1) - to_chat(M, "You feel off, but no different from before.") - if(5) - to_chat(M, "You feel better, but nothing interesting happens.") - /* ////////////////////////////////////// Viral evolution @@ -54,29 +44,19 @@ BONUS transmittable = 3 level = 3 -/datum/symptom/viraladaptation/Activate(datum/disease/advance/A) - ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob - switch(A.stage) - if(1) - to_chat(M, "You feel better, but no different from before.") - if(5) - to_chat(M, "You feel off, but nothing interesting happens.") - /* ////////////////////////////////////// -Viral aggressive metabolism (ex-Longevity) +Viral aggressive metabolism - No stealth. + Reduced stealth. Small resistance boost. - Reduced stage speed. - Large transmittablity boost. - High Level. + Increased stage speed. + Small transmittablity boost. + Medium Level. Bonus - The virus starts at stage 5 and decrease over time until it self cures. + The virus starts at stage 5, but after a certain time will start curing itself. Stages still increase naturally with stage speed. ////////////////////////////////////// @@ -85,23 +65,33 @@ Bonus /datum/symptom/viralreverse name = "Viral aggressive metabolism" - stealth = 0 + stealth = -2 resistance = 1 - stage_speed = -2 - transmittable = 3 + stage_speed = 3 + transmittable = 1 level = 3 + symptom_delay_min = 1 + symptom_delay_max = 1 + var/time_to_cure /datum/symptom/viralreverse/Activate(datum/disease/advance/A) - ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) + if(!..()) + return + if(time_to_cure > 0) + time_to_cure-- + else var/mob/living/M = A.affected_mob Heal(M, A) - return /datum/symptom/viralreverse/proc/Heal(mob/living/M, datum/disease/advance/A) A.stage -= 1 if(A.stage < 2) + to_chat(M, "You suddenly feel healthy.") A.cure() /datum/symptom/viralreverse/Start(datum/disease/advance/A) + ..() A.stage = 5 + if(A.properties["stealth"] >= 4) //more time before it's cured + power = 2 + time_to_cure = max(A.properties["resistance"], A.properties["stage_rate"]) * 10 * power diff --git a/code/datums/diseases/advance/symptoms/vision.dm.rej b/code/datums/diseases/advance/symptoms/vision.dm.rej new file mode 100644 index 0000000000..e9cb0cd6d8 --- /dev/null +++ b/code/datums/diseases/advance/symptoms/vision.dm.rej @@ -0,0 +1,19 @@ +diff a/code/datums/diseases/advance/symptoms/vision.dm b/code/datums/diseases/advance/symptoms/vision.dm (rejected hunks) +@@ -40,7 +40,7 @@ Bonus + if(!..()) + return + var/mob/living/carbon/M = A.affected_mob +- var/obj/item/organ/eyes = M.getorganslot("eye_sight") ++ var/obj/item/organ/eyes/eyes = M.getorganslot("eye_sight") + if(istype(eyes)) + switch(A.stage) + if(1, 2) +@@ -55,7 +55,7 @@ Bonus + M.adjust_eye_damage(5) + if(eyes.eye_damage >= 10) + M.become_nearsighted() +- if(prob(M.eye_damage - 10 + 1)) ++ if(prob(eyes.eye_damage - 10 + 1)) + if(!remove_eyes) + if(M.become_blind()) + to_chat(M, "You go blind!") diff --git a/code/datums/diseases/advance/symptoms/voice_change.dm b/code/datums/diseases/advance/symptoms/voice_change.dm index 2731612322..3abeb42f03 100644 --- a/code/datums/diseases/advance/symptoms/voice_change.dm +++ b/code/datums/diseases/advance/symptoms/voice_change.dm @@ -3,10 +3,10 @@ Voice Change - Very Very noticable. - Lowers resistance considerably. + Noticeable. + Lowers resistance. Decreases stage speed. - Reduced transmittable. + Increased transmittable. Fatal Level. Bonus @@ -18,31 +18,59 @@ Bonus /datum/symptom/voice_change name = "Voice Change" - stealth = -2 - resistance = -3 - stage_speed = -3 - transmittable = -1 + stealth = -1 + resistance = -2 + stage_speed = -2 + transmittable = 2 level = 6 severity = 2 + base_message_chance = 100 + symptom_delay_min = 60 + symptom_delay_max = 120 + var/scramble_language = FALSE + var/datum/language/current_language + var/datum/language_holder/original_language -/datum/symptom/voice_change/Activate(datum/disease/advance/A) +/datum/symptom/voice_change/Start(datum/disease/advance/A) ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) + if(A.properties["stealth"] >= 3) + suppress_warning = TRUE + if(A.properties["stage_rate"] >= 7) //faster change of voice + base_message_chance = 25 + symptom_delay_min = 25 + symptom_delay_max = 85 + if(A.properties["transmittable"] >= 14) //random language + scramble_language = TRUE + var/mob/living/M = A.affected_mob + var/datum/language_holder/mob_language = M.get_language_holder() + original_language = mob_language.copy() - var/mob/living/carbon/M = A.affected_mob - switch(A.stage) - if(1, 2, 3, 4) +/datum/symptom/voice_change/Activate(datum/disease/advance/A) + if(!..()) + return + var/mob/living/carbon/M = A.affected_mob + switch(A.stage) + if(1, 2, 3, 4) + if(prob(base_message_chance) && !suppress_warning) to_chat(M, "[pick("Your throat hurts.", "You clear your throat.")]") - else - if(ishuman(M)) - var/mob/living/carbon/human/H = M - H.SetSpecialVoice(H.dna.species.random_name(H.gender)) - - return + else + if(ishuman(M)) + var/mob/living/carbon/human/H = M + H.SetSpecialVoice(H.dna.species.random_name(H.gender)) + if(scramble_language) + H.remove_language(current_language) + current_language = pick(subtypesof(/datum/language) - /datum/language/common) + H.grant_language(current_language) + var/datum/language_holder/mob_language = H.get_language_holder() + mob_language.only_speaks_language = current_language /datum/symptom/voice_change/End(datum/disease/advance/A) ..() if(ishuman(A.affected_mob)) var/mob/living/carbon/human/H = A.affected_mob H.UnsetSpecialVoice() - return + if(scramble_language) + var/mob/living/M = A.affected_mob + M.copy_known_languages_from(original_language, TRUE) + current_language = null + QDEL_NULL(original_language) diff --git a/code/datums/diseases/advance/symptoms/vomit.dm.rej b/code/datums/diseases/advance/symptoms/vomit.dm.rej new file mode 100644 index 0000000000..b6fd999e2f --- /dev/null +++ b/code/datums/diseases/advance/symptoms/vomit.dm.rej @@ -0,0 +1,30 @@ +diff a/code/datums/diseases/advance/symptoms/vomit.dm b/code/datums/diseases/advance/symptoms/vomit.dm (rejected hunks) +@@ -32,7 +32,7 @@ Bonus + symptom_delay_min = 25 + symptom_delay_max = 80 + var/vomit_blood = FALSE +- var/proj_vomit = FALSE ++ var/proj_vomit = 0 + + /datum/symptom/vomit/Start(datum/disease/advance/A) + ..() +@@ -41,7 +41,7 @@ Bonus + if(A.properties["resistance"] >= 7) //blood vomit + vomit_blood = TRUE + if(A.properties["transmittable"] >= 7) //projectile vomit +- proj_vomit = TRUE ++ proj_vomit = 5 + + /datum/symptom/vomit/Activate(datum/disease/advance/A) + if(!..()) +@@ -52,7 +52,7 @@ Bonus + if(prob(base_message_chance) && !suppress_warning) + to_chat(M, "[pick("You feel nauseous.", "You feel like you're going to throw up!")]") + else +- Vomit(M) ++ vomit(M) + +-/datum/symptom/vomit/proc/Vomit(mob/living/carbon/M) +- M.vomit(20, vomit_blood, distance = 5 * proj_vomit) ++/datum/symptom/vomit/proc/vomit(mob/living/carbon/M) ++ M.vomit(20, vomit_blood, distance = proj_vomit) diff --git a/code/datums/diseases/advance/symptoms/weight.dm b/code/datums/diseases/advance/symptoms/weight.dm index 399a67675e..ec371f1167 100644 --- a/code/datums/diseases/advance/symptoms/weight.dm +++ b/code/datums/diseases/advance/symptoms/weight.dm @@ -24,20 +24,26 @@ Bonus transmittable = -2 level = 4 severity = 1 + base_message_chance = 100 + symptom_delay_min = 15 + symptom_delay_max = 45 -/datum/symptom/weight_gain/Activate(datum/disease/advance/A) +/datum/symptom/weight_gain/Start(datum/disease/advance/A) ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob - switch(A.stage) - if(1, 2, 3, 4) - to_chat(M, "[pick("You feel blubbery.", "Your stomach hurts.")]") - else - M.overeatduration = min(M.overeatduration + 100, 600) - M.nutrition = min(M.nutrition + 100, NUTRITION_LEVEL_FULL) - - return + if(A.properties["stealth"] >= 4) //warn less often + base_message_chance = 25 +/datum/symptom/weight_gain/Activate(datum/disease/advance/A) + if(!..()) + return + var/mob/living/M = A.affected_mob + switch(A.stage) + if(1, 2, 3, 4) + if(prob(base_message_chance)) + to_chat(M, "[pick("You feel blubbery.", "Your stomach hurts.")]") + else + M.overeatduration = min(M.overeatduration + 100, 600) + M.nutrition = min(M.nutrition + 100, NUTRITION_LEVEL_FULL) /* ////////////////////////////////////// @@ -66,20 +72,27 @@ Bonus transmittable = -2 level = 3 severity = 1 + base_message_chance = 100 + symptom_delay_min = 15 + symptom_delay_max = 45 -/datum/symptom/weight_loss/Activate(datum/disease/advance/A) +/datum/symptom/weight_loss/Start(datum/disease/advance/A) ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob - switch(A.stage) - if(1, 2, 3, 4) - to_chat(M, "[pick("You feel hungry.", "You crave for food.")]") - else - to_chat(M, "[pick("So hungry...", "You'd kill someone for a bite of food...", "Hunger cramps seize you...")]") - M.overeatduration = max(M.overeatduration - 100, 0) - M.nutrition = max(M.nutrition - 100, 0) + if(A.properties["stealth"] >= 4) //warn less often + base_message_chance = 25 - return +/datum/symptom/weight_loss/Activate(datum/disease/advance/A) + if(!..()) + return + var/mob/living/M = A.affected_mob + switch(A.stage) + if(1, 2, 3, 4) + if(prob(base_message_chance)) + to_chat(M, "[pick("You feel hungry.", "You crave for food.")]") + else + to_chat(M, "[pick("So hungry...", "You'd kill someone for a bite of food...", "Hunger cramps seize you...")]") + M.overeatduration = max(M.overeatduration - 100, 0) + M.nutrition = max(M.nutrition - 100, 0) /* ////////////////////////////////////// @@ -108,14 +121,14 @@ Bonus stage_speed = -2 transmittable = -2 level = 4 + symptom_delay_min = 5 + symptom_delay_max = 5 /datum/symptom/weight_even/Activate(datum/disease/advance/A) - ..() - if(prob(SYMPTOM_ACTIVATION_PROB)) - var/mob/living/M = A.affected_mob - switch(A.stage) - if(4, 5) - M.overeatduration = 0 - M.nutrition = NUTRITION_LEVEL_WELL_FED + 50 - - return \ No newline at end of file + if(!..()) + return + var/mob/living/M = A.affected_mob + switch(A.stage) + if(4, 5) + M.overeatduration = 0 + M.nutrition = NUTRITION_LEVEL_WELL_FED + 50 \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/youth.dm b/code/datums/diseases/advance/symptoms/youth.dm index 794b15bb91..9793313354 100644 --- a/code/datums/diseases/advance/symptoms/youth.dm +++ b/code/datums/diseases/advance/symptoms/youth.dm @@ -23,33 +23,34 @@ BONUS stage_speed = 4 transmittable = -4 level = 5 + base_message_chance = 100 + symptom_delay_min = 25 + symptom_delay_max = 50 /datum/symptom/youth/Activate(datum/disease/advance/A) - ..() - if(prob(SYMPTOM_ACTIVATION_PROB * 2)) - var/mob/living/M = A.affected_mob - if(ishuman(M)) - var/mob/living/carbon/human/H = M - switch(A.stage) - if(1) - if(H.age > 41) - H.age = 41 - to_chat(H, "You haven't had this much energy in years!") - if(2) - if(H.age > 36) - H.age = 36 - to_chat(H, "You're suddenly in a good mood.") - if(3) - if(H.age > 31) - H.age = 31 - to_chat(H, "You begin to feel more lithe.") - if(4) - if(H.age > 26) - H.age = 26 - to_chat(H, "You feel reinvigorated.") - if(5) - if(H.age > 21) - H.age = 21 - to_chat(H, "You feel like you can take on the world!") - - return \ No newline at end of file + if(!..()) + return + var/mob/living/M = A.affected_mob + if(ishuman(M)) + var/mob/living/carbon/human/H = M + switch(A.stage) + if(1) + if(H.age > 41) + H.age = 41 + to_chat(H, "You haven't had this much energy in years!") + if(2) + if(H.age > 36) + H.age = 36 + to_chat(H, "You're suddenly in a good mood.") + if(3) + if(H.age > 31) + H.age = 31 + to_chat(H, "You begin to feel more lithe.") + if(4) + if(H.age > 26) + H.age = 26 + to_chat(H, "You feel reinvigorated.") + if(5) + if(H.age > 21) + H.age = 21 + to_chat(H, "You feel like you can take on the world!") \ No newline at end of file diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index c4cf9a5e54..ecacc6d1c6 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -442,7 +442,8 @@ /obj/item/weapon/reagent_containers/glass/bottle/flu_virion = 1, /obj/item/weapon/reagent_containers/glass/bottle/mutagen = 1, /obj/item/weapon/reagent_containers/glass/bottle/plasma = 1, - /obj/item/weapon/reagent_containers/glass/bottle/synaptizine = 1) + /obj/item/weapon/reagent_containers/glass/bottle/synaptizine = 1, + /obj/item/weapon/reagent_containers/glass/bottle/formaldehyde = 1) // ---------------------------- // Disk """fridge""" diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index 8cdae1123d..4151a2695e 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -291,7 +291,7 @@ results = list("blood" = 1) required_reagents = list("virusfood" = 1) required_catalysts = list("blood" = 1) - var/level_min = 0 + var/level_min = 1 var/level_max = 2 /datum/chemical_reaction/mix_virus/on_reaction(datum/reagents/holder, created_volume) @@ -406,6 +406,21 @@ if(D) D.Devolve() +/datum/chemical_reaction/mix_virus/neuter_virus + + name = "Neuter Virus" + id = "neutervirus" + required_reagents = list("formaldehyde" = 1) + required_catalysts = list("blood" = 1) + +/datum/chemical_reaction/mix_virus/neuter_virus/on_reaction(datum/reagents/holder, created_volume) + + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list + if(B && B.data) + var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"] + if(D) + D.Neuter() + ////////////////////////////////// foam and foam precursor /////////////////////////////////////////////////// diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index 37074b6d12..2325a9645e 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -101,6 +101,12 @@ icon_state = "bottle20" list_reagents = list("synaptizine" = 30) +/obj/item/weapon/reagent_containers/glass/bottle/formaldehyde + name = "formaldehyde bottle" + desc = "A small bottle of formaldehyde." + icon_state = "bottle20" + list_reagents = list("formaldehyde" = 30) + /obj/item/weapon/reagent_containers/glass/bottle/ammonia name = "ammonia bottle" desc = "A small bottle of ammonia." diff --git a/tgstation.dme b/tgstation.dme index 1daecfda5c..1efaeda81f 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -310,6 +310,7 @@ #include "code\datums\diseases\advance\symptoms\headache.dm" #include "code\datums\diseases\advance\symptoms\heal.dm" #include "code\datums\diseases\advance\symptoms\itching.dm" +#include "code\datums\diseases\advance\symptoms\narcolepsy.dm" #include "code\datums\diseases\advance\symptoms\oxygen.dm" #include "code\datums\diseases\advance\symptoms\sensory.dm" #include "code\datums\diseases\advance\symptoms\shedding.dm" @@ -321,7 +322,6 @@ #include "code\datums\diseases\advance\symptoms\vision.dm" #include "code\datums\diseases\advance\symptoms\voice_change.dm" #include "code\datums\diseases\advance\symptoms\vomit.dm" -#include "code\datums\diseases\advance\symptoms\weakness.dm" #include "code\datums\diseases\advance\symptoms\weight.dm" #include "code\datums\diseases\advance\symptoms\youth.dm" #include "code\datums\helper_datums\construction_datum.dm"