Immunodeficiency Quirk 2: Localhost Boogaloo (#90937)

## About The Pull Request
Adds a new quirk, (-10 cost) called Immunodeficiency, and a new inverse
chem of spaceacillin, sepsisillin. Both cause the same effect. (Well,
the quirk version is permanent obviously) When affected by either of
these, viruses will progress faster and you will catch them more easily,
burns will necrotize faster and be harder to sanitize, and alien embryos
will gestate more quickly. These effects can be mitigated with
spaceacillin, but even while under the effects of spaceacillin, you'll
only be about on par with or slightly worse than a normal person, as
opposed to the blanket protection that spaceacillin normally provides.

Owners of the quirk will be provided with a bottle of 3 low dose (1
minute duration) spaceacillin pills to mitigate their condition, and a
sterile medical mask(the noninternals kind) for style and flavor.
## Why It's Good For The Game
More unique quirk options = good. Reasons to actually ask RP and
chemists for things = good. More inverse chems = good.
Also, the sepsisillin was too good an inverse name and effect to resist.
Sepsisillin also has some interesting use cases.

Example: Need a guy dead and work in medical? you could just stab him,
or... you offer him a coffee. Inside said coffee is 10u of sepsisillin
and the deadliest blood transmitted virus (to minimize collateral
damage) you can cook up. Watch as he drinks said coffee, feels fine, and
then 2 minutes later suddenly starts attempting to un-dock from his
lungs.

## Testing Images:

Spawns with mask and pills: 
 
![Screenshot 2025-04-30
181323](https://github.com/user-attachments/assets/6c8f3cd7-27f5-431c-adab-cfacf43b57c8)
![Screenshot 2025-04-30
180418](https://github.com/user-attachments/assets/ba3306ee-9d34-4d8a-9460-0bdc64b284d8)

Monkeyhuman with Fungal TB after 1 minute.
![Screenshot 2025-04-30
182920](https://github.com/user-attachments/assets/c3227d72-20a2-4ff2-87ae-5685c359170b)

Monkeyhuman with Fungal TB and Immunodeficiency after 1 minute.
![Screenshot 2025-04-30
182933](https://github.com/user-attachments/assets/08138108-143e-41d3-ac78-201bf62ff396)

## Changelog


🆑
add: Adds new immunodeficiency negative quirk, and sepsisillin, the
inverse of spaceacillin. Both have an immune system weakening effect,
mitigate-able with spaceacillin.
/🆑

---------

Co-authored-by: ThrowawayUseless <notarealemail@emailservice.fake>
This commit is contained in:
throwawayuseless
2025-05-15 16:10:26 -04:00
committed by Roxy
co-authored by ThrowawayUseless
parent ae794f83a3
commit e6ca30d009
13 changed files with 67 additions and 7 deletions
+2
View File
@@ -137,6 +137,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define TRAIT_UNHUSKABLE "trait_unhuskable"
/// Reduces the chance viruses will spread to this mob, and if the mob has a virus, slows its advancement
#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"
#define TRAIT_GENELESS "geneless"
#define TRAIT_PIERCEIMMUNE "pierce_immunity"
#define TRAIT_NODISMEMBER "dismember_immunity"
+1
View File
@@ -338,6 +338,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_IGNORING_GRAVITY" = TRAIT_IGNORING_GRAVITY,
"TRAIT_ILLITERATE" = TRAIT_ILLITERATE,
"TRAIT_IMMOBILIZED" = TRAIT_IMMOBILIZED,
"TRAIT_IMMUNODEFICIENCY" = TRAIT_IMMUNODEFICIENCY,
"TRAIT_INCAPACITATED" = TRAIT_INCAPACITATED,
"TRAIT_INTROVERT" = TRAIT_INTROVERT,
"TRAIT_INVISIBLE_MAN" = TRAIT_INVISIBLE_MAN,
+2 -2
View File
@@ -68,7 +68,7 @@
if(ishuman(src))
var/mob/living/carbon/human/infecting_human = src
if(HAS_TRAIT(infecting_human, TRAIT_VIRUS_RESISTANCE) && prob(75))
if(HAS_TRAIT(infecting_human, TRAIT_VIRUS_RESISTANCE) && !HAS_TRAIT(infecting_human, TRAIT_IMMUNODEFICIENCY) && prob(75))
return
switch(target_zone)
@@ -190,7 +190,7 @@
if(losebreath >= 1)
return FALSE
// Spaceacillin for infection resistance
if(HAS_TRAIT(src, TRAIT_VIRUS_RESISTANCE) && prob(75))
if(HAS_TRAIT(src, TRAIT_VIRUS_RESISTANCE) && !HAS_TRAIT(src, TRAIT_IMMUNODEFICIENCY) && prob(75))
return FALSE
// Bio check for head AND mask
// Meaning if we're masked up and wearing a dome, we are very likely never getting sick
+4 -3
View File
@@ -119,6 +119,7 @@
var/slowdown = HAS_TRAIT(affected_mob, TRAIT_VIRUS_RESISTANCE) ? 0.5 : 1 // spaceacillin slows stage speed by 50%
var/recovery_prob = 0
var/cure_mod
var/bad_immune = HAS_TRAIT(affected_mob, TRAIT_IMMUNODEFICIENCY) ? 2 : 1
if(required_organ)
if(!has_required_infectious_organ(affected_mob, required_organ))
@@ -126,7 +127,7 @@
return FALSE
if(has_cure())
cure_mod = cure_chance
cure_mod = cure_chance / bad_immune
if(istype(src, /datum/disease/advance))
cure_mod = max(cure_chance, DISEASE_MINIMUM_CHEMICAL_CURE_CHANCE)
if(disease_flags & CHRONIC && SPT_PROB(cure_mod, seconds_per_tick))
@@ -142,7 +143,7 @@
if(stage == max_stages && stage_peaked != TRUE) //mostly a sanity check in case we manually set a virus to max stages
stage_peaked = TRUE
if(SPT_PROB(stage_prob*slowdown, seconds_per_tick))
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)
@@ -222,7 +223,7 @@
recovery_prob *= DISEASE_SLEEPING_RECOVERY_MULTIPLIER //any form of sleeping magnifies all effects a little bit
recovery_prob = clamp(recovery_prob, 0, 100)
recovery_prob = clamp(recovery_prob / bad_immune, 0, 100)
if(recovery_prob)
if(SPT_PROB(recovery_prob, seconds_per_tick))
@@ -0,0 +1,26 @@
/datum/quirk/item_quirk/immunodeficiency
name = "Immunodeficiency"
desc = "Whiether by chronic illness or genetic happenstance, your body is a 24/7 Bed and Breakfast for bacteria, viruses, and parasites of all kinds. Even with your prescribed immunity boosters, you'll fare worse than most others."
icon = FA_ICON_MASK_FACE
value = -10
mob_trait = TRAIT_IMMUNODEFICIENCY
gain_text = span_danger("Just the thought of illness makes you feverish.")
lose_text = span_notice("Your immune system miraculously reasserts itself.")
medical_record_text = "Patient is afflicted with chronic immunodeficiency."
mail_goodies = list(
/obj/item/reagent_containers/syringe/antiviral,
/obj/item/healthanalyzer/simple/disease
)
/datum/quirk/item_quirk/immunodeficiency/add_unique(client/client_source)
var/obj/item/clothing/mask/surgical/ppe = new
give_item_to_holder(ppe, list(LOCATION_MASK = ITEM_SLOT_MASK, LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS))
give_item_to_holder(
/obj/item/storage/pill_bottle/immunodeficiency,
list(
LOCATION_LPOCKET = ITEM_SLOT_LPOCKET,
LOCATION_RPOCKET = ITEM_SLOT_RPOCKET,
LOCATION_BACKPACK = ITEM_SLOT_BACKPACK,
LOCATION_HANDS = ITEM_SLOT_HANDS,
)
)
+5 -1
View File
@@ -53,7 +53,11 @@
if(HAS_TRAIT(victim, TRAIT_VIRUS_RESISTANCE))
sanitization += 0.9
if(HAS_TRAIT(victim, TRAIT_IMMUNODEFICIENCY) && !HAS_TRAIT(victim, TRAIT_VIRUS_RESISTANCE))
infestation += 0.05
sanitization = max(sanitization - 0.15, 0)
if(infestation_rate <= 0.15 && prob(50))
infestation_rate += 0.001
if(limb.current_gauze)
limb.seep_gauze(WOUND_BURN_SANITIZATION_RATE * seconds_per_tick)
@@ -190,3 +190,9 @@
desc = "A bottle containing patches of ondansetron, a drug used to treat nausea and vomiting. May cause drowsiness."
spawn_count = 5
spawn_type = /obj/item/reagent_containers/applicator/patch/ondansetron
/obj/item/storage/pill_bottle/immunodeficiency
name = "bottle of immune boosters"
desc = "Contains immune system boosters, used to manage chronic immunodeficiency."
spawn_count = 5
spawn_type = /obj/item/reagent_containers/applicator/pill/spaceacillin
@@ -70,6 +70,8 @@
slowdown *= 2 // spaceacillin doubles the time it takes to grow
if(owner.has_status_effect(/datum/status_effect/nest_sustenance))
slowdown *= 0.80 //egg gestates 20% faster if you're trapped in a nest
if(HAS_TRAIT(owner, TRAIT_IMMUNODEFICIENCY) && !HAS_TRAIT(owner, TRAIT_VIRUS_RESISTANCE))
slowdown *= 0.5 //terrible immune system = doubled parasite growth
addtimer(CALLBACK(src, PROC_REF(advance_embryo_stage)), growth_time*slowdown)
@@ -926,3 +926,12 @@ Basically, we fill the time between now and 2s from now with hands based off the
/datum/reagent/inverse/rezadone/on_mob_end_metabolize(mob/living/carbon/affected_mob)
. = ..()
affected_mob.cure_trauma_type(/datum/brain_trauma/mild/phobia/fish, resilience = TRAUMA_RESILIENCE_ABSOLUTE)
/datum/reagent/inverse/spaceacillin
name = "Sepsisillin"
description = "Weakens the immune system, acclerating the effects of bacteria, viruses, and parasites while negating the effects of immunity boosters." //it's like spacacillin but evil muahaha
color = "#002f06" //Gross green-black. Seemed fitting.
ph = 8.1
metabolization_rate = 0.1 * REM
tox_damage = 0
metabolized_traits = list(TRAIT_IMMUNODEFICIENCY)
@@ -251,6 +251,8 @@
metabolization_rate = 0.1 * REAGENTS_METABOLISM
ph = 8.1
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
inverse_chem_val = 0.3
inverse_chem = /datum/reagent/inverse/spaceacillin
added_traits = list(TRAIT_VIRUS_RESISTANCE)
//Goon Chems. Ported mainly from Goonstation. Easily mixable (or not so easily) and provide a variety of effects.
@@ -183,6 +183,12 @@
list_reagents = list(/datum/reagent/medicine/morphine = 30)
rename_with_volume = TRUE
/obj/item/reagent_containers/applicator/pill/spaceacillin
name = "spaceacillin pill"
desc = "Increases resistance to viruses, bacteria, and parasites."
icon_state = "pill17"
list_reagents = list(/datum/reagent/medicine/spaceacillin = 1.5) //1 minute since 0.05 every tick.
/obj/item/reagent_containers/applicator/pill/stimulant
name = "stimulant pill"
desc = "Often taken by overworked employees, athletes, and the inebriated. You'll snap to attention immediately!"
+1 -1
View File
@@ -29,7 +29,7 @@
return
// spaceacillin has a 75% chance to block infection
if(HAS_TRAIT(target, TRAIT_VIRUS_RESISTANCE) && prob(75))
if(HAS_TRAIT(target, TRAIT_VIRUS_RESISTANCE) && !HAS_TRAIT(target, TRAIT_IMMUNODEFICIENCY) && prob(75))
return
var/obj/item/bodypart/actual_limb = target.get_bodypart(def_zone)
+1
View File
@@ -1958,6 +1958,7 @@
#include "code\datums\quirks\negative_quirks\hemiplegic.dm"
#include "code\datums\quirks\negative_quirks\hypersensitive.dm"
#include "code\datums\quirks\negative_quirks\illiterate.dm"
#include "code\datums\quirks\negative_quirks\immunodeficiency.dm"
#include "code\datums\quirks\negative_quirks\indebted.dm"
#include "code\datums\quirks\negative_quirks\insanity.dm"
#include "code\datums\quirks\negative_quirks\light_drinker.dm"