[Seriously, it's ready]Virology Rework: The Thresholdening
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
@@ -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, "<span class='warning'>Your chin itches.</span>")
|
||||
if(H.facial_hair_style == "Shaved")
|
||||
H.facial_hair_style = "Jensen Beard"
|
||||
H.update_hair()
|
||||
if(3, 4)
|
||||
to_chat(H, "<span class='warning'>You feel tough.</span>")
|
||||
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, "<span class='warning'>You feel manly!</span>")
|
||||
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
|
||||
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, "<span class='warning'>Your chin itches.</span>")
|
||||
if(H.facial_hair_style == "Shaved")
|
||||
H.facial_hair_style = "Jensen Beard"
|
||||
H.update_hair()
|
||||
if(3, 4)
|
||||
to_chat(H, "<span class='warning'>You feel tough.</span>")
|
||||
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, "<span class='warning'>You feel manly!</span>")
|
||||
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()
|
||||
@@ -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, "<span class='warning'>[pick("You're having difficulty breathing.", "Your breathing becomes heavy.")]</span>")
|
||||
if(3, 4)
|
||||
to_chat(M, "<span class='warning'><b>[pick("Your windpipe feels like a straw.", "Your breathing becomes tremendously difficult.")]</span>")
|
||||
Choke_stage_3_4(M, A)
|
||||
M.emote("gasp")
|
||||
if(3, 4)
|
||||
if(!suppress_warning)
|
||||
to_chat(M, "<span class='warning'>[pick("Your windpipe feels like a straw.", "Your breathing becomes tremendously difficult.")]</span>")
|
||||
else
|
||||
to_chat(M, "<span class='userdanger'>[pick("You're choking!", "You can't breathe!")]</span>")
|
||||
Choke(M, A)
|
||||
M.emote("gasp")
|
||||
return
|
||||
to_chat(M, "<span class='warning'>You feel very [pick("dizzy","woozy","faint")].</span>") //fake bloodloss messages
|
||||
Choke_stage_3_4(M, A)
|
||||
M.emote("gasp")
|
||||
else
|
||||
to_chat(M, "<span class='userdanger'>[pick("You're choking!", "You can't breathe!")]</span>")
|
||||
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, "<span class='warning'><b>[pick("Your windpipe feels thin.", "Your lungs feel small.")]</span>")
|
||||
Asphyxiate_stage_3_4(M, A)
|
||||
M.emote("gasp")
|
||||
else
|
||||
to_chat(M, "<span class='userdanger'>[pick("Your lungs hurt!", "It hurts to breathe!")]</span>")
|
||||
Asphyxiate(M, A)
|
||||
M.emote("gasp")
|
||||
if(M.getOxyLoss() >= 120)
|
||||
M.visible_message("<span class='warning'>[M] stops breathing, as if their lungs have totally collapsed!</span>")
|
||||
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, "<span class='warning'><b>[pick("Your windpipe feels thin.", "Your lungs feel small.")]</span>")
|
||||
Asphyxiate_stage_3_4(M, A)
|
||||
M.emote("gasp")
|
||||
else
|
||||
to_chat(M, "<span class='userdanger'>[pick("Your lungs hurt!", "It hurts to breathe!")]</span>")
|
||||
Asphyxiate(M, A)
|
||||
M.emote("gasp")
|
||||
if(M.getOxyLoss() >= 120)
|
||||
M.visible_message("<span class='warning'>[M] stops breathing, as if their lungs have totally collapsed!</span>")
|
||||
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
|
||||
|
||||
@@ -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, "<span class='warning'>[pick("Your head hurts.", "Your mind blanks for a moment.")]</span>")
|
||||
else
|
||||
to_chat(M, "<span class='userdanger'>You can't think straight!</span>")
|
||||
M.confused = min(100, M.confused + 8)
|
||||
else
|
||||
to_chat(M, "<span class='userdanger'>You can't think straight!</span>")
|
||||
M.confused = min(100 * power, M.confused + 8)
|
||||
if(brain_damage && M.getBrainLoss()<=80)
|
||||
M.adjustBrainLoss(5 * power)
|
||||
M.updatehealth()
|
||||
|
||||
return
|
||||
|
||||
@@ -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, "<span notice='warning'>[pick("You swallow excess mucus.", "You lightly cough.")]</span>")
|
||||
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, "<span notice='userdanger'>[pick("You have a coughing fit!", "You can't stop coughing!")]</span>")
|
||||
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)
|
||||
|
||||
|
||||
@@ -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, "<span class='warning'>[pick("You hear a ringing in your ear.", "Your ears pop.")]</span>")
|
||||
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, "<span class='userdanger'>Your ears pop painfully and start bleeding!</span>")
|
||||
ears.ear_damage = max(ears.ear_damage, UNHEALING_EAR_DAMAGE)
|
||||
M.emote("scream")
|
||||
else
|
||||
to_chat(M, "<span class='userdanger'>Your ears pop and begin ringing loudly!</span>")
|
||||
M.minimumDeafTicks(20)
|
||||
|
||||
@@ -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, "<span class='warning'>[pick("You feel dizzy.", "Your head spins.")]</span>")
|
||||
else
|
||||
to_chat(M, "<span class='userdanger'>A wave of dizziness washes over you!</span>")
|
||||
M.Dizzy(5)
|
||||
return
|
||||
else
|
||||
to_chat(M, "<span class='userdanger'>A wave of dizziness washes over you!</span>")
|
||||
M.Dizzy(5)
|
||||
if(power >= 2)
|
||||
M.set_drugginess(5)
|
||||
@@ -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, "<span class='warning'>[pick("You feel hot.", "You feel like you're burning.")]</span>")
|
||||
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, "<span class='warning'>[pick("You feel hot.", "You feel like you're burning.")]</span>")
|
||||
else
|
||||
to_chat(M, "<span class='userdanger'>[pick("You feel too hot.", "You feel like your blood is boiling.")]</span>")
|
||||
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
|
||||
|
||||
@@ -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, "<span class='warning'>[pick("You feel hot.", "You hear a crackling noise.", "You smell smoke.")]</span>")
|
||||
if(4)
|
||||
Firestacks_stage_4(M, A)
|
||||
M.IgniteMob()
|
||||
to_chat(M, "<span class='userdanger'>Your skin bursts into flames!</span>")
|
||||
M.emote("scream")
|
||||
if(5)
|
||||
Firestacks_stage_5(M, A)
|
||||
M.IgniteMob()
|
||||
to_chat(M, "<span class='userdanger'>Your skin erupts into an inferno!</span>")
|
||||
M.emote("scream")
|
||||
return
|
||||
if(4)
|
||||
Firestacks_stage_4(M, A)
|
||||
M.IgniteMob()
|
||||
to_chat(M, "<span class='userdanger'>Your skin bursts into flames!</span>")
|
||||
M.emote("scream")
|
||||
if(5)
|
||||
Firestacks_stage_5(M, A)
|
||||
M.IgniteMob()
|
||||
to_chat(M, "<span class='userdanger'>Your skin erupts into an inferno!</span>")
|
||||
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, "<span class='warning'>[pick("Your veins boil.", "You feel hot.", "You smell meat cooking.")]</span>")
|
||||
if(4)
|
||||
Alkali_fire_stage_4(M, A)
|
||||
M.IgniteMob()
|
||||
to_chat(M, "<span class='userdanger'>Your sweat bursts into flames!</span>")
|
||||
M.emote("scream")
|
||||
if(5)
|
||||
if(4)
|
||||
Alkali_fire_stage_4(M, A)
|
||||
M.IgniteMob()
|
||||
to_chat(M, "<span class='userdanger'>Your sweat bursts into flames!</span>")
|
||||
M.emote("scream")
|
||||
if(5)
|
||||
Alkali_fire_stage_5(M, A)
|
||||
M.IgniteMob()
|
||||
to_chat(M, "<span class='userdanger'>Your skin erupts into an inferno!</span>")
|
||||
M.emote("scream")
|
||||
if(M.fire_stacks < 0)
|
||||
M.visible_message("<span class='warning'>[M]'s sweat sizzles and pops on contact with water!</span>")
|
||||
explosion(get_turf(M),0,0,2 * explosion_power)
|
||||
Alkali_fire_stage_5(M, A)
|
||||
M.IgniteMob()
|
||||
to_chat(M, "<span class='userdanger'>Your skin erupts into an inferno!</span>")
|
||||
M.emote("scream")
|
||||
if(M.fire_stacks < 0)
|
||||
M.visible_message("<span class='warning'>[M]'s sweat sizzles and pops on contact with water!</span>")
|
||||
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
|
||||
|
||||
@@ -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, "<span class='warning'>[pick("You feel a sudden pain across your body.", "Drops of blood appear suddenly on your skin.")]</span>")
|
||||
if(4,5)
|
||||
to_chat(M, "<span class='userdanger'>[pick("You cringe as a violent pain takes over your body.", "It feels like your body is eating itself inside out.", "IT HURTS.")]</span>")
|
||||
Flesheat(M, A)
|
||||
return
|
||||
if(4,5)
|
||||
to_chat(M, "<span class='userdanger'>[pick("You cringe as a violent pain takes over your body.", "It feels like your body is eating itself inside out.", "IT HURTS.")]</span>")
|
||||
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, "<span class='warning'>[pick("You feel your body break apart.", "Your skin rubs off like dust.")]</span>")
|
||||
if(4,5)
|
||||
to_chat(M, "<span class='userdanger'>[pick("You feel your muscles weakening.", "Your skin begins detaching itself.", "You feel sandy.")]</span>")
|
||||
Flesh_death(M, A)
|
||||
return
|
||||
if(4,5)
|
||||
if(prob(base_message_chance / 2)) //reduce spam
|
||||
to_chat(M, "<span class='userdanger'>[pick("You feel your muscles weakening.", "Some of your skin detaches itself.", "You feel sandy.")]</span>")
|
||||
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
|
||||
@@ -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, "<span class='warning'>[pick("Your skin feels itchy.", "You feel light headed.")]</span>")
|
||||
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, "<span class='warning'>[pick("Your skin feels itchy.", "You feel light headed.")]</span>")
|
||||
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()
|
||||
|
||||
@@ -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, "<span class='warning'>[pick("Something appears in your peripheral vision, then winks out.", "You hear a faint whispher with no source.", "Your head aches.")]</span>")
|
||||
if(3, 4)
|
||||
to_chat(M, "<span class='danger'>[pick("Something is following you.", "You are being watched.", "You hear a whisper in your ear.", "Thumping footsteps slam toward you from nowhere.")]</span>")
|
||||
else
|
||||
to_chat(M, "<span class='userdanger'>[pick("Oh, your head...", "Your head pounds.", "They're everywhere! Run!", "Something in the shadows...")]</span>")
|
||||
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, "<span class='notice'>[pick("Something appears in your peripheral vision, then winks out.", "You hear a faint whispher with no source.", "Your head aches.")]</span>")
|
||||
else
|
||||
to_chat(M, "<span class='notice'>[pick(healthy_messages)]</span>")
|
||||
if(3, 4)
|
||||
if(prob(base_message_chance))
|
||||
if(!fake_healthy)
|
||||
to_chat(M, "<span class='danger'>[pick("Something is following you.", "You are being watched.", "You hear a whisper in your ear.", "Thumping footsteps slam toward you from nowhere.")]</span>")
|
||||
else
|
||||
to_chat(M, "<span class='notice'>[pick(healthy_messages)]</span>")
|
||||
else
|
||||
if(prob(base_message_chance))
|
||||
to_chat(M, "<span class='userdanger'>[pick("Oh, your head...", "Your head pounds.", "They're everywhere! Run!", "Something in the shadows...")]</span>")
|
||||
M.hallucination += (15 * power)
|
||||
|
||||
@@ -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, "<span class='warning'>[pick("Your head hurts.", "Your head starts pounding.")]</span>")
|
||||
return
|
||||
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, "<span class='warning'>[pick("Your head hurts.", "Your head pounds.")]</span>")
|
||||
if(power >= 2)
|
||||
to_chat(M, "<span class='warning'>[pick("Your head hurts a lot.", "Your head pounds incessantly.")]</span>")
|
||||
M.adjustStaminaLoss(25)
|
||||
if(power >= 3)
|
||||
to_chat(M, "<span class='userdanger'>[pick("Your head hurts!", "You feel a burning knife inside your brain!", "A wave of pain fills your head!")]</span>")
|
||||
M.Stun(35)
|
||||
@@ -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]
|
||||
|
||||
@@ -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, "<span class='warning'>Your [pick("back", "arm", "leg", "elbow", "head")] itches.</span>")
|
||||
return
|
||||
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, "<span class='warning'>Your [pick("back", "arm", "leg", "elbow", "head")] itches. [can_scratch ? " You scratch it." : ""]</span>")
|
||||
if(can_scratch)
|
||||
M.adjustBruteLoss(0.5)
|
||||
@@ -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, "<span class='warning'>You feel tired.</span>")
|
||||
if(2)
|
||||
if(prob(10))
|
||||
to_chat(M, "<span class='warning'>You feel very tired.</span>")
|
||||
sleepy_ticks += rand(10,14)
|
||||
if(stamina)
|
||||
M.adjustStaminaLoss(10)
|
||||
if(3)
|
||||
if(prob(15))
|
||||
to_chat(M, "<span class='warning'>You try to focus on staying awake.</span>")
|
||||
sleepy_ticks += rand(10,14)
|
||||
if(stamina)
|
||||
M.adjustStaminaLoss(15)
|
||||
if(4)
|
||||
if(prob(20))
|
||||
to_chat(M, "<span class='warning'>You nod off for a moment.</span>")
|
||||
sleepy_ticks += rand(10,14)
|
||||
if(stamina)
|
||||
M.adjustStaminaLoss(20)
|
||||
if(5)
|
||||
if(prob(25))
|
||||
to_chat(M, "<span class='warning'>[pick("So tired...","You feel very sleepy.","You have a hard time keeping your eyes open.","You try to stay awake.")]</span>")
|
||||
M.drowsyness = max(M.drowsyness, 2)
|
||||
sleepy_ticks += rand(10,14)
|
||||
if(stamina)
|
||||
M.adjustStaminaLoss(30)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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, "<span class='notice'>[pick("Your lungs feel great.", "You realize you haven't been breathing.", "You don't feel the need to breathe.")]</span>")
|
||||
return
|
||||
|
||||
@@ -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, "<span class='warning'>You can't feel anything.</span>")
|
||||
- if(2)
|
||||
- to_chat(M, "<span class='warning'>You feel absolutely hammered.</span>")
|
||||
- if(prob(10))
|
||||
- sleepy_ticks += rand(10,14)
|
||||
- if(3)
|
||||
- M.reagents.add_reagent("ethanol",rand(5,7))
|
||||
- to_chat(M, "<span class='warning'>You try to focus on not dying.</span>")
|
||||
- if(prob(15))
|
||||
- sleepy_ticks += rand(10,14)
|
||||
- if(4)
|
||||
- M.reagents.add_reagent("ethanol",rand(6,10))
|
||||
- to_chat(M, "<span class='warning'>u can count 2 potato!</span>")
|
||||
- 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, "<span class='warning'>You start to feel tired...</span>")
|
||||
- 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
|
||||
@@ -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, "<span class='warning'>[pick("Your scalp itches.", "Your skin feels flakey.")]</span>")
|
||||
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, "<span class='warning'>Your hair starts to fall out in clumps...</span>")
|
||||
addtimer(CALLBACK(src, .proc/Shed, H, FALSE), 50)
|
||||
if(5)
|
||||
if(!(H.facial_hair_style == "Shaved") || !(H.hair_style == "Bald"))
|
||||
to_chat(H, "<span class='warning'>Your hair starts to fall out in clumps...</span>")
|
||||
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, "<span class='warning'>Your hair starts to fall out in clumps...</span>")
|
||||
addtimer(CALLBACK(src, .proc/Shed, H, FALSE), 50)
|
||||
if(5)
|
||||
if(!(H.facial_hair_style == "Shaved") || !(H.hair_style == "Bald"))
|
||||
to_chat(H, "<span class='warning'>Your hair starts to fall out in clumps...</span>")
|
||||
addtimer(CALLBACK(src, .proc/Shed, H, TRUE), 50)
|
||||
|
||||
/datum/symptom/shedding/proc/Shed(mob/living/carbon/human/H, fullbald)
|
||||
if(fullbald)
|
||||
|
||||
@@ -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, "<span class='warning'>[pick("You feel cold.", "You start shivering.")]</span>")
|
||||
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, "<span class='warning'>[pick("You feel cold.", "You shiver.")]</span>")
|
||||
else
|
||||
to_chat(M, "<span class='userdanger'>[pick("You feel your blood run cold.", "You feel ice in your veins.", "You feel like you can't heat up.", "You shiver violently." )]</span>")
|
||||
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
|
||||
@@ -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("<span class='warning'>[H] looks a bit pale...</span>", "<span class='notice'>Your skin suddenly appears lighter...</span>")
|
||||
|
||||
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("<span class='warning'>[H] looks a bit pale...</span>", "<span class='notice'>Your skin suddenly appears lighter...</span>")
|
||||
|
||||
|
||||
/*
|
||||
@@ -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("<span class='warning'>[H] looks a bit dark...</span>", "<span class='notice'>Your skin suddenly appears darker...</span>")
|
||||
|
||||
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("<span class='warning'>[H] looks a bit dark...</span>", "<span class='notice'>Your skin suddenly appears darker...</span>")
|
||||
|
||||
@@ -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
|
||||
else
|
||||
M.emote("sneeze")
|
||||
A.spread(A.holder, 4 + power)
|
||||
@@ -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
|
||||
|
||||
@@ -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, "<span class='notice'>You feel off, but no different from before.</span>")
|
||||
if(5)
|
||||
to_chat(M, "<span class='notice'>You feel better, but nothing interesting happens.</span>")
|
||||
|
||||
/*
|
||||
//////////////////////////////////////
|
||||
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, "<span class='notice'>You feel better, but no different from before.</span>")
|
||||
if(5)
|
||||
to_chat(M, "<span class='notice'>You feel off, but nothing interesting happens.</span>")
|
||||
|
||||
/*
|
||||
//////////////////////////////////////
|
||||
|
||||
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, "<span class='notice'>You suddenly feel healthy.</span>")
|
||||
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
|
||||
|
||||
@@ -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, "<span class='userdanger'>You go blind!</span>")
|
||||
@@ -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, "<span class='warning'>[pick("Your throat hurts.", "You clear your throat.")]</span>")
|
||||
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)
|
||||
|
||||
@@ -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, "<span class='warning'>[pick("You feel nauseous.", "You feel like you're going to throw up!")]</span>")
|
||||
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)
|
||||
@@ -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, "<span class='warning'>[pick("You feel blubbery.", "Your stomach hurts.")]</span>")
|
||||
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, "<span class='warning'>[pick("You feel blubbery.", "Your stomach hurts.")]</span>")
|
||||
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, "<span class='warning'>[pick("You feel hungry.", "You crave for food.")]</span>")
|
||||
else
|
||||
to_chat(M, "<span class='warning'><i>[pick("So hungry...", "You'd kill someone for a bite of food...", "Hunger cramps seize you...")]</i></span>")
|
||||
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, "<span class='warning'>[pick("You feel hungry.", "You crave for food.")]</span>")
|
||||
else
|
||||
to_chat(M, "<span class='warning'><i>[pick("So hungry...", "You'd kill someone for a bite of food...", "Hunger cramps seize you...")]</i></span>")
|
||||
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
|
||||
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
|
||||
@@ -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, "<span class='notice'>You haven't had this much energy in years!</span>")
|
||||
if(2)
|
||||
if(H.age > 36)
|
||||
H.age = 36
|
||||
to_chat(H, "<span class='notice'>You're suddenly in a good mood.</span>")
|
||||
if(3)
|
||||
if(H.age > 31)
|
||||
H.age = 31
|
||||
to_chat(H, "<span class='notice'>You begin to feel more lithe.</span>")
|
||||
if(4)
|
||||
if(H.age > 26)
|
||||
H.age = 26
|
||||
to_chat(H, "<span class='notice'>You feel reinvigorated.</span>")
|
||||
if(5)
|
||||
if(H.age > 21)
|
||||
H.age = 21
|
||||
to_chat(H, "<span class='notice'>You feel like you can take on the world!</span>")
|
||||
|
||||
return
|
||||
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, "<span class='notice'>You haven't had this much energy in years!</span>")
|
||||
if(2)
|
||||
if(H.age > 36)
|
||||
H.age = 36
|
||||
to_chat(H, "<span class='notice'>You're suddenly in a good mood.</span>")
|
||||
if(3)
|
||||
if(H.age > 31)
|
||||
H.age = 31
|
||||
to_chat(H, "<span class='notice'>You begin to feel more lithe.</span>")
|
||||
if(4)
|
||||
if(H.age > 26)
|
||||
H.age = 26
|
||||
to_chat(H, "<span class='notice'>You feel reinvigorated.</span>")
|
||||
if(5)
|
||||
if(H.age > 21)
|
||||
H.age = 21
|
||||
to_chat(H, "<span class='notice'>You feel like you can take on the world!</span>")
|
||||
Reference in New Issue
Block a user