From 97665d4e54e09b146d74ec57828218fc97b18fc8 Mon Sep 17 00:00:00 2001 From: Charlotte <98856144+orthography@users.noreply.github.com> Date: Tue, 23 May 2023 14:03:15 -0700 Subject: [PATCH] Adds Hereditary Manifold Sickness, a Chronic Illness Quirk (#75035) ## About The Pull Request Adds a new quirk called Chronic Illness. It provides a -12 score as it's a pretty life-altering quirk, but could give way to interesting RP. - Hereditary Manifold Sickness (HMS) can not be cured, it can only be delayed and treated using a new unmakable vaccine called "Sansufentanyl". You spawn with 6 pills and are able to order crates containing 12 more from cargo as it's proprietary to Interdyne. - HMS has 5 stages total. Stage 1 does nothing Stage 2 gives minor effects Stage 3 becomes debilitating Stage 4 is a danger zone. Upon reaching Stage 5, there are 4 possibilities, 1 is a recovery back to stage 1, and the other 3 are deaths which I won't explain here to avoid ruining it. (read the code I guess.) This also adds a new traitor objective to infect someone with HMS. - [x] Correcting the chronic aspect. - [x] Add traitor objective. - [x] Tweaking for fairness. ## Why It's Good For The Game HMS is a new quirk that gives a much more hardcore junky or tumor playstyle. Neglecting HMS can mean the end of your shift. it's not something you want to mess with. It puts a reliance on cargo rather than medical for a quirk and gives a use case for money. (price may be tweaked still). I think it'd be interesting to see if people will start mugging or robbing the vault more to get their life-saving medication. ## Changelog :cl: add: Interdyne has released a new medication to treat those who are in the wrong timeline! add: Interdyne has also realized this is VERY profitable! They've begun arming their operatives with an autoinjector. /:cl: --------- Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com> --- .../signals/signals_mob/signals_mob_living.dm | 3 + code/__DEFINES/diseases.dm | 3 + code/datums/diseases/_disease.dm | 20 ++- code/datums/diseases/chronic_illness.dm | 91 ++++++++++ code/datums/quirks/negative_quirks.dm | 17 ++ code/game/data_huds.dm | 2 + .../items/devices/scanners/health_analyzer.dm | 48 ++++++ code/game/objects/items/storage/medkit.dm | 8 + .../antagonists/traitor/objectives/infect.dm | 160 ++++++++++++++++++ code/modules/cargo/packs/medical.dm | 6 + .../food_and_drinks/machinery/smartfridge.dm | 1 + .../chemistry/reagents/medicine_reagents.dm | 18 ++ .../reagents/reagent_containers/pill.dm | 6 + code/modules/vending/medical.dm | 1 + icons/mob/huds/hud.dmi | Bin 9740 -> 9142 bytes tgstation.dme | 2 + 16 files changed, 379 insertions(+), 7 deletions(-) create mode 100644 code/datums/diseases/chronic_illness.dm create mode 100644 code/modules/antagonists/traitor/objectives/infect.dm 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 58069a3152fee44c88d5b0e45363c7a4a680a724..dc0c73510e46b33ca0ed036b3d186c37d3d8346d 100644 GIT binary patch literal 9142 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 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"