a5296e434c
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
107 lines
4.3 KiB
Plaintext
Executable File
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
|