Reagents are substances which comprise solution and which can react to create new Reagents.

Their definition consists of: type: The component name. Should always be reagent. id: Unique id for this reagent. Used in reactions and other locations to identify the reagents. For example Iodine or WeldingFuel. They are PascalCase. name: Id with spaces for displaying in tooltips. E.g. iodine and welding fuel. parent: What reagent to inherit properties from. Used for things like BaseDrink. desc: A human friendly description of the chemical. color: Hex color of the reagent. Used for mixing and chemical display in containers. spritePath: A sprite specifying the icon used for the reagent, starting from Textures/Objects/Consumable/Drinks. physicalDesc: Vague desscription potentially useful when identifying it. boilingPoint: Temperature in Celsius, at which reagent goes from liquid into gas. meltingPoint: Temperature in Celsius, at which reagent goes from solid into liquid. metabolisms: A dict of MetabolismGroup->List<ReagentEffect> to apply when the reagent is consumed.

Example of reagent definition

- type: reagent
  id: Lemonade
  name: lemonade
  parent: BaseDrink
  desc: Drink using lemon juice, water, and a sweetener such as cane sugar or honey.
  physicalDesc: tart
  color: "#FFFF00"
  spritePath: lemonadeglass.rsi
      - !type:SatiateThirst
        factor: 2

For more info see: SS14 Content: Reagent folder or SS14 Content:ReagentPrototype.cs

Reagent Effects & Conditions

ReagentEffects are described in C#. For example, SatiateThirst and HealthChange. This allows you to easily reuse code that has similar effects. Many things use reagent effects–metabolisms, plant metabolisms, and reagent entity reactions (touch/injection-based effects). ReagentEffects also have a prob field, which is the chance that the effect will run from 0 to 1. The reason these are so generalized is because many things that need the data can use them.

ReagentEffectConditions are attached to each effect in the metabolizer list. By default, there are none; so they’re always ran. However, you can easily add custom behavior to determine when an effect will actually occur. For instance, ReagentThreshold allows you to very easily define overdose behavior. Here’s Methamphetamine:

      - !type:HealthChange
            Poison: 2.5
      - !type:HealthChange
        - !type:ReagentThreshold
          min: 10
            Poison: 4 # this is added to the base damage of the meth.
      - !type:MovespeedModifier
        walkSpeedModifier: 1.3
        sprintSpeedModifier: 1.3

This means that the overdose behavior HealthChange only occurs when there is at minimum 10u in your system. It has two different groups, ‘Poison’ and ‘Narcotic’. These are both metabolized by the heart, generally.