mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-23 21:27:01 +01:00
[MIRROR] Faltered & Dormant diseases update (#10985)
Co-authored-by: Guti <32563288+TheCaramelion@users.noreply.github.com> Co-authored-by: Cameron Lennox <killer65311@gmail.com>
This commit is contained in:
co-authored by
Guti
Cameron Lennox
parent
c8f4469b94
commit
05b57277bf
@@ -283,6 +283,14 @@
|
||||
#define REAGENT_ID_PHORONVIRUSFOOD "phoronvirusfood"
|
||||
#define REAGENT_WEAKPHORONVIRUSFOOD "Weakened phoronic virus food"
|
||||
#define REAGENT_ID_WEAKPHORONVIRUSFOOD "weakphoronvirusfood"
|
||||
#define REAGENT_URANIUMVIRUSFOOD "Unstable virus food"
|
||||
#define REAGENT_ID_URANIUMVIRUSFOOD "uraniumvirusfood"
|
||||
#define REAGENT_UNSTABLEURANIUMVIRUSFOOD "Unstable uranium gel"
|
||||
#define REAGENT_ID_UNSTABLEURANIUMVIRUSFOOD "unstableuraniumvirusfood"
|
||||
#define REAGENT_STABLEURANIUMVIRUSFOOD "Stable uranium gel"
|
||||
#define REAGENT_ID_STABLEURANIUMVIRUSFOOD_ALT "stableuraniumvirusfood_alt"
|
||||
#define REAGENT_STABLEURANIUMVIRUSFOOD_ALT "Stable uranium gel"
|
||||
#define REAGENT_ID_STABLEURANIUMVIRUSFOOD "stableuraniumvirusfood"
|
||||
#define REAGENT_SIZEVIRUSFOOD "Sizeoxadone virus food"
|
||||
#define REAGENT_ID_SIZEVIRUSFOOD "sizevirusfood"
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
#define DISEASE_SPREAD_FLUIDS (1<<3)
|
||||
#define DISEASE_SPREAD_CONTACT (1<<4)
|
||||
#define DISEASE_SPREAD_AIRBORNE (1<<5)
|
||||
#define DISEASE_SPREAD_FALTERED (1<<6)
|
||||
|
||||
//Severity Defines
|
||||
#define DISEASE_BENEFICIAL "Beneficial"
|
||||
@@ -39,6 +40,8 @@
|
||||
#define CARRIER 0x20 /// If we are a carrier for the virus but we will not be affected by it.
|
||||
#define BYPASSES_IMMUNITY 0x40 /// If this virus bypasses immunity.
|
||||
#define DISCOVERED 0x80 /// If applied, this virus will show up on medical HUDs. Automatically set when it reaches mid-stage.
|
||||
#define DORMANT 0x100 /// If applied, the virus is dormant and will not act or spread.
|
||||
#define FALTERED 0x200 /// If applied, the virus is faltered and will only spread by intentional injection.
|
||||
|
||||
#define EXTRAPOLATOR_RESULT_DISEASES "extrapolator_result_disease"
|
||||
#define EXTRAPOLATOR_RESULT_ACT_PRIORITY "extrapolator_result_action_priority"
|
||||
|
||||
@@ -211,5 +211,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
|
||||
#define FERVEATIUM_TRAIT "ferveatium"
|
||||
*/
|
||||
|
||||
#define STRONG_IMMUNITY_TRAIT "strongimmunity"
|
||||
|
||||
#define ORGANICS 1
|
||||
#define SYNTHETICS 2
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/proc/addDisease(datum/disease/D)
|
||||
LAZYADD(viruses, D)
|
||||
return TRUE
|
||||
|
||||
/mob/proc/RemoveDisease(datum/disease/D)
|
||||
LAZYREMOVE(viruses, D)
|
||||
return TRUE
|
||||
@@ -29,8 +33,13 @@
|
||||
if(HasDisease(D))
|
||||
return FALSE
|
||||
|
||||
if(istype(D, /datum/disease/advance) && count_by_type(GetViruses(), /datum/disease/advance) > 0)
|
||||
return FALSE
|
||||
if(istype(D, /datum/disease/advance))
|
||||
var/active_diseases = 0
|
||||
for(var/datum/disease/AD in GetViruses())
|
||||
if(!(AD.virus_modifiers & DORMANT)) // You can have as many dormant diseases as you want
|
||||
active_diseases++
|
||||
if(active_diseases > 0) // But ONLY one active disease
|
||||
return FALSE
|
||||
|
||||
var/compatible_type = FALSE
|
||||
for(var/type_to_test in D.viable_mobtypes)
|
||||
@@ -50,31 +59,9 @@
|
||||
/mob/proc/ContractDisease(datum/disease/D, var/target_zone)
|
||||
if(!CanContractDisease(D))
|
||||
return 0
|
||||
AddDisease(D)
|
||||
D.infect(src)
|
||||
return TRUE
|
||||
|
||||
/mob/proc/AddDisease(datum/disease/D, respect_carrier = FALSE)
|
||||
var/datum/disease/DD = new D.type(1, D, 0)
|
||||
DD.start_cure_timer()
|
||||
viruses += DD
|
||||
DD.affected_mob = src
|
||||
GLOB.active_diseases += DD
|
||||
|
||||
var/list/skipped = list("affected_mob", "holder", "carrier", "stage", "type", "parent_type", "vars", "transformed", "_active_timers")
|
||||
if(respect_carrier)
|
||||
skipped -= "carrier"
|
||||
for(var/V in DD.vars)
|
||||
if(V in skipped)
|
||||
continue
|
||||
if(istype(DD.vars[V],/list))
|
||||
var/list/L = D.vars[V]
|
||||
if(islist(L))
|
||||
DD.vars[V] = L.Copy()
|
||||
else
|
||||
DD.vars[V] = D.vars[V]
|
||||
|
||||
log_admin("[key_name(src)] has contracted the virus \"[DD]\"")
|
||||
|
||||
/mob/living/carbon/human/ContractDisease(datum/disease/D, target_zone)
|
||||
if(!CanContractDisease(D))
|
||||
return FALSE
|
||||
@@ -144,7 +131,7 @@
|
||||
passed = prob((Cl.permeability_coefficient*100) - 1)
|
||||
|
||||
if(passed)
|
||||
AddDisease(D)
|
||||
D.infect(src)
|
||||
|
||||
/mob/living/proc/AirborneContractDisease(datum/disease/D, force_spread)
|
||||
if(((D.spread_flags & DISEASE_SPREAD_AIRBORNE) || force_spread) && prob(50*D.spreading_modifier) - 1)
|
||||
@@ -161,7 +148,7 @@
|
||||
if(!CanContractDisease(D))
|
||||
return FALSE
|
||||
|
||||
AddDisease(D, respect_carrier)
|
||||
D.infect(src, respect_carrier)
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/human/CanContractDisease(datum/disease/D)
|
||||
|
||||
@@ -44,6 +44,14 @@ GLOBAL_LIST_INIT(diseases, subtypesof(/datum/disease))
|
||||
End()
|
||||
return ..()
|
||||
|
||||
/datum/disease/proc/infect(var/mob/living/infectee, make_copy = TRUE)
|
||||
var/datum/disease/D = make_copy ? Copy() : src
|
||||
infectee.addDisease(D)
|
||||
D.affected_mob = infectee
|
||||
GLOB.active_diseases += D
|
||||
|
||||
log_admin("[key_name(src)] has contracted the virus \"[D]\"")
|
||||
|
||||
/datum/disease/proc/stage_act()
|
||||
if(!affected_mob)
|
||||
return FALSE
|
||||
|
||||
@@ -58,6 +58,8 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
/datum/disease/advance/stage_act()
|
||||
if(!..())
|
||||
return FALSE
|
||||
if(global_flag_check(virus_modifiers, DORMANT))
|
||||
return FALSE
|
||||
if(symptoms && length(symptoms))
|
||||
|
||||
if(!s_processing)
|
||||
@@ -92,6 +94,8 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
QDEL_LIST(A.symptoms)
|
||||
for(var/datum/symptom/S as anything in symptoms)
|
||||
A.symptoms += S.Copy()
|
||||
A.virus_modifiers = virus_modifiers
|
||||
A.spread_flags = spread_flags
|
||||
A.disease_flags = disease_flags
|
||||
A.resistance = resistance
|
||||
A.stealth = stealth
|
||||
@@ -213,7 +217,7 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
|
||||
/datum/disease/advance/proc/AssignProperties()
|
||||
|
||||
if(stealth >= 2)
|
||||
if(global_flag_check(virus_modifiers, DORMANT) || stealth >= 2)
|
||||
visibility_flags |= HIDDEN_SCANNER
|
||||
else
|
||||
visibility_flags &= ~HIDDEN_SCANNER
|
||||
@@ -226,16 +230,23 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
GenerateCure()
|
||||
|
||||
/datum/disease/advance/proc/SetSpread()
|
||||
switch(transmission)
|
||||
if(-INFINITY to 5)
|
||||
spread_flags = DISEASE_SPREAD_BLOOD
|
||||
spread_text = "Blood"
|
||||
if(6 to 10)
|
||||
spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_FLUIDS
|
||||
spread_text = "Fluids"
|
||||
if(11 to INFINITY)
|
||||
spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_FLUIDS | DISEASE_SPREAD_CONTACT
|
||||
spread_text = "On Contact"
|
||||
if(global_flag_check(virus_modifiers, FALTERED))
|
||||
spread_flags = DISEASE_SPREAD_FALTERED
|
||||
spread_text = "Intentional Injection"
|
||||
if(global_flag_check(virus_modifiers, DORMANT))
|
||||
spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS
|
||||
spread_text = "None"
|
||||
else
|
||||
switch(transmission)
|
||||
if(-INFINITY to 5)
|
||||
spread_flags = DISEASE_SPREAD_BLOOD
|
||||
spread_text = "Blood"
|
||||
if(6 to 10)
|
||||
spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_FLUIDS
|
||||
spread_text = "Fluids"
|
||||
if(11 to INFINITY)
|
||||
spread_flags = DISEASE_SPREAD_BLOOD | DISEASE_SPREAD_FLUIDS | DISEASE_SPREAD_CONTACT
|
||||
spread_text = "On Contact"
|
||||
|
||||
/datum/disease/advance/proc/SetSeverity(level_sev)
|
||||
|
||||
@@ -299,6 +310,15 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
NeuterSymptom(s)
|
||||
Refresh(TRUE)
|
||||
|
||||
// Falter the disease, making it non-spreadable.
|
||||
/datum/disease/advance/proc/Falter()
|
||||
if(global_flag_check(virus_modifiers, FALTERED))
|
||||
return
|
||||
else
|
||||
virus_modifiers |= FALTERED
|
||||
spread_flags = DISEASE_SPREAD_BLOOD
|
||||
spread_text = "Intentional Injection"
|
||||
|
||||
// Name the disease.
|
||||
/datum/disease/advance/proc/AssignName(new_name = "Unknown")
|
||||
Refresh()
|
||||
@@ -378,6 +398,7 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
|
||||
// Should be only 1 entry left, but if not let's only return a single entry
|
||||
var/datum/disease/advance/to_return = pick(diseases)
|
||||
to_return.disease_flags &= ~DORMANT
|
||||
to_return.Refresh(new_name = TRUE)
|
||||
return to_return
|
||||
|
||||
@@ -448,3 +469,11 @@ GLOBAL_LIST_INIT(advance_cures, list(
|
||||
log_admin("[key_name_admin(src)] infected [key_name_admin(H)] with [D.name]. It has these symptoms: [english_list(name_symptoms)]")
|
||||
|
||||
return TRUE
|
||||
|
||||
/datum/disease/advance/infect(var/mob/living/infectee, make_copy = TRUE)
|
||||
var/datum/disease/advance/A = make_copy ? Copy() : src
|
||||
infectee.addDisease(A)
|
||||
A.affected_mob = infectee
|
||||
GLOB.active_diseases += A
|
||||
|
||||
log_admin("[key_name(src)] has contracted the virus \"[A]\"")
|
||||
|
||||
@@ -35,6 +35,32 @@
|
||||
symptoms += new guaranteed_symptom
|
||||
Finalize()
|
||||
|
||||
/mob/living/carbon/human/proc/give_random_dormant_disease(biohazard = 25, min_symptoms = 2, max_symptoms = 4, min_level = 4, max_level = 9, list/guaranteed_symptoms = list())
|
||||
. = FALSE
|
||||
var/sickrisk = 1
|
||||
|
||||
if(isSynthetic() || species.virus_immune || HAS_TRAIT(src, STRONG_IMMUNITY_TRAIT)) // Don't bother
|
||||
return
|
||||
|
||||
switch(get_species())
|
||||
if(SPECIES_UNATHI, SPECIES_TAJARAN) // Mice devourers
|
||||
sickrisk = 0.5
|
||||
if(SPECIES_XENOCHIMERA)
|
||||
// Ronoake Syndrome will go here :)
|
||||
return
|
||||
if(SPECIES_PROMETHEAN) // Too clean
|
||||
return
|
||||
|
||||
if(prob(min(100, (biohazard * sickrisk))))
|
||||
var/symptom_amt = rand(min_symptoms, max_symptoms)
|
||||
var/datum/disease/advance/dormant_disease = new /datum/disease/advance/random(symptom_amt, max_level, min_level, guaranteed_symptoms)
|
||||
dormant_disease.virus_modifiers |= DORMANT
|
||||
dormant_disease.spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS
|
||||
dormant_disease.spread_text = "None"
|
||||
dormant_disease.visibility_flags |= HIDDEN_SCANNER
|
||||
ForceContractDisease(dormant_disease, TRUE)
|
||||
return TRUE
|
||||
|
||||
/datum/disease/advance/random/macrophage
|
||||
setsymptom = /datum/symptom/macrophage
|
||||
|
||||
|
||||
@@ -32,10 +32,10 @@ BONUS
|
||||
|
||||
threshold_descs = list(
|
||||
"Resistance 3" = "Host will drop small items when coughing.",
|
||||
"Resistance 10" = "Occasonally causes coughing fits that stun the host.",
|
||||
"Resistance 10" = "Occasionally causes coughing fits that stun the host.",
|
||||
"Stage Speed 6" = "Increases cough frequency",
|
||||
"Stealth 4" = "The symptom remains hidden until active.",
|
||||
"Transmission 11" = "The hosts coughing will occasonally spread the virus."
|
||||
"Transmission 11" = "The hosts coughing will occasionally spread the virus."
|
||||
)
|
||||
|
||||
/datum/symptom/cough/severityset(datum/disease/advance/A)
|
||||
@@ -82,5 +82,5 @@ BONUS
|
||||
addtimer(CALLBACK(M, TYPE_PROC_REF(/mob, emote), "cough"), 1 SECONDS)
|
||||
addtimer(CALLBACK(M, TYPE_PROC_REF(/mob, emote), "cough"), 3 SECONDS)
|
||||
addtimer(CALLBACK(M, TYPE_PROC_REF(/mob, emote), "cough"), 6 SECONDS)
|
||||
if(infective && prob(50))
|
||||
if(infective && !(A.spread_flags & DISEASE_SPREAD_FALTERED) && prob(50))
|
||||
addtimer(CALLBACK(A, TYPE_PROC_REF(/datum/disease, spread), 2), 20)
|
||||
|
||||
@@ -74,13 +74,13 @@ 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 = 2 * power)
|
||||
if(infective)
|
||||
if(infective && !(A.spread_flags & DISEASE_SPREAD_FALTERED))
|
||||
M.visible_message(span_danger("[M] bursts into flames, spreading burning sparks about the area!"))
|
||||
return TRUE
|
||||
|
||||
/datum/symptom/fire/proc/Firestacks_stage_5(mob/living/M, datum/disease/advance/A)
|
||||
M.adjust_fire_stacks(3 * power)
|
||||
M.take_overall_damage(burn = 5 * power)
|
||||
if(infective)
|
||||
if(infective && !(A.spread_flags & DISEASE_SPREAD_FALTERED))
|
||||
M.visible_message(span_danger("[M] bursts into flames, spreading burning sparks about the area!"))
|
||||
return TRUE
|
||||
|
||||
@@ -91,7 +91,7 @@ BONUS
|
||||
|
||||
if(A.transmission >= 12)
|
||||
for(var/datum/disease/D in M.GetViruses())
|
||||
if((D.spread_flags & DISEASE_SPREAD_SPECIAL) || (D.spread_flags & DISEASE_SPREAD_CONTACT))
|
||||
if((D.spread_flags & DISEASE_SPREAD_SPECIAL) || (D.spread_flags & DISEASE_SPREAD_CONTACT) || (D.spread_flags & DISEASE_SPREAD_FALTERED))
|
||||
continue
|
||||
if(D == A)
|
||||
continue
|
||||
|
||||
@@ -53,7 +53,7 @@ Bonus
|
||||
M.emote("sniff")
|
||||
else
|
||||
M.emote("sneeze")
|
||||
if(infective)
|
||||
if(infective && !(A.spread_flags & DISEASE_SPREAD_FALTERED))
|
||||
addtimer(CALLBACK(A, TYPE_PROC_REF(/datum/disease, spread), 4), 20)
|
||||
|
||||
/*
|
||||
|
||||
@@ -70,6 +70,8 @@
|
||||
VAR_PROTECTED/exclusive_mail_goodies = FALSE // If this job's mail goodies compete with generic goodies.
|
||||
VAR_PROTECTED/mail_color = "#FFF"
|
||||
|
||||
var/list/symptoms // A list of symptoms that this job might have when we roll a dormant diseas.
|
||||
|
||||
/datum/job/New()
|
||||
. = ..()
|
||||
department_accounts = department_accounts || departments_managed
|
||||
|
||||
@@ -461,9 +461,10 @@ var/global/datum/controller/occupations/job_master
|
||||
// Stick their fingerprints on literally everything
|
||||
job.apply_fingerprints(H)
|
||||
|
||||
// Only non-silicons get post-job-equip equipment
|
||||
// Only non-silicons get post-job-equip equipment and dormant diseases
|
||||
if(!(job.mob_type & JOB_SILICON))
|
||||
H.equip_post_job()
|
||||
H.give_random_dormant_disease(guaranteed_symptoms = job.symptoms)
|
||||
|
||||
// If some custom items could not be equipped before, try again now.
|
||||
for(var/thing in custom_equip_leftovers)
|
||||
|
||||
@@ -162,7 +162,9 @@
|
||||
var/list/properties
|
||||
if(global_flag_check(advance_disease.virus_modifiers, CARRIER))
|
||||
LAZYADD(properties, "carrier")
|
||||
message += "<b>[advance_disease.name]</b>[LAZYLEN(properties) ? " ([properties.Join(", ")])" : ""], stage [advance_disease.stage]/5"
|
||||
if(global_flag_check(advance_disease.virus_modifiers, FALTERED))
|
||||
LAZYADD(properties, "faltered")
|
||||
message += span_info("<b>[advance_disease.name]</b>[LAZYLEN(properties) ? " ([properties.Join(", ")])" : ""], [global_flag_check(advance_disease.virus_modifiers, DORMANT) ? "<i>dormant virus</i>" : "stage [advance_disease.stage]/5"]")
|
||||
if(extracted_ids[advance_disease.GetDiseaseID()])
|
||||
message += "This virus has been extracted by \the [src] previously."
|
||||
message += "[advance_disease.name] has the following symptoms:"
|
||||
@@ -234,23 +236,21 @@
|
||||
|
||||
/obj/item/extrapolator/proc/create_culture(mob/living/user, datum/disease/advance/disease)
|
||||
. = FALSE
|
||||
var/datum/disease/advance/D = disease.Copy()
|
||||
disease = disease.Copy()
|
||||
disease.virus_modifiers &= ~DORMANT
|
||||
var/list/data = list("viruses" = list(disease))
|
||||
if(user.get_active_hand() != src)
|
||||
to_chat(user, span_warning("The extrapolator must be held in your active hand to work!"))
|
||||
return
|
||||
var/obj/item/reagent_containers/glass/beaker/vial/culture_bottle = new(user.drop_location())
|
||||
culture_bottle.name = "[D.name] culture bottle"
|
||||
culture_bottle.desc = "A small bottle. Contains [D.agent] culture in synthblood medium."
|
||||
culture_bottle.name = "[disease.name] culture bottle"
|
||||
culture_bottle.desc = "A small bottle. Contains [disease.agent] culture in synthblood medium."
|
||||
culture_bottle.reagents.add_reagent(REAGENT_ID_BLOOD, 5, data)
|
||||
user.put_in_hands(culture_bottle)
|
||||
playsound(src, 'sound/machines/ping.ogg', vol = 30, vary = TRUE)
|
||||
COOLDOWN_START(src, usage_cooldown, 1 SECONDS)
|
||||
extracted_ids[D.GetDiseaseID()] = TRUE
|
||||
extracted_ids[disease.GetDiseaseID()] = TRUE
|
||||
return TRUE
|
||||
|
||||
/obj/item/extrapolator/tier4
|
||||
default_scanning_module = /obj/item/stock_parts/scanning_module/hyper
|
||||
|
||||
/obj/item/extrapolator/tier5
|
||||
default_scanning_module = /obj/item/stock_parts/scanning_module/omni
|
||||
|
||||
@@ -134,6 +134,21 @@
|
||||
icon_state = "syringe"
|
||||
starts_with = list(/obj/item/reagent_containers/syringe = 7)
|
||||
|
||||
/obj/item/storage/box/old_syringes
|
||||
name = "box of syringes"
|
||||
desc = "A box full of syringes. They look old."
|
||||
icon_state = "syringe"
|
||||
starts_with = list(/obj/item/reagent_containers/syringe/old = 2) // Old syringes guaranteed in each box!
|
||||
|
||||
/obj/item/storage/box/old_syringes/Initialize(mapload)
|
||||
var/syringe
|
||||
for(var/i in 1 to 8)
|
||||
if(prob(25))
|
||||
continue
|
||||
syringe = pick(subtypesof(/obj/item/reagent_containers/syringe))
|
||||
new syringe(src)
|
||||
. = ..()
|
||||
|
||||
/obj/item/storage/box/syringegun
|
||||
name = "box of syringe gun cartridges"
|
||||
desc = "A box full of compressed gas cartridges."
|
||||
|
||||
@@ -199,6 +199,7 @@ something, make sure it's not in one of the other lists.*/
|
||||
prob(3);/obj/item/storage/box/beakers,
|
||||
prob(2);/obj/item/storage/box/bodybags,
|
||||
prob(3);/obj/item/storage/box/syringes,
|
||||
prob(3);/obj/item/storage/box/old_syringes,
|
||||
prob(3);/obj/item/storage/box/gloves,
|
||||
prob(2);/obj/item/storage/belt/medical/emt,
|
||||
prob(2);/obj/item/storage/belt/medical,
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
return FALSE
|
||||
if(H.GetViruses())
|
||||
for(var/datum/disease/D in H.GetSpreadableViruses())
|
||||
if(D.danger == DISEASE_POSITIVE || D.danger == DISEASE_BENEFICIAL)
|
||||
if(D.danger == DISEASE_POSITIVE || D.danger == DISEASE_BENEFICIAL || D.disease_flags & DORMANT || D.spread_flags & DISEASE_SPREAD_FALTERED)
|
||||
continue
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -218,7 +218,8 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
|
||||
/obj/item/pda,
|
||||
/obj/item/radio/headset,
|
||||
/obj/item/paicard,
|
||||
/obj/item/reagent_containers/hypospray/autoinjector/biginjector/glucose
|
||||
/obj/item/reagent_containers/hypospray/autoinjector/biginjector/glucose,
|
||||
/obj/item/reagent_containers/syringe/old
|
||||
)
|
||||
|
||||
uncommon_loot = list(
|
||||
@@ -276,7 +277,8 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
|
||||
/obj/item/poster/custom,
|
||||
/obj/item/newspaper,
|
||||
/obj/item/paper/crumpled,
|
||||
/obj/item/paper/crumpled/bloody
|
||||
/obj/item/paper/crumpled/bloody,
|
||||
/obj/item/reagent_containers/syringe/old
|
||||
)
|
||||
|
||||
uncommon_loot = list(
|
||||
@@ -323,7 +325,8 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
|
||||
/obj/item/storage/box/smokes,
|
||||
/obj/item/storage/box/metalfoam,
|
||||
/obj/item/storage/box/handcuffs,
|
||||
/obj/item/storage/box/seccarts
|
||||
/obj/item/storage/box/seccarts,
|
||||
/obj/item/storage/box/old_syringes,
|
||||
)
|
||||
|
||||
rare_loot = list(
|
||||
|
||||
@@ -306,6 +306,7 @@
|
||||
prob(3);/obj/item/clothing/accessory/knuckledusters,
|
||||
prob(3);/obj/item/clothing/gloves/heavy_engineer,
|
||||
prob(3);/obj/item/reagent_containers/syringe/drugs,
|
||||
prob(3);/obj/item/reagent_containers/syringe/old,
|
||||
prob(2);/obj/item/implanter/sizecontrol,
|
||||
prob(2);/obj/item/handcuffs/fuzzy,
|
||||
prob(2);/obj/item/handcuffs/legcuffs/fuzzy,
|
||||
|
||||
@@ -1714,3 +1714,26 @@
|
||||
cost = 0
|
||||
hidden = FALSE //Disabled on Virgo // CHOMPEdit
|
||||
added_component_path = /datum/component/nutrition_size_change/shrinking
|
||||
|
||||
/datum/trait/neutral/disease_carrier
|
||||
name = "Disease Carrier"
|
||||
desc = "Your species is a carrier of diseases! Watch out for virologists."
|
||||
excludes = list(/datum/trait/neutral/strongimmunesystem)
|
||||
cost = 0
|
||||
can_take = ORGANICS
|
||||
custom_only = FALSE
|
||||
|
||||
/datum/trait/neutral/disease_carrier/apply(datum/species/S, mob/living/carbon/human/H, trait_prefs)
|
||||
..()
|
||||
H.give_random_dormant_disease(200, 2, 3, 1, 9)
|
||||
|
||||
/datum/trait/neutral/strongimmunesystem
|
||||
name = "Strong Immune System"
|
||||
desc = "Your immune system is so strong, that not even dormant diseases can survive in you."
|
||||
cost = 0
|
||||
|
||||
can_take = ORGANICS
|
||||
|
||||
/datum/trait/neutral/strongimmunesystem/apply(datum/species/S, mob/living/carbon/human/H, trait_prefs)
|
||||
..()
|
||||
ADD_TRAIT(H, STRONG_IMMUNITY_TRAIT, ROUNDSTART_TRAIT)
|
||||
|
||||
@@ -492,3 +492,11 @@
|
||||
desc = "Allows you to build a cocoon around yourself, using it to transform your body if you desire."
|
||||
cost = 0
|
||||
category = 0
|
||||
|
||||
/datum/trait/positive/virus_immune
|
||||
name = "Virus Immune"
|
||||
desc = "You are immune to viruses."
|
||||
cost = 1
|
||||
|
||||
can_take = ORGANICS
|
||||
var_changes = list("virus_immune" = TRUE)
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
if (body_color == "black")
|
||||
holder_type = /obj/item/holder/mouse/black
|
||||
|
||||
if(prob(25))
|
||||
if(prob(40))
|
||||
LAZYINITLIST(rat_diseases)
|
||||
rat_diseases += new /datum/disease/advance/random(rand(1, 5), 9, 1)
|
||||
|
||||
|
||||
@@ -40,9 +40,37 @@
|
||||
required_reagents = list(REAGENT_ID_INAPROVALINE = 1, REAGENT_ID_MUTAGENVIRUSFOOD = 1)
|
||||
result_amount = 2
|
||||
|
||||
/decl/chemical_reaction/instant/virus_food_uranium
|
||||
name = REAGENT_URANIUMVIRUSFOOD
|
||||
id = REAGENT_ID_URANIUMVIRUSFOOD
|
||||
result = REAGENT_ID_URANIUMVIRUSFOOD
|
||||
required_reagents = list(REAGENT_ID_URANIUM = 1, REAGENT_ID_VIRUSFOOD = 1)
|
||||
result_amount = 1
|
||||
|
||||
/decl/chemical_reaction/instant/virus_food_uranium_unstable
|
||||
name = REAGENT_UNSTABLEURANIUMVIRUSFOOD
|
||||
id = REAGENT_ID_UNSTABLEURANIUMVIRUSFOOD
|
||||
result = REAGENT_ID_UNSTABLEURANIUMVIRUSFOOD
|
||||
required_reagents = list(REAGENT_ID_URANIUM = 1, REAGENT_ID_PHORONVIRUSFOOD = 1)
|
||||
result_amount = 1
|
||||
|
||||
/decl/chemical_reaction/instant/virus_food_uranium_stable
|
||||
name = REAGENT_STABLEURANIUMVIRUSFOOD
|
||||
id = REAGENT_ID_STABLEURANIUMVIRUSFOOD
|
||||
result = REAGENT_ID_STABLEURANIUMVIRUSFOOD
|
||||
required_reagents = list(REAGENT_ID_PHORON = 5, REAGENT_ID_URANIUM = 5, REAGENT_ID_SILVER = 5)
|
||||
result_amount = 1
|
||||
|
||||
/decl/chemical_reaction/instant/virus_food_uranium_stable_alt
|
||||
name = REAGENT_STABLEURANIUMVIRUSFOOD_ALT
|
||||
id = REAGENT_ID_STABLEURANIUMVIRUSFOOD_ALT
|
||||
result = REAGENT_ID_STABLEURANIUMVIRUSFOOD
|
||||
required_reagents = list(REAGENT_ID_PHORON = 5, REAGENT_ID_URANIUM = 5, REAGENT_ID_GOLD = 5)
|
||||
result_amount = 1
|
||||
|
||||
/decl/chemical_reaction/instant/virus_food_size
|
||||
name = REAGENT_SIZEVIRUSFOOD
|
||||
id = "sizeoxadonevirusfood"
|
||||
id = REAGENT_ID_SIZEVIRUSFOOD
|
||||
result = REAGENT_ID_SIZEVIRUSFOOD
|
||||
required_reagents = list(REAGENT_ID_SIZEOXADONE = 1, REAGENT_ID_PHORONVIRUSFOOD = 1)
|
||||
result_amount = 2
|
||||
@@ -129,6 +157,27 @@
|
||||
level_min = 1
|
||||
level_max = 1
|
||||
|
||||
/decl/chemical_reaction/instant/mix_virus/mix_virus_10
|
||||
name = "Mix Virus 10"
|
||||
id = "mixvirus10"
|
||||
required_reagents = list(REAGENT_ID_URANIUMVIRUSFOOD = 1)
|
||||
level_min = 6
|
||||
level_max = 7
|
||||
|
||||
/decl/chemical_reaction/instant/mix_virus/mix_virus_11
|
||||
name = "Mix Virus 11"
|
||||
id = "mixvirus11"
|
||||
required_reagents = list(REAGENT_ID_UNSTABLEURANIUMVIRUSFOOD = 1)
|
||||
level_min = 7
|
||||
level_max = 7
|
||||
|
||||
/decl/chemical_reaction/instant/mix_virus/mix_virus_12
|
||||
name = "Mix Virus 12"
|
||||
id = "mixvirus12"
|
||||
required_reagents = list(REAGENT_ID_STABLEURANIUMVIRUSFOOD = 1)
|
||||
level_min = 8
|
||||
level_max = 8
|
||||
|
||||
/decl/chemical_reaction/instant/mix_virus/picky/size
|
||||
name = "Mix Virus Size"
|
||||
id = "mixvirussize"
|
||||
@@ -172,3 +221,16 @@
|
||||
var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
|
||||
if(D)
|
||||
D.Neuter()
|
||||
|
||||
/decl/chemical_reaction/instant/falter_virus
|
||||
name = "Falter Virus"
|
||||
id = "faltervirus"
|
||||
required_reagents = list(REAGENT_ID_SPACEACILLIN = 1)
|
||||
catalysts = list(REAGENT_ID_BLOOD = 1)
|
||||
|
||||
/decl/chemical_reaction/instant/falter_virus/on_reaction(var/datum/reagents/holder)
|
||||
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
|
||||
if(B && B.data)
|
||||
var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
|
||||
if(D)
|
||||
D.Falter()
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
drop_sound = 'sound/items/drop/glass.ogg'
|
||||
pickup_sound = 'sound/items/pickup/glass.ogg'
|
||||
|
||||
|
||||
/obj/item/reagent_containers/syringe/Initialize(mapload)
|
||||
. = ..()
|
||||
update_icon()
|
||||
@@ -496,6 +495,17 @@
|
||||
icon_state = "[rounded_vol]"
|
||||
item_state = "syringe_[rounded_vol]"
|
||||
|
||||
/obj/item/reagent_containers/syringe/old
|
||||
name = "old syringe"
|
||||
desc = "An old, broken syringe. Are you sure it's a good idea to pick it up without gloves?"
|
||||
mode = SYRINGE_BROKEN
|
||||
|
||||
/obj/item/reagent_containers/syringe/old/Initialize(mapload)
|
||||
. = ..()
|
||||
if(prob(75))
|
||||
var/datum/disease/advance/new_disease = new /datum/disease/advance/random(rand(1, 3), rand(7, 9), 2)
|
||||
src.viruses += new_disease
|
||||
|
||||
#undef SYRINGE_DRAW
|
||||
#undef SYRINGE_INJECT
|
||||
#undef SYRINGE_BROKEN
|
||||
|
||||
@@ -48,6 +48,23 @@
|
||||
description = "Mutates viruses when mixed in blood. This one seems to have been weakened, but still strong."
|
||||
color = "#CEC3C6"
|
||||
|
||||
/datum/reagent/uranium/uraniumvirusfood
|
||||
name = REAGENT_URANIUMVIRUSFOOD
|
||||
id = REAGENT_ID_URANIUMVIRUSFOOD
|
||||
description = "Mutates viruses when mixed in blood. This one seems to glow lightly."
|
||||
color = "#D18AA5"
|
||||
|
||||
/datum/reagent/uranium/uraniumvirusfood/unstable
|
||||
name = REAGENT_UNSTABLEURANIUMVIRUSFOOD
|
||||
id = REAGENT_ID_UNSTABLEURANIUMVIRUSFOOD
|
||||
description = "Mutates viruses when mixed in blood. This one seems be lightly warm."
|
||||
color = "#D18AA5"
|
||||
|
||||
/datum/reagent/uranium/uraniumvirusfood/stable
|
||||
name = REAGENT_STABLEURANIUMVIRUSFOOD
|
||||
id = REAGENT_ID_STABLEURANIUMVIRUSFOOD
|
||||
description = "Mutates viruses when mixed in blood. This one seems to be stable."
|
||||
|
||||
/datum/reagent/toxin/phoron/phoronvirusfood/sizevirusfood
|
||||
name = REAGENT_SIZEVIRUSFOOD
|
||||
id = REAGENT_ID_SIZEVIRUSFOOD
|
||||
|
||||
Reference in New Issue
Block a user