Metabolism
Metabolism in GS14 is very different to metabolism in SS13. In SS13, reagents simply had a proc on_mob_life
that was called to determine what should happen. Our system is much more modular and allows for things like different organs metabolizing different reagents, and species-specific metabolisms, as well as overdoses or underdoses without any hassle.
Organs & Metabolizers
In SS14, organs are entities with a MechanismComponent
(mechanism just being a catch-all term for ‘organ’.) Organs also have other components that give them decoupled behavior; StomachComponent
, CirculatorComponent
, RespiratorComponent
, and so on. However, the important one here is MetabolizerComponent.
Metabolizers (organs with that component) define a list of ‘metabolism groups’ that they metabolize. ‘Metabolism groups’ are things like ‘Narcotic’, or ‘Food’, or ‘Medicine’. This allows us to define how organs metabolize different chemicals.
This is on OrganHumanStomach
. Meaning, the stomach processes any reagents with a Food
metabolism, or a Drink
metabolism:
- type: Metabolizer
# mm yummy
maxReagents: 3
metabolizerTypes: [Human]
groups:
- id: Food
- id: Drink
Metabolizers can only process so many reagents at once, to avoid the common situation in SS13 where stacking a ton of poisons on one entity would damage it significantly more than just one concentrated poison.
Metabolism rate is defined on the organ. Generally, its once per second, and chems are taken from the bloodstream.
Species
Defining how different species react to different chemicals is quite easy. Metabolizers are tagged with ‘organ types’, which is essentially a species marker, but localized to the organ (so if you swap out your heart for a gorilla heart, you’ll metabolize medicines/poisons/etc in the same way a gorilla does). Then, you can use the OrganType
condition to check. Here’s an example in the codebase, of theobromine (a chemical found in chocolate):
metabolisms:
Poison:
effects:
- !type:HealthChange
conditions:
- !type:ReagentThreshold
min: 1
- !type:OrganType
type: Animal # Applying damage to the mobs with lower metabolism capabilities
damage:
types:
Poison: 4
As the comment suggests, to humans this chemical does nothing, but to animals (things with animal organs) it can be deadly.