Files
kiwistation/code/modules/surgery/organs/liver.dm
T
XDTM a5296e434c Makes undeads and androids have no metabolism (#44846)
About The Pull Request

Added two new traits, TRAIT_NOMETABOLISM and TRAIT_TOXIMMUNE. Does what it says on the tin, making livers not process reagents at all (except liverless reagents) and gives immunity to toxin damage. Species with NOMETABOLISM spawn with no liver (NOLIVER is now redundant and has been removed). This trait also prevents liver failure damage, for obvious reasons.

These traits have been given by default to androids (artificial, they were already immune to chemical healing anyway), zombies (who have their own regeneration) and skeletons (milk still works).

Other changes:

    Species' handle_reagents proc now fires before checking for metabolization, so species can process chems even when liverless.
    Removed the calcium healer trait, making it into a species handle_reagents check for each affected species (skeletons, plasmamen, bone golems). Skeletons now also heal burn damage from milk, since it's one of the few forms of healing they have available.

Note:
These traits should logically be applied to plasmamen and golems, but i intentionally left them out for now since it would be a significant balance shift, and there should be a proper alternative way of healing them first.
Why It's Good For The Game

Balances the significant benefits of being undead with a significant negative: being immune to chemical healing. Since zombies don't really rely on it and androids were already heal-immune, this mostly affects liches, and i believe it should be fine: considering that the main point of the spell is the resurrection mechanism, the space, gas, pierce, and heat/cold immunity they also gain should be counterbalanced by having a harder time recovering from injuries.

There is also a silver lining to having this trait: poison immunity. Effectively this is a buff to androids and zombies, the latter especially because they can no longer process mutation toxins. While this tactic is creative, it also trivializes a very expensive investment of TC. I might still add a liverless way to apply mutation toxins later on, but zombies shouldn't be effectively one-shot by a syringe gun.
Changelog

cl
add: Androids, skeletons and zombies no longer metabolize reagents. As such they no longer benefit from healing reagents, nor are affected by poisons and toxins.
add: These species are now also immune to any other form of toxin damage.
tweak: Milk now also heals burn damage for skeletons.
/cl
2019-07-15 09:07:26 +12:00

107 lines
4.3 KiB
Plaintext
Executable File

#define LIVER_DEFAULT_HEALTH 100 //amount of damage required for liver failure
#define LIVER_DEFAULT_TOX_TOLERANCE 3 //amount of toxins the liver can filter out
#define LIVER_DEFAULT_TOX_LETHALITY 0.01 //lower values lower how harmful toxins are to the liver
/obj/item/organ/liver
name = "liver"
icon_state = "liver"
w_class = WEIGHT_CLASS_NORMAL
zone = BODY_ZONE_CHEST
slot = ORGAN_SLOT_LIVER
desc = "Pairing suggestion: chianti and fava beans."
var/alcohol_tolerance = ALCOHOL_RATE//affects how much damage the liver takes from alcohol
var/toxTolerance = LIVER_DEFAULT_TOX_TOLERANCE//maximum amount of toxins the liver can just shrug off
var/toxLethality = LIVER_DEFAULT_TOX_LETHALITY//affects how much damage toxins do to the liver
var/filterToxins = TRUE //whether to filter toxins
maxHealth = LIVER_DEFAULT_HEALTH
Unique_Failure_Msg = "<span class='danger'>Subject is suffering from liver failure: Apply Corazone and begin a liver transplant immediately!</span>"
#define HAS_SILENT_TOXIN 0 //don't provide a feedback message if this is the only toxin present
#define HAS_NO_TOXIN 1
#define HAS_PAINFUL_TOXIN 2
/obj/item/organ/liver/on_life()
if(HAS_TRAIT(owner, TRAIT_NOMETABOLISM))
return
var/mob/living/carbon/C = owner
..() //perform general on_life()
if(istype(C))
if(!failing)//can't process reagents with a failing liver
var/provide_pain_message = HAS_NO_TOXIN
if(filterToxins && !HAS_TRAIT(owner, TRAIT_TOXINLOVER))
//handle liver toxin filtration
for(var/datum/reagent/toxin/T in C.reagents.reagent_list)
var/thisamount = C.reagents.get_reagent_amount(T.type)
if (thisamount && thisamount <= toxTolerance)
C.reagents.remove_reagent(T.type, 1)
else
damage += (thisamount*toxLethality)
if(provide_pain_message != HAS_PAINFUL_TOXIN)
provide_pain_message = T.silent_toxin ? HAS_SILENT_TOXIN : HAS_PAINFUL_TOXIN
//metabolize reagents
C.reagents.metabolize(C, can_overdose=TRUE)
if(provide_pain_message && damage > 10 && prob(damage/3))//the higher the damage the higher the probability
to_chat(C, "<span class='warning'>You feel a dull pain in your abdomen.</span>")
if(damage > maxHealth)//cap liver damage
damage = maxHealth
#undef HAS_SILENT_TOXIN
#undef HAS_NO_TOXIN
#undef HAS_PAINFUL_TOXIN
/obj/item/organ/liver/prepare_eat()
var/obj/S = ..()
S.reagents.add_reagent(/datum/reagent/iron, 5)
return S
/obj/item/organ/liver/fly
name = "insectoid liver"
icon_state = "liver-x" //xenomorph liver? It's just a black liver so it fits.
desc = "A mutant liver designed to handle the unique diet of a flyperson."
alcohol_tolerance = 0.007 //flies eat vomit, so a lower alcohol tolerance is perfect!
/obj/item/organ/liver/plasmaman
name = "reagent processing crystal"
icon_state = "liver-p"
desc = "A large crystal that is somehow capable of metabolizing chemicals, these are found in plasmamen."
/obj/item/organ/liver/alien
name = "alien liver" // doesnt matter for actual aliens because they dont take toxin damage
icon_state = "liver-x" // Same sprite as fly-person liver.
desc = "A liver that used to belong to a killer alien, who knows what it used to eat."
toxLethality = LIVER_DEFAULT_TOX_LETHALITY * 2.5 // rejects its owner early after too much punishment
toxTolerance = 15 // complete toxin immunity like xenos have would be too powerful
/obj/item/organ/liver/cybernetic
name = "cybernetic liver"
icon_state = "liver-c"
desc = "An electronic device designed to mimic the functions of a human liver. Handles toxins slightly better than an organic liver."
synthetic = TRUE
maxHealth = 110
toxTolerance = 3.3
toxLethality = 0.009
/obj/item/organ/liver/cybernetic/upgraded
name = "upgraded cybernetic liver"
icon_state = "liver-c-u"
desc = "An upgraded version of the cybernetic liver, designed to improve further upon organic livers. It is resistant to alcohol poisoning and is very robust at filtering toxins."
alcohol_tolerance = 0.001
maxHealth = 200 //double the health of a normal liver
toxTolerance = 15 //can shrug off up to 15u of toxins
toxLethality = 0.008 //20% less damage than a normal liver
/obj/item/organ/liver/cybernetic/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
switch(severity)
if(1)
damage+=100
if(2)
damage+=50