From 4e2585e477fda0c4eb5d6775c876f27f15262bdb Mon Sep 17 00:00:00 2001 From: TymSha <146993255+TymSha@users.noreply.github.com> Date: Mon, 22 Jun 2026 04:23:50 +0300 Subject: [PATCH] Adds a new healing symptom for virology and an immunosupressant chemical (#96305) ## About The Pull Request Adds a new virology symptom: Agressive Healing - The virus provides a healing effect, scaling with the severity of the virus, always. However despite being a positive symptom it has a severity of 1, meaning that unless something is done about it your positive virus will eventualy be killed by your immune system. It also provides medium stat boosts and decreases the stelth value of the virus. Also adds a new chem, ImmunoSilence, which prevents viruses from being cured naturaly while it is being metabolised. It is made from ammonia and diphenhydramine. Suggestions for better flavour and more balanced numbers welcome. ## Why It's Good For The Game It is a symptom that allows for pretty interesting gameplay, as it can both just work as a stat boost for other symptoms at the cost of having to use immunosupressing medicine (as alternatively tour virus will die faster, especialy if it is positive), and/or alternatively provide strong healing at the cost of having to endure with some negative symptoms. The new chem is meant to synergise with this symptom but can be obviously used for other goals. ## Changelog :cl: add: Added a new virus symptom add: A new chem that prevents viruses from being naturaly cured /:cl: --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com> --- code/__DEFINES/traits/declarations.dm | 2 ++ code/_globalvars/traits/_traits.dm | 1 + code/datums/diseases/_disease.dm | 2 +- code/datums/diseases/advance/symptoms/heal.dm | 28 +++++++++++++++++++ .../chemistry/reagents/medicine_reagents.dm | 11 ++++++++ .../reagents/chemistry/recipes/medicine.dm | 6 ++++ 6 files changed, 49 insertions(+), 1 deletion(-) diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 2177f016f90..ed2c96c3f0d 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -196,6 +196,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_VIRUS_RESISTANCE "virus_resistance" /// Causes viruses, infected burns, and parasites to spread more effectively and faster, like an inverse of the above. #define TRAIT_IMMUNODEFICIENCY "immunodeficiency" +/// Prevents viruses from curing naturaly +#define TRAIT_NO_SELF_CURE "noselfcure" #define TRAIT_GENELESS "geneless" #define TRAIT_PIERCEIMMUNE "pierce_immunity" #define TRAIT_NODISMEMBER "dismember_immunity" diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 8e5e17d2ee1..0fd52473870 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -422,6 +422,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_NEVER_WOUNDED" = TRAIT_NEVER_WOUNDED, "TRAIT_NICE_SHOT" = TRAIT_NICE_SHOT, "TRAIT_NIGHT_VISION" = TRAIT_NIGHT_VISION, + "TRAIT_NO_SELF_CURE" = TRAIT_NO_SELF_CURE, "TRAIT_NOBLOOD" = TRAIT_NOBLOOD, "TRAIT_NOBREATH" = TRAIT_NOBREATH, "TRAIT_NOCRITDAMAGE" = TRAIT_NOCRITDAMAGE, diff --git a/code/datums/diseases/_disease.dm b/code/datums/diseases/_disease.dm index 62f545e6ee3..7db7ebdd8c6 100644 --- a/code/datums/diseases/_disease.dm +++ b/code/datums/diseases/_disease.dm @@ -155,7 +155,7 @@ if(SPT_PROB(stage_prob * slowdown * bad_immune, seconds_per_tick)) update_stage(min(stage + 1, max_stages)) - if(!(disease_flags & CHRONIC) && disease_flags & CURABLE && bypasses_immunity != TRUE) + if(!(disease_flags & CHRONIC) && disease_flags & CURABLE && bypasses_immunity != TRUE && !HAS_TRAIT(affected_mob, TRAIT_NO_SELF_CURE)) switch(severity) if(DISEASE_SEVERITY_POSITIVE) if(slowdown < 1 || (!(HAS_TRAIT(affected_mob, TRAIT_NOHUNGER)) && (affected_mob.satiety < DISEASE_SATIETY_THRESHOLD || affected_mob.nutrition < NUTRITION_LEVEL_STARVING))) diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm index 29fd91542e8..3caa3d0fe49 100644 --- a/code/datums/diseases/advance/symptoms/heal.dm +++ b/code/datums/diseases/advance/symptoms/heal.dm @@ -610,3 +610,31 @@ /datum/symptom/heal/radiation/can_generate_randomly() return ..() && !HAS_TRAIT(SSstation, STATION_TRAIT_RADIOACTIVE_NEBULA) // Because people can never really suffer enough + +/datum/symptom/heal/aggressive_healing + name = "Aggressive Healing" + desc = "The virus heals damaged tissues in a way that appears threatening to the immune system." + severity = 1 + stealth = -4 + resistance = 3 + stage_speed = 3 + transmittable = 2 + level = 4 + base_message_chance = 0 + symptom_delay_min = 1 + symptom_delay_max = 1 + symptom_cure = null + power = 2 + + threshold_descs = list( + "Severity > 1" = "For each point of severity above 1, the healing provided by the virus increases.", + ) + ///Increases the healing effect (if active) of the virus by this amount for each severity level above 1 + var/severity_heal_bonus = 0.25 + +/datum/symptom/heal/aggressive_healing/CanHeal(datum/disease/advance/our_disease) + return power + our_disease.totalSeverity() * severity_heal_bonus + +/datum/symptom/heal/aggressive_healing/Heal(mob/living/carbon/carbon_host, datum/disease/advance/our_disease, actual_power) + carbon_host.heal_overall_damage(actual_power, actual_power, required_bodytype = healable_bodytypes) + return TRUE diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 89e74b81a32..205000f0ff0 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -2020,3 +2020,14 @@ if(affected_mob.losebreath >= 1) affected_mob.losebreath -= 1 * metabolization_ratio * seconds_per_tick return UPDATE_MOB_HEALTH + +/datum/reagent/medicine/immunosilence + name = "ImmunoSilence" + description = "Prevents viruses from being naturally cured." + metabolization_rate = 0.25 * REAGENTS_METABOLISM + metabolized_traits = list(TRAIT_NO_SELF_CURE) + chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + ph = 5.5 + color = "#C8A5DC" + taste_description = "plastic" + randomized_spawns = REAGENT_SPAWN_ALL_RANDOM_SPAWNS diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm index 6ec8cf3a1f0..a0e1c53e0ce 100644 --- a/code/modules/reagents/chemistry/recipes/medicine.dm +++ b/code/modules/reagents/chemistry/recipes/medicine.dm @@ -438,3 +438,9 @@ results = list(/datum/reagent/medicine/naloxone = 4) required_reagents = list(/datum/reagent/medicine/morphine = 1, /datum/reagent/hydrogen_peroxide = 1, /datum/reagent/bromine = 1, /datum/reagent/consumable/ethanol = 1) reaction_tags = REACTION_TAG_EASY | REACTION_TAG_HEALING | REACTION_TAG_OTHER + +/datum/chemical_reaction/medicine/immunosilence + results = list(/datum/reagent/medicine/immunosilence = 1) + required_reagents = list(/datum/reagent/medicine/diphenhydramine = 1, /datum/reagent/ammonia = 1) + reaction_tags = REACTION_TAG_EASY +