/mob/living
///our immune system
var/datum/immune_system/immune_system
/atom
///image
var/image/pathogen
/mob/living/proc/spread_airborne_diseases()
//spreading our own airborne viruses
if (diseases && diseases.len > 0)
var/list/airborne_viruses = filter_disease_by_spread(diseases, required = DISEASE_SPREAD_AIRBORNE)
if (airborne_viruses && airborne_viruses.len > 0)
var/strength = 0
for (var/datum/disease/acute/V as anything in airborne_viruses)
strength += V.infectionchance
strength = round(strength/airborne_viruses.len)
while (strength > 0)//stronger viruses create more clouds at once
new /obj/effect/pathogen_cloud/core(get_turf(src), src, airborne_viruses)
strength -= 40
/mob/living/infect_disease(datum/disease/acute/disease, forced = FALSE, notes = "", decay = TRUE, patient_zero = FALSE)
if(!istype(disease))
return FALSE
if(!(disease.infectable_biotypes & mob_biotypes))
return
if(!disease.spread_flags && !(disease.disease_flags & DISEASE_DORMANT))
return FALSE
for(var/datum/disease/acute/old_disease as anything in diseases)
if(disease.uniqueID == old_disease.uniqueID && disease.subID == old_disease.subID) // child ids are for pathogenic mutations and aren't accounted for as thats fucked.
return FALSE
if(immune_system && !immune_system.CanInfect(disease))
return FALSE
if(prob(disease.infectionchance) || forced)
var/datum/disease/acute/D = disease.Copy()
if (D.infectionchance > 5)
D.infectionchance = max(5, D.infectionchance - 5)//The virus gets weaker as it jumps from people to people
D.stage = clamp(disease.stage + D.stage_variance, 1, D.max_stages)
D.log += "
[ROUND_TIME()] Infected [key_name(src)] [notes]. Infection chance now [D.infectionchance]%"
LAZYADD(diseases, D)
if(patient_zero)
D.carrier = TRUE
D.affected_mob = src
//SSdisease.active_diseases += D
D.after_add()
src.med_hud_set_status()
log_virus("[key_name(src)] was infected by virus: [D.admin_details()] at [loc_name(loc)]")
D.AddToGoggleView(src)
if(GLOB.static_plague_team)
var/datum/team/plague_rat/plague = GLOB.static_plague_team
if (plague && ("[D.uniqueID]-[D.subID]" == plague.disease_id))
var/datum/objective/plague/O = locate() in plague.objectives
if (O && !istype(src, /mob/living/simple_animal/mouse/plague))
O.total_infections++
plague.update_hud_icons()
return TRUE
/mob/dead/new_player/proc/DiseaseCarrierCheck(mob/living/carbon/human/H)
// 10% of players are joining the station with some minor disease if latejoined
//don't let the compromised die right out of the gates.
if(("Immunodeficiency" in H?.client?.prefs?.active_character?.all_quirks) || HAS_TRAIT(H, TRAIT_IMMUNODEFICIENCY))
return
if(prob(10))
var/virus_choice = pick(WILD_ACUTE_DISEASES)
var/datum/disease/acute/D = new virus_choice
var/list/anti = list(
ANTIGEN_BLOOD = 1,
ANTIGEN_COMMON = 1,
ANTIGEN_RARE = 0,
ANTIGEN_ALIEN = 0,
)
var/list/bad = list(
EFFECT_DANGER_HELPFUL = 1,
EFFECT_DANGER_FLAVOR = 4,
EFFECT_DANGER_ANNOYING = 4,
EFFECT_DANGER_HINDRANCE = 0,
EFFECT_DANGER_HARMFUL = 0,
EFFECT_DANGER_DEADLY = 0,
)
D.makerandom(list(30,55),list(0,50),anti,bad,null)
D.log += "
[ROUND_TIME()] Infected [key_name(H)]"
if(!length(H.diseases))
H.diseases = list()
H.diseases += D
D.AddToGoggleView(H)