diff --git a/code/__defines/diseases.dm b/code/__defines/diseases.dm index 30f1d6252b..97f0025228 100644 --- a/code/__defines/diseases.dm +++ b/code/__defines/diseases.dm @@ -18,7 +18,6 @@ #define CONTACT_GENERAL (1<<5) #define AIRBORNE (1<<6) - //Severity Defines #define NONTHREAT "No threat" #define MINOR "Minor" diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 6eda375458..e5790c3bca 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -3,8 +3,8 @@ GLOBAL_LIST_EMPTY(archive_diseases) GLOBAL_LIST_INIT(advance_cures, list( "sodiumchloride", "sugar", "orangejuice", "spaceacillin", "glucose", "ethanol", - "dyloteane", "impedrezene", "hepanephrodaxon", - "gold", "silver" + "leporazine", "impedrezene", "hepanephrodaxon", + "silver", "gold" )) /datum/disease/advance @@ -236,6 +236,13 @@ GLOBAL_LIST_INIT(advance_cures, list( Refresh(1) 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. /datum/disease/advance/proc/Devolve() if(length(symptoms) > 1) diff --git a/code/datums/diseases/advance/symptoms/deafness.dm b/code/datums/diseases/advance/symptoms/deafness.dm new file mode 100644 index 0000000000..21a44b2e9f --- /dev/null +++ b/code/datums/diseases/advance/symptoms/deafness.dm @@ -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 diff --git a/code/datums/diseases/advance/symptoms/flesh_eating.dm b/code/datums/diseases/advance/symptoms/flesh_eating.dm index e91efab1c7..00a5a273e7 100644 --- a/code/datums/diseases/advance/symptoms/flesh_eating.dm +++ b/code/datums/diseases/advance/symptoms/flesh_eating.dm @@ -6,7 +6,7 @@ Necrotizing Fasciitis (AKA Flesh-Eating Disease) Very very noticable. Lowers resistance tremendously. No changes to stage speed. - Decreases transmittablity temrendously. + Decreases transmittablity tremendously. Fatal Level. Bonus diff --git a/code/datums/diseases/advance/symptoms/flip.dm b/code/datums/diseases/advance/symptoms/flip.dm new file mode 100644 index 0000000000..e210e4b3bf --- /dev/null +++ b/code/datums/diseases/advance/symptoms/flip.dm @@ -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") diff --git a/code/datums/diseases/advance/symptoms/hair.dm b/code/datums/diseases/advance/symptoms/hair.dm new file mode 100644 index 0000000000..1a6c2ff109 --- /dev/null +++ b/code/datums/diseases/advance/symptoms/hair.dm @@ -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 diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm index 1138d4adba..340b88d6b4 100644 --- a/code/datums/diseases/advance/symptoms/heal.dm +++ b/code/datums/diseases/advance/symptoms/heal.dm @@ -130,7 +130,7 @@ Bonus Very high level. Bonus - Heals brain damage, treats radiation. + Heals clone damage, treats radiation. ////////////////////////////////////// */ diff --git a/code/datums/diseases/advance/symptoms/hematophagy.dm b/code/datums/diseases/advance/symptoms/hematophagy.dm new file mode 100644 index 0000000000..53e5aa842d --- /dev/null +++ b/code/datums/diseases/advance/symptoms/hematophagy.dm @@ -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) diff --git a/code/datums/diseases/advance/symptoms/photosensitivity.dm b/code/datums/diseases/advance/symptoms/photosensitivity.dm new file mode 100644 index 0000000000..5908bfb259 --- /dev/null +++ b/code/datums/diseases/advance/symptoms/photosensitivity.dm @@ -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 diff --git a/code/datums/diseases/advance/symptoms/pica.dm b/code/datums/diseases/advance/symptoms/pica.dm new file mode 100644 index 0000000000..ddd7e282d8 --- /dev/null +++ b/code/datums/diseases/advance/symptoms/pica.dm @@ -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 diff --git a/code/datums/diseases/advance/symptoms/size.dm b/code/datums/diseases/advance/symptoms/size.dm new file mode 100644 index 0000000000..a0a71fe1b7 --- /dev/null +++ b/code/datums/diseases/advance/symptoms/size.dm @@ -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)) diff --git a/code/datums/diseases/advance/symptoms/sneeze.dm b/code/datums/diseases/advance/symptoms/sneeze.dm index 63f2ab00e1..529596945b 100644 --- a/code/datums/diseases/advance/symptoms/sneeze.dm +++ b/code/datums/diseases/advance/symptoms/sneeze.dm @@ -42,3 +42,78 @@ Bonus icky.viruses |= A.Copy() 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 diff --git a/code/datums/diseases/advance/symptoms/spin.dm b/code/datums/diseases/advance/symptoms/spin.dm index 995be34071..055505dba9 100644 --- a/code/datums/diseases/advance/symptoms/spin.dm +++ b/code/datums/diseases/advance/symptoms/spin.dm @@ -16,7 +16,7 @@ BONUS ////////////////////////////////////// */ -/datum/symptom/mlem +/datum/symptom/spyndrome name = "Spyndrome" stealth = 2 resistance = 0 @@ -24,9 +24,8 @@ BONUS transmittable = 1 level = 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)) @@ -34,7 +33,5 @@ BONUS to_chat(viewers(A.affected_mob), span_warning("[A.affected_mob.name] struggles violently against their restraints!")) else to_chat(viewers(A.affected_mob), span_warning("[A.affected_mob.name] spins around violently!")) - for(var/D in directions) - A.affected_mob.dir = D - A.affected_mob.dir = pick(2,4,1,8) + A.affected_mob.emote("spin") return diff --git a/code/datums/diseases/advance/symptoms/stimulant.dm b/code/datums/diseases/advance/symptoms/stimulant.dm new file mode 100644 index 0000000000..4a427d4036 --- /dev/null +++ b/code/datums/diseases/advance/symptoms/stimulant.dm @@ -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 diff --git a/code/datums/diseases/advance/symptoms/synthetic_infection.dm b/code/datums/diseases/advance/symptoms/synthetic_infection.dm index cb17d88c81..b34ce07481 100644 --- a/code/datums/diseases/advance/symptoms/synthetic_infection.dm +++ b/code/datums/diseases/advance/symptoms/synthetic_infection.dm @@ -1,7 +1,7 @@ /* ////////////////////////////////////// -Sneezing +Synthetic Infection Slightly hidden. Increases resistance. @@ -23,7 +23,6 @@ Bonus transmittable = 1 level = 5 severity = 3 - id = "synthetic_infection" /datum/symptom/infect_synthetics/Start(datum/disease/advance/A) A.infect_synthetics = TRUE diff --git a/code/datums/diseases/appendicitis.dm b/code/datums/diseases/appendicitis.dm new file mode 100644 index 0000000000..ab7f5383b3 --- /dev/null +++ b/code/datums/diseases/appendicitis.dm @@ -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) diff --git a/code/datums/diseases/fake_gbs.dm b/code/datums/diseases/fake_gbs.dm new file mode 100644 index 0000000000..ca36f57d87 --- /dev/null +++ b/code/datums/diseases/fake_gbs.dm @@ -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") diff --git a/code/datums/diseases/gbs.dm b/code/datums/diseases/gbs.dm new file mode 100644 index 0000000000..ea2c755e27 --- /dev/null +++ b/code/datums/diseases/gbs.dm @@ -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 diff --git a/code/game/machinery/pandemic.dm b/code/game/machinery/pandemic.dm index cd51b2a9fc..a3521facbf 100644 --- a/code/game/machinery/pandemic.dm +++ b/code/game/machinery/pandemic.dm @@ -1,6 +1,7 @@ /obj/machinery/computer/pandemic name = "PanD.E.M.I.C 2200" desc = "Used to work with viruses." + circuit = /obj/item/circuitboard/pandemic density = TRUE anchored = TRUE icon = 'icons/obj/pandemic.dmi' @@ -325,7 +326,7 @@ printing = 1 var/obj/item/paper/P = new /obj/item/paper(loc) 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 = "
Releasing Virus
" P.info += "
" diff --git a/code/game/objects/items/weapons/circuitboards/machinery/pandemic.dm b/code/game/objects/items/weapons/circuitboards/machinery/pandemic.dm new file mode 100644 index 0000000000..2865260d8a --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/machinery/pandemic.dm @@ -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 + ) diff --git a/code/modules/admin/admin_verb_lists_vr.dm b/code/modules/admin/admin_verb_lists_vr.dm index 377e179143..2089389432 100644 --- a/code/modules/admin/admin_verb_lists_vr.dm +++ b/code/modules/admin/admin_verb_lists_vr.dm @@ -201,7 +201,8 @@ var/list/admin_verbs_spawn = list( /client/proc/create_gm_message, /client/proc/remove_gm_message, /client/proc/AdminCreateVirus, - /client/proc/ReleaseVirus + /client/proc/ReleaseVirus, + /client/proc/spawn_reagent ) var/list/admin_verbs_server = list( @@ -290,6 +291,7 @@ var/list/admin_verbs_debug = list( /client/proc/simple_DPS, /datum/admins/proc/view_feedback, /client/proc/stop_sounds, + /client/proc/spawn_reagent, /datum/admins/proc/quick_nif, //CHOMPStation Add, /datum/admins/proc/quick_authentic_nif, //CHOMPStation add /client/proc/reload_jobwhitelist, //ChompADD diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 9649f7cc8c..eedc180a9c 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -537,3 +537,18 @@ set category = "Debug.Misc" 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]" diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm index 6f5e2b9497..e17fa254d0 100644 --- a/code/modules/events/disease_outbreak.dm +++ b/code/modules/events/disease_outbreak.dm @@ -3,7 +3,8 @@ GLOBAL_LIST_EMPTY(current_pending_diseases) var/datum/disease/chosen_disease var/list/disease_blacklist = list( /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/diseases_minor = list() diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 417d3d35d6..c26b918178 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -37,3 +37,9 @@ // 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)) diff --git a/code/modules/organs/internal/appendix.dm b/code/modules/organs/internal/appendix.dm index a941d5aadc..456f8f157c 100644 --- a/code/modules/organs/internal/appendix.dm +++ b/code/modules/organs/internal/appendix.dm @@ -9,12 +9,9 @@ /mob/living/carbon/human/proc/appendicitis() if(stat == DEAD) return 0 - var/obj/item/organ/internal/appendix/A = internal_organs_by_name[O_APPENDIX] - if(istype(A) && !A.inflamed) - A.inflamed = 1 - return 1 + ForceContractDisease(new /datum/disease/appendicitis) return 0 - +/* /obj/item/organ/internal/appendix/process() ..() @@ -47,7 +44,7 @@ owner.adjustToxLoss(25) groin.wounds += W inflamed = 1 - +*/ /obj/item/organ/internal/appendix/removed() if(inflamed) icon_state = "[initial(icon_state)]inflamed" diff --git a/code/modules/reagents/reactions/instant/virology.dm b/code/modules/reagents/reactions/instant/virology.dm index f8d5038326..26576c23d6 100644 --- a/code/modules/reagents/reactions/instant/virology.dm +++ b/code/modules/reagents/reactions/instant/virology.dm @@ -40,6 +40,13 @@ required_reagents = list("inaprovaline" = 1, "mutagenvirusfood" = 1) 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 name = "Mix Virus" id = "mixvirus" @@ -48,6 +55,9 @@ var/level_min = 0 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) var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list if(B && B.data) @@ -55,6 +65,13 @@ if(D) 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 name = "Mix Virus 2" id = "mixvirus2" @@ -111,6 +128,17 @@ level_min = 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 name = "Devolve Virus" id = "remvirus" diff --git a/code/modules/reagents/reagents/virology.dm b/code/modules/reagents/reagents/virology.dm index de6e77e304..95badd9851 100644 --- a/code/modules/reagents/reagents/virology.dm +++ b/code/modules/reagents/reagents/virology.dm @@ -46,3 +46,9 @@ id = "weakphoronvirusfood" description = "Mutates viruses when mixed in blood. This one seems to have been weakened, but still strong." 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" diff --git a/code/modules/research/designs/circuits/circuits.dm b/code/modules/research/designs/circuits/circuits.dm index 7cf2ad61ba..7893d8b495 100644 --- a/code/modules/research/designs/circuits/circuits.dm +++ b/code/modules/research/designs/circuits/circuits.dm @@ -127,6 +127,13 @@ CIRCUITS BELOW build_path = /obj/item/circuitboard/crew 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 name = "teleporter control console" id = "teleconsole" diff --git a/tgui/packages/tgui/interfaces/PanDEMIC.tsx b/tgui/packages/tgui/interfaces/PanDEMIC.tsx index ff8c718529..967486a8c9 100644 --- a/tgui/packages/tgui/interfaces/PanDEMIC.tsx +++ b/tgui/packages/tgui/interfaces/PanDEMIC.tsx @@ -185,7 +185,10 @@ const StrainInformationSection = ({ {selectedStrain && selectedStrain.symptoms.length > 0 && ( - + <> + + + )} ); @@ -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 ( +
+ + + Stealth + Resistance + Stage Speed + Transmissibility + + + {TotalStats.stealth} + {TotalStats.resistance} + {TotalStats.stageSpeed} + {TotalStats.transmissibility} + +
+
+ ); +}; + const StrainInformation = ({ strain, strainIndex, diff --git a/vorestation.dme b/vorestation.dme index 359697ddd7..4aa937e4e2 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -507,13 +507,16 @@ #include "code\datums\diseases\_disease.dm" #include "code\datums\diseases\_MobProcs.dm" #include "code\datums\diseases\anxiety.dm" +#include "code\datums\diseases\appendicitis.dm" #include "code\datums\diseases\beesease.dm" #include "code\datums\diseases\brainrot.dm" #include "code\datums\diseases\choreomania.dm" #include "code\datums\diseases\cold.dm" #include "code\datums\diseases\cold9.dm" +#include "code\datums\diseases\fake_gbs.dm" #include "code\datums\diseases\flu.dm" #include "code\datums\diseases\food_poisoning.dm" +#include "code\datums\diseases\gbs.dm" #include "code\datums\diseases\lycancoughy.dm" #include "code\datums\diseases\magnitis.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\cough.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\fever.dm" #include "code\datums\diseases\advance\symptoms\fire.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\headache.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\language.dm" #include "code\datums\diseases\advance\symptoms\macrophage.dm" #include "code\datums\diseases\advance\symptoms\mlem.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\shivering.dm" +#include "code\datums\diseases\advance\symptoms\size.dm" #include "code\datums\diseases\advance\symptoms\sneeze.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\synthetic_infection.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\mining_drill.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\power.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\recharge_station.dm"