Files
CHOMPStation2/code/datums/diseases/roanoke.dm
2025-07-27 04:51:45 +02:00

94 lines
2.8 KiB
Plaintext

/datum/disease/roanoke
name = "Roanoke Syndrome"
medical_name = "Roanoke Syndrome"
max_stages = 6
stage_prob = 2
spread_text = "Blood and close contact"
spread_flags = DISEASE_SPREAD_BLOOD
cure_text = REAGENT_SPACEACILLIN
agent = "Chimera cells"
cures = list(REAGENT_ID_SPACEACILLIN)
cure_chance = 10
viable_mobtypes = list(/mob/living/carbon/human)
desc = "If left untreated, subject will become a xenochimera upon perishing."
danger = DISEASE_BIOHAZARD
disease_flags = CURABLE | CAN_CARRY | CAN_NOT_POPULATE
virus_modifiers = BYPASSES_IMMUNITY | SPREAD_DEAD
var/list/obj/item/organ/organ_list = list()
var/obj/item/organ/O
/datum/disease/roanoke/Start()
var/mob/living/carbon/human/M = affected_mob
organ_list += M.organs
organ_list += M.internal_organs
/datum/disease/roanoke/stage_act()
if(!..())
return FALSE
var/mob/living/carbon/human/M = affected_mob
switch(stage)
if(2)
if(prob(1))
to_chat(M, span_notice("You feel a slight shiver through your spine..."))
if(prob(1))
to_chat(M, span_warning(pick("You feel hot.", "You feel like you're burning.")))
if(M.bodytemperature < BODYTEMP_HEAT_DAMAGE_LIMIT)
fever(M)
if(3)
if(prob(1))
to_chat(M, span_notice("You shiver a bit."))
if(prob(1))
to_chat(M, span_warning(pick("You feel hot.", "You feel like you're burning.")))
if(M.bodytemperature < BODYTEMP_HEAT_DAMAGE_LIMIT)
fever(M)
if(prob(1))
O = pick(organ_list)
O.adjust_germ_level(rand(5, 10))
if(4)
if(prob(1))
to_chat(M, span_warning(pick("You feel hot.", "You feel like you're burning.")))
if(M.bodytemperature < BODYTEMP_HEAT_DAMAGE_LIMIT)
fever(M)
if(prob(2))
O = pick(organ_list)
O.adjust_germ_level(rand(5, 10))
if(5)
if(prob(1))
to_chat(M, span_warning(pick("You feel hot.", "You feel like you're burning.")))
if(M.bodytemperature < BODYTEMP_HEAT_DAMAGE_LIMIT)
fever(M)
if(prob(2))
O = pick(organ_list)
O.adjust_germ_level(rand(5, 10))
if(prob(1))
O.take_damage(rand(1, 3))
if(6)
if(prob(1))
to_chat(M, span_warning(pick("You feel hot.", "You feel like you're burning.")))
if(M.bodytemperature < BODYTEMP_HEAT_DAMAGE_LIMIT)
fever(M)
if(prob(2))
O = pick(organ_list)
O.adjust_germ_level(rand(5, 10))
if(prob(2))
O.take_damage(rand(1, 3))
if(prob(1) && prob(10))
O = pick(organ_list)
var/obj/item/organ/external/E = O.parent_organ
var/datum/wound/W = new /datum/wound/internal_bleeding(5)
E.wounds += W
if(M.stat == DEAD || M.allow_spontaneous_tf)
M.LoadComponent(/datum/component/xenochimera)
cure()
return
/datum/disease/roanoke/proc/fever(var/mob/living/M, var/datum/disease/D)
M.bodytemperature = min(M.bodytemperature + (2 * stage), BODYTEMP_HEAT_DAMAGE_LIMIT - 1)
return TRUE