diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm index c4695a2d3b7..d165cf300b5 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm @@ -163,3 +163,6 @@ /// From /obj/structure/geyser/attackby() : (obj/structure/geyser/geyser) #define COMSIG_LIVING_DISCOVERED_GEYSER "living_discovered_geyser" + +/// For when someone is injected with the EHMS virus from /datum/traitor_objective_category/infect +#define COMSIG_AFTER_INJECT "after_inject" diff --git a/code/__DEFINES/diseases.dm b/code/__DEFINES/diseases.dm index b84b8cc39f0..d439d6c70fd 100644 --- a/code/__DEFINES/diseases.dm +++ b/code/__DEFINES/diseases.dm @@ -10,6 +10,7 @@ #define CURABLE (1<<0) #define CAN_CARRY (1<<1) #define CAN_RESIST (1<<2) +#define CHRONIC (1<<3) //Spread Flags #define DISEASE_SPREAD_SPECIAL (1<<0) @@ -34,3 +35,5 @@ #define DISEASE_SEVERITY_DANGEROUS "Dangerous" /// Diseases that can quickly kill an unprepared victim (fungal tb, gbs) #define DISEASE_SEVERITY_BIOHAZARD "BIOHAZARD" +/// Diseases that are uncurable (hms) +#define DISEASE_SEVERITY_UNCURABLE "Uncurable" diff --git a/code/datums/diseases/_disease.dm b/code/datums/diseases/_disease.dm index 9c164a0ab3d..67e039d8237 100644 --- a/code/datums/diseases/_disease.dm +++ b/code/datums/diseases/_disease.dm @@ -67,12 +67,16 @@ var/slowdown = affected_mob.reagents.has_reagent(/datum/reagent/medicine/spaceacillin) ? 0.5 : 1 // spaceacillin slows stage speed by 50% if(has_cure()) - if(SPT_PROB(cure_chance, seconds_per_tick)) - update_stage(max(stage - 1, 1)) - - if(disease_flags & CURABLE && SPT_PROB(cure_chance, seconds_per_tick)) - cure() - return FALSE + if(disease_flags & CHRONIC && SPT_PROB(cure_chance, seconds_per_tick)) + src.stage = 1 + to_chat(affected_mob, span_notice("Your chronic illness is alleviated a little, though it can't be cured!")) + return + else + if(SPT_PROB(cure_chance, seconds_per_tick)) + update_stage(max(stage - 1, 1)) + if(disease_flags & CURABLE && SPT_PROB(cure_chance, seconds_per_tick)) + cure() + return FALSE else if(SPT_PROB(stage_prob*slowdown, seconds_per_tick)) update_stage(min(stage + 1, max_stages)) @@ -83,7 +87,7 @@ stage = new_stage /datum/disease/proc/has_cure() - if(!(disease_flags & CURABLE)) + if(!(disease_flags & CURABLE | CHRONIC)) return FALSE . = cures.len @@ -191,6 +195,8 @@ //Use this to compare severities /proc/get_disease_severity_value(severity) switch(severity) + if(DISEASE_SEVERITY_UNCURABLE) + return 0 if(DISEASE_SEVERITY_POSITIVE) return 1 if(DISEASE_SEVERITY_NONTHREAT) diff --git a/code/datums/diseases/chronic_illness.dm b/code/datums/diseases/chronic_illness.dm new file mode 100644 index 00000000000..0d3b0eb6bfa --- /dev/null +++ b/code/datums/diseases/chronic_illness.dm @@ -0,0 +1,91 @@ +/datum/disease/chronic_illness + name = "Hereditary Manifold Sickness" + max_stages = 5 + spread_text = "Unspread Illness" + spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS + disease_flags = CHRONIC + process_dead = TRUE + stage_prob = 0.25 + cure_text = "Sansufentanyl" + cures = list(/datum/reagent/medicine/sansufentanyl) + infectivity = 0 + agent = "Quantum Entanglement" + viable_mobtypes = list(/mob/living/carbon/human) + desc = "A disease discovered in an Interdyne laboratory caused by subjection to timesteam correction technology." + severity = DISEASE_SEVERITY_UNCURABLE + var/heartswap = TRUE + +/datum/disease/chronic_illness/stage_act(seconds_per_tick, times_fired) + . = ..() + if(!.) + return + + switch(stage) + if(1) + carrier = FALSE // Go fuck yourself + if(2) + if(SPT_PROB(0.5, seconds_per_tick)) + to_chat(affected_mob, span_warning("You feel dizzy.")) + affected_mob.adjust_confusion(6 SECONDS) + if(SPT_PROB(0.5, seconds_per_tick)) + to_chat(affected_mob, span_notice("You look at your hand. Your vision blurs.")) + affected_mob.set_eye_blur_if_lower(10 SECONDS) + if(3) + if(SPT_PROB(0.5, seconds_per_tick)) + to_chat(affected_mob, span_danger("You feel a very sharp pain in your chest!")) + if(prob(45)) + affected_mob.vomit(20,TRUE) + if(SPT_PROB(0.5, seconds_per_tick)) + to_chat(affected_mob, span_userdanger("[pick("You feel your heart slowing...", "You relax and slow your heartbeat.")]")) + affected_mob.adjustStaminaLoss(70, FALSE) + if(SPT_PROB(1, seconds_per_tick)) + to_chat(affected_mob, span_danger("You feel a buzzing in your brain.")) + SEND_SOUND(affected_mob, sound('sound/weapons/flash_ring.ogg')) + if(SPT_PROB(0.5, seconds_per_tick)) + affected_mob.adjustBruteLoss(1) + if(4) + if(prob(30)) + affected_mob.playsound_local(affected_mob, 'sound/effects/singlebeat.ogg', 100, FALSE, use_reverb = FALSE) + if(SPT_PROB(1, seconds_per_tick)) + to_chat(affected_mob, span_danger("You feel a gruesome pain in your chest!")) + if(prob(75)) + affected_mob.vomit(45,TRUE) + if(SPT_PROB(1, seconds_per_tick)) + affected_mob.adjustStaminaLoss(100, FALSE) + affected_mob.visible_message(span_warning("[affected_mob] collapses!")) + if(prob(30)) + to_chat(affected_mob, span_danger("Your vision blurs as you faint!")) + affected_mob.AdjustSleeping(10) + if(SPT_PROB(0.5, seconds_per_tick)) + to_chat(affected_mob, span_danger("[pick("You feel as though your atoms are accelerating in place.", "You feel like you're being torn apart!")]")) + affected_mob.emote("scream") + affected_mob.adjustBruteLoss(10) + if(5) + switch(rand(1,4)) + if(1) + to_chat(affected_mob, span_notice("You feel your atoms begin to realign. You're safe. For now.")) + stage = 1 + if(2) + to_chat(affected_mob, span_boldwarning("There is no place for you in this timeline.")) + affected_mob.adjustStaminaLoss(100, forced = TRUE) + playsound(affected_mob.loc, 'sound/magic/repulse.ogg', 100, FALSE) + affected_mob.emote("scream") + for(var/mob/living/viewers in viewers(3, affected_mob.loc)) + viewers.flash_act() + new /obj/effect/decal/cleanable/plasma(affected_mob.loc) + new /obj/effect/decal/cleanable/ash(affected_mob.loc) + affected_mob.visible_message(span_warning("[affected_mob] is erased from the timeline!"), span_userdanger("You are ripped from the timeline!")) + qdel(affected_mob) + if(3) + affected_mob.visible_message(span_warning("[affected_mob] is torn apart!"), span_userdanger("Your atoms accelerate into criticality!")) + affected_mob.gib() + if(4) + if(heartswap == TRUE) + heartswap = FALSE + if(affected_mob.stat == CONSCIOUS) + affected_mob.visible_message(span_danger("[affected_mob] clutches at [affected_mob.p_their()] chest as if [affected_mob.p_their()] heart is stopping!"), \ + span_userdanger("You feel a horrible pain as your heart is replaced with one from another dimension!")) + var/obj/item/organ/internal/heart/cursed/cheart = new /obj/item/organ/internal/heart/cursed() + cheart.replace_into(affected_mob) + playsound(affected_mob, 'sound/hallucinations/far_noise.ogg', 50, 1) + stage = 3 diff --git a/code/datums/quirks/negative_quirks.dm b/code/datums/quirks/negative_quirks.dm index f90dba0b290..65228c0b7e9 100644 --- a/code/datums/quirks/negative_quirks.dm +++ b/code/datums/quirks/negative_quirks.dm @@ -897,6 +897,23 @@ return quirk_holder.add_mood_event("wrong_cigs", /datum/mood_event/wrong_brand) +/datum/quirk/item_quirk/chronic_illness + name = "Chronic Illness" + desc = "You have a chronic illness that requires constant medication to keep under control." + icon = FA_ICON_DISEASE + value = -12 + gain_text = span_danger("You feel a bit off today.") + lose_text = span_notice("You feel a bit better today.") + medical_record_text = "Patient has a chronic illness that requires constant medication to keep under control." + hardcore_value = 12 + mail_goodies = list(/obj/item/storage/pill_bottle/sansufentanyl) + +/datum/quirk/item_quirk/chronic_illness/add_unique(client/client_source) + var/datum/disease/chronic_illness/hms = new /datum/disease/chronic_illness() + quirk_holder.ForceContractDisease(hms) + give_item_to_holder(/obj/item/storage/pill_bottle/sansufentanyl, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK),flavour_text = "You've been provided with medication to help manage your condition. Take it regularly to avoid complications.") + give_item_to_holder(/obj/item/healthanalyzer/disease, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK)) + /datum/quirk/unstable name = "Unstable" desc = "Due to past troubles, you are unable to recover your sanity if you lose it. Be very careful managing your mood!" diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index a0d6414770d..4830d5ba56c 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -210,6 +210,8 @@ Medical HUD! Basic mode needs suit sensors on. holder.icon_state = "huddead" else switch(virus_threat) + if(DISEASE_SEVERITY_UNCURABLE) + holder.icon_state = "hudill6" if(DISEASE_SEVERITY_BIOHAZARD) holder.icon_state = "hudill5" if(DISEASE_SEVERITY_DANGEROUS) diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index be6e19d7210..8c579eb1a75 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -547,6 +547,54 @@ woundscan(user, patient, src) +/obj/item/healthanalyzer/disease + name = "disease state analyzer" + icon_state = "adv_spectrometer" + desc = "A disease status analyzer to determine the state of an infection to encourage responsible medication consumption." + + +/proc/diseasescan(mob/user, mob/living/carbon/patient, obj/item/healthanalyzer/wound/scanner) + if(!istype(patient) || user.incapacitated()) + return + + var/render_list = "" + for(var/thing in patient.diseases) + var/datum/disease/D = thing + if(!(D.visibility_flags & HIDDEN_SCANNER)) + render_list += "Warning: [D.form] detected\n\ +
Name: [D.name].\nType: [D.spread_text].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure_text]
\ +
" + + if(render_list == "") + if(istype(scanner)) + // Only emit the cheerful scanner message if this scan came from a scanner + playsound(scanner, 'sound/machines/ping.ogg', 50, FALSE) + to_chat(user, span_notice("\The [scanner] makes a happy ping and briefly displays a smiley face with several exclamation points! It's really excited to report that [patient] has no diseases!")) + else + to_chat(user, "No diseases detected in subject.") + else + to_chat(user, examine_block(jointext(render_list, "")), type = MESSAGE_TYPE_INFO) + +/obj/item/healthanalyzer/disease/attack_self(mob/user) + playsound(src, 'sound/machines/ping.ogg', 50, FALSE) + var/list/encouragements = list("encourages you to take your medication", "briefly displays a spinning cartoon heart", "reasures you about your condition", \ + "reminds you that everyone is doing their best", "displays a message wishing you well", "displays a message saying how proud it is that you're taking care of yourself", "formally absolves you of all your sins") + to_chat(user, span_notice("\The [src] makes a happy ping and [pick(encouragements)]!")) + +/obj/item/healthanalyzer/disease/attack(mob/living/carbon/patient, mob/living/carbon/human/user) + if(!user.can_read(src) || user.is_blind()) + return + + add_fingerprint(user) + user.visible_message(span_notice("[user] scans [patient] for diseases."), span_notice("You scan [patient] for diseases.")) + + if(!istype(user)) + playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE) + to_chat(user, span_notice("\The [src] makes a sad buzz and briefly displays a frowny face, indicating it can't scan [patient].")) + return + + diseasescan(user, user, src) + #undef SCANMODE_HEALTH #undef SCANMODE_WOUND #undef SCANMODE_COUNT diff --git a/code/game/objects/items/storage/medkit.dm b/code/game/objects/items/storage/medkit.dm index 71664151a5c..f51b8ac025f 100644 --- a/code/game/objects/items/storage/medkit.dm +++ b/code/game/objects/items/storage/medkit.dm @@ -502,6 +502,14 @@ for(var/i in 1 to 5) new /obj/item/reagent_containers/pill/stimulant(src) +/obj/item/storage/pill_bottle/sansufentanyl + name = "bottle of experimental medication" + desc = "A bottle of pills developed by Interdyne Pharmaceuticals. They're used to treat Hereditary Manifold Sickness." + +/obj/item/storage/pill_bottle/sansufentanyl/PopulateContents() + for(var/i in 1 to 6) + new /obj/item/reagent_containers/pill/sansufentanyl(src) + /obj/item/storage/pill_bottle/mining name = "bottle of patches" desc = "Contains patches used to treat brute and burn damage." diff --git a/code/modules/antagonists/traitor/objectives/infect.dm b/code/modules/antagonists/traitor/objectives/infect.dm new file mode 100644 index 00000000000..1f07e38bfa3 --- /dev/null +++ b/code/modules/antagonists/traitor/objectives/infect.dm @@ -0,0 +1,160 @@ +/datum/traitor_objective_category/infect + name = "Infect with Disease" + objectives = list( + /datum/traitor_objective/target_player/infect = 1, + ) + +/datum/traitor_objective/target_player/infect + name = "Infect %TARGET% the %JOB TITLE%" + description = "Infect your target with the experimental Hereditary Manifold Sickness." + + abstract_type = /datum/traitor_objective/target_player + + progression_minimum = 20 MINUTES + + progression_reward = list(8 MINUTES, 14 MINUTES) + telecrystal_reward = list(1, 2) + + + var/heads_of_staff = FALSE + duplicate_type = /datum/traitor_objective/target_player + + var/obj/item/reagent_containers/hypospray/medipen/manifoldinjector/ehms + +/datum/traitor_objective/target_player/infect/supported_configuration_changes() + . = ..() + . += NAMEOF(src, objective_period) + . += NAMEOF(src, maximum_objectives_in_period) + +/datum/traitor_objective/target_player/infect/generate_ui_buttons(mob/user) + var/list/buttons = list() + if(!ehms) + buttons += add_ui_button("", "Pressing this will materialize a EHMS autoinjector into your hand, which you must inject into the target to succeed.", "paper-plane", "summon_pen") + return buttons + +/datum/traitor_objective/target_player/infect/ui_perform_action(mob/living/user, action) + . = ..() + switch(action) + if("summon_pen") + if(ehms) + return + ehms = new(user.drop_location()) + user.put_in_hands(ehms) + ehms.balloon_alert(user, "the injector materializes in your hand") + RegisterSignal(ehms, COMSIG_AFTER_INJECT, PROC_REF(on_injected)) + AddComponent(/datum/component/traitor_objective_register, ehms, \ + succeed_signals = null, \ + fail_signals = list(COMSIG_PARENT_QDELETING), \ + penalty = TRUE) + +/datum/traitor_objective/target_player/infect/proc/on_injected(datum/source, mob/living/user, mob/living/injected) + SIGNAL_HANDLER + if(injected != target) + fail_objective() + return + if(injected == target) + succeed_objective() + return + +/datum/traitor_objective/target_player/infect/generate_objective(datum/mind/generating_for, list/possible_duplicates) + + var/list/already_targeting = list() //List of minds we're already targeting. The possible_duplicates is a list of objectives, so let's not mix things + for(var/datum/objective/task as anything in handler.primary_objectives) + if(!istype(task.target, /datum/mind)) + continue + already_targeting += task.target //Removing primary objective kill targets from the list + + var/parent_type = type2parent(type) + //don't roll head of staff types if you haven't completed the normal version + if(heads_of_staff && !handler.get_completion_count(parent_type)) + // Locked if they don't have any of the risky bug room objective completed + return FALSE + + var/list/possible_targets = list() + var/try_target_late_joiners = FALSE + if(generating_for.late_joiner) + try_target_late_joiners = TRUE + for(var/datum/mind/possible_target as anything in get_crewmember_minds()) + if(possible_target in already_targeting) + continue + var/target_area = get_area(possible_target.current) + if(possible_target == generating_for) + continue + if(!ishuman(possible_target.current)) + continue + if(possible_target.current.stat == DEAD) + continue + var/datum/antagonist/traitor/traitor = possible_target.has_antag_datum(/datum/antagonist/traitor) + if(traitor && traitor.uplink_handler.telecrystals >= 0) + continue + if(!HAS_TRAIT(SSstation, STATION_TRAIT_LATE_ARRIVALS) && istype(target_area, /area/shuttle/arrival)) + continue + //removes heads of staff from being targets from non heads of staff assassinations, and vice versa + if(heads_of_staff) + if(!(possible_target.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)) + continue + else + if((possible_target.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_COMMAND)) + continue + possible_targets += possible_target + for(var/datum/traitor_objective/target_player/objective as anything in possible_duplicates) + possible_targets -= objective.target + if(try_target_late_joiners) + var/list/all_possible_targets = possible_targets.Copy() + for(var/datum/mind/possible_target as anything in all_possible_targets) + if(!possible_target.late_joiner) + possible_targets -= possible_target + if(!possible_targets.len) + possible_targets = all_possible_targets + special_target_filter(possible_targets) + if(!possible_targets.len) + return FALSE //MISSION FAILED, WE'LL GET EM NEXT TIME + + var/datum/mind/target_mind = pick(possible_targets) + target = target_mind.current + replace_in_name("%TARGET%", target.real_name) + replace_in_name("%JOB TITLE%", target_mind.assigned_role.title) + RegisterSignal(target, COMSIG_LIVING_DEATH, PROC_REF(on_target_death)) + return TRUE + +/datum/traitor_objective/target_player/infect/ungenerate_objective() + UnregisterSignal(target, COMSIG_LIVING_DEATH) + target = null + +///proc for checking for special states that invalidate a target +/datum/traitor_objective/target_player/infect/proc/special_target_filter(list/possible_targets) + return + +/datum/traitor_objective/target_player/infect/proc/on_target_qdeleted() + SIGNAL_HANDLER + if(objective_state == OBJECTIVE_STATE_INACTIVE) + //don't take an objective target of someone who is already obliterated + fail_objective() + + +/datum/traitor_objective/target_player/infect/proc/on_target_death() + SIGNAL_HANDLER + if(objective_state == OBJECTIVE_STATE_INACTIVE) + //don't take an objective target of someone who is already dead + fail_objective() + + +/obj/item/reagent_containers/hypospray/medipen/manifoldinjector + name = "EHMS autoinjector" + desc = "Experimental Hereditary Manifold Sickness autoinjector." + icon_state = "tbpen" + inhand_icon_state = "tbpen" + base_icon_state = "tbpen" + var/used = 0 + volume = 30 + amount_per_transfer_from_this = 30 + list_reagents = list(/datum/reagent/medicine/sansufentanyl = 20) + +/obj/item/reagent_containers/hypospray/medipen/manifoldinjector/attack(mob/living/affected_mob, mob/living/carbon/human/user) + inject(affected_mob, user) + if(used == 0) + var/datum/disease/chronic_illness/hms = new /datum/disease/chronic_illness() + affected_mob.ForceContractDisease(hms) + used = 1 + SEND_SIGNAL(src, COMSIG_AFTER_INJECT, user, affected_mob) + diff --git a/code/modules/cargo/packs/medical.dm b/code/modules/cargo/packs/medical.dm index 0255cfdab92..e7b807e4af7 100644 --- a/code/modules/cargo/packs/medical.dm +++ b/code/modules/cargo/packs/medical.dm @@ -112,6 +112,12 @@ for(var/i in 1 to 10) var/item = pick(contains) new item(C) +/datum/supply_pack/medical/experimentalmedicine + name = "Experimental Medicine Crate" + desc = "A crate containing the medication required for living with Hereditary Manifold Sickness, Sansufentanyl." + cost = CARGO_CRATE_VALUE * 2 + contains = list(/obj/item/storage/pill_bottle/sansufentanyl = 2) + crate_name = "experimental medicine crate" /datum/supply_pack/medical/surgery name = "Surgical Supplies Crate" diff --git a/code/modules/food_and_drinks/machinery/smartfridge.dm b/code/modules/food_and_drinks/machinery/smartfridge.dm index b40de78e743..09664d34dd4 100644 --- a/code/modules/food_and_drinks/machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/machinery/smartfridge.dm @@ -662,6 +662,7 @@ /obj/machinery/smartfridge/chemistry/virology/preloaded initial_contents = list( + /obj/item/storage/pill_bottle/sansufentanyl = 2, /obj/item/reagent_containers/syringe/antiviral = 4, /obj/item/reagent_containers/cup/bottle/cold = 1, /obj/item/reagent_containers/cup/bottle/flu_virion = 1, diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index e97c5be9c08..e5f5e18383a 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -120,6 +120,24 @@ . = TRUE ..() +/datum/reagent/medicine/sansufentanyl + name = "Sansufentanyl" + description = "Temporary side effects include - nausea, dizziness, impaired motor coordination." + color = "#07e4d1" + ph = 6.2 + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + +/datum/reagent/medicine/sansufentanyl/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) + affected_mob.adjust_confusion_up_to(3 SECONDS * REM * seconds_per_tick, 5 SECONDS) + affected_mob.adjust_dizzy_up_to(6 SECONDS * REM * seconds_per_tick, 12 SECONDS) + affected_mob.adjustStaminaLoss(1 * REM * seconds_per_tick) + + if(SPT_PROB(10, seconds_per_tick)) + to_chat(affected_mob, "You feel confused and disoriented.") + if(prob(30)) + SEND_SOUND(affected_mob, sound('sound/weapons/flash_ring.ogg')) + ..() + /datum/reagent/medicine/cryoxadone name = "Cryoxadone" description = "A chemical mixture with almost magical healing powers. Its main limitation is that the patient's body temperature must be under 270K for it to metabolise correctly." diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index fc16a3b60ca..2a2cc7aeb0a 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -143,6 +143,12 @@ list_reagents = list(/datum/reagent/medicine/mannitol = 14) rename_with_volume = TRUE +/obj/item/reagent_containers/pill/sansufentanyl + name = "sansufentanyl pill" + desc = "Used to treat Hereditary Manifold Sickness. Temporary side effects include - nausea, dizziness, impaired motor coordination." + icon_state = "pill19" + list_reagents = list(/datum/reagent/medicine/sansufentanyl = 5) + //Lower quantity mannitol pills (50u pills heal 250 brain damage, 5u pills heal 25) /obj/item/reagent_containers/pill/mannitol/braintumor desc = "Used to treat symptoms for brain tumors." diff --git a/code/modules/vending/medical.dm b/code/modules/vending/medical.dm index 635b31137e7..ae24b3dcc9c 100644 --- a/code/modules/vending/medical.dm +++ b/code/modules/vending/medical.dm @@ -82,6 +82,7 @@ premium = list( /obj/item/reagent_containers/medigel/synthflesh = 2, /obj/item/storage/pill_bottle/psicodine = 2, + /obj/item/storage/pill_bottle/sansufentanyl = 1, ) default_price = 50 extra_price = 100 diff --git a/icons/mob/huds/hud.dmi b/icons/mob/huds/hud.dmi index 58069a3152f..dc0c73510e4 100644 Binary files a/icons/mob/huds/hud.dmi and b/icons/mob/huds/hud.dmi differ diff --git a/tgstation.dme b/tgstation.dme index ae56fc9566e..55ef862b85e 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1086,6 +1086,7 @@ #include "code\datums\diseases\anxiety.dm" #include "code\datums\diseases\beesease.dm" #include "code\datums\diseases\brainrot.dm" +#include "code\datums\diseases\chronic_illness.dm" #include "code\datums\diseases\cold.dm" #include "code\datums\diseases\cold9.dm" #include "code\datums\diseases\death_sandwich_poisoning.dm" @@ -2699,6 +2700,7 @@ #include "code\modules\antagonists\traitor\objectives\destroy_item.dm" #include "code\modules\antagonists\traitor\objectives\eyesnatching.dm" #include "code\modules\antagonists\traitor\objectives\hack_comm_console.dm" +#include "code\modules\antagonists\traitor\objectives\infect.dm" #include "code\modules\antagonists\traitor\objectives\kidnapping.dm" #include "code\modules\antagonists\traitor\objectives\kill_pet.dm" #include "code\modules\antagonists\traitor\objectives\locate_weakpoint.dm"