From ff1af35afba1c494efff277acb6c7d79865ad403 Mon Sep 17 00:00:00 2001 From: pathetic meowmeow Date: Thu, 22 Jan 2026 20:50:33 -0500 Subject: [PATCH] Replace metabolism groups with metabolism stages (#42172) * Replace metabolism groups with metabolism stages * return to return * killed * yaml linted * yaml linted again * margarine * bugfixes and balancing tweaks --- .../Body/Systems/MetabolizerSystem.cs | 6 - .../Controls/GuideReagentEmbed.xaml.cs | 27 +- .../Medical/Cryogenics/CryoPodWindow.xaml.cs | 2 +- .../Body/Components/MetabolizerComponent.cs | 98 --- .../Body/Systems/BloodstreamSystem.cs | 6 +- .../Body/Systems/RespiratorSystem.cs | 8 +- .../Commands/DumpReagentGuideText.cs | 2 +- .../MetabolizerTypesEntityConditionSystem.cs | 21 - Content.Server/GuideGenerator/ReagentEntry.cs | 3 +- .../Components/InnerBodyAnomalyComponent.cs | 1 - Content.Shared/Bed/BedSystem.cs | 4 +- .../Body/Components/BloodstreamComponent.cs | 13 + .../Body/Components/StomachComponent.cs | 106 +-- .../Prototypes/MetabolismGroupPrototype.cs | 17 - .../Prototypes/MetabolizerTypePrototype.cs | 17 - Content.Shared/Body/Systems/LungSystem.cs | 1 - .../Body/Systems/SharedMetabolizerSystem.cs | 20 - Content.Shared/Body/Systems/StomachSystem.cs | 149 +--- .../Reagent/ReagentMetabolismsSerializer.cs | 31 + .../Chemistry/Reagent/ReagentPrototype.cs | 37 +- ...> MetabolizerTypeEntityConditionSystem.cs} | 18 +- ...AdjustReagentsByGroupEntityEffectSystem.cs | 52 -- .../Metabolism/MetabolismStagePrototype.cs | 16 + .../Metabolism/MetabolizerComponent.cs | 148 ++++ .../Metabolism}/MetabolizerSystem.cs | 222 +++--- .../Metabolism/MetabolizerTypePrototype.cs | 16 + .../EntitySystems/IngestionSystem.API.cs | 4 +- .../EntitySystems/IngestionSystem.cs | 9 +- Content.Shared/Nutrition/IngestionEvents.cs | 3 +- .../Locale/en-US/guidebook/chemistry/core.ftl | 4 +- .../en-US/metabolism/metabolism-groups.ftl | 8 - .../en-US/metabolism/metabolism-stages.ftl | 6 + .../nutrition/components/ingestion-system.ftl | 13 +- Resources/Prototypes/Body/Species/diona.yml | 9 +- Resources/Prototypes/Body/Species/slime.yml | 10 +- Resources/Prototypes/Body/base_organs.yml | 20 +- .../Chemistry/metabolism_groups.yml | 34 - .../Chemistry/metabolism_stages.yml | 23 + .../Entities/Mobs/NPCs/behonker.yml | 4 +- .../Entities/Mobs/Player/dragon.yml | 4 +- .../Reagents/Consumable/Drink/alcohol.yml | 688 ++++++------------ .../Reagents/Consumable/Drink/base_drink.yml | 11 +- .../Reagents/Consumable/Drink/drinks.yml | 94 +-- .../Reagents/Consumable/Drink/juice.yml | 14 +- .../Reagents/Consumable/Drink/soda.yml | 22 +- .../Reagents/Consumable/Food/condiments.yml | 6 +- .../Reagents/Consumable/Food/food.yml | 8 +- .../Reagents/Consumable/Food/ingredients.yml | 142 ++-- Resources/Prototypes/Reagents/biological.yml | 32 +- Resources/Prototypes/Reagents/botany.yml | 20 +- Resources/Prototypes/Reagents/chemicals.yml | 18 +- Resources/Prototypes/Reagents/cleaning.yml | 10 +- Resources/Prototypes/Reagents/elements.yml | 22 +- Resources/Prototypes/Reagents/fun.yml | 26 +- Resources/Prototypes/Reagents/gases.yml | 28 +- Resources/Prototypes/Reagents/medicine.yml | 104 +-- Resources/Prototypes/Reagents/narcotics.yml | 34 +- Resources/Prototypes/Reagents/pyrotechnic.yml | 12 +- Resources/Prototypes/Reagents/toxins.yml | 64 +- 59 files changed, 1040 insertions(+), 1507 deletions(-) delete mode 100644 Content.Client/Body/Systems/MetabolizerSystem.cs delete mode 100644 Content.Server/Body/Components/MetabolizerComponent.cs delete mode 100644 Content.Server/EntityConditions/Conditions/MetabolizerTypesEntityConditionSystem.cs delete mode 100644 Content.Shared/Body/Prototypes/MetabolismGroupPrototype.cs delete mode 100644 Content.Shared/Body/Prototypes/MetabolizerTypePrototype.cs delete mode 100644 Content.Shared/Body/Systems/SharedMetabolizerSystem.cs create mode 100644 Content.Shared/Chemistry/Reagent/ReagentMetabolismsSerializer.cs rename Content.Shared/EntityConditions/Conditions/Body/{MetabolizerTypeEntityCondition.cs => MetabolizerTypeEntityConditionSystem.cs} (58%) delete mode 100644 Content.Shared/EntityEffects/Effects/Solution/AdjustReagentsByGroupEntityEffectSystem.cs create mode 100644 Content.Shared/Metabolism/MetabolismStagePrototype.cs create mode 100644 Content.Shared/Metabolism/MetabolizerComponent.cs rename {Content.Server/Body/Systems => Content.Shared/Metabolism}/MetabolizerSystem.cs (55%) create mode 100644 Content.Shared/Metabolism/MetabolizerTypePrototype.cs delete mode 100644 Resources/Locale/en-US/metabolism/metabolism-groups.ftl create mode 100644 Resources/Locale/en-US/metabolism/metabolism-stages.ftl delete mode 100644 Resources/Prototypes/Chemistry/metabolism_groups.yml create mode 100644 Resources/Prototypes/Chemistry/metabolism_stages.yml diff --git a/Content.Client/Body/Systems/MetabolizerSystem.cs b/Content.Client/Body/Systems/MetabolizerSystem.cs deleted file mode 100644 index 2a0ba4606d..0000000000 --- a/Content.Client/Body/Systems/MetabolizerSystem.cs +++ /dev/null @@ -1,6 +0,0 @@ -using Content.Shared.Body.Systems; - -namespace Content.Client.Body.Systems; - -/// -public sealed class MetabolizerSystem : SharedMetabolizerSystem; diff --git a/Content.Client/Guidebook/Controls/GuideReagentEmbed.xaml.cs b/Content.Client/Guidebook/Controls/GuideReagentEmbed.xaml.cs index dbfd36daea..0879bfda58 100644 --- a/Content.Client/Guidebook/Controls/GuideReagentEmbed.xaml.cs +++ b/Content.Client/Guidebook/Controls/GuideReagentEmbed.xaml.cs @@ -4,11 +4,12 @@ using Content.Client.Chemistry.EntitySystems; using Content.Client.Guidebook.Richtext; using Content.Client.Message; using Content.Client.UserInterface.ControlExtensions; -using Content.Shared.Body.Prototypes; using Content.Shared.CCVar; using Content.Shared.Chemistry.Reaction; using Content.Shared.Chemistry.Reagent; using Content.Shared.Contraband; +using Content.Shared.Localizations; +using Content.Shared.Metabolism; using JetBrains.Annotations; using Robust.Client.AutoGenerated; using Robust.Client.Graphics; @@ -132,17 +133,18 @@ public sealed partial class GuideReagentEmbed : BoxContainer, IDocumentTag, ISea #region Effects if (_chemistryGuideData.ReagentGuideRegistry.TryGetValue(reagent.ID, out var guideEntryRegistry) && guideEntryRegistry.GuideEntries != null && - guideEntryRegistry.GuideEntries.Values.Any(pair => pair.EffectDescriptions.Any())) + guideEntryRegistry.GuideEntries.Values.Any(pair => pair.EffectDescriptions.Any() || pair.Metabolites?.Any() == true)) { EffectsDescriptionContainer.Children.Clear(); - foreach (var (group, effect) in guideEntryRegistry.GuideEntries) + foreach (var (stage, effect) in guideEntryRegistry.GuideEntries) { - if (!effect.EffectDescriptions.Any()) + var hasMetabolites = effect.Metabolites?.Any() == true; + if (!effect.EffectDescriptions.Any() && !hasMetabolites) continue; var groupLabel = new RichTextLabel(); - groupLabel.SetMarkup(Loc.GetString("guidebook-reagent-effects-metabolism-group-rate", - ("group", _prototype.Index(group).LocalizedName), ("rate", effect.MetabolismRate))); + groupLabel.SetMarkup(Loc.GetString("guidebook-reagent-effects-metabolism-stage-rate", + ("stage", _prototype.Index(stage).LocalizedName), ("rate", effect.MetabolismRate))); var descriptionLabel = new RichTextLabel { Margin = new Thickness(25, 0, 10, 0) @@ -155,9 +157,20 @@ public sealed partial class GuideReagentEmbed : BoxContainer, IDocumentTag, ISea { descMsg.AddMarkupOrThrow(effectString); i++; - if (i < descriptionsCount) + if (i < descriptionsCount || hasMetabolites) descMsg.PushNewline(); } + if (hasMetabolites) + { + var metabolites = new List(); + foreach (var (metabolite, ratio) in effect.Metabolites!) + { + metabolites.Add(Loc.GetString("guidebook-reagent-effects-metabolite-item", ("rate", (double)ratio), ("reagent", _prototype.Index(metabolite).LocalizedName))); + } + metabolites.Sort(); + + descMsg.AddMarkupOrThrow(Loc.GetString("guidebook-reagent-effects-metabolites", ("items", ContentLocalizationManager.FormatList(metabolites)))); + } descriptionLabel.SetMessage(descMsg); EffectsDescriptionContainer.AddChild(groupLabel); diff --git a/Content.Client/Medical/Cryogenics/CryoPodWindow.xaml.cs b/Content.Client/Medical/Cryogenics/CryoPodWindow.xaml.cs index ad5ab9d9ea..f1d0e038f4 100644 --- a/Content.Client/Medical/Cryogenics/CryoPodWindow.xaml.cs +++ b/Content.Client/Medical/Cryogenics/CryoPodWindow.xaml.cs @@ -216,7 +216,7 @@ public sealed partial class CryoPodWindow : FancyWindow float? result = null; - foreach (var (_, metabolism) in reagentProto.Metabolisms) + foreach (var (_, metabolism) in reagentProto.Metabolisms.Metabolisms) { foreach (var effect in metabolism.Effects) { diff --git a/Content.Server/Body/Components/MetabolizerComponent.cs b/Content.Server/Body/Components/MetabolizerComponent.cs deleted file mode 100644 index 2401db5aac..0000000000 --- a/Content.Server/Body/Components/MetabolizerComponent.cs +++ /dev/null @@ -1,98 +0,0 @@ -using Content.Shared.Body.Components; -using Content.Server.Body.Systems; -using Content.Shared.Body.Prototypes; -using Content.Shared.FixedPoint; -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; - -namespace Content.Server.Body.Components -{ - /// - /// Handles metabolizing various reagents with given effects. - /// - [RegisterComponent, AutoGenerateComponentPause, Access(typeof(MetabolizerSystem))] - public sealed partial class MetabolizerComponent : Component - { - /// - /// The next time that reagents will be metabolized. - /// - [DataField, AutoPausedField] - public TimeSpan NextUpdate; - - /// - /// How often to metabolize reagents. - /// - /// - [DataField] - public TimeSpan UpdateInterval = TimeSpan.FromSeconds(1); - - /// - /// Multiplier applied to for adjusting based on metabolic rate multiplier. - /// - [DataField] - public float UpdateIntervalMultiplier = 1f; - - /// - /// Adjusted update interval based off of the multiplier value. - /// - [ViewVariables] - public TimeSpan AdjustedUpdateInterval => UpdateInterval * UpdateIntervalMultiplier; - - /// - /// From which solution will this metabolizer attempt to metabolize chemicals - /// - [DataField("solution")] - public string SolutionName = BloodstreamComponent.DefaultBloodSolutionName; - - /// - /// Does this component use a solution on it's parent entity (the body) or itself - /// - /// - /// Most things will use the parent entity (bloodstream). - /// - [DataField] - public bool SolutionOnBody = true; - - /// - /// List of metabolizer types that this organ is. ex. Human, Slime, Felinid, w/e. - /// - [DataField] - [Access(typeof(MetabolizerSystem), Other = AccessPermissions.ReadExecute)] // FIXME Friends - public HashSet>? MetabolizerTypes; - - /// - /// Should this metabolizer remove chemicals that have no metabolisms defined? - /// As a stop-gap, basically. - /// - [DataField] - public bool RemoveEmpty; - - /// - /// How many reagents can this metabolizer process at once? - /// Used to nerf 'stacked poisons' where having 5+ different poisons in a syringe, even at low - /// quantity, would be muuuuch better than just one poison acting. - /// - [DataField("maxReagents")] - public int MaxReagentsProcessable = 3; - - /// - /// A list of metabolism groups that this metabolizer will act on, in order of precedence. - /// - [DataField("groups")] - public List? MetabolismGroups; - } - - /// - /// Contains data about how a metabolizer will metabolize a single group. - /// This allows metabolizers to remove certain groups much faster, or not at all. - /// - [DataDefinition] - public sealed partial class MetabolismGroupEntry - { - [DataField(required: true)] - public ProtoId Id; - - [DataField("rateModifier")] - public FixedPoint2 MetabolismRateModifier = 1.0; - } -} diff --git a/Content.Server/Body/Systems/BloodstreamSystem.cs b/Content.Server/Body/Systems/BloodstreamSystem.cs index b142d86fad..ff6ee5ceec 100644 --- a/Content.Server/Body/Systems/BloodstreamSystem.cs +++ b/Content.Server/Body/Systems/BloodstreamSystem.cs @@ -25,10 +25,14 @@ public sealed class BloodstreamSystem : SharedBloodstreamSystem out var bloodSolution) || !SolutionContainer.EnsureSolution(entity.Owner, entity.Comp.BloodTemporarySolutionName, - out var tempSolution)) + out var tempSolution) || + !SolutionContainer.EnsureSolution(entity.Owner, + entity.Comp.MetabolitesSolutionName, + out var metabolitesSolution)) return; bloodSolution.MaxVolume = entity.Comp.BloodReferenceSolution.Volume * entity.Comp.MaxVolumeModifier; + metabolitesSolution.MaxVolume = bloodSolution.MaxVolume; tempSolution.MaxVolume = entity.Comp.BleedPuddleThreshold * 4; // give some leeway, for chemstream as well entity.Comp.BloodReferenceSolution.SetReagentData(GetEntityBloodData((entity, entity.Comp))); diff --git a/Content.Server/Body/Systems/RespiratorSystem.cs b/Content.Server/Body/Systems/RespiratorSystem.cs index 4a761c518d..aad485cc7e 100644 --- a/Content.Server/Body/Systems/RespiratorSystem.cs +++ b/Content.Server/Body/Systems/RespiratorSystem.cs @@ -8,7 +8,6 @@ using Content.Shared.Atmos; using Content.Shared.Body; using Content.Shared.Body.Components; using Content.Shared.Body.Events; -using Content.Shared.Body.Prototypes; using Content.Shared.Chat; using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.EntitySystems; @@ -20,6 +19,7 @@ using Content.Shared.EntityConditions.Conditions.Body; using Content.Shared.EntityEffects; using Content.Shared.EntityEffects.Effects.Body; using Content.Shared.EntityEffects.Effects.Damage; +using Content.Shared.Metabolism; using Content.Shared.Mobs.Systems; using JetBrains.Annotations; using Robust.Shared.Prototypes; @@ -43,7 +43,7 @@ public sealed class RespiratorSystem : EntitySystem [Dependency] private readonly SharedEntityConditionsSystem _entityConditions = default!; [Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!; - private static readonly ProtoId GasId = new("Gas"); + private static readonly ProtoId RespirationStage = new("Respiration"); public override void Initialize() { @@ -277,7 +277,7 @@ public sealed class RespiratorSystem : EntitySystem if (!Resolve(lung, ref lung.Comp)) return 0; - if (lung.Comp.MetabolismGroups == null) + if (lung.Comp.Stages == null) return 0; float saturation = 0; @@ -287,7 +287,7 @@ public sealed class RespiratorSystem : EntitySystem if (reagent.Metabolisms == null) continue; - if (!reagent.Metabolisms.TryGetValue(GasId, out var entry)) + if (!reagent.Metabolisms.Metabolisms.TryGetValue(RespirationStage, out var entry)) continue; foreach (var effect in entry.Effects) diff --git a/Content.Server/Chemistry/Commands/DumpReagentGuideText.cs b/Content.Server/Chemistry/Commands/DumpReagentGuideText.cs index 58c86f058a..fc4116345f 100644 --- a/Content.Server/Chemistry/Commands/DumpReagentGuideText.cs +++ b/Content.Server/Chemistry/Commands/DumpReagentGuideText.cs @@ -35,7 +35,7 @@ public sealed class DumpReagentGuideText : LocalizedEntityCommands return; } - foreach (var entry in reagent.Metabolisms.Values) + foreach (var entry in reagent.Metabolisms.Metabolisms.Values) { foreach (var effect in entry.Effects) { diff --git a/Content.Server/EntityConditions/Conditions/MetabolizerTypesEntityConditionSystem.cs b/Content.Server/EntityConditions/Conditions/MetabolizerTypesEntityConditionSystem.cs deleted file mode 100644 index 3b4fb5292b..0000000000 --- a/Content.Server/EntityConditions/Conditions/MetabolizerTypesEntityConditionSystem.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Linq; -using Content.Server.Body.Components; -using Content.Shared.EntityConditions; -using Content.Shared.EntityConditions.Conditions.Body; - -namespace Content.Server.EntityConditions.Conditions; - -/// -/// Returns true if this entity has any of the listed metabolizer types. -/// -/// -public sealed partial class MetabolizerTypeEntityConditionSystem : EntityConditionSystem -{ - protected override void Condition(Entity entity, ref EntityConditionEvent args) - { - if (entity.Comp.MetabolizerTypes == null) - return; - - args.Result = entity.Comp.MetabolizerTypes.Overlaps(args.Condition.Type); - } -} diff --git a/Content.Server/GuideGenerator/ReagentEntry.cs b/Content.Server/GuideGenerator/ReagentEntry.cs index 59a212dbd2..4a0e104205 100644 --- a/Content.Server/GuideGenerator/ReagentEntry.cs +++ b/Content.Server/GuideGenerator/ReagentEntry.cs @@ -1,7 +1,6 @@ using System.Linq; using System.Text.Json.Serialization; using Content.Server.Body.Components; -using Content.Shared.Body.Prototypes; using Content.Shared.Chemistry.Reaction; using Content.Shared.Chemistry.Reagent; using Content.Shared.EntityEffects; @@ -43,7 +42,7 @@ public sealed class ReagentEntry Description = proto.LocalizedDescription; PhysicalDescription = proto.LocalizedPhysicalDescription; SubstanceColor = proto.SubstanceColor.ToHex(); - Metabolisms = proto.Metabolisms?.ToDictionary(x => x.Key.Id, x => x.Value); + Metabolisms = proto.Metabolisms?.Metabolisms.ToDictionary(x => x.Key.Id, x => x.Value); } } diff --git a/Content.Shared/Anomaly/Components/InnerBodyAnomalyComponent.cs b/Content.Shared/Anomaly/Components/InnerBodyAnomalyComponent.cs index dfc1d561c4..c672c52dcf 100644 --- a/Content.Shared/Anomaly/Components/InnerBodyAnomalyComponent.cs +++ b/Content.Shared/Anomaly/Components/InnerBodyAnomalyComponent.cs @@ -1,5 +1,4 @@ using Content.Shared.Anomaly.Effects; -using Content.Shared.Body.Prototypes; using Content.Shared.Humanoid.Prototypes; using Robust.Shared.Audio; using Robust.Shared.GameStates; diff --git a/Content.Shared/Bed/BedSystem.cs b/Content.Shared/Bed/BedSystem.cs index 229c3a9bed..6f62d7b34e 100644 --- a/Content.Shared/Bed/BedSystem.cs +++ b/Content.Shared/Bed/BedSystem.cs @@ -2,10 +2,10 @@ using Content.Shared.Actions; using Content.Shared.Bed.Components; using Content.Shared.Bed.Sleep; using Content.Shared.Body.Events; -using Content.Shared.Body.Systems; using Content.Shared.Buckle.Components; using Content.Shared.Damage.Systems; using Content.Shared.Emag.Systems; +using Content.Shared.Metabolism; using Content.Shared.Mobs.Systems; using Content.Shared.Power; using Content.Shared.Power.EntitySystems; @@ -20,9 +20,9 @@ public sealed class BedSystem : EntitySystem [Dependency] private readonly DamageableSystem _damageableSystem = default!; [Dependency] private readonly EmagSystem _emag = default!; [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly MetabolizerSystem _metabolizer = default!; [Dependency] private readonly MobStateSystem _mobStateSystem = default!; [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; - [Dependency] private readonly SharedMetabolizerSystem _metabolizer = default!; [Dependency] private readonly SharedPowerReceiverSystem _powerReceiver = default!; [Dependency] private readonly SleepingSystem _sleepingSystem = default!; diff --git a/Content.Shared/Body/Components/BloodstreamComponent.cs b/Content.Shared/Body/Components/BloodstreamComponent.cs index 533b486da5..e1f60f0376 100644 --- a/Content.Shared/Body/Components/BloodstreamComponent.cs +++ b/Content.Shared/Body/Components/BloodstreamComponent.cs @@ -22,6 +22,7 @@ public sealed partial class BloodstreamComponent : Component { public const string DefaultBloodSolutionName = "bloodstream"; public const string DefaultBloodTemporarySolutionName = "bloodstreamTemporary"; + public const string DefaultMetabolitesSolutionName = "metabolites"; /// /// The next time that blood level will be updated and bloodloss damage dealt. @@ -171,6 +172,12 @@ public sealed partial class BloodstreamComponent : Component [DataField] public string BloodTemporarySolutionName = DefaultBloodTemporarySolutionName; + /// + /// Name/Key that is indexed by. + /// + [DataField] + public string MetabolitesSolutionName = DefaultMetabolitesSolutionName; + /// /// Internal solution for blood storage /// @@ -185,6 +192,12 @@ public sealed partial class BloodstreamComponent : Component [ViewVariables] public Entity? TemporarySolution; + /// + /// Internal solution for metabolite storage + /// + [ViewVariables] + public Entity? MetabolitesSolution; + /// /// Alert to show when bleeding. /// diff --git a/Content.Shared/Body/Components/StomachComponent.cs b/Content.Shared/Body/Components/StomachComponent.cs index e1413de9e4..66f4674d9a 100644 --- a/Content.Shared/Body/Components/StomachComponent.cs +++ b/Content.Shared/Body/Components/StomachComponent.cs @@ -1,92 +1,28 @@ using Content.Shared.Body.Systems; using Content.Shared.Chemistry.Components; -using Content.Shared.Chemistry.Reagent; -using Content.Shared.Nutrition.EntitySystems; using Content.Shared.Whitelist; using Robust.Shared.GameStates; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; -namespace Content.Shared.Body.Components -{ - [RegisterComponent, NetworkedComponent, Access(typeof(StomachSystem))] - public sealed partial class StomachComponent : Component - { - /// - /// The next time that the stomach will try to digest its contents. - /// - [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] - public TimeSpan NextUpdate; - - /// - /// The interval at which this stomach digests its contents. - /// - [DataField] - public TimeSpan UpdateInterval = TimeSpan.FromSeconds(1); - - /// - /// Multiplier applied to for adjusting based on metabolic rate multiplier. - /// - [DataField] - public float UpdateIntervalMultiplier = 1f; - - /// - /// Adjusted update interval based off of the multiplier value. - /// - [ViewVariables] - public TimeSpan AdjustedUpdateInterval => UpdateInterval * UpdateIntervalMultiplier; - - /// - /// The solution inside of this stomach this transfers reagents to the body. - /// - [ViewVariables] - public Entity? Solution; - - /// - /// What solution should this stomach push reagents into, on the body? - /// - [DataField] - public string BodySolutionName = BloodstreamComponent.DefaultBloodSolutionName; - - /// - /// Time between reagents being ingested and them being - /// transferred to - /// - [DataField] - public TimeSpan DigestionDelay = TimeSpan.FromSeconds(20); +namespace Content.Shared.Body.Components; - /// - /// A whitelist for what special-digestible-required foods this stomach is capable of eating. - /// - [DataField] - public EntityWhitelist? SpecialDigestible = null; - - /// - /// Controls whitelist behavior. If true, this stomach can digest only food that passes the whitelist. If false, it can digest normal food and any food that passes the whitelist. - /// - [DataField] - public bool IsSpecialDigestibleExclusive = true; - - /// - /// Used to track how long each reagent has been in the stomach - /// - [ViewVariables] - public readonly List ReagentDeltas = new(); - - /// - /// Used to track quantity changes when ingesting & digesting reagents - /// - public sealed class ReagentDelta - { - public readonly ReagentQuantity ReagentQuantity; - public TimeSpan Lifetime { get; private set; } - - public ReagentDelta(ReagentQuantity reagentQuantity) - { - ReagentQuantity = reagentQuantity; - Lifetime = TimeSpan.Zero; - } - - public void Increment(TimeSpan delta) => Lifetime += delta; - } - } +[RegisterComponent, NetworkedComponent, Access(typeof(StomachSystem))] +public sealed partial class StomachComponent : Component +{ + /// + /// The solution inside of this stomach + /// + [ViewVariables] + public Entity? Solution; + + /// + /// A whitelist for what special-digestible-required foods this stomach is capable of eating. + /// + [DataField] + public EntityWhitelist? SpecialDigestible = null; + + /// + /// Controls whitelist behavior. If true, this stomach can digest only food that passes the whitelist. If false, it can digest normal food and any food that passes the whitelist. + /// + [DataField] + public bool IsSpecialDigestibleExclusive = true; } diff --git a/Content.Shared/Body/Prototypes/MetabolismGroupPrototype.cs b/Content.Shared/Body/Prototypes/MetabolismGroupPrototype.cs deleted file mode 100644 index f8e05d89c0..0000000000 --- a/Content.Shared/Body/Prototypes/MetabolismGroupPrototype.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Robust.Shared.Prototypes; - -namespace Content.Shared.Body.Prototypes -{ - [Prototype] - public sealed partial class MetabolismGroupPrototype : IPrototype - { - [IdDataField] - public string ID { get; private set; } = default!; - - [DataField("name", required: true)] - private LocId Name { get; set; } - - [ViewVariables(VVAccess.ReadOnly)] - public string LocalizedName => Loc.GetString(Name); - } -} diff --git a/Content.Shared/Body/Prototypes/MetabolizerTypePrototype.cs b/Content.Shared/Body/Prototypes/MetabolizerTypePrototype.cs deleted file mode 100644 index 8c932af677..0000000000 --- a/Content.Shared/Body/Prototypes/MetabolizerTypePrototype.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Robust.Shared.Prototypes; - -namespace Content.Shared.Body.Prototypes -{ - [Prototype] - public sealed partial class MetabolizerTypePrototype : IPrototype - { - [IdDataField] - public string ID { get; private set; } = default!; - - [DataField("name", required: true)] - private LocId Name { get; set; } - - [ViewVariables(VVAccess.ReadOnly)] - public string LocalizedName => Loc.GetString(Name); - } -} diff --git a/Content.Shared/Body/Systems/LungSystem.cs b/Content.Shared/Body/Systems/LungSystem.cs index a097a7752a..705a931102 100644 --- a/Content.Shared/Body/Systems/LungSystem.cs +++ b/Content.Shared/Body/Systems/LungSystem.cs @@ -2,7 +2,6 @@ using Content.Shared.Atmos; using Content.Shared.Atmos.Components; using Content.Shared.Atmos.EntitySystems; using Content.Shared.Body.Components; -using Content.Shared.Body.Prototypes; using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Inventory.Events; diff --git a/Content.Shared/Body/Systems/SharedMetabolizerSystem.cs b/Content.Shared/Body/Systems/SharedMetabolizerSystem.cs deleted file mode 100644 index 24ab438f6d..0000000000 --- a/Content.Shared/Body/Systems/SharedMetabolizerSystem.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Content.Shared.Body.Events; - -namespace Content.Shared.Body.Systems; - -public abstract class SharedMetabolizerSystem : EntitySystem -{ - /// - /// Updates the metabolic rate multiplier for a given entity, - /// raising both to determine what the multiplier is and to update relevant components. - /// - /// - public void UpdateMetabolicMultiplier(EntityUid uid) - { - var getEv = new GetMetabolicMultiplierEvent(); - RaiseLocalEvent(uid, ref getEv); - - var applyEv = new ApplyMetabolicMultiplierEvent(getEv.Multiplier); - RaiseLocalEvent(uid, ref applyEv); - } -} diff --git a/Content.Shared/Body/Systems/StomachSystem.cs b/Content.Shared/Body/Systems/StomachSystem.cs index ef258d3fe0..9adc79c6ea 100644 --- a/Content.Shared/Body/Systems/StomachSystem.cs +++ b/Content.Shared/Body/Systems/StomachSystem.cs @@ -1,137 +1,44 @@ using Content.Shared.Body.Components; -using Content.Shared.Body.Events; using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.Components.SolutionManager; using Content.Shared.Chemistry.EntitySystems; -using Robust.Shared.Containers; -using Robust.Shared.Timing; using Robust.Shared.Utility; -namespace Content.Shared.Body.Systems -{ - public sealed class StomachSystem : EntitySystem - { - [Dependency] private readonly IGameTiming _gameTiming = default!; - [Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!; - - public const string DefaultSolutionName = "stomach"; - - public override void Initialize() - { - SubscribeLocalEvent(OnMapInit); - SubscribeLocalEvent(OnUnpaused); - SubscribeLocalEvent(OnEntRemoved); - SubscribeLocalEvent(OnApplyMetabolicMultiplier); - } - - private void OnMapInit(Entity ent, ref MapInitEvent args) - { - ent.Comp.NextUpdate = _gameTiming.CurTime + ent.Comp.AdjustedUpdateInterval; - } - - private void OnUnpaused(Entity ent, ref EntityUnpausedEvent args) - { - ent.Comp.NextUpdate += args.PausedTime; - } - - private void OnEntRemoved(Entity ent, ref EntRemovedFromContainerMessage args) - { - // Make sure the removed entity was our contained solution - if (ent.Comp.Solution is not { } solution || args.Entity != solution.Owner) - return; - - // Cleared our cached reference to the solution entity - ent.Comp.Solution = null; - } - - public override void Update(float frameTime) - { - var query = EntityQueryEnumerator(); - while (query.MoveNext(out var uid, out var stomach, out var organ, out var sol)) - { - if (_gameTiming.CurTime < stomach.NextUpdate) - continue; +namespace Content.Shared.Body.Systems; - stomach.NextUpdate += stomach.AdjustedUpdateInterval; - - // Get our solutions - if (!_solutionContainerSystem.ResolveSolution((uid, sol), DefaultSolutionName, ref stomach.Solution, out var stomachSolution)) - continue; - - if (organ.Body is not { } body || !_solutionContainerSystem.TryGetSolution(body, stomach.BodySolutionName, out var bodySolution)) - continue; - - var transferSolution = new Solution(); - - var queue = new RemQueue(); - foreach (var delta in stomach.ReagentDeltas) - { - delta.Increment(stomach.AdjustedUpdateInterval); - if (delta.Lifetime > stomach.DigestionDelay) - { - if (stomachSolution.TryGetReagent(delta.ReagentQuantity.Reagent, out var reagent)) - { - if (reagent.Quantity > delta.ReagentQuantity.Quantity) - reagent = new(reagent.Reagent, delta.ReagentQuantity.Quantity); - - stomachSolution.RemoveReagent(reagent); - transferSolution.AddReagent(reagent); - } - - queue.Add(delta); - } - } - - foreach (var item in queue) - { - stomach.ReagentDeltas.Remove(item); - } - - _solutionContainerSystem.UpdateChemicals(stomach.Solution.Value); +public sealed class StomachSystem : EntitySystem +{ + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!; - // Transfer everything to the body solution! - _solutionContainerSystem.TryAddSolution(bodySolution.Value, transferSolution); - } - } + public const string DefaultSolutionName = "stomach"; - private void OnApplyMetabolicMultiplier(Entity ent, ref ApplyMetabolicMultiplierEvent args) - { - ent.Comp.UpdateIntervalMultiplier = args.Multiplier; - } + public bool CanTransferSolution( + EntityUid uid, + Solution solution, + StomachComponent? stomach = null, + SolutionContainerManagerComponent? solutions = null) + { + return Resolve(uid, ref stomach, ref solutions, logMissing: false) + && _solutionContainerSystem.ResolveSolution((uid, solutions), DefaultSolutionName, ref stomach.Solution, out var stomachSolution) + // TODO: For now no partial transfers. Potentially change by design + && stomachSolution.CanAddSolution(solution); + } - public bool CanTransferSolution( - EntityUid uid, - Solution solution, - StomachComponent? stomach = null, - SolutionContainerManagerComponent? solutions = null) + public bool TryTransferSolution( + EntityUid uid, + Solution solution, + StomachComponent? stomach = null, + SolutionContainerManagerComponent? solutions = null) + { + if (!Resolve(uid, ref stomach, ref solutions, logMissing: false) + || !_solutionContainerSystem.ResolveSolution((uid, solutions), DefaultSolutionName, ref stomach.Solution) + || !CanTransferSolution(uid, solution, stomach, solutions)) { - return Resolve(uid, ref stomach, ref solutions, logMissing: false) - && _solutionContainerSystem.ResolveSolution((uid, solutions), DefaultSolutionName, ref stomach.Solution, out var stomachSolution) - // TODO: For now no partial transfers. Potentially change by design - && stomachSolution.CanAddSolution(solution); + return false; } - public bool TryTransferSolution( - EntityUid uid, - Solution solution, - StomachComponent? stomach = null, - SolutionContainerManagerComponent? solutions = null) - { - if (!Resolve(uid, ref stomach, ref solutions, logMissing: false) - || !_solutionContainerSystem.ResolveSolution((uid, solutions), DefaultSolutionName, ref stomach.Solution) - || !CanTransferSolution(uid, solution, stomach, solutions)) - { - return false; - } - - _solutionContainerSystem.TryAddSolution(stomach.Solution.Value, solution); - // Add each reagent to ReagentDeltas. Used to track how long each reagent has been in the stomach - foreach (var reagent in solution.Contents) - { - stomach.ReagentDeltas.Add(new StomachComponent.ReagentDelta(reagent)); - } + _solutionContainerSystem.TryAddSolution(stomach.Solution.Value, solution); - return true; - } + return true; } } diff --git a/Content.Shared/Chemistry/Reagent/ReagentMetabolismsSerializer.cs b/Content.Shared/Chemistry/Reagent/ReagentMetabolismsSerializer.cs new file mode 100644 index 0000000000..cf1cbd5788 --- /dev/null +++ b/Content.Shared/Chemistry/Reagent/ReagentMetabolismsSerializer.cs @@ -0,0 +1,31 @@ +using Robust.Shared.Serialization.Manager; +using Robust.Shared.Serialization.Markdown.Mapping; +using Robust.Shared.Serialization.TypeSerializers.Interfaces; + +namespace Content.Shared.Chemistry.Reagent; + +[TypeSerializer] +public sealed class ReagentMetabolismsSerializer : ITypeInheritanceHandler +{ + public MappingDataNode PushInheritance( + ISerializationManager serializationManager, + MappingDataNode child, + MappingDataNode parent, + IDependencyCollection dependencies, + ISerializationContext? context) + { + var result = child.Copy(); + + foreach (var (k, v) in parent) + { + if (result.TryAddCopy(k, v)) + continue; + + result[k] = serializationManager.CombineMappings( + (MappingDataNode)result[k], + (MappingDataNode)v); + } + + return result; + } +} diff --git a/Content.Shared/Chemistry/Reagent/ReagentPrototype.cs b/Content.Shared/Chemistry/Reagent/ReagentPrototype.cs index 45ef5c672e..ff9cc595e1 100644 --- a/Content.Shared/Chemistry/Reagent/ReagentPrototype.cs +++ b/Content.Shared/Chemistry/Reagent/ReagentPrototype.cs @@ -2,11 +2,11 @@ using System.Collections.Frozen; using System.Linq; using Content.Shared.FixedPoint; using System.Text.Json.Serialization; -using Content.Shared.Body.Prototypes; using Content.Shared.Chemistry.Reaction; using Content.Shared.Contraband; using Content.Shared.EntityEffects; using Content.Shared.Localizations; +using Content.Shared.Metabolism; using Content.Shared.Nutrition; using Content.Shared.Roles; using Content.Shared.Slippery; @@ -15,6 +15,7 @@ using Robust.Shared.Map; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Array; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Generic; using Robust.Shared.Utility; namespace Content.Shared.Chemistry.Reagent @@ -168,8 +169,8 @@ namespace Content.Shared.Chemistry.Reagent [DataField] public bool WorksOnTheDead; - [DataField] - public FrozenDictionary, ReagentEffectsEntry>? Metabolisms; + [DataField, AlwaysPushInheritance] + public ReagentMetabolisms? Metabolisms; [DataField] public Dictionary, ReactiveReagentEffectEntry>? ReactiveEffects; @@ -242,15 +243,14 @@ namespace Content.Shared.Chemistry.Reagent { public string ReagentPrototype; - // TODO: Kill Metabolism groups! - public Dictionary, ReagentEffectsGuideEntry>? GuideEntries; + public Dictionary, ReagentEffectsGuideEntry>? GuideEntries; public List? PlantMetabolisms = null; public ReagentGuideEntry(ReagentPrototype proto, IPrototypeManager prototype, IEntitySystemManager entSys) { ReagentPrototype = proto.ID; - GuideEntries = proto.Metabolisms? + GuideEntries = proto.Metabolisms?.Metabolisms .Select(x => (x.Key, x.Value.MakeGuideEntry(prototype, entSys, proto))) .ToDictionary(x => x.Key, x => x.Item2); if (proto.PlantMetabolisms.Count > 0) @@ -261,6 +261,12 @@ namespace Content.Shared.Chemistry.Reagent } } + [DataDefinition] + public sealed partial class ReagentMetabolisms + { + [IncludeDataField(customTypeSerializer: typeof(DictionarySerializer, ReagentEffectsEntry>))] + public Dictionary, ReagentEffectsEntry> Metabolisms; + } [DataDefinition] public sealed partial class ReagentEffectsEntry @@ -269,21 +275,27 @@ namespace Content.Shared.Chemistry.Reagent /// Amount of reagent to metabolize, per metabolism cycle. /// [JsonPropertyName("rate")] - [DataField("metabolismRate")] + [DataField] public FixedPoint2 MetabolismRate = FixedPoint2.New(0.5f); /// /// A list of effects to apply when these reagents are metabolized. /// [JsonPropertyName("effects")] - [DataField("effects", required: true)] - public EntityEffect[] Effects = default!; + [DataField] + public EntityEffect[] Effects = Array.Empty(); + + /// + /// Ratio of this reagent to metabolites for transfer to the next solution by a metabolizer + /// + [DataField] + public Dictionary, FixedPoint2>? Metabolites; public string EntityEffectFormat => "guidebook-reagent-effect-description"; public ReagentEffectsGuideEntry MakeGuideEntry(IPrototypeManager prototype, IEntitySystemManager entSys, ReagentPrototype proto) { - return new ReagentEffectsGuideEntry(MetabolismRate, proto.GuidebookReagentEffectsDescription(prototype, entSys, Effects, MetabolismRate).ToArray()); + return new ReagentEffectsGuideEntry(MetabolismRate, proto.GuidebookReagentEffectsDescription(prototype, entSys, Effects, MetabolismRate).ToArray(), Metabolites); } } @@ -294,10 +306,13 @@ namespace Content.Shared.Chemistry.Reagent public string[] EffectDescriptions; - public ReagentEffectsGuideEntry(FixedPoint2 metabolismRate, string[] effectDescriptions) + public Dictionary, FixedPoint2>? Metabolites; + + public ReagentEffectsGuideEntry(FixedPoint2 metabolismRate, string[] effectDescriptions, Dictionary, FixedPoint2>? metabolites) { MetabolismRate = metabolismRate; EffectDescriptions = effectDescriptions; + Metabolites = metabolites; } } diff --git a/Content.Shared/EntityConditions/Conditions/Body/MetabolizerTypeEntityCondition.cs b/Content.Shared/EntityConditions/Conditions/Body/MetabolizerTypeEntityConditionSystem.cs similarity index 58% rename from Content.Shared/EntityConditions/Conditions/Body/MetabolizerTypeEntityCondition.cs rename to Content.Shared/EntityConditions/Conditions/Body/MetabolizerTypeEntityConditionSystem.cs index 5fb63d008f..bfbd431659 100644 --- a/Content.Shared/EntityConditions/Conditions/Body/MetabolizerTypeEntityCondition.cs +++ b/Content.Shared/EntityConditions/Conditions/Body/MetabolizerTypeEntityConditionSystem.cs @@ -1,5 +1,6 @@ -using Content.Shared.Body.Prototypes; +using System.Linq; using Content.Shared.Localizations; +using Content.Shared.Metabolism; using Robust.Shared.Prototypes; namespace Content.Shared.EntityConditions.Conditions.Body; @@ -29,3 +30,18 @@ public sealed partial class MetabolizerTypeCondition : EntityConditionBase +/// Returns true if this entity has any of the listed metabolizer types. +/// +/// +public sealed partial class MetabolizerTypeEntityConditionSystem : EntityConditionSystem +{ + protected override void Condition(Entity entity, ref EntityConditionEvent args) + { + if (entity.Comp.MetabolizerTypes == null) + return; + + args.Result = entity.Comp.MetabolizerTypes.Overlaps(args.Condition.Type); + } +} diff --git a/Content.Shared/EntityEffects/Effects/Solution/AdjustReagentsByGroupEntityEffectSystem.cs b/Content.Shared/EntityEffects/Effects/Solution/AdjustReagentsByGroupEntityEffectSystem.cs deleted file mode 100644 index 51259956d8..0000000000 --- a/Content.Shared/EntityEffects/Effects/Solution/AdjustReagentsByGroupEntityEffectSystem.cs +++ /dev/null @@ -1,52 +0,0 @@ -using Content.Shared.Body.Prototypes; -using Content.Shared.Chemistry.Components; -using Content.Shared.Chemistry.EntitySystems; -using Content.Shared.Chemistry.Reagent; -using Content.Shared.FixedPoint; -using Robust.Shared.Prototypes; - -namespace Content.Shared.EntityEffects.Effects.Solution; - -/// -/// Adjust all reagents in this solution which are metabolized by a given metabolism group. -/// Quantity is modified by scale, quantity is per reagent and not a total. -/// -/// -public sealed partial class AdjustReagentsByGroupEntityEffectSystem : EntityEffectSystem -{ - [Dependency] private readonly IPrototypeManager _proto = default!; - [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; - - protected override void Effect(Entity entity, ref EntityEffectEvent args) - { - var quantity = args.Effect.Amount * args.Scale; - var group = args.Effect.Group; - var solution = entity.Comp.Solution; - - foreach (var quant in solution.Contents.ToArray()) - { - var proto = _proto.Index(quant.Reagent.Prototype); - if (proto.Metabolisms == null || !proto.Metabolisms.ContainsKey(group)) - continue; - - if (quantity > 0) - _solutionContainer.TryAddReagent(entity, proto.ID, quantity); - else - _solutionContainer.RemoveReagent(entity, proto.ID, -quantity); - } - } -} - -/// -public sealed partial class AdjustReagentsByGroup : EntityEffectBase -{ - - /// - /// The metabolism group being adjusted. All reagents in an affected solution with this group will be adjusted. - /// - [DataField(required: true)] - public ProtoId Group; - - [DataField(required: true)] - public FixedPoint2 Amount; -} diff --git a/Content.Shared/Metabolism/MetabolismStagePrototype.cs b/Content.Shared/Metabolism/MetabolismStagePrototype.cs new file mode 100644 index 0000000000..7f0d7976cf --- /dev/null +++ b/Content.Shared/Metabolism/MetabolismStagePrototype.cs @@ -0,0 +1,16 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.Metabolism; + +[Prototype] +public sealed partial class MetabolismStagePrototype : IPrototype +{ + [IdDataField] + public string ID { get; private set; } = default!; + + [DataField("name", required: true)] + private LocId Name { get; set; } + + [ViewVariables(VVAccess.ReadOnly)] + public string LocalizedName => Loc.GetString(Name); +} diff --git a/Content.Shared/Metabolism/MetabolizerComponent.cs b/Content.Shared/Metabolism/MetabolizerComponent.cs new file mode 100644 index 0000000000..951fb508d6 --- /dev/null +++ b/Content.Shared/Metabolism/MetabolizerComponent.cs @@ -0,0 +1,148 @@ +using Content.Shared.Body.Components; +using Content.Shared.FixedPoint; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; + +namespace Content.Shared.Metabolism; + +/// +/// Handles metabolizing various reagents with given effects. +/// +[RegisterComponent, AutoGenerateComponentPause, Access(typeof(MetabolizerSystem))] +public sealed partial class MetabolizerComponent : Component +{ + /// + /// The next time that reagents will be metabolized. + /// + [DataField, AutoPausedField] + public TimeSpan NextUpdate; + + /// + /// How often to metabolize reagents. + /// + /// + [DataField] + public TimeSpan UpdateInterval = TimeSpan.FromSeconds(1); + + /// + /// Multiplier applied to for adjusting based on metabolic rate multiplier. + /// + [DataField] + public float UpdateIntervalMultiplier = 1f; + + /// + /// Adjusted update interval based off of the multiplier value. + /// + [ViewVariables] + public TimeSpan AdjustedUpdateInterval => UpdateInterval * UpdateIntervalMultiplier; + + /// + /// From which solution will this metabolizer attempt to metabolize chemicals for a given stage + /// + [DataField] + public Dictionary, MetabolismSolutionEntry> Solutions = new() + { + ["Respiration"] = new() + { + SolutionName = "Lung", + SolutionOnBody = false, + TransferSolutionName = BloodstreamComponent.DefaultBloodSolutionName, + MetabolizeAll = true + }, + ["Digestion"] = new() + { + SolutionName = "stomach", + SolutionOnBody = false, + TransferSolutionName = BloodstreamComponent.DefaultBloodSolutionName, + TransferEfficacy = 0.5 + }, + ["Bloodstream"] = new() + { + SolutionName = BloodstreamComponent.DefaultBloodSolutionName, + TransferSolutionName = BloodstreamComponent.DefaultMetabolitesSolutionName, + }, + ["Metabolites"] = new() + { + SolutionName = BloodstreamComponent.DefaultMetabolitesSolutionName + } + }; + + /// + /// Does this component use a solution on it's parent entity (the body) or itself + /// + /// + /// Most things will use the parent entity (bloodstream). + /// + [DataField] + public bool SolutionOnBody = true; + + /// + /// List of metabolizer types that this organ is. ex. Human, Slime, Felinid, w/e. + /// + [DataField] + [Access(typeof(MetabolizerSystem), Other = AccessPermissions.ReadExecute)] // FIXME Friends + public HashSet>? MetabolizerTypes; + + /// + /// How many reagents can this metabolizer process at once? + /// Used to nerf 'stacked poisons' where having 5+ different poisons in a syringe, even at low + /// quantity, would be muuuuch better than just one poison acting. + /// + [DataField("maxReagents")] + public int MaxReagentsProcessable = 3; + + /// + /// A list of metabolism stages that this metabolizer will act on, in order of precedence. + /// + [DataField] + public List> Stages = new(); +} + +[DataDefinition] +public sealed partial class MetabolismSolutionEntry +{ + /// + /// From which solution will this metabolizer attempt to metabolize chemicals + /// + [DataField(required: true)] + public string SolutionName; + + /// + /// Does this metabolizer use a solution on it's parent entity (the body) or itself + /// + /// + /// Most things will use the parent entity (bloodstream). + /// + [DataField] + public bool SolutionOnBody = true; + + /// + /// When true, this solution will be metabolized entirely instead of at a certain rate + /// + [DataField] + public bool MetabolizeAll = false; + + /// + /// Reagents without a metabolism for the current stage will be transferred to this solution + /// + [DataField] + public string? TransferSolutionName; + + /// + /// Reagents transferred by this metabolizer will transfer at this rate if they don't have a metabolism + /// + [DataField] + public FixedPoint2 TransferRate = 0.25; + + /// + /// The percentage of transferred reagents that actually make it to the next step in metabolism if they don't have explicit metabolites + /// + [DataField] + public FixedPoint2 TransferEfficacy = 1; + + /// + /// Does this metabolizer transfer to a solution on the body or on the entity itself + /// + [DataField] + public bool TransferSolutionOnBody = true; +} diff --git a/Content.Server/Body/Systems/MetabolizerSystem.cs b/Content.Shared/Metabolism/MetabolizerSystem.cs similarity index 55% rename from Content.Server/Body/Systems/MetabolizerSystem.cs rename to Content.Shared/Metabolism/MetabolizerSystem.cs index 3e01b05feb..5cf44e6f34 100644 --- a/Content.Server/Body/Systems/MetabolizerSystem.cs +++ b/Content.Shared/Metabolism/MetabolizerSystem.cs @@ -1,9 +1,8 @@ +using System.Diagnostics.CodeAnalysis; using System.Linq; -using Content.Server.Body.Components; -using Content.Shared.Body; using Content.Shared.Body.Events; -using Content.Shared.Body.Prototypes; using Content.Shared.Body.Systems; +using Content.Shared.Body; using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.Components.SolutionManager; using Content.Shared.Chemistry.EntitySystems; @@ -21,10 +20,10 @@ using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Timing; -namespace Content.Server.Body.Systems; +namespace Content.Shared.Metabolism; /// -public sealed class MetabolizerSystem : SharedMetabolizerSystem +public sealed class MetabolizerSystem : EntitySystem { [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; @@ -36,7 +35,6 @@ public sealed class MetabolizerSystem : SharedMetabolizerSystem private EntityQuery _organQuery; private EntityQuery _solutionQuery; - private static readonly ProtoId Gas = "Gas"; public override void Initialize() { @@ -45,7 +43,6 @@ public sealed class MetabolizerSystem : SharedMetabolizerSystem _organQuery = GetEntityQuery(); _solutionQuery = GetEntityQuery(); - SubscribeLocalEvent(OnMetabolizerInit); SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent>(OnApplyMetabolicMultiplier); } @@ -55,18 +52,6 @@ public sealed class MetabolizerSystem : SharedMetabolizerSystem ent.Comp.NextUpdate = _gameTiming.CurTime + ent.Comp.AdjustedUpdateInterval; } - private void OnMetabolizerInit(Entity entity, ref ComponentInit args) - { - if (!entity.Comp.SolutionOnBody) - { - _solutionContainerSystem.EnsureSolution(entity.Owner, entity.Comp.SolutionName, out _); - } - else if (_organQuery.CompOrNull(entity)?.Body is { } body) - { - _solutionContainerSystem.EnsureSolution(body, entity.Comp.SolutionName, out _); - } - } - private void OnApplyMetabolicMultiplier(Entity ent, ref BodyRelayedEvent args) { ent.Comp.UpdateIntervalMultiplier = args.Args.Multiplier; @@ -95,56 +80,86 @@ public sealed class MetabolizerSystem : SharedMetabolizerSystem } } - private void TryMetabolize(Entity ent) + /// + /// Updates the metabolic rate multiplier for a given entity, + /// raising both to determine what the multiplier is and to update relevant components. + /// + /// + public void UpdateMetabolicMultiplier(EntityUid uid) { - _organQuery.Resolve(ent, ref ent.Comp2, logMissing: false); + var getEv = new GetMetabolicMultiplierEvent(); + RaiseLocalEvent(uid, ref getEv); + + var applyEv = new ApplyMetabolicMultiplierEvent(getEv.Multiplier); + RaiseLocalEvent(uid, ref applyEv); + } + + private bool LookupSolution( + Entity ent, + MetabolismSolutionEntry solutionData, + bool lookupTransfer, + [NotNullWhen(true)] out Solution? solution, + [NotNullWhen(true)] out Entity? solutionEntity, + [NotNullWhen(true)] out EntityUid? solutionOwner + ) + { + solution = null; + solutionEntity = null; + solutionOwner = null; - // First step is get the solution we actually care about - var solutionName = ent.Comp1.SolutionName; - Solution? solution = null; - Entity? soln = default!; - EntityUid? solutionEntityUid = null; + var solutionName = lookupTransfer ? solutionData.TransferSolutionName : solutionData.SolutionName; - if (ent.Comp1.SolutionOnBody) + if (solutionName is null) + return false; + + if (lookupTransfer ? solutionData.TransferSolutionOnBody : solutionData.SolutionOnBody) { if (ent.Comp2?.Body is { } body) { - if (!_solutionQuery.Resolve(body, ref ent.Comp3, logMissing: false)) - return; + if (!_solutionQuery.TryComp(body, out var bodySolution)) + return false; - _solutionContainerSystem.TryGetSolution((body, ent.Comp3), solutionName, out soln, out solution); - solutionEntityUid = body; + solutionOwner = body; + return _solutionContainerSystem.TryGetSolution((body, bodySolution), solutionName, out solutionEntity, out solution); } } else { if (!_solutionQuery.Resolve(ent, ref ent.Comp3, logMissing: false)) - return; + return false; - _solutionContainerSystem.TryGetSolution((ent, ent), solutionName, out soln, out solution); - solutionEntityUid = ent; + solutionOwner = ent; + return _solutionContainerSystem.TryGetSolution((ent, ent), solutionName, out solutionEntity, out solution); } - if (solutionEntityUid is null - || soln is null - || solution is null - || solution.Contents.Count == 0) - { + return false; + } + + private void TryMetabolizeStage(Entity ent, ProtoId stage) + { + if (!ent.Comp1.Solutions.TryGetValue(stage, out var solutionData)) return; - } + + if (!LookupSolution(ent, solutionData, false, out var solution, out var solutionEntity, out var solutionOwner)) + return; + + if (solution.Contents.Count == 0) + return; + + LookupSolution(ent, solutionData, true, out var transferSolution, out var transferSolutionEntity, out _); // Copy the solution do not edit the original solution list var list = solution.Contents.ToList(); // Collecting blood reagent for filtering var ev = new MetabolismExclusionEvent(); - RaiseLocalEvent(solutionEntityUid.Value, ref ev); + RaiseLocalEvent(solutionOwner.Value, ref ev); // randomize the reagent list so we don't have any weird quirks // like alphabetical order or insertion order mattering for processing _random.Shuffle(list); - bool isDead = _mobStateSystem.IsDead(solutionEntityUid.Value); + var isDead = _mobStateSystem.IsDead(solutionOwner.Value); int reagents = 0; foreach (var (reagent, quantity) in list) @@ -156,10 +171,16 @@ public sealed class MetabolizerSystem : SharedMetabolizerSystem if (ev.Reagents.Contains(reagent)) continue; - var mostToRemove = FixedPoint2.Zero; - if (proto.Metabolisms is null) + if (proto.Metabolisms is null || !proto.Metabolisms.Metabolisms.TryGetValue(stage, out var entry)) { - if (ent.Comp1.RemoveEmpty) + var mostToTransfer = FixedPoint2.Clamp(solutionData.TransferRate, 0, quantity); + + if (transferSolution is not null) + { + solution.RemoveReagent(reagent, mostToTransfer); + transferSolution.AddReagent(reagent, mostToTransfer * solutionData.TransferEfficacy); + } + else { solution.RemoveReagent(reagent, FixedPoint2.New(1)); } @@ -167,73 +188,58 @@ public sealed class MetabolizerSystem : SharedMetabolizerSystem continue; } + var rate = solutionData.MetabolizeAll ? quantity : entry.MetabolismRate; + + // Remove $rate, as long as there's enough reagent there to actually remove that much + var mostToRemove = FixedPoint2.Clamp(rate, 0, quantity); + // we're done here entirely if this is true if (reagents >= ent.Comp1.MaxReagentsProcessable) return; + var scale = (float) mostToRemove; + if (!solutionData.MetabolizeAll) + scale /= (float) rate; - // loop over all our groups and see which ones apply - if (ent.Comp1.MetabolismGroups is null) + // if it's possible for them to be dead, and they are, + // then we shouldn't process any effects, but should probably + // still remove reagents + if (isDead && !proto.WorksOnTheDead) continue; - // TODO: Kill MetabolismGroups! - foreach (var group in ent.Comp1.MetabolismGroups) + var actualEntity = ent.Comp2?.Body ?? solutionOwner.Value; + + // do all effects, if conditions apply + foreach (var effect in entry.Effects) { - if (!proto.Metabolisms.TryGetValue(group.Id, out var entry)) + if (scale < effect.MinScale) continue; - var rate = entry.MetabolismRate * group.MetabolismRateModifier; - - // Remove $rate, as long as there's enough reagent there to actually remove that much - mostToRemove = FixedPoint2.Clamp(rate, 0, quantity); - - var scale = (float) mostToRemove; - - // TODO: This is a very stupid workaround to lungs heavily relying on scale = reagent quantity. Needs lung and metabolism refactors to remove. - // TODO: Lungs just need to have their scale be equal to the mols consumed, scale needs to be not hardcoded either and configurable per metabolizer... - if (group.Id != Gas) - scale /= (float) entry.MetabolismRate; - - // if it's possible for them to be dead, and they are, - // then we shouldn't process any effects, but should probably - // still remove reagents - if (isDead && !proto.WorksOnTheDead) + if (effect.Probability < 1.0f && !_random.Prob(effect.Probability)) continue; - var actualEntity = ent.Comp2?.Body ?? solutionEntityUid.Value; - - // do all effects, if conditions apply - foreach (var effect in entry.Effects) - { - if (scale < effect.MinScale) - continue; - - if (effect.Probability < 1.0f && !_random.Prob(effect.Probability)) - continue; - - // See if conditions apply - if (effect.Conditions != null && !CanMetabolizeEffect(actualEntity, ent, soln.Value, effect.Conditions)) - continue; + // See if conditions apply + if (effect.Conditions != null && !CanMetabolizeEffect(actualEntity, ent, solutionEntity.Value, effect.Conditions)) + continue; - ApplyEffect(effect); + ApplyEffect(effect); - } + } - // TODO: We should have to do this with metabolism. ReagentEffect struct needs refactoring and so does metabolism! - void ApplyEffect(EntityEffect effect) + // TODO: We should have to do this with metabolism. ReagentEffect struct needs refactoring and so does metabolism! + void ApplyEffect(EntityEffect effect) + { + switch (effect) { - switch (effect) - { - case ModifyLungGas: - _entityEffects.ApplyEffect(ent, effect, scale); - break; - case AdjustReagent: - _entityEffects.ApplyEffect(soln.Value, effect, scale); - break; - default: - _entityEffects.ApplyEffect(actualEntity, effect, scale); - break; - } + case ModifyLungGas: + _entityEffects.ApplyEffect(ent, effect, scale); + break; + case AdjustReagent: + _entityEffects.ApplyEffect(solutionEntity.Value, effect, scale); + break; + default: + _entityEffects.ApplyEffect(actualEntity, effect, scale); + break; } } @@ -244,10 +250,32 @@ public sealed class MetabolizerSystem : SharedMetabolizerSystem // We have processed a reagant, so count it towards the cap reagents += 1; + + if (transferSolution is not null && entry.Metabolites is not null) + { + foreach (var (metabolite, ratio) in entry.Metabolites) + { + transferSolution.AddReagent(metabolite, mostToRemove * ratio); + } + } } } - _solutionContainerSystem.UpdateChemicals(soln.Value); + _solutionContainerSystem.UpdateChemicals(solutionEntity.Value); + if (transferSolutionEntity is not null) + { + _solutionContainerSystem.UpdateChemicals(transferSolutionEntity.Value); + } + } + + private void TryMetabolize(Entity ent) + { + _organQuery.Resolve(ent, ref ent.Comp2, logMissing: false); + + foreach (var stage in ent.Comp1.Stages) + { + TryMetabolizeStage(ent, stage); + } } /// diff --git a/Content.Shared/Metabolism/MetabolizerTypePrototype.cs b/Content.Shared/Metabolism/MetabolizerTypePrototype.cs new file mode 100644 index 0000000000..34b45c798a --- /dev/null +++ b/Content.Shared/Metabolism/MetabolizerTypePrototype.cs @@ -0,0 +1,16 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.Metabolism; + +[Prototype] +public sealed partial class MetabolizerTypePrototype : IPrototype +{ + [IdDataField] + public string ID { get; private set; } = default!; + + [DataField("name", required: true)] + private LocId Name { get; set; } + + [ViewVariables(VVAccess.ReadOnly)] + public string LocalizedName => Loc.GetString(Name); +} diff --git a/Content.Shared/Nutrition/EntitySystems/IngestionSystem.API.cs b/Content.Shared/Nutrition/EntitySystems/IngestionSystem.API.cs index 086349454c..dbd75597ea 100644 --- a/Content.Shared/Nutrition/EntitySystems/IngestionSystem.API.cs +++ b/Content.Shared/Nutrition/EntitySystems/IngestionSystem.API.cs @@ -220,7 +220,7 @@ public sealed partial class IngestionSystem if (reagent.Metabolisms == null) continue; - foreach (var entry in reagent.Metabolisms.Values) + foreach (var entry in reagent.Metabolisms.Metabolisms.Values) { foreach (var effect in entry.Effects) { @@ -271,7 +271,7 @@ public sealed partial class IngestionSystem if (reagent.Metabolisms == null) continue; - foreach (var entry in reagent.Metabolisms.Values) + foreach (var entry in reagent.Metabolisms.Metabolisms.Values) { foreach (var effect in entry.Effects) { diff --git a/Content.Shared/Nutrition/EntitySystems/IngestionSystem.cs b/Content.Shared/Nutrition/EntitySystems/IngestionSystem.cs index 586c4f5bfd..eac3457478 100644 --- a/Content.Shared/Nutrition/EntitySystems/IngestionSystem.cs +++ b/Content.Shared/Nutrition/EntitySystems/IngestionSystem.cs @@ -374,13 +374,16 @@ public sealed partial class IngestionSystem : EntitySystem _reaction.DoEntityReaction(entity, split, ReactionMethod.Ingestion); // Everything is good to go item has been successfuly eaten - var afterEv = new IngestedEvent(args.User, entity, split, forceFed); + var afterEv = new IngestedEvent(args.User, entity, split, forceFed, beforeEv.Transfer >= beforeEv.Max); RaiseLocalEvent(food, ref afterEv); _stomach.TryTransferSolution(stomachToUse.Value.Owner, split, stomachToUse); if (!afterEv.Destroy) { + if (beforeEv.Transfer >= beforeEv.Max) + return; + args.Repeat = afterEv.Repeat; return; } @@ -460,7 +463,7 @@ public sealed partial class IngestionSystem : EntitySystem { var targetName = Identity.Entity(args.Target, EntityManager); var userName = Identity.Entity(args.User, EntityManager); - _popup.PopupEntity(Loc.GetString("edible-force-feed-success", ("user", userName), ("verb", edible.Verb), ("flavors", flavors)), entity, entity); + _popup.PopupEntity(Loc.GetString("edible-force-feed-success", ("user", userName), ("verb", edible.Verb), ("flavors", flavors), ("satiated", args.Satiated)), entity, entity); _popup.PopupClient(Loc.GetString("edible-force-feed-success-user", ("target", targetName), ("verb", edible.Verb)), args.User, args.User); @@ -470,7 +473,7 @@ public sealed partial class IngestionSystem : EntitySystem } else { - _popup.PopupPredicted(Loc.GetString(edible.Message, ("food", entity.Owner), ("flavors", flavors)), + _popup.PopupPredicted(Loc.GetString(edible.Message, ("food", entity.Owner), ("flavors", flavors), ("satiated", args.Satiated)), Loc.GetString(edible.OtherMessage), args.User, args.User); diff --git a/Content.Shared/Nutrition/IngestionEvents.cs b/Content.Shared/Nutrition/IngestionEvents.cs index afa50fc931..e64fed1626 100644 --- a/Content.Shared/Nutrition/IngestionEvents.cs +++ b/Content.Shared/Nutrition/IngestionEvents.cs @@ -150,8 +150,9 @@ public record struct IngestingEvent(EntityUid Food, Solution Split, bool ForceFe /// Who is doing the eating? /// The solution we're currently eating. /// Whether we're being fed by someone else, checkec enough I might as well pass it. +/// Whether the entity will stop eating after this. [ByRefEvent] -public record struct IngestedEvent(EntityUid User, EntityUid Target, Solution Split, bool ForceFed) +public record struct IngestedEvent(EntityUid User, EntityUid Target, Solution Split, bool ForceFed, bool Satiated) { // Should we destroy the ingested entity? public bool Destroy; diff --git a/Resources/Locale/en-US/guidebook/chemistry/core.ftl b/Resources/Locale/en-US/guidebook/chemistry/core.ftl index bcb3250db6..502675bd9e 100644 --- a/Resources/Locale/en-US/guidebook/chemistry/core.ftl +++ b/Resources/Locale/en-US/guidebook/chemistry/core.ftl @@ -17,7 +17,9 @@ guidebook-reagent-sources-header = Sources guidebook-reagent-sources-ent-wrapper = [bold]{$name}[/bold] \[1\] guidebook-reagent-sources-gas-wrapper = [bold]{$name} (gas)[/bold] \[1\] guidebook-reagent-effects-header = Effects -guidebook-reagent-effects-metabolism-group-rate = [bold]{$group}[/bold] [color=gray]({$rate} units per second)[/color] +guidebook-reagent-effects-metabolism-stage-rate = [bold]{$stage}[/bold] [color=gray]({$rate} units per second)[/color] +guidebook-reagent-effects-metabolite-item = {$reagent} at a rate of { NATURALPERCENT($rate, 2) } +guidebook-reagent-effects-metabolites = Metabolizes into { $items }. guidebook-reagent-plant-metabolisms-header = Plant Metabolism guidebook-reagent-plant-metabolisms-rate = [bold]Plant Metabolism[/bold] [color=gray](1 unit every 3 seconds as base)[/color] guidebook-reagent-physical-description = [italic]Seems to be {$description}.[/italic] diff --git a/Resources/Locale/en-US/metabolism/metabolism-groups.ftl b/Resources/Locale/en-US/metabolism/metabolism-groups.ftl deleted file mode 100644 index b9bd477fbb..0000000000 --- a/Resources/Locale/en-US/metabolism/metabolism-groups.ftl +++ /dev/null @@ -1,8 +0,0 @@ -metabolism-group-poison = Poison -metabolism-group-medicine = Medicine -metabolism-group-narcotic = Narcotic -metabolism-group-alcohol = Alcohol -metabolism-group-food = Food -metabolism-group-drink = Drink -metabolism-group-gas = Gas -metabolism-group-plant-metabolisms = Plant Metabolism diff --git a/Resources/Locale/en-US/metabolism/metabolism-stages.ftl b/Resources/Locale/en-US/metabolism/metabolism-stages.ftl new file mode 100644 index 0000000000..8988667c36 --- /dev/null +++ b/Resources/Locale/en-US/metabolism/metabolism-stages.ftl @@ -0,0 +1,6 @@ +metabolism-stage-respiration = Respiration +metabolism-stage-digestion = Digestion +metabolism-stage-bloodstream = Bloodstream +metabolism-stage-metabolites = Metabolites + +metabolism-stage-plant = Plant Metabolism diff --git a/Resources/Locale/en-US/nutrition/components/ingestion-system.ftl b/Resources/Locale/en-US/nutrition/components/ingestion-system.ftl index a82eae11e3..5f714925e4 100644 --- a/Resources/Locale/en-US/nutrition/components/ingestion-system.ftl +++ b/Resources/Locale/en-US/nutrition/components/ingestion-system.ftl @@ -25,11 +25,16 @@ ingestion-verb-drink = Drink # Edible Component -edible-nom = Nom. {$flavors} +-edible-satiated = { $satiated -> + [true] {" "}You don't feel like you could { $verb } any more. + *[false] {""} +} + +edible-nom = Nom. {$flavors}{ -edible-satiated(satiated: $satiated, verb: "eat") } edible-nom-other = Nom. -edible-slurp = Slurp. {$flavors} +edible-slurp = Slurp. {$flavors}{ -edible-satiated(satiated: $satiated, verb: "drink") } edible-slurp-other = Slurp. -edible-swallow = You swallow { THE($food) } +edible-swallow = You swallow { THE($food) }.{ -edible-satiated(satiated: $satiated, verb: "swallow") } edible-gulp = Gulp. {$flavors} edible-gulp-other = Gulp. @@ -52,5 +57,5 @@ edible-verb-pill = swallow ## Force feeding edible-force-feed = {CAPITALIZE(THE($user))} is trying to make you {$verb} something! -edible-force-feed-success = {CAPITALIZE(THE($user))} forced you to {$verb} something! {$flavors} +edible-force-feed-success = {CAPITALIZE(THE($user))} forced you to {$verb} something! {$flavors}{ -edible-satiated(satiated: $satiated, verb: $verb) } edible-force-feed-success-user = You successfully feed {THE($target)} diff --git a/Resources/Prototypes/Body/Species/diona.yml b/Resources/Prototypes/Body/Species/diona.yml index 93aa49b36f..e2712b8f7f 100644 --- a/Resources/Prototypes/Body/Species/diona.yml +++ b/Resources/Prototypes/Body/Species/diona.yml @@ -278,14 +278,7 @@ components: - type: Metabolizer maxReagents: 6 - removeEmpty: true - groups: - - id: Food - - id: Drink - - id: Medicine - - id: Poison - - id: Narcotic - - id: Alcohol + stages: [ Digestion, Bloodstream, Metabolites ] - type: entity parent: OrganDionaBrain diff --git a/Resources/Prototypes/Body/Species/slime.yml b/Resources/Prototypes/Body/Species/slime.yml index a72a949b77..b670c067b9 100644 --- a/Resources/Prototypes/Body/Species/slime.yml +++ b/Resources/Prototypes/Body/Species/slime.yml @@ -262,15 +262,7 @@ - type: Metabolizer maxReagents: 6 metabolizerTypes: [ Slime ] - removeEmpty: true - groups: - - id: Food - - id: Drink - - id: Medicine - - id: Poison - - id: Narcotic - - id: Alcohol - rateModifier: 2.5 + stages: [ Digestion, Bloodstream, Metabolites ] - type: entity parent: [ OrganBaseLungs, OrganSlimePersonInternal, OrganSlimePersonMetabolizer ] diff --git a/Resources/Prototypes/Body/base_organs.yml b/Resources/Prototypes/Body/base_organs.yml index 5205297eca..5b64276d03 100644 --- a/Resources/Prototypes/Body/base_organs.yml +++ b/Resources/Prototypes/Body/base_organs.yml @@ -332,12 +332,7 @@ category: Lungs - type: Lung - type: Metabolizer - removeEmpty: true - solutionOnBody: false - solution: "Lung" - groups: - - id: Gas - rateModifier: 100.0 + stages: [ Respiration ] - type: SolutionContainerManager solutions: Lung: @@ -364,10 +359,7 @@ - state: heart-on - type: Metabolizer maxReagents: 2 - groups: - - id: Medicine - - id: Poison - - id: Narcotic + stages: [ Bloodstream ] - type: entity parent: OrganBase @@ -385,9 +377,7 @@ maxVol: 50 - type: Metabolizer maxReagents: 3 - groups: - - id: Food - - id: Drink + stages: [ Digestion ] - type: Sprite layers: - state: stomach @@ -410,8 +400,7 @@ heldPrefix: liver - type: Metabolizer maxReagents: 1 - groups: - - id: Alcohol + stages: [ Metabolites ] - type: entity parent: OrganBase @@ -430,7 +419,6 @@ heldPrefix: kidneys - type: Metabolizer maxReagents: 5 - removeEmpty: true - type: entity id: OrganSpriteHumanInternal diff --git a/Resources/Prototypes/Chemistry/metabolism_groups.yml b/Resources/Prototypes/Chemistry/metabolism_groups.yml deleted file mode 100644 index 1cc1f19311..0000000000 --- a/Resources/Prototypes/Chemistry/metabolism_groups.yml +++ /dev/null @@ -1,34 +0,0 @@ -# Default human metabolism groups. -- type: metabolismGroup - id: Poison - name: metabolism-group-poison - -- type: metabolismGroup - id: Medicine - name: metabolism-group-medicine - -- type: metabolismGroup - id: Narcotic - name: metabolism-group-narcotic - -- type: metabolismGroup - id: Alcohol - name: metabolism-group-alcohol - -- type: metabolismGroup - id: Food - name: metabolism-group-food - -- type: metabolismGroup - id: Drink - name: metabolism-group-drink - -# Used for gases that have effects on being inhaled -- type: metabolismGroup - id: Gas - name: metabolism-group-gas - -# Dummy for the guide -- type: metabolismGroup - id: PlantMetabolisms - name: metabolism-group-plant-metabolisms diff --git a/Resources/Prototypes/Chemistry/metabolism_stages.yml b/Resources/Prototypes/Chemistry/metabolism_stages.yml new file mode 100644 index 0000000000..a8b6f02dab --- /dev/null +++ b/Resources/Prototypes/Chemistry/metabolism_stages.yml @@ -0,0 +1,23 @@ +# Animal metabolism stages + +- type: metabolismStage + id: Respiration + name: metabolism-stage-respiration + +- type: metabolismStage + id: Digestion + name: metabolism-stage-digestion + +- type: metabolismStage + id: Bloodstream + name: metabolism-stage-bloodstream + +- type: metabolismStage + id: Metabolites + name: metabolism-stage-metabolites + +# Dummy for the guide + +- type: metabolismStage + id: PlantMetabolisms + name: metabolism-stage-plant diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/behonker.yml b/Resources/Prototypes/Entities/Mobs/NPCs/behonker.yml index c0220cee13..dfa54910c8 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/behonker.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/behonker.yml @@ -90,9 +90,7 @@ solutionOnBody: false updateInterval: 0.25 metabolizerTypes: [ Dragon ] - groups: - - id: Medicine - - id: Poison + stages: [ Digestion, Bloodstream ] - type: Butcherable spawned: - id: MaterialBananium1 diff --git a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml index 28c18d6a69..2aa28bc089 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml @@ -115,9 +115,7 @@ solutionOnBody: false updateInterval: 0.25 metabolizerTypes: [ Dragon ] - groups: - - id: Medicine - - id: Poison + stages: [ Digestion, Bloodstream ] - type: Butcherable spawned: - id: FoodMeatDragon diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml b/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml index f25dee1391..538a83e2c2 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml @@ -16,17 +16,10 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: true metabolisms: - Drink: + Digestion: + metabolites: + Ethanol: 0.6 effects: - - !type:AdjustReagent - reagent: Ethanol - amount: 0.3 - Narcotic: # The green fairy - metabolismRate : 0.01 - effects: - - !type:AdjustReagent - reagent: Ethanol - amount: 0.05 - !type:ModifyStatusEffect effectProto: StatusEffectSeeingRainbow conditions: @@ -95,13 +88,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: true metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.1 + Digestion: + metabolites: + Ethanol: 0.1 - type: reagent id: Cognac @@ -119,13 +108,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: true metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 + Digestion: + metabolites: + Ethanol: 0.4 - type: reagent id: DeadRum @@ -142,13 +127,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 + Digestion: + metabolites: + Ethanol: 0.4 - type: reagent id: Ethanol @@ -161,7 +142,7 @@ boilingPoint: 78.2 meltingPoint: -114.1 metabolisms: - Alcohol: + Metabolites: metabolismRate: 0.05 effects: - !type:HealthChange @@ -225,13 +206,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 + Digestion: + metabolites: + Ethanol: 0.4 - type: reagent id: CoffeeLiqueur @@ -293,15 +270,12 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: true metabolisms: - Drink: + Digestion: + metabolites: + Ethanol: 0.1 effects: - !type:SatiateThirst factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.05 - Poison: - effects: - !type:HealthChange damage: types: @@ -323,13 +297,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 + Digestion: + metabolites: + Ethanol: 0.4 - type: reagent id: Sake @@ -346,13 +316,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 + Digestion: + metabolites: + Ethanol: 0.4 - type: reagent id: Tequila @@ -369,13 +335,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 + Digestion: + metabolites: + Ethanol: 0.4 - type: reagent id: Vermouth @@ -408,13 +370,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 + Digestion: + metabolites: + Ethanol: 0.4 - type: reagent id: Whiskey @@ -432,13 +390,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 + Digestion: + metabolites: + Ethanol: 0.4 - type: reagent id: Wine @@ -472,13 +426,12 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: true metabolisms: - Drink: + Digestion: + metabolites: + Ethanol: 0.6 effects: - !type:SatiateThirst factor: 3 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.3 fizziness: 0.8 # Mixed Alcohol @@ -591,13 +544,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.15 + Digestion: + metabolites: + Ethanol: 0.3 - type: reagent id: AtomicBomb @@ -614,16 +563,10 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.15 - - !type:AdjustReagent - reagent: Uranium - amount: 0.05 + Digestion: + metabolites: + Ethanol: 0.3 + Uranium: 0.1 - type: reagent id: B52 @@ -640,13 +583,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.15 + Digestion: + metabolites: + Ethanol: 0.3 - type: reagent id: BahamaMama @@ -708,13 +647,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.15 + Digestion: + metabolites: + Ethanol: 0.3 fizziness: 0.3 - type: reagent @@ -732,13 +667,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 + Digestion: + metabolites: + Ethanol: 0.4 - type: reagent id: BloodyMary @@ -785,13 +716,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 + Digestion: + metabolites: + Ethanol: 0.4 - type: reagent id: Bronx @@ -823,13 +750,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 + Digestion: + metabolites: + Ethanol: 0.4 - type: reagent id: Cosmopolitan @@ -846,13 +769,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.15 + Digestion: + metabolites: + Ethanol: 0.3 - type: reagent id: CrushDepth @@ -884,13 +803,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.07 + Digestion: + metabolites: + Ethanol: 0.14 fizziness: 0.2 - type: reagent @@ -954,15 +869,14 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: + Digestion: + metabolites: + Ethanol: 0.1 effects: - !type:SatiateThirst factor: 2 - !type:SatiateHunger factor: -2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.05 - !type:HealthChange damage: groups: @@ -986,13 +900,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.15 + Digestion: + metabolites: + Ethanol: 0.3 - type: reagent id: Eggnog @@ -1055,13 +965,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 + Digestion: + metabolites: + Ethanol: 0.4 - type: reagent id: GinFizz @@ -1078,13 +984,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.07 + Digestion: + metabolites: + Ethanol: 0.14 fizziness: 0.4 # A little high, but it has fizz in the name - type: reagent @@ -1102,13 +1004,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.07 + Digestion: + metabolites: + Ethanol: 0.14 fizziness: 0.4 - type: reagent @@ -1126,13 +1024,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: true metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 + Digestion: + metabolites: + Ethanol: 0.4 - type: reagent id: Grog @@ -1204,13 +1098,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.15 + Digestion: + metabolites: + Ethanol: 0.3 - type: reagent id: IrishCream @@ -1227,13 +1117,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 + Digestion: + metabolites: + Ethanol: 0.4 - type: reagent id: IrishCoffee @@ -1250,13 +1136,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.15 + Digestion: + metabolites: + Ethanol: 0.3 - type: reagent id: JackRose @@ -1318,13 +1200,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.15 + Digestion: + metabolites: + Ethanol: 0.3 - type: reagent id: Manhattan @@ -1402,13 +1280,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.15 + Digestion: + metabolites: + Ethanol: 0.3 - type: reagent id: Mead @@ -1472,13 +1346,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.25 + Digestion: + metabolites: + Ethanol: 0.5 - type: reagent id: Neurotoxin @@ -1495,15 +1365,12 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: + Digestion: + metabolites: + Ethanol: 0.5 effects: - !type:SatiateThirst factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.25 - Poison: - effects: - !type:HealthChange damage: types: @@ -1524,13 +1391,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 + Digestion: + metabolites: + Ethanol: 0.4 - type: reagent id: Patron @@ -1547,13 +1410,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: true metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 + Digestion: + metabolites: + Ethanol: 0.4 - type: reagent id: RedMead @@ -1570,13 +1429,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 + Digestion: + metabolites: + Ethanol: 0.4 - type: reagent id: PinaColada @@ -1593,13 +1448,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 + Digestion: + metabolites: + Ethanol: 0.4 - type: reagent id: Radler @@ -1646,13 +1497,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.07 + Digestion: + metabolites: + Ethanol: 0.14 - type: reagent id: CogChamp @@ -1669,16 +1516,15 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: + Digestion: + metabolites: + Ethanol: 0.3 effects: - !type:GenericStatusEffect key: RatvarianLanguage component: RatvarianLanguage - !type:SatiateThirst factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.15 - type: reagent id: Silencer @@ -1695,7 +1541,7 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: + Digestion: effects: - !type:GenericStatusEffect key: Muted @@ -1781,13 +1627,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.15 + Digestion: + metabolites: + Ethanol: 0.3 - type: reagent id: TheMartinez @@ -1820,16 +1662,10 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.15 - - !type:AdjustReagent - reagent: Uranium - amount: 0.05 + Digestion: + metabolites: + Ethanol: 0.3 + Uranium: 0.1 - type: reagent id: ToxinsSpecial @@ -1876,13 +1712,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.15 + Digestion: + metabolites: + Ethanol: 0.3 - type: reagent id: VodkaTonic @@ -1899,13 +1731,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.07 + Digestion: + metabolites: + Ethanol: 0.14 fizziness: 0.4 - type: reagent @@ -1923,13 +1751,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.07 + Digestion: + metabolites: + Ethanol: 0.14 fizziness: 0.3 - type: reagent @@ -1947,13 +1771,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.07 + Digestion: + metabolites: + Ethanol: 0.14 fizziness: 0.4 - type: reagent @@ -1965,13 +1785,9 @@ flavor: white-gilgamesh color: "#e5d27e" metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 1 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.15 + Digestion: + metabolites: + Ethanol: 0.3 fizziness: 0.5 - type: reagent @@ -1989,13 +1805,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.15 + Digestion: + metabolites: + Ethanol: 0.3 - type: reagent id: VodkaRedBool @@ -2012,16 +1824,13 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: true metabolisms: - Drink: + Digestion: + metabolites: + Ethanol: 0.2 + Theobromine: 0.1 effects: - !type:SatiateThirst factor: 1 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.10 - - !type:AdjustReagent - reagent: Theobromine - amount: 0.05 - !type:ModifyStatusEffect effectProto: StatusEffectDrowsiness time: 1 @@ -2043,16 +1852,13 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: + Digestion: + metabolites: + Ethanol: 0.3 + Theobromine: 0.1 effects: - !type:SatiateThirst factor: 1 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.15 - - !type:AdjustReagent - reagent: Theobromine - amount: 0.05 - !type:ModifyStatusEffect effectProto: StatusEffectDrowsiness time: 1 @@ -2074,16 +1880,13 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: true metabolisms: - Drink: + Digestion: + metabolites: + Ethanol: 0.2 + Theobromine: 0.1 effects: - !type:SatiateThirst factor: 1 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.10 - - !type:AdjustReagent - reagent: Theobromine - amount: 0.05 - !type:ModifyStatusEffect effectProto: StatusEffectDrowsiness time: 1 @@ -2105,16 +1908,13 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: + Digestion: + metabolites: + Ethanol: 0.3 + Theobromine: 0.1 effects: - !type:SatiateThirst factor: 1 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.15 - - !type:AdjustReagent - reagent: Theobromine - amount: 0.05 - !type:ModifyStatusEffect effectProto: StatusEffectDrowsiness time: 1 @@ -2136,16 +1936,13 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: true metabolisms: - Drink: + Digestion: + metabolites: + Ethanol: 0.14 + Theobromine: 0.1 effects: - !type:SatiateThirst factor: 1 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.07 - - !type:AdjustReagent - reagent: Theobromine - amount: 0.05 - !type:ModifyStatusEffect effectProto: StatusEffectDrowsiness time: 1 @@ -2167,16 +1964,13 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: + Digestion: + metabolites: + Ethanol: 0.3 + Theobromine: 0.1 effects: - !type:SatiateThirst factor: 1 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.15 - - !type:AdjustReagent - reagent: Theobromine - amount: 0.05 - !type:ModifyStatusEffect effectProto: StatusEffectDrowsiness time: 1 @@ -2198,13 +1992,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 + Digestion: + metabolites: + Ethanol: 0.4 - type: reagent id: Caipirinha @@ -2221,13 +2011,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.1 + Digestion: + metabolites: + Ethanol: 0.2 - type: reagent id: MoscowMule @@ -2244,16 +2030,10 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 - - !type:AdjustReagent - reagent: Copper - amount: 0.05 + Digestion: + metabolites: + Ethanol: 0.2 + Copper: 0.1 - type: reagent id: Mimeosa @@ -2270,16 +2050,15 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: + Digestion: + metabolites: + Ethanol: 0.14 effects: - !type:GenericStatusEffect key: Muted component: Muted - !type:SatiateThirst factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.07 - type: reagent id: Mimosa @@ -2296,13 +2075,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.07 + Digestion: + metabolites: + Ethanol: 0.14 - type: reagent id: Mayojito @@ -2319,7 +2094,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: + Digestion: + metabolites: + Ethanol: 0.15 effects: - !type:Vomit conditions: @@ -2333,9 +2110,6 @@ Poison: .5 - !type:SatiateThirst factor: 1 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.15 - type: reagent id: DeathInTheAfternoon @@ -2352,13 +2126,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.3 + Digestion: + metabolites: + Ethanol: 0.6 - type: reagent id: Empress75 @@ -2375,13 +2145,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.3 + Digestion: + metabolites: + Ethanol: 0.6 - type: reagent id: EspressoMartini @@ -2398,13 +2164,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 + Digestion: + metabolites: + Ethanol: 0.4 - type: reagent id: Daiquiri @@ -2421,13 +2183,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.1 + Digestion: + metabolites: + Ethanol: 0.2 - type: reagent id: TheSunAlsoRises @@ -2444,13 +2202,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.3 + Digestion: + metabolites: + Ethanol: 0.6 - type: reagent id: WhiskeySour @@ -2467,13 +2221,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.2 + Digestion: + metabolites: + Ethanol: 0.4 - type: reagent id: ZombieCocktail @@ -2490,13 +2240,9 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 1 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.25 + Digestion: + metabolites: + Ethanol: 0.5 - type: reagent id: BacchusBlessing @@ -2513,16 +2259,12 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: + Digestion: + metabolites: + Ethanol: 0.9 effects: - !type:SatiateThirst factor: 3 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.45 # TODO: Figure out why setting this to 0 means this does more damage... WHAT BUG IS THIS?!! - Alcohol: - metabolismRate : 0.05 - effects: - !type:Drunk boozePower: 10 - !type:HealthChange diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/base_drink.yml b/Resources/Prototypes/Reagents/Consumable/Drink/base_drink.yml index 1311042949..d0ea31063c 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/base_drink.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/base_drink.yml @@ -5,7 +5,7 @@ slipData: requiredSlipSpeed: 3.5 metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: 3 @@ -26,7 +26,7 @@ parent: BaseDrink abstract: true metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: 2 @@ -49,13 +49,12 @@ requiredSlipSpeed: 3.5 friction: 0.4 metabolisms: - Drink: + Digestion: + metabolites: + Ethanol: 0.12 effects: - !type:SatiateThirst factor: 2 - - !type:AdjustReagent - reagent: Ethanol - amount: 0.06 reactiveEffects: Flammable: methods: [ Touch ] diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml b/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml index d80dc5f8b3..772a145851 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/drinks.yml @@ -8,7 +8,9 @@ color: "#664300" recognizable: true metabolisms: - Drink: + Digestion: + metabolites: + Theobromine: 0.1 effects: - !type:SatiateThirst factor: 2 @@ -16,9 +18,6 @@ effectProto: StatusEffectDrowsiness time: 2 type: Remove - - !type:AdjustReagent - reagent: Theobromine - amount: 0.05 metamorphicSprite: sprite: Objects/Consumable/Drinks/coffeeglass.rsi state: icon_empty @@ -36,13 +35,9 @@ color: "#664300" recognizable: true metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Theobromine - amount: 0.05 + Digestion: + metabolites: + Theobromine: 0.1 - type: reagent id: Cream @@ -53,7 +48,7 @@ flavor: creamy color: "#DFD7AF" metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: 1 @@ -67,7 +62,7 @@ flavor: nutty color: "#f4eadb" metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: 4 # Coconut water is 94% water @@ -81,7 +76,7 @@ flavor: creamy color: "#FFEABF" metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: 2 @@ -101,7 +96,7 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: 2 @@ -157,13 +152,12 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: + Digestion: + metabolites: + Theobromine: 0.1 effects: - !type:SatiateThirst factor: 2 - - !type:AdjustReagent - reagent: Theobromine - amount: 0.05 - !type:ModifyStatusEffect effectProto: StatusEffectDrowsiness time: 2 @@ -199,13 +193,10 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Theobromine - amount: 0.05 + Digestion: + metabolites: + Theobromine: 0.1 + - type: reagent id: JuiceBerryPoison @@ -217,11 +208,9 @@ flavor: bitter color: "#6600CC" metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst - Poison: - effects: - !type:HealthChange damage: types: @@ -243,7 +232,7 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: 2 @@ -263,7 +252,7 @@ - !type:PlantAdjustWater amount: 0.9 metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: 4 @@ -284,7 +273,7 @@ color: "#DEDACD" recognizable: true metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: 4 @@ -307,7 +296,7 @@ flavor: terrible color: "#faffba" metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: -2 @@ -319,7 +308,7 @@ group: Drinks physicalDesc: reagent-physical-desc-nothing metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: 2 @@ -341,7 +330,7 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: 6 @@ -349,8 +338,6 @@ effectProto: StatusEffectDrowsiness time: 3 type: Remove - Poison: - effects: - !type:HealthChange damage: types: @@ -382,7 +369,7 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: 2 @@ -401,13 +388,9 @@ color: "#8a5a3a" recognizable: true metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Theobromine - amount: 0.05 + Digestion: + metabolites: + Theobromine: 0.1 metamorphicSprite: sprite: Objects/Consumable/Drinks/teaglass.rsi state: icon_empty @@ -446,11 +429,11 @@ meltingPoint: 0.0 friction: 0.4 metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: 4 - Gas: + Respiration: effects: - !type:HealthChange ignoreResistances: true @@ -476,7 +459,7 @@ boilingPoint: 100.0 friction: 0.05 # Copied from Ice Crust metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: 3 # Slightly worse for quenching thirst than just straight water @@ -499,7 +482,7 @@ flavor: cheapnoodles color: "#664300" metabolisms: - Food: + Digestion: effects: - !type:SatiateHunger factor: 1 @@ -513,7 +496,7 @@ flavor: cheapnoodles color: "#664300" metabolisms: - Food: + Digestion: effects: - !type:SatiateHunger factor: 4 @@ -533,13 +516,12 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: + Digestion: + metabolites: + Theobromine: 0.1 effects: - !type:SatiateThirst factor: 4 - - !type:AdjustReagent - reagent: Theobromine - amount: 0.05 - type: reagent id: Pilk @@ -550,7 +532,7 @@ flavor: pilk color: "#e7c69f" metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: 1 @@ -606,7 +588,7 @@ flavor: mopwata color: "#59502b" metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: 0.6 diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/juice.yml b/Resources/Prototypes/Reagents/Consumable/Drink/juice.yml index ff07c341d8..43bd9efedc 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/juice.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/juice.yml @@ -53,16 +53,10 @@ flavor: carrot color: "#FF8820" metabolisms: - Drink: - effects: - - !type:SatiateThirst - factor: 2 - - !type:AdjustReagent - reagent: Oculine - amount: 0.5 - - !type:AdjustReagent - reagent: Nutriment - amount: 0.5 + Digestion: + metabolites: + Oculine: 1 + Nutriment: 1 - type: reagent id: JuiceGrape diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml b/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml index 67c0bf1615..73bff27e67 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/soda.yml @@ -14,7 +14,7 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: 2 @@ -38,7 +38,7 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: 4 @@ -76,7 +76,9 @@ flavor: energydrink color: "#ffffbf" metabolisms: - Drink: + Digestion: + metabolites: + Theobromine: 0.2 effects: - !type:SatiateThirst factor: 2 @@ -84,9 +86,6 @@ effectProto: StatusEffectDrowsiness time: 2 type: Remove - - !type:AdjustReagent - reagent: Theobromine - amount: 0.1 fizziness: 0.4 - type: reagent @@ -204,7 +203,7 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: 4 @@ -263,15 +262,12 @@ metamorphicFillBaseName: fill- metamorphicChangeColor: false metabolisms: - Drink: + Digestion: + metabolites: + Theobromine: 0.2 effects: - !type:SatiateThirst factor: 2 - - !type:AdjustReagent - reagent: Theobromine - amount: 0.1 - Poison: - effects: - !type:HealthChange conditions: - !type:MetabolizerTypeCondition diff --git a/Resources/Prototypes/Reagents/Consumable/Food/condiments.yml b/Resources/Prototypes/Reagents/Consumable/Food/condiments.yml index a7c40e5533..61255df5e6 100644 --- a/Resources/Prototypes/Reagents/Consumable/Food/condiments.yml +++ b/Resources/Prototypes/Reagents/Consumable/Food/condiments.yml @@ -127,7 +127,7 @@ color: saddlebrown recognizable: true metabolisms: - Food: + Digestion: effects: - !type:SatiateHunger factor: 0.5 @@ -159,7 +159,7 @@ - !type:PlantAdjustHealth amount: -2 metabolisms: - Food: + Digestion: effects: # eating salt on its own kinda sucks, kids - !type:SatiateThirst @@ -178,7 +178,7 @@ tileReactions: - !type:SpillTileReaction metabolisms: - Food: + Digestion: # 12 diona blood for 1 unit of syrup, this stuff better be worthwhile. effects: - !type:SatiateHunger diff --git a/Resources/Prototypes/Reagents/Consumable/Food/food.yml b/Resources/Prototypes/Reagents/Consumable/Food/food.yml index 45c826eff9..1914262a4e 100644 --- a/Resources/Prototypes/Reagents/Consumable/Food/food.yml +++ b/Resources/Prototypes/Reagents/Consumable/Food/food.yml @@ -8,7 +8,7 @@ flavor: nutriment color: "#24591F" metabolisms: - Food: + Metabolites: effects: - !type:SatiateHunger plantMetabolism: @@ -27,7 +27,7 @@ flavor: vitamin color: "#D3D3D3" metabolisms: - Food: #This makes it not compete with medicines, a large bonus for something that can heal + Metabolites: #This makes it not compete with medicines, a large bonus for something that can heal effects: - !type:HealthChange probability: 0.5 @@ -56,7 +56,7 @@ flavor: protein color: "#FFFFE5" metabolisms: - Food: + Metabolites: effects: - !type:HealthChange probability: 0.5 @@ -78,7 +78,7 @@ color: white meltingPoint: 146.0 metabolisms: - Food: + Metabolites: effects: - !type:SatiateHunger conditions: diff --git a/Resources/Prototypes/Reagents/Consumable/Food/ingredients.yml b/Resources/Prototypes/Reagents/Consumable/Food/ingredients.yml index 8813b5bb66..285458baa7 100644 --- a/Resources/Prototypes/Reagents/Consumable/Food/ingredients.yml +++ b/Resources/Prototypes/Reagents/Consumable/Food/ingredients.yml @@ -8,16 +8,13 @@ color: white recognizable: true metabolisms: - Food: + Digestion: + metabolites: + Sugar: 0.4 + Nutriment: 0.2 effects: - - !type:AdjustReagent - reagent: Sugar - amount: 0.4 - !type:SatiateThirst factor: -0.2 #its flour - - !type:AdjustReagent - reagent: Nutriment - amount: 0.1 - type: reagent id: Cornmeal @@ -28,13 +25,12 @@ flavor: corn #so corn doesnt taste chalky color: tan metabolisms: - Food: + Digestion: + metabolites: + Nutriment: 0.2 effects: - !type:SatiateThirst factor: -0.2 #its cornflour - - !type:AdjustReagent - reagent: Nutriment - amount: 0.1 - type: reagent id: Oats @@ -45,14 +41,10 @@ flavor: oats color: tan metabolisms: - Food: - effects: - - !type:AdjustReagent - reagent: Sugar - amount: 0.2 - - !type:AdjustReagent - reagent: Nutriment - amount: 0.3 + Digestion: + metabolites: + Sugar: 0.4 + Nutriment: 0.6 - type: reagent id: Enzyme @@ -73,11 +65,9 @@ color: white recognizable: true metabolisms: - Food: - effects: - - !type:AdjustReagent - reagent: UncookedAnimalProteins - amount: 0.5 + Digestion: + metabolites: + UncookedAnimalProteins: 1 - type: reagent id: EggCooked @@ -89,11 +79,9 @@ color: white recognizable: true metabolisms: - Food: - effects: - - !type:AdjustReagent - reagent: Protein - amount: 1 + Digestion: + metabolites: + Protein: 2 - type: reagent id: Blackpepper @@ -105,7 +93,7 @@ color: black recognizable: true metabolisms: - Food: + Digestion: effects: - !type:Emote emote: Cough @@ -134,14 +122,11 @@ color: tan recognizable: true metabolisms: - Food: + Digestion: + metabolites: + Water: 0.8 + Vitamin: 0.2 effects: - - !type:AdjustReagent - reagent: Water - amount: 0.4 - - !type:AdjustReagent - reagent: Vitamin - amount: 0.1 - !type:Vomit probability: 0.1 conditions: @@ -159,14 +144,10 @@ color: white recognizable: true metabolisms: - Food: - effects: - - !type:AdjustReagent - reagent: Sugar - amount: 0.4 - - !type:AdjustReagent - reagent: Nutriment - amount: 0.1 + Digestion: + metabolites: + Sugar: 0.8 + Nutriment: 0.2 - type: reagent id: OilOlive @@ -179,11 +160,9 @@ color: olive recognizable: true metabolisms: - Food: - effects: - - !type:AdjustReagent - reagent: Nutriment - amount: 0.75 + Digestion: + metabolites: + Nutriment: 1.5 - type: reagent id: Oil @@ -213,27 +192,24 @@ meltingPoint: 146 boilingPoint: 410 # Really high boiling point compared to its melting metabolisms: - Food: + Digestion: + metabolites: + Nutriment: 1.5 effects: - - !type:AdjustReagent - reagent: Nutriment #Oils enhance nutrition - amount: 0.75 - Poison: - effects: - - !type:AdjustTemperature - amount: 250 # thermal energy, not temp - - !type:HealthChange - conditions: - - !type:ReagentCondition - reagent: CapsaicinOil - min: 5 - damage: - types: - Caustic: 1 - - !type:PopupMessage - type: Local - messages: [ "capsaicin-effect-light-burn" ] - probability: 0.2 + - !type:AdjustTemperature + amount: 250 # thermal energy, not temp + - !type:HealthChange + conditions: + - !type:ReagentCondition + reagent: CapsaicinOil + min: 5 + damage: + types: + Caustic: 1 + - !type:PopupMessage + type: Local + messages: [ "capsaicin-effect-light-burn" ] + probability: 0.2 - type: reagent id: CocoaPowder #Candy and chocolate @@ -245,7 +221,7 @@ color: "#800000" meltingPoint: 146.0 metabolisms: - Food: + Digestion: effects: - !type:SatiateHunger conditions: @@ -273,11 +249,9 @@ boilingPoint: 100.0 recognizable: true metabolisms: - Food: - effects: - - !type:AdjustReagent - reagent: Nutriment - amount: 0.75 + Digestion: + metabolites: + Nutriment: 1.5 - type: reagent id: TeaPowder @@ -288,13 +262,12 @@ color: "#7F8400" group: Foods metabolisms: - Food: + Digestion: + metabolites: + Nutriment: 0.2 effects: - !type:SatiateThirst factor: -0.2 - - !type:AdjustReagent - reagent: Nutriment - amount: 0.1 - type: reagent id: FrostOil @@ -305,12 +278,9 @@ flavor: cold color: skyblue metabolisms: - Food: - effects: - - !type:AdjustReagent - reagent: Nutriment #Oils enhance nutrition - amount: 0.75 - Poison: + Digestion: + metabolites: + Nutriment: 1.5 effects: - !type:AdjustTemperature amount: -250 # thermal energy, not temp diff --git a/Resources/Prototypes/Reagents/biological.yml b/Resources/Prototypes/Reagents/biological.yml index 651e4f1fbc..2240066bb5 100644 --- a/Resources/Prototypes/Reagents/biological.yml +++ b/Resources/Prototypes/Reagents/biological.yml @@ -15,7 +15,9 @@ standsout: true physicalDesc: reagent-physical-desc-ferrous metabolisms: - Drink: + Digestion: + metabolites: + UncookedAnimalProteins: 0.2 effects: - !type:SatiateThirst factor: 1.0 @@ -23,13 +25,6 @@ - !type:MetabolizerTypeCondition type: [ Human ] inverted: true - Food: - effects: - - !type:AdjustReagent - reagent: UncookedAnimalProteins - amount: 0.1 - Medicine: - effects: - !type:HealthChange conditions: - !type:MetabolizerTypeCondition @@ -71,7 +66,7 @@ tileReactions: - !type:SpillTileReaction metabolisms: - Food: + Digestion: # Delicious! effects: - !type:SatiateHunger @@ -103,7 +98,7 @@ tileReactions: - !type:SpillTileReaction metabolisms: - Food: + Digestion: # Sweet! effects: - !type:SatiateHunger @@ -146,12 +141,12 @@ flavor: bitter color: "#2b0700" metabolisms: - Drink: + Digestion: # Disgusting! effects: - !type:SatiateThirst factor: -0.5 - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -170,7 +165,7 @@ color: "#f4692e" recognizable: true metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: 1.5 @@ -222,13 +217,12 @@ requiredSlipSpeed: 4.0 #It's not as slippery as water friction: 0.4 metabolisms: - Drink: + Digestion: + metabolites: + Nutriment: 0.1 effects: - !type:SatiateThirst factor: 0.5 - - !type:AdjustReagent - reagent: Nutriment - amount: 0.1 footstepSound: collection: FootstepBlood params: @@ -243,12 +237,10 @@ flavor: mindful color: "#C584B8" metabolisms: - Drink: + Digestion: effects: - !type:SatiateHunger factor: 1.5 - Poison: - effects: - !type:HealthChange damage: types: diff --git a/Resources/Prototypes/Reagents/botany.yml b/Resources/Prototypes/Reagents/botany.yml index 19133ba551..9f5fbe38ea 100644 --- a/Resources/Prototypes/Reagents/botany.yml +++ b/Resources/Prototypes/Reagents/botany.yml @@ -10,7 +10,7 @@ - !type:PlantAdjustNutrition amount: 2 metabolisms: - Food: + Digestion: effects: - !type:SatiateHunger conditions: @@ -34,7 +34,7 @@ probability: 0.3 amount: 0.4 metabolisms: - Medicine: + Bloodstream: effects: - !type:SatiateHunger conditions: @@ -62,7 +62,7 @@ - !type:PlantAdjustPests amount: -6 metabolisms: - Medicine: + Bloodstream: effects: - !type:HealthChange damage: @@ -90,7 +90,7 @@ - !type:PlantAdjustMutationMod amount: 0.1 metabolisms: - Medicine: + Bloodstream: effects: - !type:HealthChange damage: @@ -122,7 +122,7 @@ amount: 1 - !type:RobustHarvest {} metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -146,8 +146,6 @@ Asphyxiation: 1 Heat: 2 Poison: 1 - Medicine: - effects: - !type:Polymorph prototype: TreeMorph conditions: @@ -187,7 +185,7 @@ - !type:PlantAdjustWeeds amount: -6 metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -213,13 +211,13 @@ - !type:PlantAdjustHealth amount: 0.5 metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: types: Caustic: 1 - Gas: + Respiration: effects: - !type:HealthChange conditions: @@ -303,7 +301,7 @@ amount: 1 - !type:PlantDiethylamine {} metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: diff --git a/Resources/Prototypes/Reagents/chemicals.yml b/Resources/Prototypes/Reagents/chemicals.yml index 7c0f1c8f09..b575ad47bd 100644 --- a/Resources/Prototypes/Reagents/chemicals.yml +++ b/Resources/Prototypes/Reagents/chemicals.yml @@ -18,7 +18,7 @@ boilingPoint: 55.5 meltingPoint: -50.0 metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -35,7 +35,7 @@ boilingPoint: 4200.0 meltingPoint: 3550.0 metabolisms: - Medicine: + Bloodstream: effects: - !type:HealthChange damage: @@ -60,7 +60,7 @@ physicalDesc: reagent-physical-desc-alkaline color: "#e5420b" metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -84,7 +84,7 @@ - Science color: "#776291" metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -123,7 +123,7 @@ boilingPoint: 353.2 meltingPoint: 278.7 metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -148,14 +148,12 @@ boilingPoint: 1661.0 meltingPoint: 596.0 metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: types: Heat: 1.5 - Medicine: - effects: - !type:Vomit conditions: - !type:ReagentCondition @@ -181,7 +179,7 @@ physicalDesc: reagent-physical-desc-grainy color: "#F0F0F0" metabolisms: - Poison: + Bloodstream: effects: - !type:SatiateThirst factor: -5 # This is basically industrial dessicant @@ -209,7 +207,7 @@ physicalDesc: reagent-physical-desc-refreshing color: "#bf1365" metabolisms: - Medicine: + Bloodstream: effects: - !type:HealthChange damage: diff --git a/Resources/Prototypes/Reagents/cleaning.yml b/Resources/Prototypes/Reagents/cleaning.yml index c6eaade16d..19a0898121 100644 --- a/Resources/Prototypes/Reagents/cleaning.yml +++ b/Resources/Prototypes/Reagents/cleaning.yml @@ -11,7 +11,7 @@ boilingPoint: 111.0 meltingPoint: -5.0 metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -60,7 +60,7 @@ requiredSlipSpeed: 3.5 friction: 0.3 # Slightly less friction than water, but not as bad as space lube metabolisms: - Food: + Digestion: effects: - !type:Vomit conditions: @@ -68,8 +68,6 @@ reagent: SoapReagent min: 6 probability: 0.20 - Drink: - effects: - !type:Vomit conditions: - !type:ReagentCondition @@ -115,13 +113,13 @@ - !type:ModifyBleed amount: -1.5 metabolisms: - Narcotic: + Bloodstream: effects: - !type:ModifyStatusEffect effectProto: StatusEffectSeeingRainbow time: 5 type: Add - Drink: + Digestion: effects: - !type:GenericStatusEffect key: Muted diff --git a/Resources/Prototypes/Reagents/elements.yml b/Resources/Prototypes/Reagents/elements.yml index 401fdfd2eb..aa59d724e7 100644 --- a/Resources/Prototypes/Reagents/elements.yml +++ b/Resources/Prototypes/Reagents/elements.yml @@ -40,7 +40,7 @@ - !type:PlantAdjustHealth amount: -1 metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -58,7 +58,7 @@ boilingPoint: 2595.0 meltingPoint: 1083.0 metabolisms: - Poison: + Bloodstream: metabolismRate: 0.1 effects: - !type:HealthChange @@ -69,8 +69,6 @@ damage: types: Poison: 0.1 - Medicine: - effects: - !type:ModifyBloodLevel conditions: - !type:MetabolizerTypeCondition @@ -97,7 +95,7 @@ - !type:PlantAdjustHealth amount: -2 metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -148,7 +146,7 @@ boilingPoint: 2862.0 meltingPoint: 1538.0 metabolisms: - Poison: + Bloodstream: metabolismRate: 0.1 effects: - !type:HealthChange @@ -158,8 +156,6 @@ damage: types: Poison: 0.1 - Medicine: - effects: - !type:ModifyBloodLevel conditions: - !type:MetabolizerTypeCondition @@ -178,7 +174,7 @@ meltingPoint: 180.5 boilingPoint: 1330.0 metabolisms: - Poison: + Bloodstream: metabolismRate: 0.1 effects: - !type:HealthChange @@ -205,7 +201,7 @@ meltingPoint: -38.83 boilingPoint: 356.73 metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -267,7 +263,7 @@ boilingPoint: 3265.0 meltingPoint: 1414.0 metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -296,7 +292,7 @@ boilingPoint: 445.0 meltingPoint: 120.0 metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -335,7 +331,7 @@ probability: 0.2 amount: 0.1 metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: diff --git a/Resources/Prototypes/Reagents/fun.yml b/Resources/Prototypes/Reagents/fun.yml index b4cb53747f..f9b99cc5b9 100644 --- a/Resources/Prototypes/Reagents/fun.yml +++ b/Resources/Prototypes/Reagents/fun.yml @@ -12,7 +12,7 @@ maxOnTileWhitelist: tags: [ Carpet ] metabolisms: - Poison: + Bloodstream: effects: - !type:PopupMessage type: Local @@ -35,7 +35,7 @@ flavor: fiber color: "#808080" metabolisms: - Food: + Digestion: effects: - !type:SatiateHunger conditions: @@ -62,7 +62,7 @@ - !type:CleanTileReaction # Bees are extremely obsessive about cleanliness within what they consider their hive. cleanCost: 0 # Consume absolutely zero bees. Buzz buzz. metabolisms: - Poison: + Bloodstream: effects: - !type:PopupMessage type: Local @@ -163,8 +163,8 @@ flavor: shocking color: "#FDD023" metabolisms: - Poison: - metabolismRate : 2.0 + Bloodstream: + metabolismRate: 2.0 effects: - !type:Electrocute siemensCoefficient: 0.5 @@ -193,7 +193,7 @@ emote: Scream probability: 0.7 metabolisms: - Poison: + Bloodstream: metabolismRate : 3.00 effects: - !type:HealthChange @@ -248,7 +248,7 @@ effects: - !type:Extinguish # cold metabolisms: - Poison: + Bloodstream: metabolismRate : 0.45 effects: - !type:HealthChange @@ -314,7 +314,7 @@ slipData: requiredSlipSpeed: 3.5 #clown juice gotta slip metabolisms: - Medicine: + Bloodstream: effects: - !type:Emote emote: Laugh @@ -335,7 +335,7 @@ flavor: weh color: "#59b23a" metabolisms: - Poison: + Bloodstream: metabolismRate: 0.25 effects: - !type:Emote @@ -370,7 +370,7 @@ flavor: hew color: "#a64dc5" metabolisms: - Poison: + Bloodstream: metabolismRate: 0.25 effects: - !type:Emote @@ -405,7 +405,7 @@ flavor: dogfood color: "#ed9715" metabolisms: - Poison: + Bloodstream: metabolismRate: 0.2 effects: - !type:HealthChange @@ -439,7 +439,7 @@ flavor: cannedtuna color: "#d8bed8" metabolisms: - Poison: + Bloodstream: metabolismRate: 0.2 effects: - !type:HealthChange @@ -490,7 +490,7 @@ flavor: dogfood color: "#b87333" metabolisms: - Poison: + Bloodstream: metabolismRate: 0.2 effects: - !type:HealthChange diff --git a/Resources/Prototypes/Reagents/gases.yml b/Resources/Prototypes/Reagents/gases.yml index 111d83b5d9..8b7b62155d 100644 --- a/Resources/Prototypes/Reagents/gases.yml +++ b/Resources/Prototypes/Reagents/gases.yml @@ -11,7 +11,7 @@ boilingPoint: -183.0 meltingPoint: -218.4 metabolisms: - Poison: + Bloodstream: effects: - !type:Oxygenate conditions: @@ -42,7 +42,7 @@ type: [ Vox ] clear: true time: 5 - Gas: + Respiration: effects: - !type:Oxygenate conditions: @@ -88,7 +88,7 @@ - !type:FlammableTileReaction temperatureMultiplier: 1.5 metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -97,7 +97,7 @@ - !type:AdjustReagent reagent: Inaprovaline amount: -2.0 - Gas: + Respiration: effects: - !type:HealthChange ignoreResistances: true @@ -136,13 +136,13 @@ - !type:Flammable multiplier: 0.8 metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: types: Radiation: 1.5 - Gas: + Respiration: effects: - !type:HealthChange ignoreResistances: true @@ -165,7 +165,7 @@ flavor: bitter color: "#66ff33" metabolisms: - Poison: + Bloodstream: effects: - !type:Oxygenate conditions: @@ -187,7 +187,7 @@ type: [ Plant ] inverted: true factor: -4 - Gas: + Respiration: effects: - !type:Oxygenate conditions: @@ -226,13 +226,13 @@ boilingPoint: -195.8 meltingPoint: -210.0 metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: types: Cold: 0.5 # liquid nitrogen is cold - Gas: + Respiration: effects: - !type:Oxygenate conditions: @@ -264,13 +264,13 @@ boilingPoint: -88 meltingPoint: -90 metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: types: Poison: 1 - Gas: + Respiration: effects: - !type:Emote minScale: 0.2 @@ -342,7 +342,7 @@ boilingPoint: -195.8 meltingPoint: -210.0 metabolisms: - Narcotic: + Bloodstream: effects: - !type:HealthChange ignoreResistances: true @@ -367,7 +367,7 @@ probability: 0.1 conditions: minScale: 2 - Gas: + Respiration: effects: - !type:HealthChange minScale: 0.5 diff --git a/Resources/Prototypes/Reagents/medicine.yml b/Resources/Prototypes/Reagents/medicine.yml index e69a277e4e..f6a6bdf9ed 100644 --- a/Resources/Prototypes/Reagents/medicine.yml +++ b/Resources/Prototypes/Reagents/medicine.yml @@ -9,7 +9,7 @@ flavor: medicine color: "#081a80" metabolisms: - Medicine: + Bloodstream: effects: - !type:ModifyStatusEffect effectProto: StatusEffectScrambled @@ -27,7 +27,7 @@ flavor: medicine color: "#3a1d8a" metabolisms: - Medicine: + Bloodstream: effects: - !type:HealthChange damage: @@ -81,7 +81,7 @@ flavor: medicine color: "#64ffe6" metabolisms: - Medicine: + Bloodstream: effects: - !type:AdjustReagent reagent: Histamine @@ -107,7 +107,7 @@ flavor: medicine color: "#2d5708" metabolisms: - Medicine: + Bloodstream: effects: - !type:ModifyStatusEffect effectProto: StatusEffectDrunk @@ -127,7 +127,7 @@ flavor: medicine color: "#bd5902" metabolisms: - Medicine: + Bloodstream: effects: - !type:HealthChange damage: @@ -145,7 +145,7 @@ flavor: medicine color: "#ffaa00" metabolisms: - Medicine: + Bloodstream: effects: - !type:EvenHealthChange damage: @@ -187,7 +187,7 @@ amount: 5 - !type:PlantCryoxadone {} metabolisms: - Medicine: + Bloodstream: effects: - !type:EvenHealthChange conditions: @@ -210,7 +210,7 @@ flavor: medicine color: "#32cd32" metabolisms: - Medicine: + Bloodstream: effects: - !type:HealthChange conditions: @@ -229,7 +229,7 @@ flavor: medicine color: "#215263" metabolisms: - Medicine: + Bloodstream: effects: - !type:HealthChange damage: @@ -263,7 +263,7 @@ flavor: medicine color: "#0041a8" metabolisms: - Medicine: + Bloodstream: effects: - !type:HealthChange damage: @@ -289,7 +289,7 @@ flavor: medicine color: "#4da0bd" metabolisms: - Medicine: + Bloodstream: effects: - !type:HealthChange damage: @@ -323,7 +323,7 @@ flavor: medicine color: "#d2fffa" metabolisms: - Medicine: + Bloodstream: effects: - !type:AdjustReagent conditions: @@ -395,7 +395,7 @@ flavor: medicine color: "#4cb580" metabolisms: - Medicine: + Bloodstream: effects: - !type:HealthChange damage: @@ -428,7 +428,7 @@ flavor: medicine color: "#422912" metabolisms: - Medicine: + Bloodstream: effects: - !type:Vomit conditions: @@ -446,7 +446,7 @@ flavor: medicine color: "#731024" metabolisms: - Medicine: + Bloodstream: metabolismRate: 0.1 # Smaller doses stabilize critical people for longer. Gives it a specific usecase as to not be entirely outclassed by dex+ effects: - !type:HealthChange @@ -469,7 +469,7 @@ flavor: medicine color: "#bf3d19" metabolisms: - Medicine: + Bloodstream: effects: - !type:HealthChange damage: @@ -504,7 +504,7 @@ flavor: medicine color: "#ff7db5" metabolisms: - Medicine: + Bloodstream: effects: - !type:HealthChange damage: @@ -538,7 +538,7 @@ flavor: medicine color: "#ff867d" metabolisms: - Medicine: + Bloodstream: effects: - !type:HealthChange probability: 0.3 @@ -589,7 +589,7 @@ - !type:PlantPhalanximine minScale: 4 metabolisms: - Medicine: + Bloodstream: metabolismRate: 0.1 effects: - !type:HealthChange @@ -624,7 +624,7 @@ flavor: violets color: "#9423FF" metabolisms: - Medicine: + Bloodstream: effects: - !type:HealthChange damage: @@ -652,7 +652,7 @@ flavor: medicine color: "#86caf7" metabolisms: - Medicine: + Bloodstream: effects: - !type:CureZombieInfection conditions: @@ -669,7 +669,7 @@ flavor: medicine color: "#1274b5" metabolisms: - Medicine: + Bloodstream: effects: - !type:CureZombieInfection innoculate: true @@ -687,7 +687,7 @@ flavor: medicine color: "#FFE774" metabolisms: - Medicine: + Bloodstream: effects: - !type:ModifyBleed amount: -0.5 @@ -701,7 +701,7 @@ flavor: salty color: "#0064C8" metabolisms: - Drink: + Bloodstream: effects: - !type:SatiateThirst factor: 6 @@ -717,7 +717,7 @@ flavor: medicine color: "#f4dab8" metabolisms: - Medicine: + Bloodstream: effects: - !type:HealthChange damage: @@ -736,7 +736,7 @@ - !type:PlantAdjustToxins amount: -5 metabolisms: - Medicine: + Bloodstream: effects: - !type:HealthChange damage: @@ -759,7 +759,7 @@ flavor: medicine color: "#d49a2f" metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -786,7 +786,7 @@ flavor: medicine color: "#ba7d7d" metabolisms: - Medicine: + Bloodstream: effects: # Medium-large quantities can hurt you instead, # but still technically stop your bleeding. @@ -810,7 +810,7 @@ flavor: medicine color: "#00e5ff" metabolisms: - Medicine: + Bloodstream: effects: - !type:HealthChange conditions: @@ -836,7 +836,7 @@ flavor: medicine color: "#2690b5" metabolisms: - Medicine: + Bloodstream: effects: # what the hell, this isn't satiating at all!! - !type:SatiateHunger @@ -852,7 +852,7 @@ flavor: medicine color: "#fcf7f9" metabolisms: - Medicine: + Bloodstream: effects: - !type:EvenHealthChange damage: @@ -870,7 +870,7 @@ flavor: medicine color: "#520e30" metabolisms: - Medicine: + Bloodstream: effects: - !type:EvenHealthChange conditions: @@ -928,7 +928,7 @@ flavor: medicine color: "#404040" metabolisms: - Medicine: + Bloodstream: effects: - !type:EyeDamage @@ -941,7 +941,7 @@ flavor: magical color: "#b50ee8" metabolisms: - Medicine: + Bloodstream: effects: - !type:MakeSentient conditions: @@ -958,7 +958,7 @@ flavor: medicine color: "#d5d5e4" metabolisms: - Medicine: + Bloodstream: effects: - !type:Jitter - !type:GenericStatusEffect @@ -988,7 +988,7 @@ flavor: medicine color: "#b0abaa" metabolisms: - Medicine: + Bloodstream: effects: - !type:ModifyStatusEffect effectProto: StatusEffectDrowsiness @@ -1014,7 +1014,7 @@ flavor: sweet color: "#e0a5b9" metabolisms: - Medicine: + Bloodstream: metabolismRate: 0.25 effects: - !type:HealthChange @@ -1074,7 +1074,7 @@ flavor: syrupy color: "#283332" metabolisms: - Medicine: + Bloodstream: metabolismRate: 0.25 effects: - !type:HealthChange @@ -1100,7 +1100,7 @@ flavor: fizzy color: "#b9bf93" metabolisms: - Medicine: + Bloodstream: metabolismRate: 0.25 effects: - !type:HealthChange @@ -1126,7 +1126,7 @@ flavor: sour color: "#ff3636" metabolisms: - Medicine: + Bloodstream: metabolismRate: 0.25 effects: - !type:HealthChange @@ -1154,7 +1154,7 @@ flavor: holy color: "#91C3F7" metabolisms: - Drink: + Digestion: effects: - !type:SatiateThirst factor: 3 @@ -1197,7 +1197,7 @@ flavor: syrupy color: "#aa4308" metabolisms: - Medicine: + Bloodstream: metabolismRate: 0.1 # slow metabolism to not be a godly combat med, its for treating burn victims efficiently effects: - !type:HealthChange @@ -1237,7 +1237,7 @@ flavor: metallic color: "#8147ff" metabolisms: - Medicine: + Bloodstream: metabolismRate: 0.25 effects: # heals shocks and removes shock chems @@ -1285,7 +1285,7 @@ color: "#b5e36d" worksOnTheDead: true metabolisms: - Medicine: + Bloodstream: effects: - !type:ReduceRotting seconds: 20 @@ -1306,7 +1306,7 @@ color: "#0cbfe9" worksOnTheDead: true metabolisms: - Medicine: + Bloodstream: effects: - !type:EvenHealthChange conditions: @@ -1343,7 +1343,7 @@ amount: 5 - !type:PlantCryoxadone {} metabolisms: - Medicine: + Bloodstream: effects: - !type:EvenHealthChange conditions: @@ -1370,7 +1370,7 @@ color: "#89f77f" worksOnTheDead: true metabolisms: - Medicine: + Bloodstream: effects: - !type:EvenHealthChange conditions: @@ -1388,7 +1388,7 @@ flavor: sweet color: "#A0A0A0" metabolisms: - Medicine: + Bloodstream: effects: - !type:PopupMessage conditions: @@ -1409,7 +1409,7 @@ flavor: bitter color: "#07E79E" metabolisms: - Medicine: + Bloodstream: effects: - !type:HealthChange conditions: @@ -1453,7 +1453,7 @@ flavor: medicine color: "#baa15d" metabolisms: - Medicine: + Bloodstream: effects: - !type:GenericStatusEffect key: RadiationProtection @@ -1478,7 +1478,7 @@ flavor: medicine color: "#27870a" metabolisms: - Medicine: + Bloodstream: effects: - !type:Emote emote: Yawn @@ -1532,7 +1532,7 @@ flavor: medicine color: "#d0e21b" metabolisms: - Medicine: + Bloodstream: effects: # One day this could be useful for treating blood clots, if we get those - !type:ModifyStatusEffect effectProto: StatusEffectAnticoagulant diff --git a/Resources/Prototypes/Reagents/narcotics.yml b/Resources/Prototypes/Reagents/narcotics.yml index df81a8db13..2a57cba68b 100644 --- a/Resources/Prototypes/Reagents/narcotics.yml +++ b/Resources/Prototypes/Reagents/narcotics.yml @@ -10,7 +10,7 @@ boilingPoint: 212.0 # Dexosyephedrine vape when? meltingPoint: 170.0 metabolisms: - Poison: + Bloodstream: # Main effects effects: - !type:HealthChange @@ -28,8 +28,7 @@ types: Poison: 3 # this is added to the base damage of the meth. Asphyxiation: 2 - Narcotic: - effects: + # Main effects - !type:MovementSpeedModifier walkSpeedModifier: 1.20 @@ -58,8 +57,7 @@ effectProto: StatusEffectDrowsiness time: 10 type: Remove - Medicine: - effects: + # Side effects - !type:ResetNarcolepsy conditions: @@ -78,7 +76,7 @@ boilingPoint: 255.0 meltingPoint: 36.0 metabolisms: - Narcotic: + Bloodstream: effects: # Main effects - !type:MovementSpeedModifier @@ -117,8 +115,6 @@ effectProto: StatusEffectDrowsiness time: 10 type: Remove - Medicine: - effects: # Side effects - !type:ResetNarcolepsy conditions: @@ -138,7 +134,7 @@ boilingPoint: 212.0 meltingPoint: 170.0 metabolisms: - Narcotic: + Bloodstream: effects: # Main effects - !type:MovementSpeedModifier @@ -189,8 +185,6 @@ min: 1 reagent: ChloralHydrate amount: -10 - Medicine: - effects: # Main effects - !type:ModifyBleed amount: -1.5 @@ -230,7 +224,7 @@ - !type:PlantAdjustHealth amount: -1 metabolisms: - Narcotic: + Bloodstream: effects: - !type:ModifyStatusEffect effectProto: StatusEffectSeeingRainbow @@ -260,7 +254,7 @@ flavor: bitter color: "#215263" metabolisms: - Narcotic: + Bloodstream: effects: - !type:MovementSpeedModifier walkSpeedModifier: 0.65 @@ -287,7 +281,7 @@ flavor: bitter color: "#63806e" metabolisms: - Narcotic: + Bloodstream: effects: - !type:ModifyStatusEffect effectProto: StatusEffectSeeingRainbow @@ -303,7 +297,7 @@ flavor: bitter color: "#ffff00" metabolisms: - Narcotic: + Bloodstream: effects: - !type:ModifyStatusEffect effectProto: StatusEffectSeeingRainbow @@ -322,7 +316,7 @@ boilingPoint: 444.0 meltingPoint: 128.0 metabolisms: - Narcotic: + Bloodstream: effects: # It would be nice to have speech slurred or mumbly, but accents are a bit iffy atm. Same for distortion effects. - !type:MovementSpeedModifier walkSpeedModifier: 0.65 @@ -347,7 +341,7 @@ boilingPoint: 255.0 meltingPoint: 36.0 metabolisms: - Narcotic: + Bloodstream: effects: - !type:GenericStatusEffect key: Muted @@ -367,7 +361,7 @@ boilingPoint: 255.0 meltingPoint: 36.0 metabolisms: - Narcotic: + Bloodstream: effects: - !type:PopupMessage type: Local @@ -415,7 +409,7 @@ boilingPoint: 255.0 meltingPoint: 36.0 metabolisms: - Narcotic: + Bloodstream: effects: - !type:PopupMessage type: Local @@ -472,7 +466,7 @@ flavor: paintthinner color: "#EE35FF" metabolisms: - Narcotic: + Bloodstream: effects: - !type:Emote emote: Laugh diff --git a/Resources/Prototypes/Reagents/pyrotechnic.yml b/Resources/Prototypes/Reagents/pyrotechnic.yml index 16dfc69286..50cfcd605e 100644 --- a/Resources/Prototypes/Reagents/pyrotechnic.yml +++ b/Resources/Prototypes/Reagents/pyrotechnic.yml @@ -28,7 +28,7 @@ - !type:FlammableTileReaction temperatureMultiplier: 2 metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -55,7 +55,7 @@ - !type:Flammable multiplier: 0.4 metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -76,7 +76,7 @@ flavor: bitter color: "#D4872A" metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -108,7 +108,7 @@ tileReactions: - !type:PryTileReaction metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -165,15 +165,13 @@ tileReactions: - !type:FlammableTileReaction {} metabolisms: - Food: + Bloodstream: effects: - !type:SatiateThirst factor: 1 conditions: - !type:MetabolizerTypeCondition type: [Vox] - Poison: - effects: - !type:HealthChange conditions: - !type:MetabolizerTypeCondition diff --git a/Resources/Prototypes/Reagents/toxins.yml b/Resources/Prototypes/Reagents/toxins.yml index 22aca1a7c1..1685301109 100644 --- a/Resources/Prototypes/Reagents/toxins.yml +++ b/Resources/Prototypes/Reagents/toxins.yml @@ -13,7 +13,7 @@ - !type:PlantAdjustHealth amount: -5 metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -36,7 +36,7 @@ - !type:PlantAdjustHealth amount: -5 metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -59,7 +59,7 @@ allowedDepartments: - Medical metabolisms: - Poison: + Bloodstream: effects: - !type:Emote emote: Yawn @@ -90,7 +90,7 @@ color: "#acc91a" physicalDesc: reagent-physical-desc-putrid metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -113,7 +113,7 @@ recognizable: true physicalDesc: reagent-physical-desc-fuzzy metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -151,7 +151,7 @@ emote: Scream probability: 0.3 metabolisms: - Poison: + Bloodstream: metabolismRate : 3.00 # High damage, high metabolism rate. You need a lot of units to crit. Simulates acid burning through you fast. effects: - !type:HealthChange @@ -176,7 +176,7 @@ color: "#48b3b8" physicalDesc: reagent-physical-desc-ferrous metabolisms: - Drink: + Bloodstream: effects: - !type:SatiateThirst factor: -1.5 @@ -211,7 +211,7 @@ emote: Scream probability: 0.2 metabolisms: - Poison: + Bloodstream: metabolismRate: 3.00 # High damage, high metabolism rate. You need a lot of units to crit. Simulates acid burning through you fast. effects: - !type:HealthChange @@ -260,7 +260,7 @@ emote: Scream probability: 0.1 metabolisms: - Poison: + Bloodstream: metabolismRate: 3.00 # Okay damage, high metabolism rate. You need a lot of units to crit. Simulates acid burning through you fast. effects: - !type:HealthChange @@ -287,13 +287,13 @@ - Botanist flavor: bitter color: "#00ff5f" - boilingPoint: 340282300000000000000000000000000000000 # Ethidium bromide, which doesn't boil. + boilingPoint: 340282300 # Ethidium bromide, which doesn't boil. meltingPoint: 261.0 plantMetabolism: - !type:PlantAdjustMutationLevel amount: 1 metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -309,7 +309,7 @@ contrabandSeverity: Major color: "#5f959c" metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -328,7 +328,7 @@ contrabandSeverity: Syndicate color: "#6b0007" metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -347,7 +347,7 @@ - !type:PlantAdjustToxins amount: 10 metabolisms: - Poison: + Bloodstream: effects: - !type:ModifyStatusEffect effectProto: StatusEffectSeeingRainbow @@ -363,7 +363,7 @@ physicalDesc: reagent-physical-desc-abrasive color: "#FA6464" metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange probability: 0.1 @@ -406,7 +406,7 @@ meltingPoint: 351 boilingPoint: 554 # I'm not a chemist, but it boils at 295, lower than melting point, idk how it works so I gave it higher value metabolisms: - Poison: + Bloodstream: metabolismRate: 0.05 effects: - !type:HealthChange @@ -431,7 +431,7 @@ contrabandSeverity: Major color: "#D6CE7B" metabolisms: - Poison: + Bloodstream: metabolismRate: 0.2 effects: - !type:HealthChange @@ -448,7 +448,7 @@ flavor: bitter color: "#000000" metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange damage: @@ -466,7 +466,7 @@ color: "#7e916e" worksOnTheDead: true metabolisms: - Medicine: + Bloodstream: effects: - !type:CauseZombieInfection conditions: @@ -483,7 +483,7 @@ flavor: bitter color: "#FFFFE5" metabolisms: - Food: + Digestion: effects: - !type:PopupMessage conditions: @@ -537,7 +537,7 @@ flavor: bitter color: "#F2E9D2" metabolisms: - Poison: + Digestion: metabolismRate: 0.05 effects: - !type:HealthChange @@ -562,7 +562,7 @@ - Medical color: "#AAAAAA" metabolisms: - Poison: + Bloodstream: effects: - !type:GenericStatusEffect key: Pacified @@ -578,7 +578,7 @@ flavor: bitter color: "#F2E9D2" metabolisms: - Poison: + Bloodstream: metabolismRate: 0.05 effects: - !type:Emote @@ -608,7 +608,7 @@ contrabandSeverity: Major color: "#5C6274" metabolisms: - Poison: + Bloodstream: metabolismRate: 0.03 # Effectively once every 30 seconds. effects: - !type:HealthChange @@ -625,7 +625,7 @@ contrabandSeverity: Major color: "#EBFF8E" metabolisms: - Poison: + Bloodstream: metabolismRate: 0.2 effects: - !type:HealthChange @@ -648,7 +648,7 @@ - !type:PlantAdjustToxins amount: 10 metabolisms: - Poison: + Bloodstream: effects: - !type:Jitter conditions: @@ -673,8 +673,8 @@ flavor: shocking color: "#FDD023" metabolisms: - Poison: - metabolismRate : 2.0 + Bloodstream: + metabolismRate: 2.0 effects: - !type:Electrocute electrocuteTime: 1 @@ -691,7 +691,7 @@ flavor: mothballs #why does weightloss juice taste like mothballs color: "#F0FFF0" metabolisms: - Poison: + Bloodstream: effects: - !type:HealthChange conditions: @@ -714,7 +714,7 @@ color: "#00b408" physicalDesc: reagent-physical-desc-nondescript metabolisms: - Poison: + Bloodstream: metabolismRate: 0.2 # Slower metabolism so it can build up over time for slowdown effects: - !type:HealthChange @@ -754,7 +754,7 @@ flavor: trashy physicalDesc: reagent-physical-desc-nondescript metabolisms: - Food: + Digestion: effects: - !type:SatiateHunger factor: 1 @@ -772,7 +772,7 @@ flavor: sharp color: "#96424f" metabolisms: - Poison: + Bloodstream: effects: - !type:ModifyStatusEffect effectProto: StatusEffectHemorrhage -- 2.52.0