[MIRROR] Virology Update 1 (#9586)

Co-authored-by: Heroman3003 <31296024+Heroman3003@users.noreply.github.com>
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2024-12-08 05:26:58 -07:00
committed by GitHub
parent 5e64b7d4cc
commit d3976b78a3
30 changed files with 750 additions and 24 deletions

View File

@@ -18,7 +18,6 @@
#define CONTACT_GENERAL (1<<5) #define CONTACT_GENERAL (1<<5)
#define AIRBORNE (1<<6) #define AIRBORNE (1<<6)
//Severity Defines //Severity Defines
#define NONTHREAT "No threat" #define NONTHREAT "No threat"
#define MINOR "Minor" #define MINOR "Minor"

View File

@@ -3,8 +3,8 @@ GLOBAL_LIST_EMPTY(archive_diseases)
GLOBAL_LIST_INIT(advance_cures, list( GLOBAL_LIST_INIT(advance_cures, list(
"sodiumchloride", "sugar", "orangejuice", "sodiumchloride", "sugar", "orangejuice",
"spaceacillin", "glucose", "ethanol", "spaceacillin", "glucose", "ethanol",
"dyloteane", "impedrezene", "hepanephrodaxon", "leporazine", "impedrezene", "hepanephrodaxon",
"gold", "silver" "silver", "gold"
)) ))
/datum/disease/advance /datum/disease/advance
@@ -236,6 +236,13 @@ GLOBAL_LIST_INIT(advance_cures, list(
Refresh(1) Refresh(1)
return return
/datum/disease/advance/proc/PickyEvolve(var/list/datum/symptom/D)
var/s = safepick(D)
if(s)
AddSymptom(new s)
Refresh(1)
return
// Randomly remove a symptom. // Randomly remove a symptom.
/datum/disease/advance/proc/Devolve() /datum/disease/advance/proc/Devolve()
if(length(symptoms) > 1) if(length(symptoms) > 1)

View File

@@ -0,0 +1,38 @@
/*
//////////////////////////////////////
Deafness
Slightly hidden.
Lowers resistance.
Increases stage speed slightly.
Decreases transmittablity.
Intense Level.
Bonus
Causes intermittent loss of hearing.
//////////////////////////////////////
*/
/datum/symptom/deafness
name = "Deafness"
stealth = 1
resistance = -2
stage_speed = 1
transmittable = -3
level = 4
severity = 3
/datum/symptom/deafness/Activate(datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(3, 4)
to_chat(M, span_warning("[pick("you hear a ringing in your ear.", "You ears pop.")]"))
if(5)
to_chat(M, span_userdanger("You ear pop and begin ringing loudly!"))
M.ear_deaf += 20
return

View File

@@ -6,7 +6,7 @@ Necrotizing Fasciitis (AKA Flesh-Eating Disease)
Very very noticable. Very very noticable.
Lowers resistance tremendously. Lowers resistance tremendously.
No changes to stage speed. No changes to stage speed.
Decreases transmittablity temrendously. Decreases transmittablity tremendously.
Fatal Level. Fatal Level.
Bonus Bonus

View File

@@ -0,0 +1,33 @@
/*
//////////////////////////////////////
Flippinov
Slightly hidden.
No change to resistance.
Increases stage speed.
Little transmittable.
Low Level.
BONUS
Makes the host FLIP.
Should be used for buffing your disease.
//////////////////////////////////////
*/
/datum/symptom/spyndrome
name = "Flippinov"
stealth = 2
resistance = 0
stage_speed = 3
transmittable = 1
level = 1
severity = 1
/datum/symptom/spyndrome/Activate(datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/L = A.affected_mob
L.emote("flip")

View File

@@ -0,0 +1,56 @@
/*
//////////////////////////////////////
Alopecia
Noticable.
Decreases resistance slightly.
Reduces stage speed slightly.
Transmittable.
Intense Level.
BONUS
Makes the mob lose hair.
//////////////////////////////////////
*/
/datum/symptom/shedding
name = "Alopecia"
stealth = -1
resistance = -1
stage_speed = -1
transmittable = 2
level = 4
severity = 1
/datum/symptom/shedding/Activate(datum/disease/advance/A)
..()
if(!prob(SYMPTOM_ACTIVATION_PROB))
return
if(ishuman(A.affected_mob))
return
var/mob/living/carbon/human/H = A.affected_mob
var/obj/item/organ/external/head/head_organ = H.get_organ(BP_HEAD)
if(!istype(head_organ))
return
to_chat(H, span_warning("[pick("Your scalp itches.", "Your skin feels flakey.")]"))
switch(A.stage)
if(3, 4)
if(H.h_style != "Bald" && H.h_style != "Balding Hair")
to_chat(H, span_warning("Your hair starts to fall out in clumps..."))
addtimer(CALLBACK(src, PROC_REF(change_hair), H, null, "Balding Hair"), 5 SECONDS)
if(5)
if(H.h_style != "Shaved" && H.h_style != "Bald")
to_chat(H, span_warning("Your hair starts to fall out in clumps..."))
addtimer(CALLBACK(src, PROC_REF(change_hair), H, "Shaved", "Bald"), 5 SECONDS)
return
/datum/symptom/shedding/proc/change_hair(var/mob/living/carbon/human/H, f_style, h_style)
if(!H)
return
if(f_style)
H.f_style = f_style
if(h_style)
H.h_style = h_style
return

View File

@@ -130,7 +130,7 @@ Bonus
Very high level. Very high level.
Bonus Bonus
Heals brain damage, treats radiation. Heals clone damage, treats radiation.
////////////////////////////////////// //////////////////////////////////////
*/ */

View File

@@ -0,0 +1,42 @@
/*
//////////////////////////////////////
Hematophagy
Little bit hidden.
Decreases resistance slightly.
Decreases stage speed tremendously.
Slightly increased transmittablity.
Intense level.
BONUS
The host must feed on BLOOD
//////////////////////////////////////
*/
/datum/symptom/hematophagy
name = "Hematophagy"
stealth = 1
resistance = -1
resistance = -4
transmittable = 1
level = 4
/datum/symptom/hematophagy/Start(datum/disease/advance/A)
if(ishuman(A.affected_mob))
var/mob/living/carbon/human/H = A.affected_mob
H.species.organic_food_coeff = 0
H.species.bloodsucker = TRUE
add_verb(H, /mob/living/carbon/human/proc/bloodsuck)
/datum/symptom/hematophagy/End(datum/disease/advance/A)
if(ishuman(A.affected_mob))
var/mob/living/carbon/human/H = A.affected_mob
H.species.organic_food_coeff = initial(H.species.organic_food_coeff)
H.species.bloodsucker = initial(H.species.bloodsucker)
remove_verb(H, /mob/living/carbon/human/proc/bloodsuck)

View File

@@ -0,0 +1,41 @@
/*
//////////////////////////////////////
Photosensitivity
Noticable.
Increases resistance.
Increases stage speed slightly.
Decreases transmittablity tremendously.
Fatal Level.
Bonus
Deals brute damage over time.
//////////////////////////////////////
*/
/datum/symptom/photosensitivity
name = "Photosensitivity"
stealth = -2
resistance = 2
stage_speed = 1
transmittable = -4
level = 6
severity = 5
/datum/symptom/photosensitivity/Activate(datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/carbon/human/H = A.affected_mob
var/turf/T = get_turf(H)
switch(A.stage)
if(3)
if(T.get_lumcount() > 0.5)
to_chat(H, span_danger("Your skin itches under the light..."))
if(4, 5)
if(T.get_lumcount() > 0.5)
to_chat(H, span_danger("Your skin feels like burning!"))
H.adjustFireLoss(T.get_lumcount())
return

View File

@@ -0,0 +1,46 @@
/*
//////////////////////////////////////
Pica
Not noticable or unnoticable.
Decreases resistance.
Increases stage speed.
Little transmittable.
Low Level.
BONUS
The host gains hunger for any kind of object.
//////////////////////////////////////
*/
/datum/symptom/pica
name = "Pica"
stealth = 0
resistance = -2
stage_speed = 3
transmittable = 1
level = 1
severity = 1
/datum/symptom/pica/Start(datum/disease/advance/A)
add_verb(A.affected_mob, /mob/living/proc/eat_trash)
add_verb(A.affected_mob, /mob/living/proc/toggle_trash_catching)
/datum/symptom/pica/End(datum/disease/advance/A)
remove_verb(A.affected_mob, /mob/living/proc/eat_trash)
remove_verb(A.affected_mob, /mob/living/proc/toggle_trash_catching)
/datum/symptom/pica/Activate(datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/list/nearby = oview(5, A.affected_mob)
to_chat(A.affected_mob, span_warning("You could go fo a bite of [pick(nearby)]..."))
else if (prob(SYMPTOM_ACTIVATION_PROB))
if(ishuman(A.affected_mob))
var/mob/living/carbon/human/H = A.affected_mob
var/list/item = H.get_equipped_items()
to_chat(H, span_warning("[pick(item)] looks oddly [pick("delicious", "tasty", "scrumptious", "inviting")]..."))
return

View File

@@ -0,0 +1,98 @@
/*
//////////////////////////////////////
Mass Revectoring
Very noticeable.
Increases resistance slightly.
Increases stage speed.
Decreases transmittablity
Intense level.
BONUS
Changes the size of the host.
//////////////////////////////////////
*/
/datum/symptom/size
name = "Mass Revectoring"
stealth = -4
resistance = 1
stage_speed = 2
transmittable = -2
level = 4
severity = 1
/datum/symptom/size/Activate(datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(4, 5)
M.emote("twitch")
Resize(M, rand(25, 200))
/datum/symptom/size/proc/Resize(mob/living/M, var/size)
M.resize(size+M.size_multiplier/100)
/*
//////////////////////////////////////
Enlargement Disorder
Very noticeable.
Increases resistance slightly.
Increases stage speed.
Decreases transmittablity
Intense level.
BONUS
Grows the host to bigger sizes
//////////////////////////////////////
*/
/datum/symptom/size/grow
name = "Enlargement Disorder"
/datum/symptom/size/Activate(datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(4, 5)
M.emote("twitch")
Resize(M, rand(100, 200))
/*
//////////////////////////////////////
Dwindling Malady
Very noticeable.
Increases resistance slightly.
Increases stage speed.
Decreases transmittablity
Intense level.
BONUS
Shrinks the host to small sizes
//////////////////////////////////////
*/
/datum/symptom/size/shrink
name = "Dwindling Malady"
/datum/symptom/size/Activate(datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(4, 5)
M.emote("twitch")
Resize(M, rand(25, 100))

View File

@@ -42,3 +42,78 @@ Bonus
icky.viruses |= A.Copy() icky.viruses |= A.Copy()
return return
/*
//////////////////////////////////////
Bluespace Sneezing
Very Noticable.
Resistant
Doesn't increase stage speed.
Little transmittable.
Low Level.
Bonus
Forces a spread type of AIRBORNE
with extra range AND teleports the mob
//////////////////////////////////////
*/
/datum/symptom/sneeze/bluespace
name = "Bluespace Sneezing"
stealth = -2
resistance = 3
stage_speed = 0
transmittable = 1
level = 4
severity = 1
/datum/symptom/sneeze/bluespace/Activate(datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(1, 2, 3)
M.emote("sniff")
else
SneezeTeleport(A, M)
A.spread(A.stage)
if(prob(30))
var/obj/effect/decal/cleanable/mucus/icky = new(get_turf(M))
icky.viruses |= A.Copy()
return
/datum/symptom/sneeze/bluespace/proc/SneezeTeleport(datum/disease/advance/A, var/mob/living/M)
var/list/destination = list()
var/mob/living/carbon/human/H = M
var/place
for(var/mob/living/carbon/human/B in range(A.stage, M))
if(B.can_be_drop_pred && H.can_be_drop_prey && H.devourable)
destination += B.vore_selected
for(var/turf/T in range(A.stage, H))
if(istype(T, /turf/space)) // No danger, this is just a fun/vore symptom
continue
destination += T
if(isemptylist(destination))
to_chat(H, span_warning("You go to sneeze, but can't."))
return FALSE
place = safepick(destination)
var/mob/living/carbon/human/unlucky = locate() in place
if(unlucky)
if(unlucky.can_be_drop_pred && H.can_be_drop_prey && H.devourable)
place = unlucky.vore_selected
else if(unlucky.devourable && unlucky.can_be_drop_prey && H.can_be_drop_pred)
unlucky.forceMove(H.vore_selected)
H.emote("sneeze")
do_teleport(H, place)
return TRUE

View File

@@ -16,7 +16,7 @@ BONUS
////////////////////////////////////// //////////////////////////////////////
*/ */
/datum/symptom/mlem /datum/symptom/spyndrome
name = "Spyndrome" name = "Spyndrome"
stealth = 2 stealth = 2
resistance = 0 resistance = 0
@@ -24,9 +24,8 @@ BONUS
transmittable = 1 transmittable = 1
level = 1 level = 1
severity = 1 severity = 1
var/list/directions = list(2,4,1,8,2,4,1,8,2,4,1,8,2,4,1,8,2,4,1,8)
/datum/symptom/mlem/Activate(var/datum/disease/advance/A) /datum/symptom/spyndrome/Activate(var/datum/disease/advance/A)
..() ..()
if(prob(SYMPTOM_ACTIVATION_PROB)) if(prob(SYMPTOM_ACTIVATION_PROB))
@@ -34,7 +33,5 @@ BONUS
to_chat(viewers(A.affected_mob), span_warning("[A.affected_mob.name] struggles violently against their restraints!")) to_chat(viewers(A.affected_mob), span_warning("[A.affected_mob.name] struggles violently against their restraints!"))
else else
to_chat(viewers(A.affected_mob), span_warning("[A.affected_mob.name] spins around violently!")) to_chat(viewers(A.affected_mob), span_warning("[A.affected_mob.name] spins around violently!"))
for(var/D in directions) A.affected_mob.emote("spin")
A.affected_mob.dir = D
A.affected_mob.dir = pick(2,4,1,8)
return return

View File

@@ -0,0 +1,43 @@
/*
//////////////////////////////////////
Healing
No change to stealth.
Slightly decreases resistance.
Increases stage speed.
Decreases transmittablity considerably.
Moderate Level.
Bonus
Heals toxins in the affected mob's blood stream.
//////////////////////////////////////
*/
/datum/symptom/stimulant
name = "Overactive Adrenal Gland"
stealth = 0
resistance = -1
stage_speed = 2
transmittable = -3
level = 3
severity = 1
/datum/symptom/stimulant/Activate(datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/L = A.affected_mob
to_chat(L, span_notice("You feel a rush of energy inside you!"))
switch(A.stage)
if(1, 2)
L.jitteriness += 5
if(3, 4)
L.jitteriness += 10
else
if(L.reagents.get_reagent_amount("hyperzine" < 10))
L.reagents.add_reagent("hyperzine", 5)
if(prob(30))
L.jitteriness += 15
return

View File

@@ -1,7 +1,7 @@
/* /*
////////////////////////////////////// //////////////////////////////////////
Sneezing Synthetic Infection
Slightly hidden. Slightly hidden.
Increases resistance. Increases resistance.
@@ -23,7 +23,6 @@ Bonus
transmittable = 1 transmittable = 1
level = 5 level = 5
severity = 3 severity = 3
id = "synthetic_infection"
/datum/symptom/infect_synthetics/Start(datum/disease/advance/A) /datum/symptom/infect_synthetics/Start(datum/disease/advance/A)
A.infect_synthetics = TRUE A.infect_synthetics = TRUE

View File

@@ -0,0 +1,45 @@
/datum/disease/appendicitis
form = "Condition"
name = "Appendicitis"
max_stages = 3
spread_text = "Non-contagius"
spread_flags = NON_CONTAGIOUS
cure_text = "Surgery"
agent = "Shitty Appendix"
viable_mobtypes = list(/mob/living/carbon/human)
desc = "If left untreated the subject will become very weak, and may vomit often."
severity = MINOR
disease_flags = CAN_CARRY|CAN_CARRY
visibility_flags = HIDDEN_PANDEMIC
required_organs = list(/obj/item/organ/internal/appendix)
bypasses_immunity = TRUE
virus_heal_resistant = TRUE
/datum/disease/appendicitis/stage_act()
if(!..())
return
switch(stage)
if(1)
if(prob(5))
affected_mob.adjustToxLoss(1)
if(2)
var/obj/item/organ/internal/appendix/A = affected_mob.internal_organs_by_name[O_APPENDIX]
if(A)
A.inflamed = TRUE
if(prob(3))
to_chat(affected_mob, span_warning("You feel a stabbing pain in your abdomen!"))
affected_mob.custom_emote(VISIBLE_MESSAGE, "winces painfully.")
affected_mob.Stun(rand(4, 6))
affected_mob.adjustToxLoss(1)
if(3)
if(prob(1))
to_chat(affected_mob, span_danger("Your abdomen is a world of pain!"))
affected_mob.custom_emote(VISIBLE_MESSAGE, "winces painfully.")
affected_mob.Weaken(10)
if(prob(1))
affected_mob.vomit(95)
if(prob(5))
to_chat(affected_mob, span_warning("You feel a stabbing pain in your abdomen!"))
affected_mob.custom_emote(VISIBLE_MESSAGE, "winces painfully.")
affected_mob.Stun(rand(4, 6))
affected_mob.adjustToxLoss(2)

View File

@@ -0,0 +1,32 @@
/datum/disease/fake_gbs
name = "GBS"
max_stages = 5
spread_text = "On contact"
spread_flags = CONTACT_GENERAL
cure_text = "Adranol & Sulfur"
cures = list("adranol", "sulfur")
agent = "Gravitokinetic Bipotential SADS-"
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/monkey)
desc = "if left untreated death will occur."
severity = BIOHAZARD // Mimics real GBS
/datum/disease/fake_gbs/stage_act()
if(!..())
return FALSE
switch(stage)
if(2)
if(prob(1))
affected_mob.emote("sneeze")
if(3)
if(prob(5))
affected_mob.emote("cough")
else if(prob(5))
affected_mob.emote("gasp")
if(prob(10))
to_chat(span_danger("You're starting to feel very weak..."))
if(4)
if(prob(10))
affected_mob.emote("cough")
if(5)
if(prob(10))
affected_mob.emote("cough")

View File

@@ -0,0 +1,49 @@
/datum/disease/gbs
name = "GBS"
max_stages = 5
spread_text = "On contact"
spread_flags = CONTACT_GENERAL
cure_text = "Adranol & Sulfur"
cures = list("adranol", "sulfur")
cure_chance = 15
agent = "Gravitokinetic Bipotential SADS+"
viable_mobtypes = list(/mob/living/carbon/human)
severity = BIOHAZARD
/datum/disease/gbs/stage_act()
if(!..())
return FALSE
switch(stage)
if(2)
if(prob(45))
affected_mob.adjustToxLoss(5)
if(prob(1))
affected_mob.emote("sneeze")
if(3)
if(prob(5))
affected_mob.emote("cough")
else if(prob(5))
affected_mob.emote("gasp")
if(prob(10))
to_chat(affected_mob, span_danger("You're starting to feel very weak..."))
if(4)
if(prob(10))
affected_mob.emote("cough")
affected_mob.adjustToxLoss(5)
if(5)
to_chat(affected_mob, span_danger("Your body feels as if it's trying to rip itself open..."))
if(prob(50))
affected_mob.delayed_gib()
else
return
/datum/disease/gbs/curable
name = "Non-Contagious GBS"
stage_prob = 5
spread_text = "Non-contagious"
spread_flags = NON_CONTAGIOUS
cure_text = "Cryoxadone"
cures = list("cryoxadone")
cure_chance = 10
agent = "gibbis"
disease_flags = CURABLE

View File

@@ -1,6 +1,7 @@
/obj/machinery/computer/pandemic /obj/machinery/computer/pandemic
name = "PanD.E.M.I.C 2200" name = "PanD.E.M.I.C 2200"
desc = "Used to work with viruses." desc = "Used to work with viruses."
circuit = /obj/item/circuitboard/pandemic
density = TRUE density = TRUE
anchored = TRUE anchored = TRUE
icon = 'icons/obj/pandemic.dmi' icon = 'icons/obj/pandemic.dmi'
@@ -325,7 +326,7 @@
printing = 1 printing = 1
var/obj/item/paper/P = new /obj/item/paper(loc) var/obj/item/paper/P = new /obj/item/paper(loc)
visible_message(span_notice("[src] rattles and prints out a sheet of paper.")) visible_message(span_notice("[src] rattles and prints out a sheet of paper."))
// playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1) playsound(loc, 'sound/machines/printer.ogg', 50, 1)
P.info = "<U><font size=\"4\"><B><center> Releasing Virus </B></center></font></U>" P.info = "<U><font size=\"4\"><B><center> Releasing Virus </B></center></font></U>"
P.info += "<HR>" P.info += "<HR>"

View File

@@ -0,0 +1,16 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/circuitboard/pandemic
name = T_BOARD("pandemic")
build_path = /obj/machinery/computer/pandemic
board_type = new /datum/frame/frame_types/computer
origin_tech = list(TECH_DATA = 2, TECH_BIO = 2)
req_components = list(
/obj/item/stock_parts/matter_bin = 2,
/obj/item/stock_parts/scanning_module = 1,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stack/cable_coil = 5,
/obj/item/stock_parts/capacitor = 1
)

View File

@@ -201,7 +201,8 @@ var/list/admin_verbs_spawn = list(
/client/proc/create_gm_message, /client/proc/create_gm_message,
/client/proc/remove_gm_message, /client/proc/remove_gm_message,
/client/proc/AdminCreateVirus, /client/proc/AdminCreateVirus,
/client/proc/ReleaseVirus /client/proc/ReleaseVirus,
/client/proc/spawn_reagent
) )
var/list/admin_verbs_server = list( var/list/admin_verbs_server = list(
@@ -290,6 +291,7 @@ var/list/admin_verbs_debug = list(
/client/proc/simple_DPS, /client/proc/simple_DPS,
/datum/admins/proc/view_feedback, /datum/admins/proc/view_feedback,
/client/proc/stop_sounds, /client/proc/stop_sounds,
/client/proc/spawn_reagent,
/datum/admins/proc/quick_nif, //CHOMPStation Add, /datum/admins/proc/quick_nif, //CHOMPStation Add,
/datum/admins/proc/quick_authentic_nif, //CHOMPStation add /datum/admins/proc/quick_authentic_nif, //CHOMPStation add
/client/proc/reload_jobwhitelist, //ChompADD /client/proc/reload_jobwhitelist, //ChompADD

View File

@@ -537,3 +537,18 @@
set category = "Debug.Misc" set category = "Debug.Misc"
src.stat_panel.send_message("create_debug") src.stat_panel.send_message("create_debug")
/client/proc/spawn_reagent()
set name = "Spawn Reagent"
set category = "Debug.Game"
if(!check_rights(R_ADMIN|R_EVENT)) return
var/datum/reagent/R = tgui_input_list(usr, "Select a reagent to spawn", "Reagent Spawner", subtypesof(/datum/reagent))
if(!R)
return
var/obj/item/reagent_containers/glass/bottle/B = new(usr.loc)
B.icon_state = "bottle-1"
B.reagents.add_reagent(R.id, 60)
B.name = "[B.name] of [R.name]"

View File

@@ -3,7 +3,8 @@ GLOBAL_LIST_EMPTY(current_pending_diseases)
var/datum/disease/chosen_disease var/datum/disease/chosen_disease
var/list/disease_blacklist = list( var/list/disease_blacklist = list(
/datum/disease/advance, /datum/disease/advance,
/datum/disease/food_poisoning /datum/disease/food_poisoning,
/datum/disease/gbs // Terrible. It's only in the code to scare people.
) )
var/static/list/transmissable_symptoms = list() var/static/list/transmissable_symptoms = list()
var/static/list/diseases_minor = list() var/static/list/diseases_minor = list()

View File

@@ -37,3 +37,9 @@
// CHOMPStation Add End // CHOMPStation Add End
. = ..() . = ..()
/mob/living/proc/delayed_gib()
visible_message(span_danger(span_bold("[src]") + " starts convulsing violently!"), span_danger("You feel as if your body is tearing itself apart!"))
Weaken(30)
make_jittery(1000)
addtimer(CALLBACK(src, PROC_REF(gib)), rand(2 SECONDS, 10 SECONDS))

View File

@@ -9,12 +9,9 @@
/mob/living/carbon/human/proc/appendicitis() /mob/living/carbon/human/proc/appendicitis()
if(stat == DEAD) if(stat == DEAD)
return 0 return 0
var/obj/item/organ/internal/appendix/A = internal_organs_by_name[O_APPENDIX] ForceContractDisease(new /datum/disease/appendicitis)
if(istype(A) && !A.inflamed)
A.inflamed = 1
return 1
return 0 return 0
/*
/obj/item/organ/internal/appendix/process() /obj/item/organ/internal/appendix/process()
..() ..()
@@ -47,7 +44,7 @@
owner.adjustToxLoss(25) owner.adjustToxLoss(25)
groin.wounds += W groin.wounds += W
inflamed = 1 inflamed = 1
*/
/obj/item/organ/internal/appendix/removed() /obj/item/organ/internal/appendix/removed()
if(inflamed) if(inflamed)
icon_state = "[initial(icon_state)]inflamed" icon_state = "[initial(icon_state)]inflamed"

View File

@@ -40,6 +40,13 @@
required_reagents = list("inaprovaline" = 1, "mutagenvirusfood" = 1) required_reagents = list("inaprovaline" = 1, "mutagenvirusfood" = 1)
result_amount = 2 result_amount = 2
/decl/chemical_reaction/instant/virus_food_size
name = "sizeoxadone virus food"
id = "sizeoxadonevirusfood"
result = "sizevirusfood"
required_reagents = list("sizeoxadone" = 1, "phoronvirusfood" = 1)
result_amount = 2
/decl/chemical_reaction/instant/mix_virus /decl/chemical_reaction/instant/mix_virus
name = "Mix Virus" name = "Mix Virus"
id = "mixvirus" id = "mixvirus"
@@ -48,6 +55,9 @@
var/level_min = 0 var/level_min = 0
var/level_max = 2 var/level_max = 2
/decl/chemical_reaction/instant/mix_virus/picky
var/list/datum/symptom/symptoms
/decl/chemical_reaction/instant/mix_virus/on_reaction(datum/reagents/holder) /decl/chemical_reaction/instant/mix_virus/on_reaction(datum/reagents/holder)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
if(B && B.data) if(B && B.data)
@@ -55,6 +65,13 @@
if(D) if(D)
D.Evolve(level_min, level_max) D.Evolve(level_min, level_max)
/decl/chemical_reaction/instant/mix_virus/picky/on_reaction(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.PickyEvolve(symptoms)
/decl/chemical_reaction/instant/mix_virus/mix_virus_2 /decl/chemical_reaction/instant/mix_virus/mix_virus_2
name = "Mix Virus 2" name = "Mix Virus 2"
id = "mixvirus2" id = "mixvirus2"
@@ -111,6 +128,17 @@
level_min = 1 level_min = 1
level_max = 1 level_max = 1
/decl/chemical_reaction/instant/mix_virus/picky/size
name = "Mix Virus Size"
id = "mixvirussize"
required_reagents = list("sizevirusfood" = 1)
symptoms = list(
/datum/symptom/macrophage,
/datum/symptom/size,
/datum/symptom/size/grow,
/datum/symptom/size/shrink
)
/decl/chemical_reaction/instant/mix_virus/rem_virus /decl/chemical_reaction/instant/mix_virus/rem_virus
name = "Devolve Virus" name = "Devolve Virus"
id = "remvirus" id = "remvirus"

View File

@@ -46,3 +46,9 @@
id = "weakphoronvirusfood" id = "weakphoronvirusfood"
description = "Mutates viruses when mixed in blood. This one seems to have been weakened, but still strong." description = "Mutates viruses when mixed in blood. This one seems to have been weakened, but still strong."
color = "#CEC3C6" color = "#CEC3C6"
/datum/reagent/toxin/phoron/phoronvirusfood/sizevirusfood
name = "Sizeoxadone virus food"
id = "sizevirusfood"
description = "Mutates virus when mixed in blood. This is a strange size mix..."
color = "#88AFDD"

View File

@@ -127,6 +127,13 @@ CIRCUITS BELOW
build_path = /obj/item/circuitboard/crew build_path = /obj/item/circuitboard/crew
sort_string = "FAGAI" sort_string = "FAGAI"
/datum/design/circuit/pandemic
name = "PanD.E.M.I.C 2200"
id = "pandemic"
req_tech = list(TECH_DATA = 2, TECH_BIO = 2)
build_path = /obj/item/circuitboard/pandemic
sort_string = "FAGAJ"
/datum/design/circuit/teleconsole /datum/design/circuit/teleconsole
name = "teleporter control console" name = "teleporter control console"
id = "teleconsole" id = "teleconsole"

View File

@@ -185,7 +185,10 @@ const StrainInformationSection = ({
</Section> </Section>
{selectedStrain && selectedStrain.symptoms.length > 0 && ( {selectedStrain && selectedStrain.symptoms.length > 0 && (
<>
<StrainSymptomsSection strain={selectedStrain} /> <StrainSymptomsSection strain={selectedStrain} />
<TotalStats strain={selectedStrain} />
</>
)} )}
</Flex.Item> </Flex.Item>
); );
@@ -220,6 +223,39 @@ const StrainSymptomsSection = ({ strain }: { strain: Strain }) => {
); );
}; };
const TotalStats = ({ strain }: { strain: Strain }) => {
const symptoms = strain.symptoms;
const TotalStats = symptoms.reduce(
(totals, symptom) => ({
stealth: totals.stealth + symptom.stealth,
resistance: totals.resistance + symptom.resistance,
stageSpeed: totals.stageSpeed + symptom.stageSpeed,
transmissibility: totals.transmissibility + symptom.transmissibility,
}),
{ stealth: 0, resistance: 0, stageSpeed: 0, transmissibility: 0 },
);
return (
<Section title="Total Stats">
<Table>
<Table.Row header>
<Table.Cell>Stealth</Table.Cell>
<Table.Cell>Resistance</Table.Cell>
<Table.Cell>Stage Speed</Table.Cell>
<Table.Cell>Transmissibility</Table.Cell>
</Table.Row>
<Table.Row>
<Table.Cell>{TotalStats.stealth}</Table.Cell>
<Table.Cell>{TotalStats.resistance}</Table.Cell>
<Table.Cell>{TotalStats.stageSpeed}</Table.Cell>
<Table.Cell>{TotalStats.transmissibility}</Table.Cell>
</Table.Row>
</Table>
</Section>
);
};
const StrainInformation = ({ const StrainInformation = ({
strain, strain,
strainIndex, strainIndex,

View File

@@ -507,13 +507,16 @@
#include "code\datums\diseases\_disease.dm" #include "code\datums\diseases\_disease.dm"
#include "code\datums\diseases\_MobProcs.dm" #include "code\datums\diseases\_MobProcs.dm"
#include "code\datums\diseases\anxiety.dm" #include "code\datums\diseases\anxiety.dm"
#include "code\datums\diseases\appendicitis.dm"
#include "code\datums\diseases\beesease.dm" #include "code\datums\diseases\beesease.dm"
#include "code\datums\diseases\brainrot.dm" #include "code\datums\diseases\brainrot.dm"
#include "code\datums\diseases\choreomania.dm" #include "code\datums\diseases\choreomania.dm"
#include "code\datums\diseases\cold.dm" #include "code\datums\diseases\cold.dm"
#include "code\datums\diseases\cold9.dm" #include "code\datums\diseases\cold9.dm"
#include "code\datums\diseases\fake_gbs.dm"
#include "code\datums\diseases\flu.dm" #include "code\datums\diseases\flu.dm"
#include "code\datums\diseases\food_poisoning.dm" #include "code\datums\diseases\food_poisoning.dm"
#include "code\datums\diseases\gbs.dm"
#include "code\datums\diseases\lycancoughy.dm" #include "code\datums\diseases\lycancoughy.dm"
#include "code\datums\diseases\magnitis.dm" #include "code\datums\diseases\magnitis.dm"
#include "code\datums\diseases\advance\advance.dm" #include "code\datums\diseases\advance\advance.dm"
@@ -522,23 +525,30 @@
#include "code\datums\diseases\advance\symptoms\confusion.dm" #include "code\datums\diseases\advance\symptoms\confusion.dm"
#include "code\datums\diseases\advance\symptoms\cough.dm" #include "code\datums\diseases\advance\symptoms\cough.dm"
#include "code\datums\diseases\advance\symptoms\damage_converter.dm" #include "code\datums\diseases\advance\symptoms\damage_converter.dm"
#include "code\datums\diseases\advance\symptoms\deafness.dm"
#include "code\datums\diseases\advance\symptoms\dizzy.dm" #include "code\datums\diseases\advance\symptoms\dizzy.dm"
#include "code\datums\diseases\advance\symptoms\fever.dm" #include "code\datums\diseases\advance\symptoms\fever.dm"
#include "code\datums\diseases\advance\symptoms\fire.dm" #include "code\datums\diseases\advance\symptoms\fire.dm"
#include "code\datums\diseases\advance\symptoms\flesh_eating.dm" #include "code\datums\diseases\advance\symptoms\flesh_eating.dm"
#include "code\datums\diseases\advance\symptoms\flip.dm"
#include "code\datums\diseases\advance\symptoms\hair.dm"
#include "code\datums\diseases\advance\symptoms\hallucigen.dm" #include "code\datums\diseases\advance\symptoms\hallucigen.dm"
#include "code\datums\diseases\advance\symptoms\headache.dm" #include "code\datums\diseases\advance\symptoms\headache.dm"
#include "code\datums\diseases\advance\symptoms\heal.dm" #include "code\datums\diseases\advance\symptoms\heal.dm"
#include "code\datums\diseases\advance\symptoms\hematophagy.dm"
#include "code\datums\diseases\advance\symptoms\itching.dm" #include "code\datums\diseases\advance\symptoms\itching.dm"
#include "code\datums\diseases\advance\symptoms\language.dm" #include "code\datums\diseases\advance\symptoms\language.dm"
#include "code\datums\diseases\advance\symptoms\macrophage.dm" #include "code\datums\diseases\advance\symptoms\macrophage.dm"
#include "code\datums\diseases\advance\symptoms\mlem.dm" #include "code\datums\diseases\advance\symptoms\mlem.dm"
#include "code\datums\diseases\advance\symptoms\necrotic_agent.dm" #include "code\datums\diseases\advance\symptoms\necrotic_agent.dm"
#include "code\datums\diseases\advance\symptoms\oxygen.dm" #include "code\datums\diseases\advance\symptoms\photosensitivity.dm"
#include "code\datums\diseases\advance\symptoms\pica.dm"
#include "code\datums\diseases\advance\symptoms\sensory.dm" #include "code\datums\diseases\advance\symptoms\sensory.dm"
#include "code\datums\diseases\advance\symptoms\shivering.dm" #include "code\datums\diseases\advance\symptoms\shivering.dm"
#include "code\datums\diseases\advance\symptoms\size.dm"
#include "code\datums\diseases\advance\symptoms\sneeze.dm" #include "code\datums\diseases\advance\symptoms\sneeze.dm"
#include "code\datums\diseases\advance\symptoms\spin.dm" #include "code\datums\diseases\advance\symptoms\spin.dm"
#include "code\datums\diseases\advance\symptoms\stimulant.dm"
#include "code\datums\diseases\advance\symptoms\symptoms.dm" #include "code\datums\diseases\advance\symptoms\symptoms.dm"
#include "code\datums\diseases\advance\symptoms\synthetic_infection.dm" #include "code\datums\diseases\advance\symptoms\synthetic_infection.dm"
#include "code\datums\diseases\advance\symptoms\telepathy.dm" #include "code\datums\diseases\advance\symptoms\telepathy.dm"
@@ -1575,6 +1585,7 @@
#include "code\game\objects\items\weapons\circuitboards\machinery\mech_recharger.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\mech_recharger.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\mining_drill.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\mining_drill.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\pacman.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\pacman.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\pandemic.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\papershredder.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\papershredder.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\power.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\power.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\recharge_station.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\recharge_station.dm"