From f237ea83093b528fea618f4bbf30877cbc5e0539 Mon Sep 17 00:00:00 2001 From: smellie Date: Tue, 16 May 2023 01:34:10 +0100 Subject: [PATCH] Antag Dirty Bombs & Bodyhorror Parasites (#16317) * dirty bombs & bodyhorror * clean up + extra flavour CE_ANTIEMETIC taken into account in the delayed_vomit() proc. doesn't need to subtract from CE_EMETIC anymore. * desc. fix, TC tweak, syringe gun kit * dirty bomb tweaks radiation remains for as long as advertised (~8mins in an open space) it also actually leaves behind the green goo now. --- aurorastation.dme | 1 + code/__defines/chemistry.dm | 1 + code/__defines/mobs.dm | 4 +- code/datums/uplink/bioweapons.dm | 45 ++++++ .../stealthy and inconspicuous weapons.dm | 6 - code/datums/uplink/uplink_categories.dm | 3 + code/game/objects/items/contraband.dm | 22 +++ code/game/objects/items/weapons/explosives.dm | 18 +++ .../items/weapons/storage/pill_bottle.dm | 19 ++- .../items/weapons/storage/uplink_kits.dm | 20 +++ code/game/objects/random/random.dm | 22 ++- code/modules/mob/living/carbon/human/human.dm | 8 ++ code/modules/mob/living/carbon/human/life.dm | 5 +- code/modules/mob/mob_helpers.dm | 4 + code/modules/organs/subtypes/parasite.dm | 134 ++++++++++++++++-- .../Chemistry-Reagents-Food-Drinks.dm | 10 ++ .../Chemistry-Reagents-Medicine.dm | 35 ++++- .../Chemistry-Reagents-Toxins.dm | 52 ++++++- code/modules/reagents/Chemistry-Recipes.dm | 7 + .../reagents/reagent_containers/pill.dm | 20 ++- .../reagents/reagent_containers/syringes.dm | 10 ++ html/changelogs/kermit-bioweapons.yml | 15 ++ icons/obj/organs/organs.dmi | Bin 11087 -> 11293 bytes maps/sccv_horizon/sccv_horizon-2_deck_2.dmm | 2 + 24 files changed, 434 insertions(+), 29 deletions(-) create mode 100644 code/datums/uplink/bioweapons.dm create mode 100644 html/changelogs/kermit-bioweapons.yml diff --git a/aurorastation.dme b/aurorastation.dme index 6d14d6dfe26..30046430bc4 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -380,6 +380,7 @@ #include "code\datums\uplink\ammunition.dm" #include "code\datums\uplink\announcements.dm" #include "code\datums\uplink\badassery.dm" +#include "code\datums\uplink\bioweapons.dm" #include "code\datums\uplink\corporate_equipment.dm" #include "code\datums\uplink\devices_and_tools.dm" #include "code\datums\uplink\exosuit.dm" diff --git a/code/__defines/chemistry.dm b/code/__defines/chemistry.dm index cc7ee692edb..9c97c0d57c1 100644 --- a/code/__defines/chemistry.dm +++ b/code/__defines/chemistry.dm @@ -80,6 +80,7 @@ #define CE_OXYGENATED "oxygenated" // Dexalin #define CE_BLOODCLOT "bloodclot" // Coagzolug #define CE_ORGANREPAIR "organrepair" // Rezadone +#define CE_ANTIPARASITE "antiparasite" // Helmizole, garlic // Deal damage #define CE_BREATHLOSS "breathloss" diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index 5266f1b95fd..eeb718185a6 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -140,8 +140,10 @@ #define BP_OPTICS "optics" #define BP_IPCTAG "ipc tag" -// Zombie organ +// Parasite organs #define BP_ZOMBIE_PARASITE "black tumour" +#define BP_WORM_HEART "heart fluke" +#define BP_WORM_NERVE "nerve fluke" //Augment organs #define BP_AUG_TIMEPIECE "integrated timepiece" diff --git a/code/datums/uplink/bioweapons.dm b/code/datums/uplink/bioweapons.dm new file mode 100644 index 00000000000..d637f8dc137 --- /dev/null +++ b/code/datums/uplink/bioweapons.dm @@ -0,0 +1,45 @@ +// Chemical, Biological, Radiological ~~and Nuclear~~ Weapons +/datum/uplink_item/item/bioweapons + category = /datum/uplink_category/bioweapons + +/datum/uplink_item/item/bioweapons/random_toxin + name = "Random Toxins Kit" + desc = "A kit that contains 3 vials containing random toxins. Comes with a syringe!" + item_cost = 1 + path = /obj/item/storage/box/syndie_kit/toxin + +/datum/uplink_item/item/bioweapons/nerveworms_kit + name = "Parasitic Worms Kit - Nerve Fluke" + desc = "Contains the eggs of a Nerve Fluke. Non-lethal but incapacitating." + item_cost = 3 + path = /obj/item/storage/box/syndie_kit/nerveworms + +/datum/uplink_item/item/bioweapons/heartworms_kit + name = "Parasitic Worms Kit - Heart Fluke" + desc = "Contains the eggs of a Heart Fluke. Lethal if left untreated." + item_cost = 5 + path = /obj/item/storage/box/syndie_kit/heartworms + +/datum/uplink_item/item/bioweapons/greimorian_eggs + name = "Greimorian Eggs" + desc = "A cluster of greimorian eggs. (They will be planted at your feet on-purchase and CANNOT be moved, so make sure you're where you want them to be)" + item_cost = 4 + path = /obj/effect/spider/eggcluster + +/datum/uplink_item/item/bioweapons/radsuit + name = "Radiation Suit" + desc = "A kit containing a radiation suit. Complete with a geiger counter and one anti-radiation tablet." + item_cost = 1 + path = /obj/item/storage/box/syndie_kit/radsuit + +/datum/uplink_item/item/bioweapons/dirtybomb + name = "Dirty Bomb" + desc = "A small explosive laced with radium. The explosion is small, but the radioactive will affect a large area for a while (10 minutes approx)." + item_cost = 4 + path = /obj/item/plastique/dirty + +/datum/uplink_item/item/bioweapons/syringe_gun + name = "Syringe Gun Kit" + desc = "A kit containing a syringe gun and 3 disassembled darts. Fill a syringe, add it to a dart, then load into the rifle." + item_cost = 3 + path = /obj/item/storage/box/syndie_kit/syringe_gun diff --git a/code/datums/uplink/stealthy and inconspicuous weapons.dm b/code/datums/uplink/stealthy and inconspicuous weapons.dm index 6e0584b3853..92656cdf2de 100644 --- a/code/datums/uplink/stealthy and inconspicuous weapons.dm +++ b/code/datums/uplink/stealthy and inconspicuous weapons.dm @@ -14,12 +14,6 @@ item_cost = 1 path = /obj/item/storage/box/syndie_kit/cigarette -/datum/uplink_item/item/stealthy_weapons/random_toxin - name = "Random Toxins Kit" - desc = "A kit that contains 3 vials containing random toxins. Comes with a syringe!" - item_cost = 1 - path = /obj/item/storage/box/syndie_kit/toxin - /datum/uplink_item/item/stealthy_weapons/pens name = "Pen-jector Kit" desc = "A kit that contains four differently coloured pens. A blue pacifying pen, a green pen containing healing chemicals, and a yellow hyperzine pen." diff --git a/code/datums/uplink/uplink_categories.dm b/code/datums/uplink/uplink_categories.dm index f7d111c0b69..3ce81e2cec8 100644 --- a/code/datums/uplink/uplink_categories.dm +++ b/code/datums/uplink/uplink_categories.dm @@ -88,3 +88,6 @@ /datum/uplink_category/martial_arts name = "Martial Arts" + +/datum/uplink_category/bioweapons + name = "Chemical, Biological & Radiological Weaponary" diff --git a/code/game/objects/items/contraband.dm b/code/game/objects/items/contraband.dm index c8f3b3914a6..e77b877ea3c 100644 --- a/code/game/objects/items/contraband.dm +++ b/code/game/objects/items/contraband.dm @@ -65,3 +65,25 @@ reagents.add_reagent(/singleton/reagent/venenum,volume) desc = "Contains venenum." update_icon() + +/obj/item/reagent_containers/glass/beaker/vial/nerveworm_eggs + flags = 0 + +/obj/item/reagent_containers/glass/beaker/vial/nerveworm_eggs/Initialize() + . = ..() + if(is_open_container()) + flags ^= OPENCONTAINER + reagents.add_reagent(/singleton/reagent/toxin/nerveworm_eggs, 2) + desc = "BIOHAZARDOUS! - Nerve Fluke eggs. Purchased from SciSupply Eridani, recently incorporated into Zeng-Hu Pharmaceuticals' Keiretsu!" + update_icon() + +/obj/item/reagent_containers/glass/beaker/vial/heartworm_eggs + flags = 0 + +/obj/item/reagent_containers/glass/beaker/vial/heartworm_eggs/Initialize() + . = ..() + if(is_open_container()) + flags ^= OPENCONTAINER + reagents.add_reagent(/singleton/reagent/toxin/heartworm_eggs, 2) + desc = "BIOHAZARDOUS! - Heart Fluke eggs. Purchased from SciSupply Eridani, recently incorporated into Zeng-Hu Pharmaceuticals' Keiretsu!" + update_icon() diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 5aa0a92a235..3b22fd48699 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -138,3 +138,21 @@ R.cell.use(1000) can_deploy = TRUE maptext = "Ready" + +/obj/item/plastique/dirty + name = "dirty bomb" + desc = "A small explosive laced with radium. The explosion is small, but the radioactive material will remain for a fair while." + timer = 300 + +/obj/item/plastique/dirty/attack_self(mob/user as mob) + var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num + if(user.get_active_hand() == src) + newtime = Clamp(newtime, 300, 60000) + timer = newtime + to_chat(user, SPAN_NOTICE("Timer set for [timer] seconds.")) + +/obj/item/plastique/dirty/explode(turf/location) + if(location) + SSradiation.radiate(src, 250) + new /obj/effect/decal/cleanable/greenglow(get_turf(src)) + ..() diff --git a/code/game/objects/items/weapons/storage/pill_bottle.dm b/code/game/objects/items/weapons/storage/pill_bottle.dm index 53e7386a32b..74a33b5ab87 100644 --- a/code/game/objects/items/weapons/storage/pill_bottle.dm +++ b/code/game/objects/items/weapons/storage/pill_bottle.dm @@ -142,7 +142,7 @@ starts_with = list(/obj/item/reagent_containers/pill/parvosil = 3) /obj/item/storage/pill_bottle/assorted - name = "pill bottle (assorted)" + name = "bottle of assorted pills" desc = "Commonly found on paramedics, these assorted pill bottles contain all the basics." starts_with = list( /obj/item/reagent_containers/pill/inaprovaline = 6, @@ -155,6 +155,21 @@ ) /obj/item/storage/pill_bottle/antidexafen - name = "pill bottle (cold medicine)" + name = "bottle of 15u Antidexafen pills" desc = "All-in-one cold medicine. 15u dose per pill. Safe for babies like you!" starts_with = list(/obj/item/reagent_containers/pill/antidexafen = 21) + +/obj/item/storage/pill_bottle/antiparasitic + name = "bottle of 5u Helmizole pills" + desc = "Contains pills used to treat parasitic infections caused by worms." + starts_with = list(/obj/item/reagent_containers/pill/antiparasitic = 8) + +/obj/item/storage/pill_bottle/asinodryl + name = "bottle of 10u Asinodryl pills" + desc = "Contains pills used to treat nausea and vomiting." + starts_with = list(/obj/item/reagent_containers/pill/asinodryl = 8) + +/obj/item/storage/pill_bottle/steramycin + name = "bottle of 5u Steramycin pills" + desc = "Contains prophylactic antibiotic pills." + starts_with = list(/obj/item/reagent_containers/pill/steramycin = 3) diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index 6abacd3bc52..965d56b2079 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -197,3 +197,23 @@ starts_with = list( /obj/item/reagent_containers/hypospray/autoinjector/berserk = 2 ) + +/obj/item/storage/box/syndie_kit/nerveworms + name = "nerve fluke kit" + desc = "Contains the eggs of a Nerve Fluke (non-lethal, incapacitating)." + starts_with = list(/obj/item/reagent_containers/glass/beaker/vial/nerveworm_eggs = 1, /obj/item/reagent_containers/syringe = 1, /obj/item/reagent_containers/pill/antiparasitic = 1, /obj/item/reagent_containers/pill/asinodryl = 1) + +/obj/item/storage/box/syndie_kit/heartworms + name = "heart fluke kit" + desc = "Contains the eggs of a Heart Fluke (lethal)." + starts_with = list(/obj/item/reagent_containers/glass/beaker/vial/heartworm_eggs = 1, /obj/item/reagent_containers/syringe = 1, /obj/item/reagent_containers/pill/antiparasitic = 1, /obj/item/reagent_containers/pill/asinodryl = 1) + +/obj/item/storage/box/syndie_kit/radsuit + name = "radiation suit kit" + desc = "Contains a radiation suit and geiger counter to protect you from radiation." + starts_with = list(/obj/item/clothing/head/radiation = 1, /obj/item/clothing/suit/radiation = 1, /obj/item/clothing/glasses/safety/goggles = 1, /obj/item/device/geiger = 1, /obj/item/reagent_containers/pill/hyronalin = 1) + +/obj/item/storage/box/syndie_kit/syringe_gun + name = "syringe gun kit" + desc = "Contains a syringe gun and the parts require to assemble a few darts." + starts_with = list(/obj/item/gun/launcher/syringe = 1, /obj/item/syringe_cartridge = 3, /obj/item/reagent_containers/syringe = 3) diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index c814a53c2f5..8dbd1ab0532 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -152,12 +152,24 @@ /obj/item/stack/medical/splint = 1, /obj/item/bodybag = 2, /obj/item/bodybag/cryobag = 1, - /obj/item/storage/pill_bottle/kelotane = 2, - /obj/item/storage/pill_bottle/bicaridine = 2, - /obj/item/storage/pill_bottle/antitox = 2, + /obj/item/auto_cpr = 1, + /obj/item/storage/pill_bottle/kelotane = 3, + /obj/item/storage/pill_bottle/bicaridine = 3, + /obj/item/storage/pill_bottle/antitox = 3, /obj/item/storage/pill_bottle/mortaphenyl = 2, - /obj/item/reagent_containers/syringe/dylovene = 2, - /obj/item/reagent_containers/syringe/inaprovaline = 2, + /obj/item/storage/pill_bottle/antiparasitic = 1, + /obj/item/storage/pill_bottle/asinodryl = 1, + /obj/item/storage/pill_bottle/steramycin =1, + /obj/item/reagent_containers/syringe/dylovene = 3, + /obj/item/reagent_containers/syringe/inaprovaline = 3, + /obj/item/reagent_containers/syringe/antiparasitic = 1, + /obj/item/reagent_containers/syringe/antibiotic = 2, + /obj/item/reagent_containers/syringe/fluvectionem = 2, + /obj/item/reagent_containers/hypospray/autoinjector/coagzolug = 2, + /obj/item/reagent_containers/hypospray/autoinjector/hyronalin = 2, + /obj/item/reagent_containers/hypospray/autoinjector/sideeffectbgone = 1, + /obj/item/reagent_containers/inhaler/pneumalin = 1, + /obj/item/reagent_containers/inhaler/peridaxon = 1, /obj/item/stack/nanopaste = 1 ) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index af79b64f1e4..17c80bdd331 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -973,6 +973,10 @@ if(stomach.ingested.total_volume) stomach.ingested.trans_to_obj(splat, min(15, stomach.ingested.total_volume)) + for(var/obj/item/organ/internal/parasite/P in src.internal_organs) + if(P) + if(P.egg && (P.stage == P.max_stage)) + splat.reagents.add_reagent(P.egg, 2) handle_additional_vomit_reagents(splat) splat.update_icon() @@ -985,6 +989,10 @@ if(!check_has_mouth() || isSynthetic() || !timevomit || !level || stat == DEAD || lastpuke) return + if(chem_effects[CE_ANTIEMETIC]) + to_chat(src, SPAN_WARNING("You feel a very brief wave of nausea, but it quickly disapparates.")) + return + if(deliberate) if(incapacitated()) to_chat(src, SPAN_WARNING("You cannot do that right now.")) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index ac091450523..dd8ad6fff5e 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -605,10 +605,7 @@ adjustToxLoss(chem_effects[CE_TOXIN]) if(CE_EMETIC in chem_effects) - var/nausea = chem_effects[CE_EMETIC] - if(CE_ANTIEMETIC in chem_effects) - nausea -= min(nausea, chem_effects[CE_ANTIEMETIC]) // so it can only go down to 0 - if(prob(nausea)) + if(prob(chem_effects[CE_EMETIC])) delayed_vomit() if(CE_ITCH in chem_effects) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index ea2b0e6fe7a..6952a863b9b 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -731,6 +731,10 @@ var/list/intents = list(I_HELP,I_DISARM,I_GRAB,I_HURT) return if(stat == DEAD) return + if(chem_effects[CE_ANTIEMETIC]) + to_chat(src, SPAN_WARNING("You feel a very brief wave of nausea, but it quickly disapparates.")) + return + if(!lastpuke) lastpuke = 1 to_chat(src, "You feel nauseous...") diff --git a/code/modules/organs/subtypes/parasite.dm b/code/modules/organs/subtypes/parasite.dm index 10378d6ef53..233748e9993 100644 --- a/code/modules/organs/subtypes/parasite.dm +++ b/code/modules/organs/subtypes/parasite.dm @@ -5,11 +5,14 @@ var/stage = 1 var/max_stage = 4 var/stage_ticker = 0 + var/recession = 0 var/infection_speed = 2 //Will be determined by get_infect_speed() var/infect_speed_high = 35 //The fastest this parasite will advance stages var/infect_speed_low = 15 //The slowest this parasite will advance stages - var/stage_interval = 600 //time between stages, in seconds + var/stage_interval = 300 //time between stages, in seconds. interval of 300 allows convenient treating with antiparasitics, higher will require spaced dosing of medications. var/subtle = 0 //will the body reject the parasite naturally? + var/egg = null //does the parasite have a reagent which seeds an infection? + var/drug_resistance = 0 //is the parasite resistant to antiparasitic medications? /obj/item/organ/internal/parasite/Initialize() . = ..() @@ -20,17 +23,28 @@ /obj/item/organ/internal/parasite/process() ..() - if(!owner) return - if(stage < max_stage) - stage_ticker += infection_speed + if(owner.chem_effects[CE_ANTIPARASITE] && !drug_resistance) + recession = owner.chem_effects[CE_ANTIPARASITE]/10 - if(stage_ticker >= stage*stage_interval) - stage = min(stage+1,max_stage) - get_infect_speed() //Each stage may progress faster or slower than the previous one - stage_effect() + if((stage < max_stage) && !recession) + stage_ticker = Clamp(stage_ticker+=infection_speed, 0, stage_interval*max_stage) + if(stage_ticker >= stage*stage_interval) + stage = min(stage+1,max_stage) + get_infect_speed() //Each stage may progress faster or slower than the previous one + stage_effect() + + if(recession) + stage_ticker = Clamp(stage_ticker-=recession, 0, stage_interval*max_stage) + if(stage_ticker <= stage*stage_interval-stage_interval) + stage = max(stage-1, 1) + stage_effect() + if(!owner.chem_effects[CE_ANTIPARASITE] || drug_resistance) + recession = 0 + if(stage_ticker == 0) + qdel(src) /obj/item/organ/internal/parasite/handle_rejection() if(subtle) @@ -57,9 +71,12 @@ parent_organ = BP_CHEST stage_interval = 150 + drug_resistance = 1 origin_tech = list(TECH_BIO = 3) + egg = /singleton/reagent/kois + /obj/item/organ/internal/parasite/kois/process() ..() @@ -128,8 +145,12 @@ parent_organ = BP_HEAD var/removed_langs = 0 stage_interval = 150 + drug_resistance = 1 + origin_tech = list(TECH_BIO = 7) + egg = /singleton/reagent/kois/black + /obj/item/organ/internal/parasite/blackkois/process() ..() @@ -229,8 +250,11 @@ organ_tag = BP_ZOMBIE_PARASITE parent_organ = BP_HEAD stage_interval = 150 + drug_resistance = 1 relative_size = 0 + egg = /singleton/reagent/toxin/trioxin + var/last_heal = 0 var/heal_rate = 5 SECONDS @@ -320,3 +344,97 @@ owner.update_dna() else owner.adjustToxLoss(50) + +//Parasitic Worms// + +/obj/item/organ/internal/parasite/nerveworm + name = "bundle of nerve flukes" + icon = 'icons/obj/organs/organs.dmi' + icon_state = "helminth" + dead_icon = "helminth_dead" + + organ_tag = BP_WORM_NERVE + parent_organ = BP_L_ARM //if desperate, can lop your arm off to remove the infection :) + subtle = 1 + + origin_tech = list(TECH_BIO = 4) + + egg = /singleton/reagent/toxin/nerveworm_eggs + +/obj/item/organ/internal/parasite/nerveworm/process() + ..() + + if (!owner) + return + + if(prob(10)) + owner.adjustNutritionLoss(10) + + if(stage >= 2) //after ~5 minutes + owner.confused = max(owner.confused, 10) + + if(stage >= 3) //after ~10 minutes + owner.slurring = max(owner.slurring, 100) + owner.drowsiness = max(owner.drowsiness, 20) + if(prob(1)) + owner.delayed_vomit() + if(prob(2)) + to_chat(owner, SPAN_WARNING(pick("You feel a tingly sensation in your fingers.", "Is that pins and needles?", "An electric sensation jolts its way up your left arm.", "You smell something funny.", "You taste something funny."))) + + if(stage >= 4) //after ~15 minutes + if(prob(2)) + to_chat(owner, SPAN_WARNING(pick("A deep, tingling sensation paralyses your left arm.", "You feel as if you just struck your funny bone.", "You feel a pulsing sensation within your left arm."))) + owner.emote(pick("twitch", "shiver")) + owner.stuttering = 20 + if(prob(1)) + owner.seizure() + if(prob(5)) + owner.reagents.add_reagent(/singleton/reagent/toxin/nerveworm_eggs, 2) + owner.adjustHalLoss(15) + to_chat(owner, SPAN_WARNING("An extreme, nauseating pain erupts from deep within your left arm!")) + + +/obj/item/organ/internal/parasite/heartworm + name = "bundle of heart flukes" + icon = 'icons/obj/organs/organs.dmi' + icon_state = "helminth" + dead_icon = "helminth_dead" + + organ_tag = BP_WORM_HEART + parent_organ = BP_CHEST + subtle = 1 + + stage_interval = 450 //~7.5 minutes/stage + + origin_tech = list(TECH_BIO = 4) + + egg = /singleton/reagent/toxin/heartworm_eggs + +/obj/item/organ/internal/parasite/heartworm/process() + ..() + + var/obj/item/organ/internal/heart = owner.internal_organs_by_name[BP_HEART] + + if (!owner) + return + + if(prob(10)) + owner.adjustNutritionLoss(10) + + if(stage >= 2) //after ~7.5 minutes + if(prob(2)) + owner.emote("cough") + + if(stage >= 3) //after ~15 minutes + if(prob(7)) + heart.take_damage(rand(2,5)) + if(prob(5)) + to_chat(owner, SPAN_WARNING(pick("Your chest feels tight.", "Your chest is aching.", "You feel a stabbing pain in your chest!", "You feel a painful, tickly sensation within your chest."))) + owner.adjustHalLoss(15) + + if(stage >= 4) //after ~22.5 minutes + if(prob(5)) + owner.reagents.add_reagent(/singleton/reagent/toxin/heartworm_eggs, 2) + owner.adjustHalLoss(15) + to_chat(owner, SPAN_WARNING("An extreme, nauseating pain erupts from the centre of your chest!")) + diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm index 77a2178910f..1727d4225cc 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm @@ -665,6 +665,11 @@ condiment_desc = "Perfect for repelling vampires and/or potential dates." condiment_icon_state = "garlic_sauce" +/singleton/reagent/nutriment/garlicsauce/affect_chem_effect(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) + . = ..() + if(.) + M.add_chemical_effect(CE_ANTIPARASITE, 10) + /singleton/reagent/nutriment/mayonnaise name = "Mayonnaise" description = "Mayonnaise, a staple classic for sandwiches." @@ -1214,6 +1219,11 @@ germ_adjust = 7.5 // has allicin, an antibiotic +/singleton/reagent/drink/garlicjuice/affect_chem_effect(var/mob/living/carbon/M, var/alien, var/removed) + . = ..() + if(.) + M.add_chemical_effect(CE_ANTIPARASITE, 10) + /singleton/reagent/drink/onionjuice name = "Onion Juice" description = "Juice from an onion, for when you need to cry." diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm index 2a9debf2c39..babd5c77135 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm @@ -777,10 +777,17 @@ metabolism = REM * 0.25 fallback_specific_heat = 1 +/singleton/reagent/asinodryl/affect_chem_effect(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) + . = ..() + if(.) + M.add_chemical_effect(CE_ANTIEMETIC, M.chem_doses[type]/4) // 1u should suppress 2u thetamycin + M.add_chemical_effect(CE_STRAIGHTWALK) + /singleton/reagent/asinodryl/affect_blood(var/mob/living/carbon/M, var/alien, var/removed, var/datum/reagents/holder) if(alien == IS_DIONA) return - M.add_chemical_effect(CE_ANTIEMETIC, M.chem_doses[type]/4) // 1u should suppress 2u thetamycin + M.confused = max(M.confused - 10, 0) + M.dizziness = max(M.confused - 10, 0) /singleton/reagent/antidexafen name = "Antidexafen" @@ -1624,3 +1631,29 @@ if(heart) to_chat(H, SPAN_DANGER("Your heart skips a beat and screams out in pain!")) heart.take_internal_damage(10) + +/singleton/reagent/antiparasitic + name = "Helmizole" + description = "Helmizole is an anti-helminthic medication which combats parasitic worm infections, compromising their nervous system and inducing respiratory paralysis." + reagent_state = LIQUID + color = "#c7f3a4" + overdose = 10 + od_minimum_dose = 1 + metabolism = REM*0.2 + scannable = TRUE + taste_description = "alcohol" + +/singleton/reagent/antiparasitic/affect_chem_effect(var/mob/living/carbon/M, var/alien, var/removed) + . = ..() + if(.) + M.add_chemical_effect(CE_ANTIPARASITE, 50) //~10u will get rid of a standard-lengthed (stage interval = 300) parasitic infection. ~5mins to eliminate symptoms, ~7.5mins to kill parasite. + M.add_chemical_effect(CE_EMETIC, M.chem_doses[type]/2) + +/singleton/reagent/antiparasitic/overdose(mob/living/carbon/M, alien, removed, scale, datum/reagents/holder) + if(istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + + for(var/obj/item/organ/internal/parasite/P in H.internal_organs) + if(P) + if(P.drug_resistance == 0) + P.drug_resistance = 1 diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm index 415e6cf28e1..b91646a0488 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm @@ -661,7 +661,7 @@ taste_description = "acrid smoke" nicotine = 0.1 -/singleton/reagent/toxin/tobacco/sweet +/singleton/reagent/toxin/tobacco/sweet name = "Sweet Tobacco" description = "This tobacco is much sweeter than the strains usually found in human space." taste_description = "sweet tobacco" @@ -854,3 +854,53 @@ /singleton/reagent/toxin/coagulated_blood/affect_blood(mob/living/carbon/M, alien, removed, datum/reagents/holder) M.add_chemical_effect(CE_NEPHROTOXIC, 0) // deal no damage, but prevent regeneration ..() + +/singleton/reagent/toxin/nerveworm_eggs + name = "Nerve Fluke Eggs" + description = "The eggs of a parasitic worm. These ones grow to infest the nervous system, working their way up from the peripheral to the central nervous system. The infection is gradual: lethargy, issues with motor coordination, then eventually seizures." + reagent_state = SOLID + color = "#b9b9d9" + metabolism = REM*2 + ingest_met = REM*2 + touch_met = REM*5 + taste_description = "something tingly" + taste_mult = 0.25 + strength = 0 + +/singleton/reagent/toxin/nerveworm_eggs/affect_blood(mob/living/carbon/M, alien, removed, datum/reagents/holder) + ..() + if(istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + + if(H.chem_effects[CE_ANTIPARASITE]) + return + + if(!H.internal_organs_by_name[BP_WORM_NERVE]) + var/obj/item/organ/external/affected = H.get_organ(BP_L_ARM) + var/obj/item/organ/internal/parasite/nerveworm/infest = new() + infest.replaced(H, affected) + +/singleton/reagent/toxin/heartworm_eggs + name = "Heart Fluke Eggs" + description = "The eggs of a parasitic worm. These ones grow to infest the cardiac tissue of the heart. The infection is gradual: coughing first, then eventually heart failure." + reagent_state = SOLID + color = "#caaaaa" + metabolism = REM/2 //Slow metabolisation so medical can potentially screen it early, given it's danger. + ingest_met = REM/2 + touch_met = REM*5 + taste_description = "something quite sour" + taste_mult = 0.75 + strength = 0 + +/singleton/reagent/toxin/heartworm_eggs/affect_blood(mob/living/carbon/M, alien, removed, datum/reagents/holder) + ..() + if(istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + + if(H.chem_effects[CE_ANTIPARASITE]) + return + + if(!H.internal_organs_by_name[BP_WORM_HEART]) + var/obj/item/organ/external/affected = H.get_organ(BP_CHEST) + var/obj/item/organ/internal/parasite/heartworm/infest = new() + infest.replaced(H, affected) diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index e6f49cba167..1f07732f369 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -389,6 +389,13 @@ required_reagents = list(/singleton/reagent/thetamycin = 2, /singleton/reagent/sterilizine = 1, /singleton/reagent/radium = 1) result_amount = 2 +/datum/chemical_reaction/antiparasitic + name = "Helmizole" + id = "helmizole" + result = /singleton/reagent/antiparasitic + required_reagents = list(/singleton/reagent/dylovene = 1, /singleton/reagent/fluvectionem = 1, /singleton/reagent/leporazine = 1) + result_amount = 2 + /datum/chemical_reaction/cetahydramine name = "Cetahydramine" id = "cetahydramine" diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 125cf586c26..7b01cc56a6f 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -294,7 +294,25 @@ reagents_to_add = list(/singleton/reagent/iron = 5, /singleton/reagent/sugar = 10) /obj/item/reagent_containers/pill/antidexafen - name = "15u antidexafen" + name = "15u Antidexafen" desc = "Common cold mediciation. Safe for babies!" icon_state = "pill4" reagents_to_add = list(/singleton/reagent/antidexafen = 10, /singleton/reagent/drink/lemonjuice = 5, /singleton/reagent/nutriment/mint = REM*0.2) + +/obj/item/reagent_containers/pill/antiparasitic + name = "5u Helmizole" + desc = "An antiparasitic used to treat worms." + icon_state = "pill11" + reagents_to_add = list(/singleton/reagent/antiparasitic = 5) + +/obj/item/reagent_containers/pill/asinodryl + name = "10u Asinodryl" + desc = "An antiemetic which prevents vomiting." + icon_state = "pill20" + reagents_to_add = list(/singleton/reagent/asinodryl = 10) + +/obj/item/reagent_containers/pill/steramycin + name = "5u Steramycin" + desc = "A prophylactic antibiotic that kills infections before they start." + icon_state = "pill8" + reagents_to_add = list(/singleton/reagent/steramycin = 5) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 4303d542b52..5ffc04e73ce 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -441,3 +441,13 @@ . = ..() mode = SYRINGE_INJECT update_icon() + +/obj/item/reagent_containers/syringe/antiparasitic + name = "Syringe (helmizole)" + desc = "Contains an antiparasitic medication." + reagents_to_add = list(/singleton/reagent/antiparasitic = 10) + +/obj/item/reagent_containers/syringe/antiparasitic/Initialize() + . = ..() + mode = SYRINGE_INJECT + update_icon() diff --git a/html/changelogs/kermit-bioweapons.yml b/html/changelogs/kermit-bioweapons.yml new file mode 100644 index 00000000000..8e98df6369e --- /dev/null +++ b/html/changelogs/kermit-bioweapons.yml @@ -0,0 +1,15 @@ +author: kermit +delete-after: True + +changes: + - rscadd: "Added a Chemical, Biological & Radiological Weapons tab on the Traitor Uplink" + - rscadd: "Adds a 2 different parasitic worm kits: Nerve Flukes (3TC) which are non-lethal, incapacitating; Heart Flukes (5TC) which are lethal if left untreated." + - rscadd: "Adds Helmizole (1u Dylovene, 1u Fluvectionem, 1u Leporazine) which is used to treat parasitic infections (does not treat k'ois mycosis parasites). 2x syringes spawn in the Medications Cabinet. ODing will make the parasite drug resistant, forcing surgical extraction." + - rscadd: "Garlic(juice/sauce) also has weak antiparasitic properties. Only enough to slow progression." + - rscadd: "Adds Greimorian Eggs (4TC) which are planted on the ground on-purchase." + - rscadd: "Adds a Dirty Bomb (4TC). It functions like a plastic explosive but irradiates the room it detonates in for ~10 minutes. It has a minimum timer of 5 minutes. This is alongside a Radiation Suit Kit (1TC)" + - rscadd: "Adds a Syringe Gun Kit (3TC) to the CBR tab with the components for 3 darts." + - tweak: "The Random Toxin Kit is under the new CBR tab." + - tweak: "Pill bottle naming consistency." + - tweak: "Asinodryl now works properly. In addition to actually preventing vomiting, it now prevents dizziness (screen wobbling) and confusion (random step direction)." + - tweak: "Updated the warehouse/strange crate spawns to include more recently added medical items/drugs (coagzolug, helmizole, pill bottles of x, stabiliser harnesses)." diff --git a/icons/obj/organs/organs.dmi b/icons/obj/organs/organs.dmi index 93dc02275e0afbda0cd750d4273747b2034f71ef..475f1f9f9c37e9774b725b56ad9aa8843024981b 100644 GIT binary patch literal 11293 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 a1@%kVm)4ak-pR$zPDbl_tyJk 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 diff --git a/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm b/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm index 131e332df30..d2a81522f20 100644 --- a/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm +++ b/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm @@ -19311,6 +19311,8 @@ /obj/item/storage/pill_bottle/dylovene, /obj/item/storage/pill_bottle/dermaline, /obj/item/storage/pill_bottle/bicaridine, +/obj/item/reagent_containers/syringe/antiparasitic, +/obj/item/reagent_containers/syringe/antiparasitic, /obj/item/reagent_containers/glass/bottle/antitoxin, /turf/simulated/floor/tiled/white, /area/medical/gen_treatment)