mirror of
https://github.com/KabKebab/GS13.git
synced 2026-07-14 01:19:04 +01:00
Merge pull request #317 from Chemlight/Make-Virology-Great-Again
Reverse Engineering Virology from Beeviro
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user