Refactors virus spreading
This commit is contained in:
@@ -183,19 +183,19 @@
|
||||
properties["stealth"] += S.stealth
|
||||
properties["stage_rate"] += S.stage_speed
|
||||
properties["transmittable"] += S.transmittable
|
||||
properties["severity"] = max(properties["severity"], S.severity) // severity is based on the highest severity symptom
|
||||
if(!S.neutered)
|
||||
properties["severity"] = max(properties["severity"], S.severity) // severity is based on the highest severity non-neutered symptom
|
||||
return
|
||||
|
||||
// Assign the properties that are in the list.
|
||||
/datum/disease/advance/proc/AssignProperties()
|
||||
|
||||
if(properties && properties.len)
|
||||
switch(properties["stealth"])
|
||||
if(2 to INFINITY)
|
||||
visibility_flags = HIDDEN_SCANNER
|
||||
if(properties["stealth"] >= 2)
|
||||
visibility_flags = HIDDEN_SCANNER
|
||||
|
||||
SetSpread(Clamp(2 ** (properties["transmittable"] - symptoms.len), VIRUS_SPREAD_BLOOD, VIRUS_SPREAD_AIRBORNE))
|
||||
|
||||
// The more symptoms we have, the less transmittable it is but some symptoms can make up for it.
|
||||
SetSpread(Clamp(2 ** (properties["transmittable"] - symptoms.len), BLOOD, AIRBORNE))
|
||||
permeability_mod = max(Ceiling(0.4 * properties["transmittable"]), 1)
|
||||
cure_chance = 15 - Clamp(properties["resistance"], -5, 5) // can be between 10 and 20
|
||||
stage_prob = max(properties["stage_rate"], 2)
|
||||
@@ -208,35 +208,43 @@
|
||||
// Assign the spread type and give it the correct description.
|
||||
/datum/disease/advance/proc/SetSpread(spread_id)
|
||||
switch(spread_id)
|
||||
if(NON_CONTAGIOUS)
|
||||
if(VIRUS_SPREAD_NON_CONTAGIOUS)
|
||||
spread_flags = VIRUS_SPREAD_NON_CONTAGIOUS
|
||||
spread_text = "None"
|
||||
if(SPECIAL)
|
||||
if(VIRUS_SPREAD_SPECIAL)
|
||||
spread_flags = VIRUS_SPREAD_SPECIAL
|
||||
spread_text = "None"
|
||||
if(CONTACT_GENERAL, CONTACT_HANDS, CONTACT_FEET)
|
||||
spread_text = "On contact"
|
||||
if(AIRBORNE)
|
||||
spread_text = "Airborne"
|
||||
if(BLOOD)
|
||||
if(VIRUS_SPREAD_BLOOD)
|
||||
spread_flags = VIRUS_SPREAD_BLOOD
|
||||
spread_text = "Blood"
|
||||
|
||||
spread_flags = spread_id
|
||||
if(VIRUS_SPREAD_CONTACT_FLUIDS)
|
||||
spread_flags = VIRUS_SPREAD_BLOOD | VIRUS_SPREAD_CONTACT_FLUIDS
|
||||
spread_text = "Fluids"
|
||||
if(VIRUS_SPREAD_CONTACT_SKIN)
|
||||
spread_flags = VIRUS_SPREAD_BLOOD | VIRUS_SPREAD_CONTACT_FLUIDS | VIRUS_SPREAD_CONTACT_SKIN
|
||||
spread_text = "On contact"
|
||||
if(VIRUS_SPREAD_AIRBORNE)
|
||||
spread_flags = VIRUS_SPREAD_BLOOD | VIRUS_SPREAD_CONTACT_FLUIDS | VIRUS_SPREAD_CONTACT_SKIN | VIRUS_SPREAD_AIRBORNE
|
||||
spread_text = "Airborne"
|
||||
|
||||
/datum/disease/advance/proc/SetSeverity(level_sev)
|
||||
|
||||
switch(level_sev)
|
||||
|
||||
if(-INFINITY to 0)
|
||||
severity = NONTHREAT
|
||||
severity = VIRUS_SEVERITY_POSITIVE
|
||||
if(1)
|
||||
severity = MINOR
|
||||
severity = VIRUS_SEVERITY_NONTHREAT
|
||||
if(2)
|
||||
severity = MEDIUM
|
||||
severity = VIRUS_SEVERITY_MINOR
|
||||
if(3)
|
||||
severity = HARMFUL
|
||||
severity = VIRUS_SEVERITY_MEDIUM
|
||||
if(4)
|
||||
severity = DANGEROUS
|
||||
if(5 to INFINITY)
|
||||
severity = BIOHAZARD
|
||||
severity = VIRUS_SEVERITY_HARMFUL
|
||||
if(5)
|
||||
severity = VIRUS_SEVERITY_DANGEROUS
|
||||
if(6 to INFINITY)
|
||||
severity = VIRUS_SEVERITY_BIOHAZARD
|
||||
else
|
||||
severity = "Unknown"
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@ Bonus
|
||||
stage_speed = -1
|
||||
transmittable = -2
|
||||
level = 7
|
||||
severity = 3
|
||||
severity = 6
|
||||
base_message_chance = 15
|
||||
symptom_delay_min = 14
|
||||
symptom_delay_max = 30
|
||||
|
||||
@@ -40,7 +40,7 @@ BONUS
|
||||
return
|
||||
if(A.properties["stealth"] >= 4)
|
||||
suppress_warning = TRUE
|
||||
if(A.spread_flags &= AIRBORNE) //infect bystanders
|
||||
if(A.spread_flags &= VIRUS_SPREAD_AIRBORNE) //infect bystanders
|
||||
infective = TRUE
|
||||
if(A.properties["resistance"] >= 3) //strong enough to drop items
|
||||
power = 1.5
|
||||
|
||||
@@ -24,7 +24,7 @@ Bonus
|
||||
stage_speed = -1
|
||||
transmittable = -3
|
||||
level = 4
|
||||
severity = 3
|
||||
severity = 4
|
||||
base_message_chance = 100
|
||||
symptom_delay_min = 25
|
||||
symptom_delay_max = 80
|
||||
|
||||
@@ -23,7 +23,7 @@ Bonus
|
||||
stage_speed = 0
|
||||
transmittable = -3
|
||||
level = 6
|
||||
severity = 3
|
||||
severity = 4
|
||||
var/list/possible_mutations
|
||||
var/archived_dna = null
|
||||
base_message_chance = 50
|
||||
|
||||
@@ -23,7 +23,7 @@ Bonus
|
||||
stage_speed = -3
|
||||
transmittable = -1
|
||||
level = 5
|
||||
severity = 3
|
||||
severity = 2
|
||||
base_message_chance = 25
|
||||
symptom_delay_min = 25
|
||||
symptom_delay_max = 90
|
||||
|
||||
@@ -22,7 +22,7 @@ Bonus
|
||||
level = 6
|
||||
symptom_delay_min = 15
|
||||
symptom_delay_max = 80
|
||||
severity = 5
|
||||
severity = 4
|
||||
var/sleep_level = 0
|
||||
var/sleepy_ticks = 0
|
||||
var/stamina = FALSE
|
||||
|
||||
@@ -23,7 +23,6 @@ Bonus
|
||||
stage_speed = -4
|
||||
transmittable = -3
|
||||
level = 5
|
||||
severity = 0
|
||||
symptom_delay_min = 5
|
||||
symptom_delay_max = 10
|
||||
var/purge_alcohol = FALSE
|
||||
|
||||
@@ -24,7 +24,7 @@ Bonus
|
||||
stage_speed = -4
|
||||
transmittable = -3
|
||||
level = 5
|
||||
severity = 4
|
||||
severity = 5
|
||||
base_message_chance = 50
|
||||
symptom_delay_min = 25
|
||||
symptom_delay_max = 80
|
||||
|
||||
@@ -28,7 +28,7 @@ Bonus
|
||||
stage_speed = 0
|
||||
transmittable = 1
|
||||
level = 3
|
||||
severity = 4
|
||||
severity = 3
|
||||
base_message_chance = 100
|
||||
symptom_delay_min = 25
|
||||
symptom_delay_max = 80
|
||||
|
||||
@@ -24,7 +24,7 @@ Bonus
|
||||
stage_speed = -2
|
||||
transmittable = -2
|
||||
level = 4
|
||||
severity = 1
|
||||
severity = 3
|
||||
base_message_chance = 100
|
||||
symptom_delay_min = 15
|
||||
symptom_delay_max = 45
|
||||
@@ -75,7 +75,7 @@ Bonus
|
||||
stage_speed = -2
|
||||
transmittable = -2
|
||||
level = 3
|
||||
severity = 1
|
||||
severity = 3
|
||||
base_message_chance = 100
|
||||
symptom_delay_min = 15
|
||||
symptom_delay_max = 45
|
||||
|
||||
Reference in New Issue
Block a user