Reverse Engineering Virology from Beeviro

Attempted to fix virology as the current addition/changes were incomplete with the individual working on it just disappearing and just leaving it in it's current state, this change will revert back virology to the old system with the old symptoms and stats as it was before. (hopefully)
This commit is contained in:
Chemlight
2020-07-13 15:57:22 -07:00
parent 0f680c03c6
commit ee62657a24
38 changed files with 551 additions and 1350 deletions
-2
View File
@@ -354,12 +354,10 @@
else
RemoveSymptom(pick(symptoms))
symptoms += S
S.OnAdd(src)
// Simply removes the symptom.
/datum/disease/advance/proc/RemoveSymptom(datum/symptom/S)
symptoms -= S
S.OnRemove(src)
// Neuter a symptom, so it will only affect stats
/datum/disease/advance/proc/NeuterSymptom(datum/symptom/S)
+1 -1
View File
@@ -21,7 +21,7 @@
name = "Experimental Disease"
copy_type = /datum/disease/advance
/datum/disease/advance/random/New(max_symptoms, max_level = 9)
/datum/disease/advance/random/New(max_symptoms, max_level = 8)
if(!max_symptoms)
max_symptoms = rand(1, VIRUS_SYMPTOM_LIMIT)
var/list/datum/symptom/possible_symptoms = list()
@@ -1,74 +0,0 @@
/datum/symptom/beesease
name = "Bee Infestation"
desc = "Causes the host to cough toxin bees and occasionally synthesize toxin."
stealth = -2
resistance = 14
stage_speed = 1
transmittable = 1
level = 9
severity = 5
symptom_delay_min = 5
symptom_delay_max = 20
var/honey = FALSE
var/toxic_bees= FALSE
threshold_desc = "<b>Resistance 14:</b> The bees become symbiotic with the host, synthesizing honey and no longer stinging the stomach lining, and no longer attacking the host.<br>\
<b>Transmission 10:</b> Bees now contain a completely random toxin, unless resistance exceeds 14"
/datum/symptom/beesease/Start(datum/disease/advance/A)
if(!..())
return
if(A.properties["resistance"] >= 14)
honey = TRUE
severity = 0
if(A.properties["transmittable"] >= 10)
toxic_bees = TRUE
/datum/symptom/beesease/Activate(datum/disease/advance/A)
if(!..())
return
var/mob/living/M = A.affected_mob
switch(A.stage)
if(2)
if(prob(2))
to_chat(M, "<span class='notice'>You taste honey in your mouth.</span>")
if(3)
if(prob(15))
to_chat(M, "<span class='notice'>Your stomach tingles.</span>")
if(prob(15))
if(honey)
to_chat(M, "<span class='notice'>You can't get the taste of honey out of your mouth!.</span>")
M.reagents.add_reagent(/datum/reagent/consumable/honey, 2)
else
to_chat(M, "<span class='danger'>Your stomach stings painfully.</span>")
M.adjustToxLoss(5)
M.updatehealth()
if(4, 5)
if(honey)
ADD_TRAIT(M, TRAIT_BEEFRIEND, DISEASE_TRAIT)
if(prob(15))
to_chat(M, "<span class='notice'>Your stomach squirms.</span>")
if(prob(25))
if(honey)
to_chat(M, "<span class='notice'>You can't get the taste of honey out of your mouth!.</span>")
M.reagents.add_reagent_list(list(/datum/reagent/consumable/honey = 10, /datum/reagent/consumable/honey/special = 5, /datum/reagent/medicine/insulin = 5)) //insulin prevents hyperglycemic shock
else
to_chat(M, "<span class='danger'>Your stomach stings painfully.</span>")
M.adjustToxLoss(5)
M.updatehealth()
if(prob(10))
M.visible_message("<span class='danger'>[M] buzzes.</span>", \
"<span class='userdanger'>Your stomach buzzes violently!</span>")
if(prob(15))
to_chat(M, "<span class='danger'>You feel something moving in your throat.</span>")
if(prob(10))
M.visible_message("<span class='danger'>[M] coughs up a bee!</span>", \
"<span class='userdanger'>You cough up a bee!</span>")
if(toxic_bees)
new /mob/living/simple_animal/hostile/poison/bees/toxin(M.loc)
else
new /mob/living/simple_animal/hostile/poison/bees(M.loc)
/datum/symptom/beesease/End(datum/disease/advance/A)
if(!..())
return
REMOVE_TRAIT(A.affected_mob, TRAIT_BEEFRIEND, DISEASE_TRAIT)
@@ -1,52 +0,0 @@
/datum/symptom/braindamage
name = "Neural Decay"
desc = "Causes the host's brain cells to naturally die off, causing severe brain damage."
stealth = 1
resistance = -2
stage_speed = -3
transmittable = -1
level = 8
severity = 5
symptom_delay_min = 15
symptom_delay_max = 60
var/lethal = FALSE
var/moretrauma = FALSE
threshold_desc = "<b>transmission 12:</b> The disease's damage reaches lethal levels.<br>\
<b>Speed 9:</b> Host's brain develops even more traumas than normal."
/datum/symptom/braindamage/Start(datum/disease/advance/A)
if(!..())
return
if(A.properties["transmission"] >= 12)
lethal = TRUE
if(A.properties["speed"] >= 9)
moretrauma = TRUE
/datum/symptom/braindamage/Activate(datum/disease/advance/A)
if(!..())
return
var/mob/living/M = A.affected_mob
switch(A.stage)
if(1)
if(prob(10))
to_chat(M, "<span class='notice'>Your head feels strange...</span>")
if(2, 3)
if(prob(10))
to_chat(M, "<span class='danger'>Your brain begins hurting...</span>")
if(4, 5)
if(lethal)
if(prob(35))
A.affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, rand(5,90), 200)
to_chat(M, "<span class='danger'>Your brain hurts immensely!</span>")
else
if(prob(35))
A.affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, rand(5,90), 120)
to_chat(M, "<span class='danger'>Your head hurts immensely!</span>")
if(moretrauma && A.stage == 5)
givetrauma(A, 10)
/datum/symptom/braindamage/proc/givetrauma(datum/disease/advance/A, chance)
if(prob(chance))
if(ishuman(A.affected_mob))
var/mob/living/carbon/human/M = A.affected_mob
M?.gain_trauma(BRAIN_TRAUMA_MILD)
@@ -1,6 +1,73 @@
/*
//////////////////////////////////////
Choking
Very very noticable.
Lowers resistance.
Decreases stage speed.
Decreases transmittablity tremendously.
Moderate Level.
Bonus
Inflicts spikes of oxyloss
//////////////////////////////////////
*/
/datum/symptom/choking
name = "Choking"
desc = "The virus causes inflammation of the host's air conduits, leading to intermittent choking."
stealth = -3
resistance = -2
stage_speed = -2
transmittable = -4
level = 3
severity = 3
base_message_chance = 15
symptom_delay_min = 10
symptom_delay_max = 30
threshold_desc = "<b>Stage Speed 8:</b> Causes choking more frequently.<br>\
<b>Stealth 4:</b> The symptom remains hidden until active."
/datum/symptom/choking/Start(datum/disease/advance/A)
if(!..())
return
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)
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='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)
M.adjustOxyLoss(rand(6,13))
return 1
/datum/symptom/choking/proc/Choke(mob/living/M, datum/disease/advance/A)
M.adjustOxyLoss(rand(10,18))
return 1
/*
//////////////////////////////////////
Asphyxiation
Very very noticable.
@@ -23,7 +90,7 @@ Bonus
resistance = -0
stage_speed = -1
transmittable = -2
level = 9
level = 7
severity = 6
base_message_chance = 15
symptom_delay_min = 14
@@ -1,58 +0,0 @@
/datum/symptom/cockroach
name = "SBG Syndrome"
desc = "ERROR: BLUESPACE INTERFERENCE RENDERS COMPLETE ANALYSIS IMPOSSIBLE"
stealth = 0
resistance = 3
stage_speed = 3
transmittable = 1
level = 0
severity = 6 //the joke here is that this relatively mundane and harmless symptom, which only spawns cockroaches, seems incredibly frightening
symptom_delay_min = 10
symptom_delay_max = 30
var/death_roaches = FALSE
threshold_desc = "<b>Stage Speed 8:</b> CALCULATIONS FORECAST HEIGHTENED ACTIVITY<br>\
<b>Transmission 8:</b> CALCULATIONS FORECAST BRIEFLY ESCALATED ACTIVITY IMMEDIATELY FOLLOWING CESSATION OF HOST LIFESIGNS<br>"
/datum/symptom/cockroach/Start(datum/disease/advance/A)
if(!..())
return
if(A.properties["stage_speed"] >= 8)
symptom_delay_min = 5
symptom_delay_max = 15
if(A.properties["transmittable"] >= 8)
death_roaches = TRUE
/datum/symptom/cockroach/Activate(datum/disease/advance/A)
if(!..())
return
var/mob/living/M = A.affected_mob
switch(A.stage)
if(2)
if(prob(50))
to_chat(M, "<span class='notice'>You feel a tingle under your skin</span>")
if(3)
if(prob(50))
to_chat(M, "<span class='notice'>Your pores feel drafty.</span>")
if(prob(5))
to_chat(M, "<span class='notice'>You feel attuned to the atmosphere</span>")
if(4)
if(prob(50))
to_chat(M, "<span class='notice'>You feel in tune with the station</span>")
if(5)
if(prob(30))
M.visible_message("<span class='danger'>[M] squirms as a cockroach crawls from their pores!</span>", \
"<span class='userdanger'>A cockroach crawls out of your face!!</span>")
new /mob/living/simple_animal/cockroach(M.loc)
if(prob(50))
to_chat(M, "<span class='notice'>You feel something crawling in your pipes!</span>")
/datum/symptom/cockroach/OnDeath(datum/disease/advance/A)
if(!..())
return
if(death_roaches)
var/mob/living/M = A.affected_mob
to_chat(M, "<span class='warning'>Your pores explode into a colony of roaches!</span>")
for(var/i in 1 to rand(1,5))
new /mob/living/simple_animal/cockroach(M.loc)
+12 -19
View File
@@ -20,9 +20,9 @@ Bonus
name = "Spontaneous Combustion"
desc = "The virus turns fat into an extremely flammable compound, and raises the body's temperature, making the host burst into flames spontaneously."
stealth = 1
resistance = -2
stage_speed = -3
transmittable = -3
resistance = -4
stage_speed = -4
transmittable = -4
level = 6
severity = 5
base_message_chance = 20
@@ -67,22 +67,18 @@ Bonus
/datum/symptom/fire/proc/Firestacks_stage_4(mob/living/M, datum/disease/advance/A)
M.adjust_fire_stacks(1 * power)
M.take_overall_damage(burn = 3 * power, required_status = BODYPART_ORGANIC)
M.adjustFireLoss(3 * power)
if(infective)
A.spread(2)
return 1
/datum/symptom/fire/proc/Firestacks_stage_5(mob/living/M, datum/disease/advance/A)
if(HAS_TRAIT(M, TRAIT_FAT))
M.adjust_fire_stacks(6 * power)
else
M.adjust_fire_stacks(3 * power)
M.take_overall_damage(burn = 5 * power, required_status = BODYPART_ORGANIC)
M.adjust_fire_stacks(3 * power)
M.adjustFireLoss(5 * power)
if(infective)
A.spread(4)
return 1
/*
//////////////////////////////////////
@@ -109,7 +105,7 @@ Bonus
resistance = -2
stage_speed = -2
transmittable = -2
level = 9
level = 7
severity = 6
base_message_chance = 100
symptom_delay_min = 30
@@ -141,9 +137,6 @@ Bonus
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)
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),-1,(-1 + explosion_power),(2 * explosion_power))
Alkali_fire_stage_4(M, A)
M.IgniteMob()
to_chat(M, "<span class='userdanger'>Your sweat bursts into flames!</span>")
@@ -151,7 +144,7 @@ Bonus
if(5)
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),-1,(-1 + explosion_power),(2 * explosion_power))
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>")
@@ -160,15 +153,15 @@ Bonus
/datum/symptom/alkali/proc/Alkali_fire_stage_4(mob/living/M, datum/disease/advance/A)
var/get_stacks = 6 * power
M.adjust_fire_stacks(get_stacks)
M.take_overall_damage(burn = get_stacks / 2, required_status = BODYPART_ORGANIC)
M.adjustFireLoss(get_stacks/2)
if(chems)
M.reagents.add_reagent(/datum/reagent/clf3, 2 * power)
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 = 8 * power
M.adjust_fire_stacks(get_stacks)
M.take_overall_damage(burn = get_stacks, required_status = BODYPART_ORGANIC)
M.adjustFireLoss(get_stacks)
if(chems)
M.reagents.add_reagent_list(list(/datum/reagent/napalm = 4 * power, /datum/reagent/clf3 = 4 * power))
M.reagents.add_reagent_list(list("napalm" = 4 * power, "clf3" = 4 * power))
return 1
@@ -55,9 +55,9 @@ Bonus
/datum/symptom/flesh_eating/proc/Flesheat(mob/living/M, datum/disease/advance/A)
var/get_damage = rand(15,25) * power
M.take_overall_damage(brute = get_damage, required_status = BODYPART_ORGANIC)
M.adjustBruteLoss(get_damage)
if(pain)
M.adjustStaminaLoss(get_damage * 2)
M.adjustStaminaLoss(get_damage)
if(bleed)
if(ishuman(M))
var/mob/living/carbon/human/H = M
@@ -84,12 +84,12 @@ Bonus
/datum/symptom/flesh_death
name = "Autophagocytosis Necrosis"
desc = "The virus rapidly consumes infected cells, leading to heavy and widespread damage. Contains dormant prions- expert virologists believe it to be the precursor to Romerol, though the mechanism through which they are activated is largely unknown"
desc = "The virus rapidly consumes infected cells, leading to heavy and widespread damage."
stealth = -2
resistance = -2
stage_speed = 1
transmittable = -2
level = 9
level = 7
severity = 6
base_message_chance = 50
symptom_delay_min = 3
@@ -106,8 +106,6 @@ Bonus
suppress_warning = TRUE
if(A.properties["stage_rate"] >= 7) //bleeding and hunger
chems = TRUE
if((A.properties["stealth"] >= 2) && (A.properties["stage_rate"] >= 12))
zombie = TRUE
/datum/symptom/flesh_death/Activate(datum/disease/advance/A)
if(!..())
@@ -124,12 +122,9 @@ Bonus
/datum/symptom/flesh_death/proc/Flesh_death(mob/living/M, datum/disease/advance/A)
var/get_damage = rand(6,10)
M.take_overall_damage(brute = get_damage, required_status = BODYPART_ORGANIC)
M.adjustBruteLoss(get_damage)
if(chems)
M.reagents.add_reagent_list(list(/datum/reagent/toxin/heparin = 2, /datum/reagent/toxin/lipolicide = 2))
M.reagents.add_reagent_list(list("heparin" = 2, "lipolicide" = 2))
if(zombie)
if(ishuman(A.affected_mob))
if(!A.affected_mob.getorganslot(ORGAN_SLOT_ZOMBIE))
var/obj/item/organ/zombie_infection/ZI = new()
ZI.Insert(M)
M.reagents.add_reagent("romerol", 1)
return 1
@@ -1,82 +0,0 @@
/*
//////////////////////////////////////
DNA Saboteur
Very noticable.
Lowers resistance tremendously.
No changes to stage speed.
Decreases transmittablity tremendously.
Fatal Level.
Bonus
Cleans the DNA of a person and then randomly gives them a trait.
//////////////////////////////////////
*/
/datum/symptom/genetic_mutation
name = "Deoxyribonucleic Acid Saboteur"
desc = "The virus bonds with the DNA of the host, causing damaging mutations until removed."
stealth = -2
resistance = -3
stage_speed = 0
transmittable = -3
level = 6
severity = 4
var/list/possible_mutations
var/archived_dna = null
base_message_chance = 50
symptom_delay_min = 60
symptom_delay_max = 120
var/no_reset = FALSE
threshold_desc = "<b>Resistance 8:</b> Causes two harmful mutations at once.<br>\
<b>Stage Speed 10:</b> Increases mutation frequency.<br>\
<b>Stage Speed 14:</b> Mutations will be beneficial.<br>\
<b>Stealth 5:</b> The mutations persist even if the virus is cured."
/datum/symptom/genetic_mutation/Activate(datum/disease/advance/A)
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)
// Archive their DNA before they were infected.
/datum/symptom/genetic_mutation/Start(datum/disease/advance/A)
if(!..())
return
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
if(A.properties["stage_rate"] >= 14)
possible_mutations = (GLOB.good_mutations | GLOB.not_good_mutations) - GLOB.all_mutations[RACEMUT]
else
possible_mutations = (GLOB.bad_mutations | GLOB.not_good_mutations) - GLOB.all_mutations[RACEMUT]
var/mob/living/carbon/M = A.affected_mob
if(M)
if(!M.has_dna())
return
archived_dna = M.dna.mutation_index
// Give them back their old DNA when cured.
/datum/symptom/genetic_mutation/End(datum/disease/advance/A)
if(!..())
return
if(!no_reset)
var/mob/living/carbon/M = A.affected_mob
if(M && archived_dna)
if(!M.has_dna())
return
M.dna.mutation_index = archived_dna
M.domutcheck()
@@ -18,23 +18,23 @@ Bonus
/datum/symptom/hallucigen
name = "Hallucigen"
desc = "The virus stimulates the brain, causing occasional hallucinations."
stealth = 1
stealth = -2
resistance = -3
stage_speed = -1
stage_speed = -3
transmittable = -1
level = 5
severity = 2
base_message_chance = 25
symptom_delay_min = 10
symptom_delay_max = 70
symptom_delay_min = 25
symptom_delay_max = 90
var/fake_healthy = FALSE
threshold_desc = "<b>Stage Speed 7:</b> Increases the amount of hallucinations.<br>\
<b>Stealth 2:</b> The virus mimics positive symptoms.."
<b>Stealth 4:</b> The virus mimics positive symptoms.."
/datum/symptom/hallucigen/Start(datum/disease/advance/A)
if(!..())
return
if(A.properties["stealth"] >= 2) //fake good symptom messages
if(A.properties["stealth"] >= 4) //fake good symptom messages
fake_healthy = TRUE
base_message_chance = 50
if(A.properties["stage_rate"] >= 7) //stronger hallucinations
+291 -240
View File
@@ -5,7 +5,7 @@
resistance = 0
stage_speed = 0
transmittable = 0
level = -1 //not obtainable
level = 0 //not obtainable
base_message_chance = 20 //here used for the overlays
symptom_delay_min = 1
symptom_delay_max = 1
@@ -43,6 +43,59 @@
/datum/symptom/heal/proc/passive_message_condition(mob/living/M)
return TRUE
/datum/symptom/heal/starlight
name = "Starlight Condensation"
desc = "The virus reacts to direct starlight, producing regenerative chemicals. Works best against toxin-based damage."
stealth = -1
resistance = -2
stage_speed = 0
transmittable = 1
level = 6
passive_message = "<span class='notice'>You miss the feeling of starlight on your skin.</span>"
var/nearspace_penalty = 0.3
threshold_desc = "<b>Stage Speed 6:</b> Increases healing speed.<br>\
<b>Transmission 6:</b> Removes penalty for only being close to space."
/datum/symptom/heal/starlight/Start(datum/disease/advance/A)
if(!..())
return
if(A.properties["transmittable"] >= 6)
nearspace_penalty = 1
if(A.properties["stage_rate"] >= 6)
power = 2
/datum/symptom/heal/starlight/CanHeal(datum/disease/advance/A)
var/mob/living/M = A.affected_mob
if(istype(get_turf(M), /turf/open/space))
return power
else
for(var/turf/T in view(M, 2))
if(istype(T, /turf/open/space))
return power * nearspace_penalty
/datum/symptom/heal/starlight/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power)
var/heal_amt = actual_power
if(M.getToxLoss() && prob(5))
to_chat(M, "<span class='notice'>Your skin tingles as the starlight seems to heal you.</span>")
M.adjustToxLoss(-(4 * heal_amt)) //most effective on toxins
var/list/parts = M.get_damaged_bodyparts(1,1)
if(!parts.len)
return
for(var/obj/item/bodypart/L in parts)
if(L.heal_damage(heal_amt/parts.len, heal_amt/parts.len))
M.update_damage_overlays()
return 1
/datum/symptom/heal/starlight/passive_message_condition(mob/living/M)
if(M.getBruteLoss() || M.getFireLoss() || M.getToxLoss())
return TRUE
return FALSE
/datum/symptom/heal/chem
name = "Toxolysis"
stealth = 0
@@ -73,6 +126,89 @@
return 1
/datum/symptom/heal/metabolism
name = "Metabolic Boost"
stealth = -1
resistance = -2
stage_speed = 2
transmittable = 1
level = 7
var/triple_metabolism = FALSE
var/reduced_hunger = FALSE
desc = "The virus causes the host's metabolism to accelerate rapidly, making them process chemicals twice as fast,\
but also causing increased hunger."
threshold_desc = "<b>Stealth 3:</b> Reduces hunger rate.<br>\
<b>Stage Speed 10:</b> Chemical metabolization is tripled instead of doubled."
/datum/symptom/heal/metabolism/Start(datum/disease/advance/A)
if(!..())
return
if(A.properties["stage_rate"] >= 10)
triple_metabolism = TRUE
if(A.properties["stealth"] >= 3)
reduced_hunger = TRUE
/datum/symptom/heal/metabolism/Heal(mob/living/carbon/C, datum/disease/advance/A, actual_power)
if(!istype(C))
return
C.reagents.metabolize(C, can_overdose=TRUE) //this works even without a liver; it's intentional since the virus is metabolizing by itself
if(triple_metabolism)
C.reagents.metabolize(C, can_overdose=TRUE)
C.overeatduration = max(C.overeatduration - 2, 0)
var/lost_nutrition = 9 - (reduced_hunger * 5)
C.nutrition = max(C.nutrition - (lost_nutrition * HUNGER_FACTOR), 0) //Hunger depletes at 10x the normal speed
if(prob(2))
to_chat(C, "<span class='notice'>You feel an odd gurgle in your stomach, as if it was working much faster than normal.</span>")
return 1
/datum/symptom/heal/darkness
name = "Nocturnal Regeneration"
desc = "The virus is able to mend the host's flesh when in conditions of low light, repairing physical damage. More effective against brute damage."
stealth = 2
resistance = -1
stage_speed = -2
transmittable = -1
level = 6
passive_message = "<span class='notice'>You feel tingling on your skin as light passes over it.</span>"
threshold_desc = "<b>Stage Speed 8:</b> Doubles healing speed."
/datum/symptom/heal/darkness/Start(datum/disease/advance/A)
if(!..())
return
if(A.properties["stage_rate"] >= 8)
power = 2
/datum/symptom/heal/darkness/CanHeal(datum/disease/advance/A)
var/mob/living/M = A.affected_mob
var/light_amount = 0
if(isturf(M.loc)) //else, there's considered to be no light
var/turf/T = M.loc
light_amount = min(1,T.get_lumcount()) - 0.5
if(light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD)
return power
/datum/symptom/heal/darkness/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power)
var/heal_amt = 2 * actual_power
var/list/parts = M.get_damaged_bodyparts(1,1)
if(!parts.len)
return
if(prob(5))
to_chat(M, "<span class='notice'>The darkness soothes and mends your wounds.</span>")
for(var/obj/item/bodypart/L in parts)
if(L.heal_damage(heal_amt/parts.len, heal_amt/parts.len * 0.5)) //more effective on brute
M.update_damage_overlays()
return 1
/datum/symptom/heal/darkness/passive_message_condition(mob/living/M)
if(M.getBruteLoss() || M.getFireLoss())
return TRUE
return FALSE
/datum/symptom/heal/coma
name = "Regenerative Coma"
desc = "The virus causes the host to fall into a death-like coma when severely damaged, then rapidly fixes the damage."
@@ -148,268 +284,183 @@
return TRUE
return FALSE
/*
//////////////////////////////////////
im not even gonna bother with these for the following symptoms. typed em out, code was deleted, had to start over, read the symptoms yourself.
//////////////////////////////////////
*/
/datum/symptom/EMP
name = "Organic Flux Induction"
desc = "Causes electromagnetic interference around the subject"
stealth = -2
resistance = -1
stage_speed = 0
transmittable = -2
level = 6
severity = 4
symptom_delay_min = 15
symptom_delay_max = 40
var/bigemp = FALSE
var/cellheal = FALSE
threshold_desc = "<b>Stealth 4:</b> The disease resets cell DNA, quickly curing cell damage and mutations<br>\
<b>transmission 8:</b> The EMP affects electronics adjacent to the subject as well."
/datum/symptom/EMP/Start(datum/disease/advance/A)
if(!..())
return
if(A.properties["stealth"] >= 4)
cellheal = TRUE
if(A.properties["transmittable"] >= 8)
bigemp = TRUE
/datum/symptom/EMP/Activate(datum/disease/advance/A)
if(!..())
return
var/mob/living/carbon/M = A.affected_mob
switch(A.stage)
if(4, 5)
M.emp_act(EMP_HEAVY)
if(cellheal)
M.adjustCloneLoss(-40)
M.reagents.add_reagent(/datum/reagent/medicine/mutadone = 1)
if(bigemp)
empulse(M.loc, 0, 1)
to_chat(M, "<span class='userdanger'>[pick("Your mind fills with static!.", "You feel a jolt!", "Your sense of direction flickers out!")]</span>")
else
to_chat(M, "<span class='notice'>[pick("You feel a slight tug toward the station's wall.", "Nearby electronics flicker", "Your hair stands on end")]</span>")
return
/datum/symptom/sweat
name = "Hyperperspiration"
desc = "Causes the host to sweat profusely, leaving small water puddles and extnguishing small fires"
stealth = 1
/datum/symptom/heal/water
name = "Tissue Hydration"
desc = "The virus uses excess water inside and outside the body to repair damaged tissue cells. More effective against burns."
stealth = 0
resistance = -1
stage_speed = 0
transmittable = 1
level = 6
severity = 4
symptom_delay_min = 10
symptom_delay_max = 30
var/bigsweat = FALSE
var/toxheal = FALSE
threshold_desc = "<b>transmission 6:</b> The sweat production ramps up to the point that it cleans messes and puts out fires in the general vicinity<br>\
<b>transmission 8:</b> The EMP affects electronics adjacent to the subject as well."
passive_message = "<span class='notice'>Your skin feels oddly dry...</span>"
var/absorption_coeff = 1
threshold_desc = "<b>Resistance 5:</b> Water is consumed at a much slower rate.<br>\
<b>Stage Speed 7:</b> Increases healing speed."
/datum/symptom/sweat/Start(datum/disease/advance/A)
/datum/symptom/heal/water/Start(datum/disease/advance/A)
if(!..())
return
if(A.properties["transmittable"] >= 8)
toxheal = TRUE
if(A.properties["transmittable"] >= 6)
bigsweat = TRUE
/datum/symptom/sweat/Activate(datum/disease/advance/A)
if(!..())
return
var/mob/living/carbon/M = A.affected_mob
switch(A.stage)
if(4, 5)
M.adjust_fire_stacks(-5)
if(prob(30))
var/turf/open/OT = get_turf(M)
if(istype(OT))
to_chat(M, "<span class='danger'>The sweat pools into a puddle!</span>")
OT.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS)
if(bigsweat)
var/obj/effect/sweatsplash/S = new(M.loc)
if(toxheal)
for(var/datum/reagent/R in M.reagents.reagent_list) //Not just toxins!
M.reagents.remove_reagent(R.type, 5)
S.reagents.add_reagent(R.type, 5)
M.adjustToxLoss(-20, forced = TRUE)
S.splash()
to_chat(M, "<span class='userdanger'>You sweat out nearly everything in your body!</span>")
else
to_chat(M, "<span class='notice'>[pick("You feel moist.", "Your clothes are soaked", "You're sweating buckets")]</span>")
return
/obj/effect/sweatsplash
name = "Sweatsplash"
/obj/effect/sweatsplash/Initialize()
create_reagents(1000)
reagents.add_reagent(/datum/reagent/water, 10)
reagents.add_reagent(/datum/reagent/space_cleaner, 10)
obj/effect/sweatsplash/proc/splash()
chem_splash(loc, 2, list(reagents))
qdel(src)
/datum/symptom/teleport
name = "Thermal Retrostable Displacement"
desc = "When too hot or cold, the subject will return to a recent location they experienced safe homeostasis"
stealth = 1
resistance = 2
stage_speed = -2
transmittable = -3
level = 8
severity = 0
symptom_delay_min = 1
symptom_delay_max = 1
var/telethreshold = 0
var/burnheal = FALSE
var/turf/open/location_return = null
var/cooldowntimer = 0
threshold_desc = "<b>Resistance 8:</b> The disease acts on a smaller scale, resetting burnt tissue back to a state of health<br>\
<b>Transmission 8:</b> The disease becomes more active, activating in a smaller temperature range."
/datum/symptom/teleport/Start(datum/disease/advance/A)
if(!..())
return
if(A.properties["resistance"] >= 8)
burnheal = TRUE
if(A.properties["transmittable"] >= 8)
telethreshold = 25
if(A.properties["stage_rate"] >= 7)
power = 2
if(A.properties["stealth"] >= 2)
absorption_coeff = 0.25
/datum/symptom/teleport/Activate(datum/disease/advance/A)
/datum/symptom/heal/water/CanHeal(datum/disease/advance/A)
. = 0
var/mob/living/M = A.affected_mob
if(M.fire_stacks < 0)
M.fire_stacks = min(M.fire_stacks + 1 * absorption_coeff, 0)
. += power
if(M.reagents.has_reagent("holywater"))
M.reagents.remove_reagent("holywater", 0.5 * absorption_coeff)
. += power * 0.75
else if(M.reagents.has_reagent("water"))
M.reagents.remove_reagent("water", 0.5 * absorption_coeff)
. += power * 0.5
/datum/symptom/heal/water/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power)
var/heal_amt = 2 * actual_power
var/list/parts = M.get_damaged_bodyparts(1,1) //more effective on burns
if(!parts.len)
return
if(prob(5))
to_chat(M, "<span class='notice'>You feel yourself absorbing the water around you to soothe your damaged skin.</span>")
for(var/obj/item/bodypart/L in parts)
if(L.heal_damage(heal_amt/parts.len * 0.5, heal_amt/parts.len))
M.update_damage_overlays()
return 1
/datum/symptom/heal/water/passive_message_condition(mob/living/M)
if(M.getBruteLoss() || M.getFireLoss())
return TRUE
return FALSE
/datum/symptom/heal/plasma
name = "Plasma Fixation"
desc = "The virus draws plasma from the atmosphere and from inside the body to heal and stabilize body temperature."
stealth = 0
resistance = 3
stage_speed = -2
transmittable = -2
level = 8
passive_message = "<span class='notice'>You feel an odd attraction to plasma.</span>"
var/temp_rate = 1
threshold_desc = "<b>Transmission 6:</b> Increases temperature adjustment rate.<br>\
<b>Stage Speed 7:</b> Increases healing speed."
/datum/symptom/heal/plasma/Start(datum/disease/advance/A)
if(!..())
return
var/mob/living/carbon/M = A.affected_mob
switch(A.stage)
if(4, 5)
if(burnheal)
M.adjustFireLoss(-1 * power)
if(prob(5) && (M.bodytemperature < BODYTEMP_HEAT_DAMAGE_LIMIT || M.bodytemperature > BODYTEMP_COLD_DAMAGE_LIMIT))
location_return = get_turf(M) //sets up return point
if(prob(50))
to_chat(M, "<span class='userwarning'>The lukewarm temperature makes you feel strange!</span>")
if(cooldowntimer == 0 && (M.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT - telethreshold || M.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT + telethreshold || (burnheal && M.getFireLoss() > 75 - telethreshold)))
do_sparks(5,FALSE,M)
to_chat(M, "<span class='userdanger'>The change in temperature shocks you back to a previous spacial state!</span>")
do_teleport(M, location_return, 0, asoundin = 'sound/effects/phasein.ogg') //Teleports home
do_sparks(5,FALSE,M)
cooldowntimer = 10
if(burnheal)
M.adjust_fire_stacks(-10)
if(cooldowntimer > 0)
cooldowntimer --
else
if(prob(7))
to_chat(M, "<span class='notice'>[pick("Your warm breath fizzles out of existence.", "You feel attracted to temperate climates", "You feel like you're forgetting something")]</span>")
return
if(A.properties["stage_rate"] >= 7)
power = 2
if(A.properties["transmittable"] >= 6)
temp_rate = 4
/datum/symptom/growth
name = "Pituitary Disruption"
desc = "Causes uncontrolled growth in the subject"
stealth = -3
/datum/symptom/heal/plasma/CanHeal(datum/disease/advance/A)
var/mob/living/M = A.affected_mob
var/datum/gas_mixture/environment
var/plasmamount
. = 0
if(M.loc)
environment = M.loc.return_air()
if(environment)
plasmamount = environment.gases[/datum/gas/plasma]
if(plasmamount && plasmamount > GLOB.meta_gas_visibility[/datum/gas/plasma]) //if there's enough plasma in the air to see
. += power * 0.5
if(M.reagents.has_reagent("plasma"))
. += power * 0.75
/datum/symptom/heal/plasma/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power)
var/heal_amt = 4 * actual_power
if(prob(5))
to_chat(M, "<span class='notice'>You feel yourself absorbing plasma inside and around you...</span>")
if(M.bodytemperature > BODYTEMP_NORMAL)
M.adjust_bodytemperature(-20 * temp_rate * TEMPERATURE_DAMAGE_COEFFICIENT,BODYTEMP_NORMAL)
if(prob(5))
to_chat(M, "<span class='notice'>You feel less hot.</span>")
else if(M.bodytemperature < (BODYTEMP_NORMAL + 1))
M.adjust_bodytemperature(20 * temp_rate * TEMPERATURE_DAMAGE_COEFFICIENT,0,BODYTEMP_NORMAL)
if(prob(5))
to_chat(M, "<span class='notice'>You feel warmer.</span>")
M.adjustToxLoss(-heal_amt)
var/list/parts = M.get_damaged_bodyparts(1,1)
if(!parts.len)
return
if(prob(5))
to_chat(M, "<span class='notice'>The pain from your wounds fades rapidly.</span>")
for(var/obj/item/bodypart/L in parts)
if(L.heal_damage(heal_amt/parts.len, heal_amt/parts.len))
M.update_damage_overlays()
return 1
/datum/symptom/heal/radiation
name = "Radioactive Resonance"
desc = "The virus uses radiation to fix damage through dna mutations."
stealth = -1
resistance = -2
stage_speed = 1
transmittable = -2
level = 7
severity = 4
stage_speed = 2
transmittable = -3
level = 6
symptom_delay_min = 1
symptom_delay_max = 1
var/current_size = 1
var/tetsuo = FALSE
var/bruteheal = FALSE
threshold_desc = "<b>Stage Speed 8:</b> The disease heals brute damage at a fast rate, but causes expulsion of benign tumors<br>\
<b>Stage Speed 12:</b> The disease heals brute damage incredibly fast, but deteriorates cell health and causes tumors to become more advanced."
passive_message = "<span class='notice'>Your skin glows faintly for a moment.</span>"
var/cellular_damage = FALSE
threshold_desc = "<b>Transmission 6:</b> Additionally heals cellular damage.<br>\
<b>Resistance 7:</b> Increases healing speed."
/datum/symptom/growth/Start(datum/disease/advance/A)
/datum/symptom/heal/radiation/Start(datum/disease/advance/A)
if(!..())
return
if(A.properties["stage_rate"] >= 8)
bruteheal = TRUE
if(A.properties["stage_rate"] >= 12)
tetsuo = TRUE
if(A.properties["resistance"] >= 7)
power = 2
if(A.properties["transmittable"] >= 6)
cellular_damage = TRUE
/datum/symptom/growth/Activate(datum/disease/advance/A)
if(!..())
return
var/mob/living/carbon/M = A.affected_mob
var/newsize = current_size
switch(A.stage)
if(4, 5)
switch(A.properties["stage_rate"])
if(5 to 8)
newsize = 1.25
if(9 to 12)
newsize = 1.5
if(13 to 16)
newsize = 1.75
if(17 to INFINITY)
newsize = 2
M.resize = newsize/current_size
current_size = newsize
M.update_transform()
if(prob(5) && bruteheal)
to_chat(M, "<span class='userdanger'>You retch, and a splatter of gore escapes your gullet</span>")
M.Knockdown(40)
new /obj/effect/gibspawner/generic(M.loc)
if(prob(80))
new /obj/effect/spawner/lootdrop/teratoma/minor(M.loc)
if(tetsuo && prob(30))
new /obj/effect/spawner/lootdrop/teratoma/major(M.loc)
if(tetsuo && prob(10) && A.affected_mob.job == "Clown")
new /obj/effect/spawner/lootdrop/teratoma/major/clown(M.loc)
if(tetsuo)
M.adjustBruteLoss(-5)
if(prob(20))
M.adjustCloneLoss(1)
else if(bruteheal)
M.adjustBruteLoss(-1)
/datum/symptom/heal/radiation/CanHeal(datum/disease/advance/A)
var/mob/living/M = A.affected_mob
switch(M.radiation)
if(0)
return FALSE
if(1 to RAD_MOB_SAFE)
return 0.25
if(RAD_MOB_SAFE to RAD_BURN_THRESHOLD)
return 0.5
if(RAD_BURN_THRESHOLD to RAD_MOB_MUTATE)
return 0.75
if(RAD_MOB_MUTATE to RAD_MOB_KNOCKDOWN)
return 1
else
if(prob(5))
to_chat(M, "<span class='notice'>[pick("You feel bloated.", "The station seems small", "You are the strongest")]</span>")
return
return 1.5
/obj/effect/mob_spawn/teratomamonkey //spawning these is one of the downsides of overclocking the symptom
name = "fleshy mass"
desc = "A writhing mass of flesh."
icon = 'icons/mob/blob.dmi'
icon_state = "blob_spore_temp"
density = FALSE
anchored = FALSE
/datum/symptom/heal/radiation/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power)
var/heal_amt = actual_power
mob_type = /mob/living/carbon/monkey/tumor
mob_name = "a living tumor"
death = FALSE
roundstart = FALSE
flavour_text = {"
<b>You are a living teratoma, and your existence is misery. You feel the need to spread woe about the station- but not to kill.
"}
if(cellular_damage)
M.adjustCloneLoss(-heal_amt * 0.5)
/obj/effect/mob_spawn/teratomamonkey/Initialize()
. = ..()
var/area/A = get_area(src)
if(A)
notify_ghosts("A living tumor has been born in [A.name].", 'sound/effects/splat.ogg', source = src, action = NOTIFY_ATTACK, flashwindow = FALSE)
M.adjustToxLoss(-(2 * heal_amt))
/obj/effect/mob_spawn/teratomamonkey/attack_hand(mob/living/user)
. = ..()
if(.)
var/list/parts = M.get_damaged_bodyparts(1,1)
if(!parts.len)
return
to_chat(user, "<span class='notice'>Ew... It would be a bad idea to touch this. It could probably be destroyed with the extreme heat of a welder.</span>")
/obj/effect/mob_spawn/teratomamonkey/attackby(obj/item/W, mob/user, params)
if(W.tool_behaviour == TOOL_WELDER && user.a_intent != INTENT_HARM)
user.visible_message("<span class='warning'>[usr.name] destroys [src].</span>",
"<span class='notice'>You hold the welder to [src], and it violently bursts!</span>",
"<span class='italics'>You hear a gurgling noise</span>")
new /obj/effect/gibspawner/human(get_turf(src))
qdel(src)
else
..()
if(prob(4))
to_chat(M, "<span class='notice'>Your skin glows faintly, and you feel your wounds mending themselves.</span>")
for(var/obj/item/bodypart/L in parts)
if(L.heal_damage(heal_amt/parts.len, heal_amt/parts.len))
M.update_damage_overlays()
return 1
@@ -1,66 +0,0 @@
/*
//////////////////////////////////////
Heart Disease
A bit stealthy
Slightly resistant
Quite slow
small transmission penalty
max level
Bonus
heart attacks
//////////////////////////////////////
*/
/datum/symptom/heartattack
name = "Heart Disease"
desc = "This disease infiltrates the host's heart, causing cardiac arrest after a long incubation period"
stealth = 2
resistance = 1
stage_speed = -6
transmittable = -2
level = 9
severity = 6
symptom_delay_min = 1
symptom_delay_max = 1
var/heartattack = FALSE
threshold_desc = "<b>Transmission 10:</b> When the victim has a heart attack, their heart will pop right out of their chest, and attack!.<br>\
<b>Stealth 2:</b> The disease is somewhat less noticable to the host."
/datum/symptom/heartattack/Start(datum/disease/advance/A)
if(!..())
return
if(A.properties["transmittable"] >= 10)
heartattack = TRUE
if(A.properties["stealth"] >= 2)
suppress_warning = TRUE
/datum/symptom/heartattack/Activate(datum/disease/advance/A)
if(!..())
return
var/mob/living/carbon/M = A.affected_mob
if(suppress_warning && M.can_heartattack())
if(prob(2))
to_chat(M, "<span class='warning'>[pick("Your chest aches.", "You need to sit down.", "You feel out of breath.")]</span>")
else if(prob(2) && M.can_heartattack())
to_chat(M, "<span class='userdanger'>[pick("Your chest hurts!.", "You feel like your heart skipped a beat!")]</span>")
if(A.stage == 5)
if(M.getorgan(/obj/item/organ/heart) && M.can_heartattack())
if(prob(1) && prob(50))
M.set_heartattack(TRUE)
to_chat(M, "<span class='userdanger'>Your heart stops!</span>")
if(heartattack)
heartattack(M, A)
/datum/symptom/heartattack/proc/heartattack(mob/living/M, datum/disease/advance/A)
var/obj/item/organ/heart/heart = M.getorganslot(ORGAN_SLOT_HEART)
if(M.getorgan(/obj/item/organ/heart))
heart.Remove(M)
qdel(heart)
to_chat(M, "<span class='userdanger'>Your heart bursts out of your chest! It looks furious!</span>")
new /mob/living/simple_animal/hostile/heart(M.loc)
@@ -1,73 +0,0 @@
/datum/symptom/lubefeet
name = "Ducatopod"
desc = "The host now sweats industrial lubricant from their feet, lubing tiles they walk on. Combine with Pierrot's throat for the penultimate form of torture."
stealth = -4
resistance = -2
stage_speed = 4
transmittable = 1
level = 9
severity = 3
symptom_delay_min = 1
symptom_delay_max = 3
var/morelube = FALSE
var/clownshoes = TRUE
threshold_desc = "<b>Transmission 10:</b> The host sweats even more profusely, lubing almost every tile they walk over<br>\
<b>Resistance 12:</b> The host's feet turn into a pair of clown shoes."
/datum/symptom/lubefeet/Start(datum/disease/advance/A)
if(!..())
return
if(A.properties["transmission"] >= 10)
morelube = TRUE
if(A.properties["resistance"] >= 12)
clownshoes = TRUE
/datum/symptom/lubefeet/Activate(datum/disease/advance/A)
if(!..())
return
var/mob/living/M = A.affected_mob
switch(A.stage)
if(1, 2)
if(prob(15))
to_chat(M, "<span class='notice'>Your feet begin to sweat profusely...</span>")
if(3, 4)
to_chat(M, "<span class='danger'>You slide about inside your shoes!</span>")
if(A.stage == 4 || A.stage == 5)
if(morelube)
makelube(M, 40)
else
makelube(M, 20)
if(5)
to_chat(M, "<span class='danger'>You slide about inside your shoes!</span>")
if(A.stage == 4 || A.stage == 5)
if(morelube)
makelube(M, 99)
else
makelube(M, 50)
if(clownshoes)
give_clown_shoes(A)
/datum/symptom/lubefeet/proc/makelube(mob/living/carbon/M, chance)
if(prob(chance))
var/turf/open/OT = get_turf(M)
if(istype(OT))
to_chat(M, "<span class='danger'>The lube pools into a puddle!</span>")
OT.MakeSlippery(TURF_WET_LUBE, min_wet_time = 20 SECONDS, wet_time_to_add = 10 SECONDS)
/datum/symptom/lubefeet/End(datum/disease/advance/A)
..()
if(ishuman(A.affected_mob))
var/mob/living/carbon/human/M = A.affected_mob
if(istype(M.shoes, /obj/item/clothing/shoes/clown_shoes))
REMOVE_TRAIT(M.shoes, TRAIT_NODROP, DISEASE_TRAIT)
/datum/symptom/lubefeet/proc/give_clown_shoes(datum/disease/advance/A)
if(ishuman(A.affected_mob))
var/mob/living/carbon/human/M = A.affected_mob
if(!istype(M.shoes, /obj/item/clothing/shoes/clown_shoes))
if(!M.dropItemToGround(M.shoes))
qdel(M.shoes)
var/obj/item/clothing/C = new /obj/item/clothing/shoes/clown_shoes(M)
ADD_TRAIT(C, TRAIT_NODROP, DISEASE_TRAIT)
M.equip_to_slot_or_del(C, SLOT_SHOES)
return
@@ -15,13 +15,13 @@ Bonus
/datum/symptom/narcolepsy
name = "Narcolepsy"
desc = "The virus causes a hormone imbalance, making the host sleepy and narcoleptic."
stealth = 1
stealth = -1
resistance = -2
stage_speed = -3
transmittable = -2
transmittable = -4
level = 6
symptom_delay_min = 10
symptom_delay_max = 30
symptom_delay_min = 15
symptom_delay_max = 80
severity = 4
var/sleep_level = 0
var/sleepy_ticks = 0
@@ -35,8 +35,8 @@ Bonus
if(A.properties["transmittable"] >= 7) //stamina damage
stamina = TRUE
if(A.properties["resistance"] >= 10) //act more often
symptom_delay_min = 5
symptom_delay_max = 20
symptom_delay_min = 10
symptom_delay_max = 60
/datum/symptom/narcolepsy/Activate(var/datum/disease/advance/A)
var/mob/living/M = A.affected_mob
@@ -28,7 +28,7 @@ Bonus
symptom_delay_min = 1
symptom_delay_max = 1
var/regenerate_blood = FALSE
threshold_desc = "<b>Resistance 8:</b> Additionally regenerates lost blood.<br>"
threshold_desc = "<b>Resistance 8:</b>Additionally regenerates lost blood.<br>"
/datum/symptom/oxygen/Start(datum/disease/advance/A)
if(!..())
@@ -42,25 +42,11 @@ Bonus
var/mob/living/carbon/M = A.affected_mob
switch(A.stage)
if(4, 5)
ADD_TRAIT(M, TRAIT_NOBREATH, DISEASE_TRAIT)
M.adjustOxyLoss(-7, 0)
M.losebreath = max(0, M.losebreath - 4)
if(regenerate_blood && M.blood_volume < BLOOD_VOLUME_NORMAL)
if(regenerate_blood && M.blood_volume < (BLOOD_VOLUME_NORMAL * M.blood_ratio))
M.blood_volume += 1
else
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
/datum/symptom/oxygen/on_stage_change(new_stage, datum/disease/advance/A)
if(!..())
return FALSE
var/mob/living/carbon/M = A.affected_mob
if(A.stage <= 3)
REMOVE_TRAIT(M, TRAIT_NOBREATH, DISEASE_TRAIT)
return TRUE
/datum/symptom/oxygen/End(datum/disease/advance/A)
if(!..())
return
REMOVE_TRAIT(A.affected_mob, TRAIT_NOBREATH, DISEASE_TRAIT)
@@ -1,79 +0,0 @@
/datum/symptom/pierrot
name = "Pierrot's Throat"
desc = "Causes the host to honk randomly"
stealth = -1
resistance = 3
stage_speed = 1
transmittable = 2
level = 0
severity = 1
symptom_delay_min = 2
symptom_delay_max = 15
var/honkspread = FALSE
var/clownmask = FALSE
var/clumsy = FALSE
threshold_desc = "<b>Transmission 10:</b> There's a rare chance the disease is spread everytime the host honks.<br>\
<b>Resistance 10:</b> The host grows a peculiar clown mask.<br>\
<b>Resistance 15:</b> Host becomes clumsy, similar to a clown."
/datum/symptom/pierrot/Start(datum/disease/advance/A)
if(!..())
return
if(A.properties["transmission"] >= 10)
honkspread = TRUE
if(A.properties["resistance"] >= 10)
clownmask = TRUE
if(A.properties["resistance"] >= 15)
clumsy = TRUE
/datum/symptom/pierrot/Activate(datum/disease/advance/A)
if(!..())
return
var/mob/living/M = A.affected_mob
switch(A.stage)
if(1)
if(prob(30))
to_chat(M, "<span class='danger'>You feel a little silly.</span>")
if(2)
if(prob(30))
to_chat(M, "<span class='danger'>You start seeing rainbows.</span>")
if(3)
if(prob(30))
to_chat(M, "<span class='danger'>Your thoughts are interrupted by a loud <b>HONK!</b></span>")
playsound(M, 'sound/items/bikehorn.ogg', 50, 1)
if(4, 5)
if(clumsy)
if(!HAS_TRAIT(M, TRAIT_CLUMSY))
to_chat(M, "<span class='notice'>You feel dumber.</span>")
ADD_TRAIT(M, TRAIT_CLUMSY, DISEASE_TRAIT)
if(prob(30))
M.say( pick( list("HONK!", "Honk!", "Honk.", "Honk?", "Honk!!", "Honk?!", "Honk...") ))
if(A.stage == 5)
if(clownmask)
give_clown_mask(A)
if(prob(5))
playsound(M.loc, 'sound/items/bikehorn.ogg', 50, 1)
if(honkspread && prob(25))
A.spread(1)
/datum/symptom/pierrot/End(datum/disease/advance/A)
..()
if(!A.affected_mob.job == "Clown")
to_chat(A.affected_mob, "<span class='notice'>You feel less dumb.</span>")
REMOVE_TRAIT(A.affected_mob, TRAIT_CLUMSY, DISEASE_TRAIT)
if(ishuman(A.affected_mob))
var/mob/living/carbon/human/M = A.affected_mob
if(istype(M.wear_mask, /obj/item/clothing/mask/gas/clown_hat))
REMOVE_TRAIT(M.wear_mask, TRAIT_NODROP, DISEASE_TRAIT)
/datum/symptom/pierrot/proc/give_clown_mask(datum/disease/advance/A)
if(ishuman(A.affected_mob))
var/mob/living/carbon/human/M = A.affected_mob
if(!istype(M.wear_mask, /obj/item/clothing/mask/gas/clown_hat))
if(!M.dropItemToGround(M.wear_mask))
qdel(M.wear_mask)
var/obj/item/clothing/C = new /obj/item/clothing/mask/gas/clown_hat(M)
ADD_TRAIT(C, TRAIT_NODROP, DISEASE_TRAIT)
M.equip_to_slot_or_del(C, SLOT_WEAR_MASK)
return
@@ -1,42 +0,0 @@
/datum/symptom/radiation
name = "Iraddiant Cells"
desc = "Causes the cells in the host's body to give off harmful radiation."
stealth = -1
resistance = 2
stage_speed = -1
transmittable = 2
level = 8
severity = 4
symptom_delay_min = 10
symptom_delay_max = 40
var/fastrads = FALSE
var/radothers = FALSE
threshold_desc = "<b>Speed 8:</b> Host takes radiation damage faster."
/datum/symptom/radiation/Start(datum/disease/advance/A)
if(!..())
return
if(A.properties["speed"] >= 8)
fastrads = TRUE
/datum/symptom/radiation/Activate(datum/disease/advance/A)
if(!..())
return
var/mob/living/M = A.affected_mob
switch(A.stage)
if(1)
if(prob(10))
to_chat(M, "<span class='notice'>You feel off...</span>")
if(2, 3)
if(prob(50))
to_chat(M, "<span class='danger'>You feel like the atoms inside you are beginning to split...</span>")
if(4, 5)
radiate(M)
/datum/symptom/radiation/proc/radiate(mob/living/carbon/M)
to_chat(M, "<span class='danger'>You feel a wave of pain throughout your body!</span>")
if(fastrads)
M.radiation += 150
else
M.radiation += 75
return 1
+2 -45
View File
@@ -63,8 +63,8 @@ BONUS
name = "Revitiligo"
desc = "The virus causes increased production of skin pigment cells, making the host's skin grow darker over time."
stealth = 1
resistance = 2
stealth = -1
resistance = 3
stage_speed = 1
transmittable = 2
level = 5
@@ -86,46 +86,3 @@ BONUS
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>")
/*
//////////////////////////////////////
Polyvitiligo
Not Noticeable.
Increases resistance slightly.
Increases stage speed.
Transmittable.
Low Level.
BONUS
Makes the host change color
//////////////////////////////////////
*/
/datum/symptom/polyvitiligo
name = "Polyvitiligo"
desc = "The virus replaces the melanin in the skin with reactive pigment."
stealth = 0
resistance = 1
stage_speed = 2
transmittable = 2
level = 0
severity = 1
base_message_chance = 50
symptom_delay_min = 45
symptom_delay_max = 90
/datum/symptom/polyvitiligo/Activate(datum/disease/advance/A)
if(!..())
return
var/mob/living/M = A.affected_mob
switch(A.stage)
if(5)
var/static/list/banned_reagents = list(/datum/reagent/colorful_reagent/crayonpowder/invisible, /datum/reagent/colorful_reagent/crayonpowder/white)
var/color = pick(subtypesof(/datum/reagent/colorful_reagent/crayonpowder) - banned_reagents)
if(M.reagents.total_volume <= (M.reagents.maximum_volume/10)) // no flooding humans with 1000 units of colorful reagent
M.reagents.add_reagent(color, 5)
else
if (prob(50)) // spam
M.visible_message("<span class='warning'>[M] looks rather vibrant...</span>", "<span class='notice'>The colors, man, the colors...</span>")
@@ -15,6 +15,7 @@ Bonus
//////////////////////////////////////
*/
/datum/symptom/sneeze
name = "Sneezing"
desc = "The virus causes irritation of the nasal cavity, making the host sneeze occasionally."
@@ -26,11 +27,14 @@ Bonus
severity = 1
symptom_delay_min = 5
symptom_delay_max = 35
threshold_desc = "<b>Stealth 4:</b> The symptom remains hidden until active."
threshold_desc = "<b>Transmission 9:</b> Increases sneezing range, spreading the virus over a larger area.<br>\
<b>Stealth 4:</b> The symptom remains hidden until active."
/datum/symptom/sneeze/Start(datum/disease/advance/A)
if(!..())
return
if(A.properties["transmittable"] >= 9) //longer spread range
power = 2
if(A.properties["stealth"] >= 4)
suppress_warning = TRUE
@@ -44,3 +48,4 @@ Bonus
M.emote("sniff")
else
M.emote("sneeze")
A.spread(4 + power)
@@ -8,14 +8,12 @@
level = 5
severity = 0
/datum/symptom/undead_adaptation/OnAdd(datum/disease/advance/A)
/datum/symptom/undead_adaptation/Start(datum/disease/advance/A)
if(!..())
return
A.process_dead = TRUE
A.infectable_biotypes |= MOB_UNDEAD
/datum/symptom/undead_adaptation/OnRemove(datum/disease/advance/A)
A.process_dead = FALSE
A.infectable_biotypes -= MOB_UNDEAD
/datum/symptom/inorganic_adaptation
name = "Inorganic Biology"
desc = "The virus can survive and replicate even in an inorganic environment, increasing its resistance and infection rate."
@@ -26,8 +24,8 @@
level = 5
severity = 0
/datum/symptom/inorganic_adaptation/OnAdd(datum/disease/advance/A)
/datum/symptom/inorganic_adaptation/Start(datum/disease/advance/A)
if(!..())
return
A.infectable_biotypes |= MOB_INORGANIC
/datum/symptom/inorganic_adaptation/OnRemove(datum/disease/advance/A)
A.infectable_biotypes -= MOB_INORGANIC
@@ -10,7 +10,7 @@
var/stage_speed = 0
var/transmittable = 0
// The type level of the symptom. Higher is harder to generate.
var/level = -1
var/level = 0
// The severity level of the symptom. Higher is more dangerous.
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!!!
@@ -60,11 +60,6 @@
next_activation = world.time + rand(symptom_delay_min * 10, symptom_delay_max * 10)
return TRUE
/datum/symptom/proc/on_stage_change(new_stage, datum/disease/advance/A)
if(neutered)
return FALSE
return TRUE
/datum/symptom/proc/Copy()
var/datum/symptom/new_symp = new type
new_symp.name = name
@@ -72,14 +67,5 @@
new_symp.neutered = neutered
return new_symp
/datum/symptom/proc/OnDeath(datum/disease/advance/A)
return !neutered
/datum/symptom/proc/generate_threshold_desc()
return
/datum/symptom/proc/OnAdd(datum/disease/advance/A) //Overload when a symptom needs to be active before processing, like changing biotypes.
return
/datum/symptom/proc/OnRemove(datum/disease/advance/A) //But dont forget to remove them too.
return
@@ -46,61 +46,3 @@ BONUS
stage_speed = 5
transmittable = 3
level = 3
/*
//////////////////////////////////////
Viral aggressive metabolism
Somewhat increased stealth.
Abysmal resistance.
Increased stage speed.
Poor transmitability.
Medium Level.
Bonus
The virus starts at stage 5, but after a certain time will start curing itself.
Stages still increase naturally with stage speed.
//////////////////////////////////////
*/
/datum/symptom/viralreverse
name = "Viral aggressive metabolism"
desc = "The virus sacrifices its long term survivability to nearly instantly fully spread inside a host. \
The virus will start at the last stage, but will eventually decay and die off by itself."
stealth = 1
resistance = -4
stage_speed = 3
transmittable = -3
level = 3
symptom_delay_min = 1
symptom_delay_max = 1
var/time_to_cure
threshold_desc = "<b>Resistance/Stage Speed:</b> Highest between these determines the amount of time before self-curing.<br>\
<b>Stealth 4</b> Doubles the time before the virus self-cures"
/datum/symptom/viralreverse/Activate(datum/disease/advance/A)
if(!..())
return
if(time_to_cure > 0)
time_to_cure--
else
var/mob/living/M = A.affected_mob
Heal(M, A)
/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)
if(!..())
return
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
@@ -20,9 +20,9 @@ Bonus
name = "Hyphema"
desc = "The virus causes inflammation of the retina, leading to eye damage and eventually blindness."
stealth = -1
resistance = -3
resistance = -4
stage_speed = -4
transmittable = -2
transmittable = -3
level = 5
severity = 5
base_message_chance = 50
@@ -24,9 +24,9 @@ Bonus
name = "Vomiting"
desc = "The virus causes nausea and irritates the stomach, causing occasional vomit."
stealth = -2
resistance = 1
resistance = -1
stage_speed = 0
transmittable = 2
transmittable = 1
level = 3
severity = 3
base_message_chance = 100
@@ -60,4 +60,4 @@ Bonus
vomit(M)
/datum/symptom/vomit/proc/vomit(mob/living/carbon/M)
M.vomit(20, vomit_blood, stun = 0, distance = proj_vomit)
M.vomit(20, vomit_blood, distance = proj_vomit)
@@ -23,7 +23,7 @@ Bonus
stealth = -2
resistance = 2
stage_speed = -2
transmittable = -1
transmittable = -2
level = 3
severity = 3
base_message_chance = 100
@@ -34,7 +34,7 @@ Bonus
/datum/symptom/weight_loss/Start(datum/disease/advance/A)
if(!..())
return
if(A.properties["stealth"] >= 2) //warn less often
if(A.properties["stealth"] >= 4) //warn less often
base_message_chance = 25
/datum/symptom/weight_loss/Activate(datum/disease/advance/A)