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
🆑
add: Added a new virus symptom
add: A new chem that prevents viruses from being naturaly cured
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>
This commit is contained in:
TymSha
2026-06-22 03:23:50 +02:00
committed by GitHub
co-authored by MrMelbert ATH1909
parent ec49d09b13
commit 4e2585e477
6 changed files with 49 additions and 1 deletions
+2
View File
@@ -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"
+1
View File
@@ -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,
+1 -1
View File
@@ -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)))
@@ -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
@@ -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
@@ -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