Merge pull request #317 from Chemlight/Make-Virology-Great-Again

Reverse Engineering Virology from Beeviro
This commit is contained in:
Dahlular
2020-07-14 17:04:38 -06:00
committed by GitHub
38 changed files with 551 additions and 1350 deletions
-2
View File
@@ -121,7 +121,6 @@
#define TRAIT_LAW_ENFORCEMENT_METABOLISM "law-enforcement-metabolism"
#define TRAIT_STRONG_GRABBER "strong_grabber"
#define TRAIT_CALCIUM_HEALER "calcium_healer"
#define TRAIT_BEEFRIEND "beefriend"
//non-mob traits
#define TRAIT_PARALYSIS "paralysis" //Used for limb-based paralysis, where replacing the limb will fix it
@@ -168,7 +167,6 @@
// common trait sources
#define TRAIT_GENERIC "generic"
#define EYE_DAMAGE "eye_damage"
#define DISEASE_TRAIT "disease"
#define GENETIC_MUTATION "genetic"
#define OBESITY "obesity"
#define MAGIC_TRAIT "magic"
-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)
@@ -156,70 +156,6 @@
"" = 80
)
/obj/effect/spawner/lootdrop/organ_spawner
name = "organ spawner"
loot = list(
/obj/item/organ/heart/gland/electric = 3,
/obj/item/organ/heart/gland/trauma = 4,
/obj/item/organ/heart/gland/egg = 7,
/obj/item/organ/heart/gland/chem = 5,
/obj/item/organ/heart/gland/mindshock = 5,
/obj/item/organ/heart/gland/plasma = 7,
/obj/item/organ/heart/gland/pop = 5,
/obj/item/organ/heart/gland/slime = 4,
/obj/item/organ/heart/gland/spiderman = 5,
/obj/item/organ/heart/gland/ventcrawling = 1,
/obj/item/organ/body_egg/alien_embryo = 1,
/obj/item/organ/regenerative_core = 2)
lootcount = 3
/obj/effect/spawner/lootdrop/teratoma/minor
name = "teratoma spawner"
loot = list(
/obj/item/organ/tongue = 5,
/obj/item/organ/tongue/lizard = 1,
/obj/item/organ/tail/cat = 1,
/obj/item/organ/stomach = 5,
/obj/item/organ/tongue/zombie = 1,
/obj/item/organ/tongue/fly = 1,
/obj/item/organ/stomach/fly = 1,
/obj/item/organ/ears = 5,
/obj/item/organ/ears/cat = 1,
/obj/item/organ/eyes = 5,
/obj/item/organ/heart = 5,
/obj/item/organ/liver = 5,
/obj/item/organ/tail/lizard = 1,
/obj/item/organ/appendix = 5,
/obj/effect/gibspawner/human = 1)
/obj/effect/spawner/lootdrop/teratoma/major
name = "advanced teratoma spawner"
loot = list(
/obj/item/organ/adamantine_resonator = 2,
/obj/item/organ/heart/gland/viral = 1,
/obj/item/organ/eyes/night_vision = 1,
/obj/item/organ/liver/plasmaman = 3,
/obj/item/organ/stomach/plasmaman = 3,
/obj/item/organ/lungs/plasmaman = 3,
/obj/item/organ/lungs/slime = 3,
/obj/item/organ/tongue/abductor = 1,
/obj/item/organ/tongue/bone = 3,
/obj/item/organ/tongue/bone/plasmaman = 1,
/obj/item/organ/vocal_cords/adamantine = 1,
/obj/effect/gibspawner/xeno = 1,
/obj/effect/mob_spawn/human/corpse/assistant = 1,
/obj/effect/mob_spawn/teratomamonkey = 5)
/obj/effect/spawner/lootdrop/teratoma/major/clown
name = "funny teratoma spawner"
loot = list(
/mob/living/simple_animal/hostile/retaliate/frog = 1,
/mob/living/simple_animal/hostile/retaliate/clown = 1,
/mob/living/simple_animal/hostile/retaliate/spaceman = 1,
/obj/item/clothing/mask/gas/clown_hat = 4,
/obj/item/clothing/shoes/clown_shoes = 3,
/obj/item/bikehorn = 5,
/obj/item/reagent_containers/food/snacks/pie/cream = 3)
/obj/effect/spawner/lootdrop/two_percent_xeno_egg_spawner
name = "2% chance xeno egg spawner"
loot = list(
@@ -5,48 +5,26 @@ is currently following.
*/
GLOBAL_LIST_INIT(disease_ability_singletons, list(
new /datum/disease_ability/action/cough,
new /datum/disease_ability/action/sneeze,
new /datum/disease_ability/action/infect,
new /datum/disease_ability/symptom/mild/cough,
new /datum/disease_ability/symptom/mild/sneeze,
new /datum/disease_ability/symptom/medium/beard,
new /datum/disease_ability/symptom/medium/hallucigen,
new /datum/disease_ability/symptom/medium/confusion,
new /datum/disease_ability/symptom/medium/vomit,
new /datum/disease_ability/symptom/medium/voice_change,
new /datum/disease_ability/symptom/medium/visionloss,
new /datum/disease_ability/symptom/medium/deafness,
new /datum/disease_ability/symptom/powerful/narcolepsy,
new /datum/disease_ability/symptom/medium/fever,
new /datum/disease_ability/symptom/medium/shivering,
new /datum/disease_ability/symptom/medium/headache,
new /datum/disease_ability/symptom/medium/nano_boost,
new /datum/disease_ability/symptom/medium/nano_destroy,
new /datum/disease_ability/symptom/medium/viraladaptation,
new /datum/disease_ability/symptom/medium/viralevolution,
new /datum/disease_ability/symptom/medium/vitiligo,
new /datum/disease_ability/symptom/medium/revitiligo,
new /datum/disease_ability/symptom/medium/itching,
new /datum/disease_ability/symptom/medium/heal/weight_loss,
new /datum/disease_ability/symptom/medium/heal/sensory_restoration,
new /datum/disease_ability/symptom/medium/heal/mind_restoration,
new /datum/disease_ability/symptom/powerful/fire,
new /datum/disease_ability/symptom/powerful/flesh_eating,
new /datum/disease_ability/symptom/powerful/genetic_mutation,
new /datum/disease_ability/symptom/powerful/inorganic_adaptation,
new /datum/disease_ability/symptom/powerful/heal/oxygen,
new /datum/disease_ability/symptom/powerful/heal/chem,
new /datum/disease_ability/symptom/powerful/heal/coma,
new /datum/disease_ability/symptom/powerful/heal/teleport,
new /datum/disease_ability/symptom/powerful/heal/growth,
new /datum/disease_ability/symptom/powerful/heal/EMP,
new /datum/disease_ability/symptom/powerful/heal/sweat,
new /datum/disease_ability/symptom/powerful/wizarditis,
new /datum/disease_ability/symptom/medium/pierrot,
new /datum/disease_ability/symptom/medium/cockroach,
new /datum/disease_ability/symptom/powerful/youth
))
new /datum/disease_ability/action/cough(),
new /datum/disease_ability/action/sneeze(),
new /datum/disease_ability/action/infect(),
new /datum/disease_ability/symptom/cough(),
new /datum/disease_ability/symptom/sneeze(),\
new /datum/disease_ability/symptom/hallucigen(),
new /datum/disease_ability/symptom/choking(),
new /datum/disease_ability/symptom/confusion(),
new /datum/disease_ability/symptom/youth(),
new /datum/disease_ability/symptom/vomit(),
new /datum/disease_ability/symptom/voice_change(),
new /datum/disease_ability/symptom/visionloss(),
new /datum/disease_ability/symptom/viraladaptation(),
new /datum/disease_ability/symptom/vitiligo(),
new /datum/disease_ability/symptom/sensory_restoration(),
new /datum/disease_ability/symptom/itching(),
new /datum/disease_ability/symptom/weight_loss(),
new /datum/disease_ability/symptom/metabolism_heal(),
new /datum/disease_ability/symptom/coma_heal()
))
/datum/disease_ability
var/name
@@ -256,180 +234,144 @@ new /datum/disease_ability/symptom/powerful/youth
O.AddComponent(/datum/component/infective, D.disease_template, 300)
StartCooldown()
return TRUE
/*******************BASE SYMPTOM TYPES*******************/
// cost is for convenience and can be changed. If you're changing req_tot_points then don't use the subtype...
//healing no longer costs more, sans regen coma, due to how healing symptoms have been made scary
/datum/disease_ability/symptom/mild
cost = 2
required_total_points = 4
category = "Symptom (Weak)"
//passive symptom abilities
/datum/disease_ability/symptom/medium
cost = 4
required_total_points = 8
category = "Symptom"
/datum/disease_ability/symptom/medium/heal
cost = 5
category = "Symptom (+)"
/datum/disease_ability/symptom/powerful
cost = 4
required_total_points = 16
category = "Symptom (Strong)"
/datum/disease_ability/symptom/powerful/heal
cost = 8
category = "Symptom (Strong+)"
/******MILD******/
/datum/disease_ability/symptom/mild/cough
/datum/disease_ability/symptom/cough
name = "Involuntary Coughing"
symptoms = list(/datum/symptom/cough)
cost = 2
required_total_points = 4
short_desc = "Cause victims to cough intermittently."
long_desc = "Cause victims to cough intermittently, spreading your infection if your transmissibility is high."
/datum/disease_ability/symptom/mild/sneeze
/datum/disease_ability/symptom/sneeze
name = "Involuntary Sneezing"
symptoms = list(/datum/symptom/sneeze)
cost = 2
required_total_points = 4
short_desc = "Cause victims to sneeze intermittently."
long_desc = "Cause victims to sneeze intermittently, spreading your infection and also increasing transmissibility and resistance, at the cost of stealth."
/******MEDIUM******/
/datum/disease_ability/symptom/medium/beard
/datum/disease_ability/symptom/beard
//I don't think I need to justify the fact that this is the best symptom
name = "Beard Growth"
symptoms = list(/datum/symptom/beard)
cost = 1
required_total_points = 8
short_desc = "Cause all victims to grow a luscious beard."
long_desc = "Cause all victims to grow a luscious beard. Ineffective against Santa Claus."
long_desc = "Cause all victims to grow a luscious beard. Decreases stats slightly. Ineffective against Santa Claus."
/datum/disease_ability/symptom/medium/hallucigen
/datum/disease_ability/symptom/hallucigen
name = "Hallucinations"
symptoms = list(/datum/symptom/hallucigen)
cost = 4
required_total_points = 8
short_desc = "Cause victims to hallucinate."
long_desc = "Cause victims to hallucinate. Decreases stats, especially resistance."
/datum/disease_ability/symptom/medium/confusion
/datum/disease_ability/symptom/choking
name = "Choking"
symptoms = list(/datum/symptom/choking)
cost = 4
required_total_points = 8
short_desc = "Cause victims to choke."
long_desc = "Cause victims to choke, threatening asphyxiation. Decreases stats, especially transmissibility."
/datum/disease_ability/symptom/confusion
name = "Confusion"
symptoms = list(/datum/symptom/confusion)
cost = 4
required_total_points = 8
short_desc = "Cause victims to become confused."
long_desc = "Cause victims to become confused intermittently."
/datum/disease_ability/symptom/medium/vomit
symptoms = list(/datum/symptom/vomit)
short_desc = "Cause victims to vomit."
long_desc = "Cause victims to vomit. Slightly increases transmissibility. Vomiting also also causes the victims to lose nutrition and removes some toxin damage."
/datum/disease_ability/symptom/medium/voice_change
symptoms = list(/datum/symptom/voice_change)
short_desc = "Change the voice of victims."
long_desc = "Change the voice of victims, causing confusion in communications."
/datum/disease_ability/symptom/medium/visionloss
symptoms = list(/datum/symptom/visionloss)
short_desc = "Damage the eyes of victims, eventually causing blindness."
long_desc = "Damage the eyes of victims, eventually causing blindness. Decreases all stats."
/datum/disease_ability/symptom/medium/deafness
symptoms = list(/datum/symptom/deafness)
/datum/disease_ability/symptom/medium/fever
symptoms = list(/datum/symptom/fever)
/datum/disease_ability/symptom/medium/shivering
symptoms = list(/datum/symptom/shivering)
/datum/disease_ability/symptom/medium/headache
symptoms = list(/datum/symptom/headache)
/datum/disease_ability/symptom/medium/nano_boost
symptoms = list(/datum/symptom/nano_boost)
/datum/disease_ability/symptom/medium/nano_destroy
symptoms = list(/datum/symptom/nano_destroy)
/datum/disease_ability/symptom/medium/viraladaptation
symptoms = list(/datum/symptom/viraladaptation)
short_desc = "Cause your infection to become more resistant to detection and eradication."
long_desc = "Cause your infection to mimic the function of normal body cells, becoming much harder to spot and to eradicate, but reducing its speed."
/datum/disease_ability/symptom/medium/viralevolution
symptoms = list(/datum/symptom/viralevolution)
/datum/disease_ability/symptom/medium/vitiligo
symptoms = list(/datum/symptom/vitiligo)
/datum/disease_ability/symptom/medium/revitiligo
symptoms = list(/datum/symptom/revitiligo)
/datum/disease_ability/symptom/medium/pierrot
symptoms = list(/datum/symptom/pierrot)
/datum/disease_ability/symptom/medium/cockroach
symptoms = list(/datum/symptom/cockroach)
/datum/disease_ability/symptom/medium/itching
symptoms = list(/datum/symptom/itching)
short_desc = "Cause victims to itch."
long_desc = "Cause victims to itch, increasing all stats except stealth."
/datum/disease_ability/symptom/medium/heal/weight_loss
symptoms = list(/datum/symptom/weight_loss)
short_desc = "Cause victims to lose weight."
long_desc = "Cause victims to lose weight, and make it almost impossible for them to gain nutrition from food. Reduced nutrition allows your infection to spread more easily from hosts, especially by sneezing."
/datum/disease_ability/symptom/medium/heal/sensory_restoration
symptoms = list(/datum/symptom/sensory_restoration)
short_desc = "Regenerate eye and ear damage of victims."
long_desc = "Regenerate eye and ear damage of victims."
/datum/disease_ability/symptom/medium/heal/mind_restoration
symptoms = list(/datum/symptom/mind_restoration)
/******POWERFUL******/
/datum/disease_ability/symptom/powerful/fire
symptoms = list(/datum/symptom/fire)
/datum/disease_ability/symptom/powerful/flesh_eating
symptoms = list(/datum/symptom/flesh_eating)
/datum/disease_ability/symptom/powerful/wizarditis //strong because it can remove hardsuits and bio protection
symptoms = list(/datum/symptom/wizarditis)
/datum/disease_ability/symptom/powerful/genetic_mutation
symptoms = list(/datum/symptom/genetic_mutation)
/datum/disease_ability/symptom/powerful/inorganic_adaptation
symptoms = list(/datum/symptom/inorganic_adaptation)
/datum/disease_ability/symptom/powerful/narcolepsy
symptoms = list(/datum/symptom/narcolepsy)
/datum/disease_ability/symptom/powerful/youth
/datum/disease_ability/symptom/youth
name = "Eternal Youth"
symptoms = list(/datum/symptom/youth)
cost = 4
required_total_points = 8
short_desc = "Cause victims to become eternally young."
long_desc = "Cause victims to become eternally young. Provides boosts to all stats except transmissibility."
/****HEALING SUBTYPE****/
/datum/disease_ability/symptom/powerful/heal/oxygen
symptoms = list(/datum/symptom/oxygen)
/datum/disease_ability/symptom/powerful/heal/chem
symptoms = list(/datum/symptom/heal/chem)
/datum/disease_ability/symptom/vomit
name = "Vomiting"
symptoms = list(/datum/symptom/vomit)
cost = 4
required_total_points = 8
short_desc = "Cause victims to vomit."
long_desc = "Cause victims to vomit. Slightly increases transmissibility. Vomiting also also causes the victims to lose nutrition and removes some toxin damage."
/datum/disease_ability/symptom/powerful/heal/coma
/datum/disease_ability/symptom/voice_change
name = "Voice Changing"
symptoms = list(/datum/symptom/voice_change)
cost = 4
required_total_points = 8
short_desc = "Change the voice of victims."
long_desc = "Change the voice of victims, causing confusion in communications."
/datum/disease_ability/symptom/visionloss
name = "Vision Loss"
symptoms = list(/datum/symptom/visionloss)
cost = 4
required_total_points = 8
short_desc = "Damage the eyes of victims, eventually causing blindness."
long_desc = "Damage the eyes of victims, eventually causing blindness. Decreases all stats."
/datum/disease_ability/symptom/viraladaptation
name = "Self-Adaptation"
symptoms = list(/datum/symptom/viraladaptation)
cost = 4
required_total_points = 8
short_desc = "Cause your infection to become more resistant to detection and eradication."
long_desc = "Cause your infection to mimic the function of normal body cells, becoming much harder to spot and to eradicate, but reducing its speed."
/datum/disease_ability/symptom/vitiligo
name = "Skin Paleness"
symptoms = list(/datum/symptom/vitiligo)
cost = 1
required_total_points = 8
short_desc = "Cause victims to become pale."
long_desc = "Cause victims to become pale. Decreases all stats."
/datum/disease_ability/symptom/sensory_restoration
name = "Sensory Restoration"
symptoms = list(/datum/symptom/sensory_restoration)
cost = 4
required_total_points = 8
short_desc = "Regenerate eye and ear damage of victims."
long_desc = "Regenerate eye and ear damage of victims."
/datum/disease_ability/symptom/itching
name = "Itching"
symptoms = list(/datum/symptom/itching)
cost = 4
required_total_points = 8
short_desc = "Cause victims to itch."
long_desc = "Cause victims to itch, increasing all stats except stealth."
/datum/disease_ability/symptom/weight_loss
name = "Weight Loss"
symptoms = list(/datum/symptom/weight_loss)
cost = 4
required_total_points = 8
short_desc = "Cause victims to lose weight."
long_desc = "Cause victims to lose weight, and make it almost impossible for them to gain nutrition from food. Reduced nutrition allows your infection to spread more easily from hosts, especially by sneezing."
/datum/disease_ability/symptom/metabolism_heal
name = "Metabolic Boost"
symptoms = list(/datum/symptom/heal/metabolism)
cost = 4
required_total_points = 16
short_desc = "Increase the metabolism of victims, causing them to process chemicals and grow hungry faster."
long_desc = "Increase the metabolism of victims, causing them to process chemicals twice as fast and grow hungry more quickly."
/datum/disease_ability/symptom/coma_heal
name = "Regenerative Coma"
symptoms = list(/datum/symptom/heal/coma)
/datum/disease_ability/symptom/powerful/heal/teleport
symptoms = list(/datum/symptom/teleport)
/datum/disease_ability/symptom/powerful/heal/growth
symptoms = list(/datum/symptom/growth)
/datum/disease_ability/symptom/powerful/heal/EMP
symptoms = list(/datum/symptom/EMP)
/datum/disease_ability/symptom/powerful/heal/sweat
symptoms = list(/datum/symptom/sweat)
cost = 8
required_total_points = 16
short_desc = "Cause victims to fall into a healing coma when hurt."
long_desc = "Cause victims to fall into a healing coma when hurt."
@@ -467,8 +467,7 @@
/obj/item/reagent_containers/glass/bottle/mutagen = 1,
/obj/item/reagent_containers/glass/bottle/plasma = 1,
/obj/item/reagent_containers/glass/bottle/synaptizine = 1,
/obj/item/reagent_containers/glass/bottle/formaldehyde = 1,
/obj/item/reagent_containers/glass/bottle/viralbase = 1)
/obj/item/reagent_containers/glass/bottle/formaldehyde = 1)
// ----------------------------
// Disk """fridge"""
@@ -23,8 +23,6 @@
var/obj/item/clothing/CH = head
if (CS.clothing_flags & CH.clothing_flags & THICKMATERIAL)
return 1
if(HAS_TRAIT(src, TRAIT_BEEFRIEND))
return 1
return 0
@@ -174,15 +174,3 @@
var/obj/item/clothing/head/helmet/justice/escape/helmet = new(src)
equip_to_slot_or_del(helmet,SLOT_HEAD)
helmet.attack_self(src) // todo encapsulate toggle
/mob/living/carbon/monkey/tumor
name = "living teratoma"
verb_say = "blabbers"
initial_language_holder = /datum/language_holder/monkey
icon = 'icons/mob/monkey.dmi'
icon_state = ""
butcher_results = list(/obj/effect/spawner/lootdrop/teratoma/minor = 5, /obj/effect/spawner/lootdrop/teratoma/major = 1)
type_of_meat = /obj/effect/spawner/lootdrop/teratoma/minor
aggressive = TRUE
bodyparts = list(/obj/item/bodypart/chest/monkey/teratoma, /obj/item/bodypart/head/monkey/teratoma, /obj/item/bodypart/l_arm/monkey/teratoma,
/obj/item/bodypart/r_arm/monkey/teratoma, /obj/item/bodypart/r_leg/monkey/teratoma, /obj/item/bodypart/l_leg/monkey/teratoma)
-4
View File
@@ -56,10 +56,6 @@
var/turf/T = get_turf(src)
for(var/obj/item/I in contents)
I.on_mob_death(src, gibbed)
for(var/datum/disease/advance/D in diseases)
for(var/symptom in D.symptoms)
var/datum/symptom/S = symptom
S.OnDeath(D)
if(mind && mind.name && mind.active && !istype(T.loc, /area/ctf))
var/rendered = "<span class='deadsay'><b>[mind.name]</b> has died at <b>[get_area_name(T)]</b>.</span>"
deadchat_broadcast(rendered, follow_target = src, turf_target = T, message_type=DEADCHAT_DEATHRATTLE)
@@ -1,35 +0,0 @@
/mob/living/simple_animal/hostile/heart
name = "Heart"
desc = "A living heart. It's angry!."
icon = 'icons/obj/surgery.dmi'
icon_state = "heart-on"
icon_living = "heart-on"
icon_dead = "heart-on"
gender = NEUTER
turns_per_move = 5
speak_emote = list("beats")
emote_see = list("beats")
a_intent = INTENT_HARM
maxHealth = 24
health = 24
speed = -1
harm_intent_damage = 5
melee_damage_lower = 15
melee_damage_upper = 15
response_help = "touches"
response_disarm = "beats"
response_harm = "breaks"
density = FALSE
attacktext = "beats"
ventcrawler = VENTCRAWLER_ALWAYS
attack_sound = 'sound/effects/singlebeat.ogg'
stat_attack = UNCONSCIOUS
attack_same = 1
gold_core_spawnable = HOSTILE_SPAWN
see_in_dark = 8
deathmessage = "falls lifeless."
del_on_death = 1
loot = list(/obj/item/organ/heart)
atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 150
maxbodytemp = 500
@@ -611,16 +611,13 @@
nutriment_factor = 15 * REAGENTS_METABOLISM
metabolization_rate = 1 * REAGENTS_METABOLISM
taste_description = "sweetness"
var/power = 0
/datum/reagent/consumable/honey/on_mob_life(mob/living/carbon/M)
if(power == 0)
M.reagents.add_reagent(/datum/reagent/consumable/sugar,3)
if(prob(55))
M.adjustBruteLoss(-1*REM+power, 0)
M.adjustFireLoss(-1*REM+power, 0)
M.adjustOxyLoss(-1*REM+power, 0)
M.adjustToxLoss(-1*REM+power, 0)
M.adjustBruteLoss(-1*REM, 0)
M.adjustFireLoss(-1*REM, 0)
M.adjustOxyLoss(-1*REM, 0)
M.adjustToxLoss(-1*REM, 0)
..()
/datum/reagent/consumable/honey/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
@@ -631,12 +628,6 @@
S.success_multiplier = max(0.6, S.success_multiplier) // +60% success probability on each step, compared to bacchus' blessing's ~46%
..()
/datum/reagent/consumable/honey/special
name = "Royal Honey"
id = "royalhoney"
description = "A special honey which heals the imbiber far faster than normal honey"
power = 1
/datum/reagent/consumable/mayonnaise
name = "Mayonnaise"
id = "mayonnaise"
@@ -1582,25 +1582,6 @@
taste_description = "rainbows"
var/no_mob_color = FALSE
/datum/reagent/consumable/laughter/laughtervirusfood
name = "anomolous virus food"
color = "#ffa6ff" //rgb: 255,166,255
taste_description = "a bad idea"
id = "laughtervirusfood"
/datum/reagent/consumable/virus_food/advvirusfood
name = "highly unstable virus food"
color = "#ffffff" //rgb: 255,255,255 ITS PURE WHITE CMON
taste_description = "an EXTREMELY bad idea"
id = "advvirusfood"
/datum/reagent/consumable/virus_food/viralbase
name = "Experimental viral base"
description = "Recently discovered by Nanotrasen's top scientists after years of research, this substance can be used as the base for extremely rare and extremely dangerous viruses once exposed to uranium."
color = "#fff0da"
taste_description = "tears of scientists"
id = "viralbase"
/datum/reagent/colorful_reagent/on_mob_life(mob/living/carbon/M)
if(!no_mob_color)
M.add_atom_colour(pick(random_color_list), WASHABLE_COLOUR_PRIORITY)
@@ -230,19 +230,6 @@
if(D)
D.Evolve(level_min, level_max)
/datum/chemical_reaction/virus_food_laughter
name = "Anomolous virus food"
id = "virusfood_laughter"
results = list("laughtervirusfood" = 1)
required_reagents = list("laughter" = 5, "virusfood" = 1)
/datum/chemical_reaction/virus_food_admin
name = "Highly unstable virus Food"
id = "virusfood_admin"
results = list("advvirusfood" = 1)
required_reagents = list("viralbase" = 1, "uranium" = 20)
mix_message = "The mixture turns every colour of the rainbow, soon settling on a bright white. There's no way this isn't a good idea."
/datum/chemical_reaction/mix_virus/mix_virus_2
name = "Mix Virus 2"
@@ -330,23 +317,6 @@
required_reagents = list("uraniumplasmavirusfood_stable" = 1)
level_min = 8
level_max = 8
/datum/chemical_reaction/mix_virus/mix_virus_13
name = "Mix Virus 13"
id = "mixvirus13"
required_reagents = list("laughtervirusfood" = 1)
level_min = 0
level_max = 0
/datum/chemical_reaction/mix_virus/mix_virus_14
name = "Mix Virus 14"
id = "mixvirus14"
required_reagents = list("advvirusfood" = 1)
level_min = 9
level_max = 9
/datum/chemical_reaction/mix_virus/rem_virus
@@ -126,11 +126,6 @@
/obj/item/reagent_containers/glass/beaker/on_reagent_change(changetype)
update_icon()
/obj/item/reagent_containers/glass/bottle/viralbase
name = "Highly potent Viral Base Bottle"
desc = "A small bottle. Contains a trace amount of a substance found by scientists that can be used to create extremely advanced diseases once exposed to uranium."
list_reagents = list("viralbase" = 1)
/obj/item/reagent_containers/glass/beaker/update_icon()
if(!cached_icon)
cached_icon = icon_state
-10
View File
@@ -423,10 +423,7 @@
#include "code\datums\diseases\advance\advance.dm"
#include "code\datums\diseases\advance\presets.dm"
#include "code\datums\diseases\advance\symptoms\beard.dm"
#include "code\datums\diseases\advance\symptoms\beesymptom.dm"
#include "code\datums\diseases\advance\symptoms\braindamage.dm"
#include "code\datums\diseases\advance\symptoms\choking.dm"
#include "code\datums\diseases\advance\symptoms\cockroach.dm"
#include "code\datums\diseases\advance\symptoms\confusion.dm"
#include "code\datums\diseases\advance\symptoms\cough.dm"
#include "code\datums\diseases\advance\symptoms\deafness.dm"
@@ -434,18 +431,13 @@
#include "code\datums\diseases\advance\symptoms\fever.dm"
#include "code\datums\diseases\advance\symptoms\fire.dm"
#include "code\datums\diseases\advance\symptoms\flesh_eating.dm"
#include "code\datums\diseases\advance\symptoms\genetics.dm"
#include "code\datums\diseases\advance\symptoms\hallucigen.dm"
#include "code\datums\diseases\advance\symptoms\headache.dm"
#include "code\datums\diseases\advance\symptoms\heal.dm"
#include "code\datums\diseases\advance\symptoms\heartattack.dm"
#include "code\datums\diseases\advance\symptoms\itching.dm"
#include "code\datums\diseases\advance\symptoms\lubefeet.dm"
#include "code\datums\diseases\advance\symptoms\nanites.dm"
#include "code\datums\diseases\advance\symptoms\narcolepsy.dm"
#include "code\datums\diseases\advance\symptoms\oxygen.dm"
#include "code\datums\diseases\advance\symptoms\pierrot.dm"
#include "code\datums\diseases\advance\symptoms\radiation.dm"
#include "code\datums\diseases\advance\symptoms\sensory.dm"
#include "code\datums\diseases\advance\symptoms\shedding.dm"
#include "code\datums\diseases\advance\symptoms\shivering.dm"
@@ -458,7 +450,6 @@
#include "code\datums\diseases\advance\symptoms\voice_change.dm"
#include "code\datums\diseases\advance\symptoms\vomit.dm"
#include "code\datums\diseases\advance\symptoms\weight.dm"
#include "code\datums\diseases\advance\symptoms\wizarditis.dm"
#include "code\datums\diseases\advance\symptoms\youth.dm"
#include "code\datums\helper_datums\events.dm"
#include "code\datums\helper_datums\getrev.dm"
@@ -2190,7 +2181,6 @@
#include "code\modules\mob\living\simple_animal\hostile\giant_spider.dm"
#include "code\modules\mob\living\simple_animal\hostile\goose.dm"
#include "code\modules\mob\living\simple_animal\hostile\headcrab.dm"
#include "code\modules\mob\living\simple_animal\hostile\heart.dm"
#include "code\modules\mob\living\simple_animal\hostile\hivebot.dm"
#include "code\modules\mob\living\simple_animal\hostile\hostile.dm"
#include "code\modules\mob\living\simple_animal\hostile\illusion.dm"