mirror of
https://github.com/KabKebab/GS13.git
synced 2026-07-09 15:05:38 +01:00
Merge pull request #153 from zeskorion/master
[PORT]here you go, bee viro
This commit is contained in:
@@ -160,6 +160,7 @@
|
||||
// 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"
|
||||
@@ -205,4 +206,4 @@
|
||||
#define FLIGHTSUIT_TRAIT "flightsuit"
|
||||
#define LOCKED_HELMET_TRAIT "locked-helmet"
|
||||
#define NINJA_SUIT_TRAIT "ninja-suit"
|
||||
#define ANTI_DROP_IMPLANT_TRAIT "anti-drop-implant"
|
||||
#define ANTI_DROP_IMPLANT_TRAIT "anti-drop-implant"
|
||||
|
||||
@@ -1130,6 +1130,27 @@ B --><-- A
|
||||
|
||||
/proc/get_random_station_turf()
|
||||
return safepick(get_area_turfs(pick(GLOB.the_station_areas)))
|
||||
|
||||
/proc/get_safe_random_station_turf()
|
||||
for (var/i in 1 to 5)
|
||||
var/list/L = get_area_turfs(pick(GLOB.the_station_areas))
|
||||
var/turf/target
|
||||
while (L.len && !target)
|
||||
var/I = rand(1, L.len)
|
||||
var/turf/T = L[I]
|
||||
if(!T.density)
|
||||
var/clear = TRUE
|
||||
for(var/obj/O in T)
|
||||
if(O.density)
|
||||
clear = FALSE
|
||||
break
|
||||
if(clear)
|
||||
target = T
|
||||
if (!target)
|
||||
L.Cut(I,I+1)
|
||||
if (target)
|
||||
return target
|
||||
|
||||
|
||||
/proc/get_closest_atom(type, list, source)
|
||||
var/closest_atom
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
name = "Experimental Disease"
|
||||
copy_type = /datum/disease/advance
|
||||
|
||||
/datum/disease/advance/random/New(max_symptoms, max_level = 8)
|
||||
/datum/disease/advance/random/New(max_symptoms, max_level = 9)
|
||||
if(!max_symptoms)
|
||||
max_symptoms = rand(1, VIRUS_SYMPTOM_LIMIT)
|
||||
var/list/datum/symptom/possible_symptoms = list()
|
||||
@@ -39,4 +39,4 @@
|
||||
symptoms += S
|
||||
Refresh()
|
||||
|
||||
name = "Sample #[rand(1,10000)]"
|
||||
name = "Sample #[rand(1,10000)]"
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
/datum/symptom/beesease
|
||||
name = "Bee Infestation"
|
||||
desc = "Causes the host to cough toxin bees and occasionally synthesize toxin."
|
||||
stealth = -2
|
||||
resistance = 2
|
||||
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> Host synthesizes honey instead of toxins, bees now sting with honey instead of toxin.<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
|
||||
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(prob(15))
|
||||
to_chat(M, "<span class='notice'>Your stomach squirms.</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_list(list(/datum/reagent/consumable/honey = 5, /datum/reagent/medicine/insulin = 15)) //honey rooooughly equivalent to 1.5u omnizine. due to how honey synthesizes 7.5 sugar per unit, the large amounts of insulin are necessary to prevent hyperglycaemic shock due to the bees
|
||||
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(honey)
|
||||
var/mob/living/simple_animal/hostile/poison/bees/B = new(M.loc)
|
||||
B.assign_reagent(GLOB.chemical_reagents_list[/datum/reagent/consumable/honey])
|
||||
else 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)
|
||||
@@ -0,0 +1,52 @@
|
||||
/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)
|
||||
@@ -93,7 +93,7 @@ Bonus
|
||||
resistance = -0
|
||||
stage_speed = -1
|
||||
transmittable = -2
|
||||
level = 7
|
||||
level = 9
|
||||
severity = 6
|
||||
base_message_chance = 15
|
||||
symptom_delay_min = 14
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
/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)
|
||||
|
||||
@@ -67,14 +67,14 @@ Bonus
|
||||
|
||||
/datum/symptom/fire/proc/Firestacks_stage_4(mob/living/M, datum/disease/advance/A)
|
||||
M.adjust_fire_stacks(1 * power)
|
||||
M.adjustFireLoss(3 * power)
|
||||
M.take_overall_damage(burn = 3 * power, required_status = BODYPART_ORGANIC)
|
||||
if(infective)
|
||||
A.spread(2)
|
||||
return 1
|
||||
|
||||
/datum/symptom/fire/proc/Firestacks_stage_5(mob/living/M, datum/disease/advance/A)
|
||||
M.adjust_fire_stacks(3 * power)
|
||||
M.adjustFireLoss(5 * power)
|
||||
M.take_overall_damage(burn = 5 * power, required_status = BODYPART_ORGANIC)
|
||||
if(infective)
|
||||
A.spread(4)
|
||||
return 1
|
||||
@@ -105,7 +105,7 @@ Bonus
|
||||
resistance = -2
|
||||
stage_speed = -2
|
||||
transmittable = -2
|
||||
level = 7
|
||||
level = 9
|
||||
severity = 6
|
||||
base_message_chance = 100
|
||||
symptom_delay_min = 30
|
||||
@@ -137,32 +137,34 @@ 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>")
|
||||
M.emote("scream")
|
||||
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))
|
||||
Alkali_fire_stage_5(M, A)
|
||||
M.IgniteMob()
|
||||
to_chat(M, "<span class='userdanger'>Your skin erupts into an inferno!</span>")
|
||||
M.emote("scream")
|
||||
if(M.fire_stacks < 0)
|
||||
M.visible_message("<span class='warning'>[M]'s sweat sizzles and pops on contact with water!</span>")
|
||||
explosion(get_turf(M),0,0,2 * explosion_power)
|
||||
Alkali_fire_stage_5(M, A)
|
||||
|
||||
|
||||
/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.adjustFireLoss(get_stacks/2)
|
||||
M.take_overall_damage(burn = get_stacks / 2, required_status = BODYPART_ORGANIC)
|
||||
if(chems)
|
||||
M.reagents.add_reagent("clf3", 2 * power)
|
||||
M.reagents.add_reagent(/datum/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.adjustFireLoss(get_stacks)
|
||||
M.take_overall_damage(burn = get_stacks, required_status = BODYPART_ORGANIC)
|
||||
if(chems)
|
||||
M.reagents.add_reagent_list(list("napalm" = 4 * power, "clf3" = 4 * power))
|
||||
M.reagents.add_reagent_list(list(/datum/reagent/napalm = 4 * power, /datum/reagent/clf3 = 4 * power))
|
||||
return 1
|
||||
|
||||
@@ -1,130 +1,135 @@
|
||||
/*
|
||||
//////////////////////////////////////
|
||||
|
||||
Necrotizing Fasciitis (AKA Flesh-Eating Disease)
|
||||
|
||||
Very very noticable.
|
||||
Lowers resistance tremendously.
|
||||
No changes to stage speed.
|
||||
Decreases transmittablity temrendously.
|
||||
Fatal Level.
|
||||
|
||||
Bonus
|
||||
Deals brute damage over time.
|
||||
|
||||
//////////////////////////////////////
|
||||
*/
|
||||
|
||||
/datum/symptom/flesh_eating
|
||||
|
||||
name = "Necrotizing Fasciitis"
|
||||
desc = "The virus aggressively attacks body cells, necrotizing tissues and organs."
|
||||
stealth = -3
|
||||
resistance = -4
|
||||
stage_speed = 0
|
||||
transmittable = -4
|
||||
level = 6
|
||||
severity = 5
|
||||
base_message_chance = 50
|
||||
symptom_delay_min = 15
|
||||
symptom_delay_max = 60
|
||||
var/bleed = FALSE
|
||||
var/pain = FALSE
|
||||
threshold_desc = "<b>Resistance 7:</b> Host will bleed profusely during necrosis.<br>\
|
||||
<b>Transmission 8:</b> Causes extreme pain to the host, weakening it."
|
||||
|
||||
/datum/symptom/flesh_eating/Start(datum/disease/advance/A)
|
||||
if(!..())
|
||||
return
|
||||
if(A.properties["resistance"] >= 7) //extra bleeding
|
||||
bleed = TRUE
|
||||
if(A.properties["transmittable"] >= 8) //extra stamina damage
|
||||
pain = TRUE
|
||||
|
||||
/datum/symptom/flesh_eating/Activate(datum/disease/advance/A)
|
||||
if(!..())
|
||||
return
|
||||
var/mob/living/M = A.affected_mob
|
||||
switch(A.stage)
|
||||
if(2,3)
|
||||
if(prob(base_message_chance))
|
||||
to_chat(M, "<span class='warning'>[pick("You feel a sudden pain across your body.", "Drops of blood appear suddenly on your skin.")]</span>")
|
||||
if(4,5)
|
||||
to_chat(M, "<span class='userdanger'>[pick("You cringe as a violent pain takes over your body.", "It feels like your body is eating itself inside out.", "IT HURTS.")]</span>")
|
||||
Flesheat(M, A)
|
||||
|
||||
/datum/symptom/flesh_eating/proc/Flesheat(mob/living/M, datum/disease/advance/A)
|
||||
var/get_damage = rand(15,25) * power
|
||||
M.adjustBruteLoss(get_damage)
|
||||
if(pain)
|
||||
M.adjustStaminaLoss(get_damage)
|
||||
if(bleed)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.bleed_rate += 5 * power
|
||||
return 1
|
||||
|
||||
/*
|
||||
//////////////////////////////////////
|
||||
|
||||
Autophagocytosis (AKA Programmed mass cell death)
|
||||
|
||||
Very noticable.
|
||||
Lowers resistance.
|
||||
Fast stage speed.
|
||||
Decreases transmittablity.
|
||||
Fatal Level.
|
||||
|
||||
Bonus
|
||||
Deals brute damage over time.
|
||||
|
||||
//////////////////////////////////////
|
||||
*/
|
||||
|
||||
/datum/symptom/flesh_death
|
||||
|
||||
name = "Autophagocytosis Necrosis"
|
||||
desc = "The virus rapidly consumes infected cells, leading to heavy and widespread damage."
|
||||
stealth = -2
|
||||
resistance = -2
|
||||
stage_speed = 1
|
||||
transmittable = -2
|
||||
level = 7
|
||||
severity = 6
|
||||
base_message_chance = 50
|
||||
symptom_delay_min = 3
|
||||
symptom_delay_max = 6
|
||||
var/chems = FALSE
|
||||
var/zombie = FALSE
|
||||
threshold_desc = "<b>Stage Speed 7:</b> Synthesizes Heparin and Lipolicide inside the host, causing increased bleeding and hunger.<br>\
|
||||
<b>Stealth 5:</b> The symptom remains hidden until active."
|
||||
|
||||
/datum/symptom/flesh_death/Start(datum/disease/advance/A)
|
||||
if(!..())
|
||||
return
|
||||
if(A.properties["stealth"] >= 5)
|
||||
suppress_warning = TRUE
|
||||
if(A.properties["stage_rate"] >= 7) //bleeding and hunger
|
||||
chems = TRUE
|
||||
|
||||
/datum/symptom/flesh_death/Activate(datum/disease/advance/A)
|
||||
if(!..())
|
||||
return
|
||||
var/mob/living/M = A.affected_mob
|
||||
switch(A.stage)
|
||||
if(2,3)
|
||||
if(prob(base_message_chance) && !suppress_warning)
|
||||
to_chat(M, "<span class='warning'>[pick("You feel your body break apart.", "Your skin rubs off like dust.")]</span>")
|
||||
if(4,5)
|
||||
if(prob(base_message_chance / 2)) //reduce spam
|
||||
to_chat(M, "<span class='userdanger'>[pick("You feel your muscles weakening.", "Some of your skin detaches itself.", "You feel sandy.")]</span>")
|
||||
Flesh_death(M, A)
|
||||
|
||||
/datum/symptom/flesh_death/proc/Flesh_death(mob/living/M, datum/disease/advance/A)
|
||||
var/get_damage = rand(6,10)
|
||||
M.adjustBruteLoss(get_damage)
|
||||
if(chems)
|
||||
M.reagents.add_reagent_list(list("heparin" = 2, "lipolicide" = 2))
|
||||
if(zombie)
|
||||
M.reagents.add_reagent("romerol", 1)
|
||||
return 1
|
||||
/*
|
||||
//////////////////////////////////////
|
||||
|
||||
Necrotizing Fasciitis (AKA Flesh-Eating Disease)
|
||||
|
||||
Very very noticable.
|
||||
Lowers resistance tremendously.
|
||||
No changes to stage speed.
|
||||
Decreases transmittablity temrendously.
|
||||
Fatal Level.
|
||||
|
||||
Bonus
|
||||
Deals brute damage over time.
|
||||
|
||||
//////////////////////////////////////
|
||||
*/
|
||||
|
||||
/datum/symptom/flesh_eating
|
||||
|
||||
name = "Necrotizing Fasciitis"
|
||||
desc = "The virus aggressively attacks body cells, necrotizing tissues and organs."
|
||||
stealth = -3
|
||||
resistance = -4
|
||||
stage_speed = 0
|
||||
transmittable = -4
|
||||
level = 6
|
||||
severity = 5
|
||||
base_message_chance = 50
|
||||
symptom_delay_min = 15
|
||||
symptom_delay_max = 60
|
||||
var/bleed = FALSE
|
||||
var/pain = FALSE
|
||||
threshold_desc = "<b>Resistance 7:</b> Host will bleed profusely during necrosis.<br>\
|
||||
<b>Transmission 8:</b> Causes extreme pain to the host, weakening it."
|
||||
|
||||
/datum/symptom/flesh_eating/Start(datum/disease/advance/A)
|
||||
if(!..())
|
||||
return
|
||||
if(A.properties["resistance"] >= 7) //extra bleeding
|
||||
bleed = TRUE
|
||||
if(A.properties["transmittable"] >= 8) //extra stamina damage
|
||||
pain = TRUE
|
||||
|
||||
/datum/symptom/flesh_eating/Activate(datum/disease/advance/A)
|
||||
if(!..())
|
||||
return
|
||||
var/mob/living/M = A.affected_mob
|
||||
switch(A.stage)
|
||||
if(2,3)
|
||||
if(prob(base_message_chance))
|
||||
to_chat(M, "<span class='warning'>[pick("You feel a sudden pain across your body.", "Drops of blood appear suddenly on your skin.")]</span>")
|
||||
if(4,5)
|
||||
to_chat(M, "<span class='userdanger'>[pick("You cringe as a violent pain takes over your body.", "It feels like your body is eating itself inside out.", "IT HURTS.")]</span>")
|
||||
Flesheat(M, A)
|
||||
|
||||
/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)
|
||||
if(pain)
|
||||
M.adjustStaminaLoss(get_damage * 2)
|
||||
if(bleed)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.bleed_rate += 5 * power
|
||||
return 1
|
||||
|
||||
/*
|
||||
//////////////////////////////////////
|
||||
|
||||
Autophagocytosis (AKA Programmed mass cell death)
|
||||
|
||||
Very noticable.
|
||||
Lowers resistance.
|
||||
Fast stage speed.
|
||||
Decreases transmittablity.
|
||||
Fatal Level.
|
||||
|
||||
Bonus
|
||||
Deals brute damage over time.
|
||||
|
||||
//////////////////////////////////////
|
||||
*/
|
||||
|
||||
/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"
|
||||
stealth = -2
|
||||
resistance = -2
|
||||
stage_speed = 1
|
||||
transmittable = -2
|
||||
level = 9
|
||||
severity = 6
|
||||
base_message_chance = 50
|
||||
symptom_delay_min = 3
|
||||
symptom_delay_max = 6
|
||||
var/chems = FALSE
|
||||
var/zombie = FALSE
|
||||
threshold_desc = "<b>Stage Speed 7:</b> Synthesizes Heparin and Lipolicide inside the host, causing increased bleeding and hunger.<br>\
|
||||
<b>Stealth 5:</b> The symptom remains hidden until active."
|
||||
|
||||
/datum/symptom/flesh_death/Start(datum/disease/advance/A)
|
||||
if(!..())
|
||||
return
|
||||
if(A.properties["stealth"] >= 5)
|
||||
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(!..())
|
||||
return
|
||||
var/mob/living/M = A.affected_mob
|
||||
switch(A.stage)
|
||||
if(2,3)
|
||||
if(prob(base_message_chance) && !suppress_warning)
|
||||
to_chat(M, "<span class='warning'>[pick("You feel your body break apart.", "Your skin rubs off like dust.")]</span>")
|
||||
if(4,5)
|
||||
if(prob(base_message_chance / 2)) //reduce spam
|
||||
to_chat(M, "<span class='userdanger'>[pick("You feel your muscles weakening.", "Some of your skin detaches itself.", "You feel sandy.")]</span>")
|
||||
Flesh_death(M, A)
|
||||
|
||||
/datum/symptom/flesh_death/proc/Flesh_death(mob/living/M, datum/disease/advance/A)
|
||||
var/get_damage = rand(6,10)
|
||||
M.take_overall_damage(brute = get_damage, required_status = BODYPART_ORGANIC)
|
||||
if(chems)
|
||||
M.reagents.add_reagent_list(list(/datum/reagent/toxin/heparin = 2, /datum/reagent/toxin/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)
|
||||
return 1
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
resistance = 0
|
||||
stage_speed = 0
|
||||
transmittable = 0
|
||||
level = 0 //not obtainable
|
||||
level = -1 //not obtainable
|
||||
base_message_chance = 20 //here used for the overlays
|
||||
symptom_delay_min = 1
|
||||
symptom_delay_max = 1
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
//////////////////////////////////////
|
||||
|
||||
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)
|
||||
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
/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
|
||||
@@ -0,0 +1,79 @@
|
||||
/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
|
||||
@@ -0,0 +1,51 @@
|
||||
/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 = 1
|
||||
symptom_delay_max = 4
|
||||
var/fastrads = FALSE
|
||||
var/radothers = FALSE
|
||||
threshold_desc = "<b>Transmission 12:</b> Makes the host irradiate others around them as well.<br>\
|
||||
<b>Speed 8:</b> Host takes radiation damage faster."
|
||||
|
||||
/datum/symptom/radiation/Start(datum/disease/advance/A)
|
||||
if(!..())
|
||||
return
|
||||
if(A.properties["transmission"] >= 10)
|
||||
radothers = TRUE
|
||||
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)
|
||||
if(fastrads)
|
||||
radiate(M, 80)
|
||||
else
|
||||
radiate(M, 40)
|
||||
if(radothers && A.stage == 5)
|
||||
if(prob(40))
|
||||
M.visible_message("<span class='danger'>[M] glows green for a moment!</span>", \
|
||||
"<span class='userdanger'>You feel a massive wave of pain flow through you!</span>")
|
||||
radiation_pulse(M, 20)
|
||||
|
||||
|
||||
/datum/symptom/radiation/proc/radiate(mob/living/carbon/M, chance)
|
||||
if(prob(chance))
|
||||
to_chat(M, "<span class='danger'>You feel a wave of pain throughout your body!</span>")
|
||||
M.radiation += 4
|
||||
@@ -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 = 3
|
||||
stealth = 1
|
||||
resistance = 2
|
||||
stage_speed = 1
|
||||
transmittable = 2
|
||||
level = 5
|
||||
|
||||
@@ -1,51 +1,50 @@
|
||||
/*
|
||||
//////////////////////////////////////
|
||||
|
||||
Sneezing
|
||||
|
||||
Very Noticable.
|
||||
Increases resistance.
|
||||
Doesn't increase stage speed.
|
||||
Very transmissible.
|
||||
Low Level.
|
||||
|
||||
Bonus
|
||||
Forces a spread type of AIRBORNE
|
||||
with extra range!
|
||||
|
||||
//////////////////////////////////////
|
||||
*/
|
||||
|
||||
/datum/symptom/sneeze
|
||||
name = "Sneezing"
|
||||
desc = "The virus causes irritation of the nasal cavity, making the host sneeze occasionally."
|
||||
stealth = -2
|
||||
resistance = 3
|
||||
stage_speed = 0
|
||||
transmittable = 4
|
||||
level = 1
|
||||
severity = 1
|
||||
symptom_delay_min = 5
|
||||
symptom_delay_max = 35
|
||||
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
|
||||
|
||||
/datum/symptom/sneeze/Activate(datum/disease/advance/A)
|
||||
if(!..())
|
||||
return
|
||||
var/mob/living/M = A.affected_mob
|
||||
switch(A.stage)
|
||||
if(1, 2, 3)
|
||||
if(!suppress_warning)
|
||||
M.emote("sniff")
|
||||
else
|
||||
M.emote("sneeze")
|
||||
A.spread(4 + power)
|
||||
/*
|
||||
//////////////////////////////////////
|
||||
|
||||
Sneezing
|
||||
|
||||
Very Noticable.
|
||||
Increases resistance.
|
||||
Doesn't increase stage speed.
|
||||
Very transmissible.
|
||||
Low Level.
|
||||
|
||||
Bonus
|
||||
Forces a spread type of AIRBORNE
|
||||
with extra range!
|
||||
|
||||
//////////////////////////////////////
|
||||
*/
|
||||
/datum/symptom/sneeze
|
||||
name = "Sneezing"
|
||||
desc = "The virus causes irritation of the nasal cavity, making the host sneeze occasionally."
|
||||
stealth = -2
|
||||
resistance = 3
|
||||
stage_speed = 0
|
||||
transmittable = 4
|
||||
level = 1
|
||||
severity = 1
|
||||
symptom_delay_min = 5
|
||||
symptom_delay_max = 35
|
||||
threshold_desc = "<b>Transmission 9:</b> The host will sneeze periodically, spreading the disease. <br>\
|
||||
<b>Stealth 4:</b> The symptom remains hidden until active."
|
||||
|
||||
/datum/symptom/sneeze/Start(datum/disease/advance/A)
|
||||
if(!..())
|
||||
return
|
||||
if(A.properties["stealth"] >= 4)
|
||||
suppress_warning = TRUE
|
||||
|
||||
/datum/symptom/sneeze/Activate(datum/disease/advance/A)
|
||||
if(!..())
|
||||
return
|
||||
if(!A.properties["transmittable"] >= 9)
|
||||
return
|
||||
var/mob/living/M = A.affected_mob
|
||||
switch(A.stage)
|
||||
if(1, 2, 3)
|
||||
if(!suppress_warning)
|
||||
M.emote("sniff")
|
||||
else
|
||||
M.emote("sneeze")
|
||||
A.spread(4 + power)
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
var/stage_speed = 0
|
||||
var/transmittable = 0
|
||||
// The type level of the symptom. Higher is harder to generate.
|
||||
var/level = 0
|
||||
var/level = -1
|
||||
// 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!!!
|
||||
@@ -66,6 +66,9 @@
|
||||
new_symp.id = id
|
||||
new_symp.neutered = neutered
|
||||
return new_symp
|
||||
|
||||
/datum/symptom/proc/OnDeath(datum/disease/advance/A)
|
||||
return !neutered
|
||||
|
||||
/datum/symptom/proc/generate_threshold_desc()
|
||||
return
|
||||
|
||||
@@ -46,3 +46,61 @@ 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
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
/datum/symptom/wizarditis
|
||||
name = "Wizarditis"
|
||||
desc = "Causes the host to subconciously believe they are in fact, a wizard."
|
||||
stealth = 1
|
||||
resistance = -2
|
||||
stage_speed = -3
|
||||
transmittable = -1
|
||||
level = 0
|
||||
severity = 3
|
||||
symptom_delay_min = 15
|
||||
symptom_delay_max = 45
|
||||
var/teleport = FALSE
|
||||
var/robes = FALSE
|
||||
threshold_desc = "<b>Transmission 14:</b> The host teleports occasionally.<br>\
|
||||
<b>Speed 7:</b> The host grows a set of wizard robes."
|
||||
|
||||
/datum/symptom/wizarditis/Start(datum/disease/advance/A)
|
||||
if(!..())
|
||||
return
|
||||
if(A.properties["transmission"] >= 14)
|
||||
teleport = TRUE
|
||||
if(A.properties["speed"] >= 7)
|
||||
robes = TRUE
|
||||
|
||||
/datum/symptom/wizarditis/Activate(datum/disease/advance/A)
|
||||
if(!..())
|
||||
return
|
||||
var/mob/living/M = A.affected_mob
|
||||
switch(A.stage)
|
||||
if(2)
|
||||
if(prob(30) && prob(50))
|
||||
M.say(pick("You shall not pass!", "Expeliarmus!", "By Merlins beard!", "Feel the power of the Dark Side!"))
|
||||
if(prob(30) && prob(50))
|
||||
to_chat(M, "<span class='danger'>You feel [pick("that you don't have enough mana", "that the winds of magic are gone", "an urge to summon familiar")].</span>")
|
||||
|
||||
|
||||
if(3)
|
||||
if(prob(30) && prob(50))
|
||||
M.say(pick("NEC CANTIO!","AULIE OXIN FIERA!", "STI KALY!", "TARCOL MINTI ZHERI!"))
|
||||
if(prob(30) && prob(50))
|
||||
to_chat(M, "<span class='danger'>You feel [pick("the magic bubbling in your veins","that this location gives you a +1 to INT","an urge to summon familiar")].</span>")
|
||||
|
||||
if(4)
|
||||
|
||||
if(prob(50))
|
||||
M.say(pick("NEC CANTIO!","AULIE OXIN FIERA!","STI KALY!","EI NATH!"))
|
||||
return
|
||||
if(robes)
|
||||
to_chat(M, "<span class='danger'>You feel [pick("the tidal wave of raw power building inside","that this location gives you a +2 to INT and +1 to WIS","an urge to teleport")].</span>")
|
||||
spawn_wizard_clothes(50, A)
|
||||
if(prob(20) && teleport)
|
||||
teleport(A)
|
||||
return
|
||||
|
||||
|
||||
|
||||
/datum/symptom/wizarditis/proc/spawn_wizard_clothes(chance = 0, datum/disease/advance/A)
|
||||
if(ishuman(A.affected_mob))
|
||||
var/mob/living/carbon/human/H = A.affected_mob
|
||||
var/obj/item/clothing/C
|
||||
if(prob(chance))
|
||||
if(!istype(H.head, /obj/item/clothing/head/wizard))
|
||||
if(!H.dropItemToGround(H.head))
|
||||
qdel(H.head)
|
||||
C = new /obj/item/clothing/head/wizard(H)
|
||||
ADD_TRAIT(C, TRAIT_NODROP, DISEASE_TRAIT)
|
||||
H.equip_to_slot_or_del(C, SLOT_HEAD)
|
||||
return
|
||||
if(prob(chance))
|
||||
if(!istype(H.wear_suit, /obj/item/clothing/suit/wizrobe))
|
||||
if(!H.dropItemToGround(H.wear_suit))
|
||||
qdel(H.wear_suit)
|
||||
C = new /obj/item/clothing/suit/wizrobe(H)
|
||||
ADD_TRAIT(C, TRAIT_NODROP, DISEASE_TRAIT)
|
||||
H.equip_to_slot_or_del(C, SLOT_WEAR_SUIT)
|
||||
return
|
||||
if(prob(chance))
|
||||
if(!istype(H.shoes, /obj/item/clothing/shoes/sandal/magic))
|
||||
if(!H.dropItemToGround(H.shoes))
|
||||
qdel(H.shoes)
|
||||
C = new /obj/item/clothing/shoes/sandal/magic(H)
|
||||
ADD_TRAIT(C, TRAIT_NODROP, DISEASE_TRAIT)
|
||||
H.equip_to_slot_or_del(C, SLOT_SHOES)
|
||||
return
|
||||
else
|
||||
var/mob/living/carbon/H = A.affected_mob
|
||||
if(prob(chance))
|
||||
var/obj/item/staff/S = new(H)
|
||||
if(!H.put_in_hands(S))
|
||||
qdel(S)
|
||||
|
||||
|
||||
/datum/symptom/wizarditis/proc/teleport(datum/disease/advance/A)
|
||||
var/turf/L = get_safe_random_station_turf()
|
||||
A.affected_mob.say("SCYAR NILA!")
|
||||
do_teleport(A.affected_mob, L, forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC)
|
||||
playsound(get_turf(A.affected_mob), 'sound/weapons/zapbang.ogg', 50,1)
|
||||
|
||||
/datum/symptom/wizarditis/End(datum/disease/advance/A)
|
||||
if(ishuman(A.affected_mob))
|
||||
var/mob/living/carbon/human/H = A.affected_mob
|
||||
if(istype(H.head, /obj/item/clothing/head/wizard))
|
||||
REMOVE_TRAIT(H.head, TRAIT_NODROP, DISEASE_TRAIT)
|
||||
if(istype(H.wear_suit, /obj/item/clothing/suit/wizrobe))
|
||||
REMOVE_TRAIT(H.wear_suit, TRAIT_NODROP, DISEASE_TRAIT)
|
||||
if(istype(H.shoes, /obj/item/clothing/shoes/sandal/magic))
|
||||
REMOVE_TRAIT(H.shoes, TRAIT_NODROP, DISEASE_TRAIT)
|
||||
|
||||
|
||||
|
||||
@@ -467,7 +467,8 @@
|
||||
/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/formaldehyde = 1,
|
||||
/obj/item/reagent_containers/glass/bottle/viralbase = 1)
|
||||
|
||||
// ----------------------------
|
||||
// Disk """fridge"""
|
||||
|
||||
@@ -48,7 +48,6 @@
|
||||
/mob/living/proc/spawn_dust(just_ash = FALSE)
|
||||
new /obj/effect/decal/cleanable/ash(loc)
|
||||
|
||||
|
||||
/mob/living/death(gibbed)
|
||||
stat = DEAD
|
||||
unset_machine()
|
||||
@@ -57,6 +56,10 @@
|
||||
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)
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
/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
|
||||
@@ -1582,6 +1582,22 @@
|
||||
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"
|
||||
|
||||
/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"
|
||||
|
||||
/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"
|
||||
|
||||
/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)
|
||||
@@ -2174,4 +2190,4 @@
|
||||
if(prob(20))
|
||||
to_chat(M, "<span class = 'notice'>[pick("Headpats feel nice.", "The feeling of a hairball...", "Backrubs would be nice.", "Whats behind those doors?")]</span>")
|
||||
M.adjustArousalLoss(2)
|
||||
..()
|
||||
..()
|
||||
|
||||
@@ -229,7 +229,19 @@
|
||||
var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
|
||||
if(D)
|
||||
D.Evolve(level_min, level_max)
|
||||
|
||||
/datum/chemical_reaction/virus_food_laughter
|
||||
name = "Anomolous virus food"
|
||||
id = "virusfood_laughter"
|
||||
results = list(/datum/reagent/consumable/laughter/laughtervirusfood = 1)
|
||||
required_reagents = list(/datum/reagent/consumable/laughter = 5, /datum/reagent/consumable/virus_food = 1)
|
||||
|
||||
/datum/chemical_reaction/virus_food_admin
|
||||
name = "Highly unstable virus Food"
|
||||
id = "virusfood_admin"
|
||||
results = list(/datum/reagent/consumable/virus_food/advvirusfood = 1)
|
||||
required_reagents = list(/datum/reagent/consumable/virus_food/viralbase = 1, /datum/reagent/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
|
||||
|
||||
@@ -318,6 +330,23 @@
|
||||
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(/datum/reagent/consumable/laughter/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(/datum/reagent/consumable/virus_food/advvirusfood = 1)
|
||||
level_min = 9
|
||||
level_max = 9
|
||||
|
||||
|
||||
/datum/chemical_reaction/mix_virus/rem_virus
|
||||
|
||||
@@ -702,4 +731,4 @@
|
||||
name = "liquid royal blue carpet"
|
||||
id = "royalbluecarpet"
|
||||
results = list("royalbluecarpet" = 2)
|
||||
required_reagents = list("carpet" = 1, "clonexadone" = 1)
|
||||
required_reagents = list("carpet" = 1, "clonexadone" = 1)
|
||||
|
||||
@@ -126,6 +126,11 @@
|
||||
|
||||
/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(/datum/reagent/consumable/virus_food/viralbase = 1)
|
||||
|
||||
/obj/item/reagent_containers/glass/beaker/update_icon()
|
||||
cut_overlays()
|
||||
|
||||
Reference in New Issue
Block a user