From c551cafdae3ccd2be0558936e8b5bd3a8decd16b Mon Sep 17 00:00:00 2001
From: Flesh <62557990+PolterTzi@users.noreply.github.com>
Date: Mon, 20 May 2024 01:01:44 +0200
Subject: [PATCH] Add plant metabolism effects to chemical guidebook (#28038)
* draft one of plant metabolism guidebook
* loc fix?
* add attributes loc
* fix loc syntax
* improved appearance
* last commit was undercooked, my bad
* last commit was still undercooked, my worse
* last commit was even still undercooked, my worst
* Addressed comments?
* Fix newlines
* Hopefully this works
* Cleanup, I think
* 2xs
---
.../Guidebook/Controls/GuideReagentEmbed.xaml | 11 +++++++
.../Controls/GuideReagentEmbed.xaml.cs | 33 +++++++++++++++++++
.../PlantMetabolism/PlantAdjustAttribute.cs | 26 ++++++++++++++-
.../PlantMetabolism/PlantAdjustHealth.cs | 3 ++
.../PlantAdjustMutationLevel.cs | 3 ++
.../PlantMetabolism/PlantAdjustMutationMod.cs | 2 ++
.../PlantMetabolism/PlantAdjustNutrition.cs | 2 ++
.../PlantMetabolism/PlantAdjustPests.cs | 3 ++
.../PlantMetabolism/PlantAdjustToxins.cs | 3 ++
.../PlantMetabolism/PlantAdjustWater.cs | 2 ++
.../PlantMetabolism/PlantAdjustWeeds.cs | 3 ++
.../PlantMetabolism/PlantAffectGrowth.cs | 2 ++
.../PlantMetabolism/PlantCryoxadone.cs | 2 +-
.../PlantMetabolism/PlantDiethylamine.cs | 2 +-
.../PlantMetabolism/PlantPhalanximine.cs | 2 +-
.../PlantMetabolism/RobustHarvest.cs | 2 +-
.../Chemistry/Reagent/ReagentPrototype.cs | 10 ++++++
.../Locale/en-US/guidebook/chemistry/core.ftl | 2 ++
.../en-US/guidebook/chemistry/effects.ftl | 32 +++++++++++++++++-
.../guidebook/chemistry/plant-attributes.ftl | 9 +++++
.../en-US/metabolism/metabolism-groups.ftl | 1 +
.../Chemistry/metabolism_groups.yml | 5 +++
22 files changed, 154 insertions(+), 6 deletions(-)
create mode 100644 Resources/Locale/en-US/guidebook/chemistry/plant-attributes.ftl
diff --git a/Content.Client/Guidebook/Controls/GuideReagentEmbed.xaml b/Content.Client/Guidebook/Controls/GuideReagentEmbed.xaml
index f46e319abe..73a17e9bcc 100644
--- a/Content.Client/Guidebook/Controls/GuideReagentEmbed.xaml
+++ b/Content.Client/Guidebook/Controls/GuideReagentEmbed.xaml
@@ -47,6 +47,17 @@
+
+
+
+
+
+
+
+
diff --git a/Content.Client/Guidebook/Controls/GuideReagentEmbed.xaml.cs b/Content.Client/Guidebook/Controls/GuideReagentEmbed.xaml.cs
index 537494933b..87931bf845 100644
--- a/Content.Client/Guidebook/Controls/GuideReagentEmbed.xaml.cs
+++ b/Content.Client/Guidebook/Controls/GuideReagentEmbed.xaml.cs
@@ -157,6 +157,39 @@ public sealed partial class GuideReagentEmbed : BoxContainer, IDocumentTag, ISea
}
#endregion
+ #region PlantMetabolisms
+ if (_chemistryGuideData.ReagentGuideRegistry.TryGetValue(reagent.ID, out var guideEntryRegistryPlant) &&
+ guideEntryRegistryPlant.PlantMetabolisms != null &&
+ guideEntryRegistryPlant.PlantMetabolisms.Count > 0)
+ {
+ PlantMetabolismsDescriptionContainer.Children.Clear();
+ var metabolismLabel = new RichTextLabel();
+ metabolismLabel.SetMarkup(Loc.GetString("guidebook-reagent-plant-metabolisms-rate"));
+ var descriptionLabel = new RichTextLabel
+ {
+ Margin = new Thickness(25, 0, 10, 0)
+ };
+ var descMsg = new FormattedMessage();
+ var descriptionsCount = guideEntryRegistryPlant.PlantMetabolisms.Count;
+ var i = 0;
+ foreach (var effectString in guideEntryRegistryPlant.PlantMetabolisms)
+ {
+ descMsg.AddMarkup(effectString);
+ i++;
+ if (i < descriptionsCount)
+ descMsg.PushNewline();
+ }
+ descriptionLabel.SetMessage(descMsg);
+
+ PlantMetabolismsDescriptionContainer.AddChild(metabolismLabel);
+ PlantMetabolismsDescriptionContainer.AddChild(descriptionLabel);
+ }
+ else
+ {
+ PlantMetabolismsContainer.Visible = false;
+ }
+ #endregion
+
GenerateSources(reagent);
FormattedMessage description = new();
diff --git a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustAttribute.cs b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustAttribute.cs
index f43b4828f9..80c5ca5cf2 100644
--- a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustAttribute.cs
+++ b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustAttribute.cs
@@ -15,6 +15,18 @@ namespace Content.Server.Chemistry.ReagentEffects.PlantMetabolism
[DataField]
public float Prob { get; protected set; } = 1; // = (80);
+ ///
+ /// Localisation key for the name of the adjusted attribute. Used for guidebook descriptions.
+ ///
+ [DataField]
+ public abstract string GuidebookAttributeName { get; set; }
+
+ ///
+ /// Whether the attribute in question is a good thing. Used for guidebook descriptions to determine the color of the number.
+ ///
+ [DataField]
+ public virtual bool GuidebookIsAttributePositive { get; protected set; } = true;
+
///
/// Checks if the plant holder can metabolize the reagent or not. Checks if it has an alive plant by default.
///
@@ -40,6 +52,18 @@ namespace Content.Server.Chemistry.ReagentEffects.PlantMetabolism
return !(Prob <= 0f) && IoCManager.Resolve().Prob(Prob);
}
- protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString("reagent-effect-guidebook-missing", ("chance", Probability));
+ protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys)
+ {
+ string color;
+ if (GuidebookIsAttributePositive ^ Amount < 0.0)
+ {
+ color = "green";
+ }
+ else
+ {
+ color = "red";
+ }
+ return Loc.GetString("reagent-effect-guidebook-plant-attribute", ("attribute", Loc.GetString(GuidebookAttributeName)), ("amount", Amount.ToString("0.00")), ("colorName", color), ("chance", Probability));
+ }
}
}
diff --git a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustHealth.cs b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustHealth.cs
index f03464469e..af74c17de7 100644
--- a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustHealth.cs
+++ b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustHealth.cs
@@ -5,6 +5,9 @@ namespace Content.Server.Chemistry.ReagentEffects.PlantMetabolism
{
public sealed partial class PlantAdjustHealth : PlantAdjustAttribute
{
+ public override string GuidebookAttributeName { get; set; } = "plant-attribute-health";
+
+
public override void Effect(ReagentEffectArgs args)
{
if (!CanMetabolize(args.SolutionEntity, out var plantHolderComp, args.EntityManager))
diff --git a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustMutationLevel.cs b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustMutationLevel.cs
index 8c8d04765a..cf0983bc51 100644
--- a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustMutationLevel.cs
+++ b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustMutationLevel.cs
@@ -4,6 +4,9 @@ namespace Content.Server.Chemistry.ReagentEffects.PlantMetabolism
{
public sealed partial class PlantAdjustMutationLevel : PlantAdjustAttribute
{
+ public override string GuidebookAttributeName { get; set; } = "plant-attribute-mutation-level";
+
+
public override void Effect(ReagentEffectArgs args)
{
if (!CanMetabolize(args.SolutionEntity, out var plantHolderComp, args.EntityManager))
diff --git a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustMutationMod.cs b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustMutationMod.cs
index af4a00a044..b43e885388 100644
--- a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustMutationMod.cs
+++ b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustMutationMod.cs
@@ -6,6 +6,8 @@ namespace Content.Server.Chemistry.ReagentEffects.PlantMetabolism
[UsedImplicitly]
public sealed partial class PlantAdjustMutationMod : PlantAdjustAttribute
{
+ public override string GuidebookAttributeName { get; set; } = "plant-attribute-mutation-mod";
+
public override void Effect(ReagentEffectArgs args)
{
if (!CanMetabolize(args.SolutionEntity, out var plantHolderComp, args.EntityManager))
diff --git a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustNutrition.cs b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustNutrition.cs
index 900121412e..68bb59870d 100644
--- a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustNutrition.cs
+++ b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustNutrition.cs
@@ -7,6 +7,8 @@ namespace Content.Server.Chemistry.ReagentEffects.PlantMetabolism
[UsedImplicitly]
public sealed partial class PlantAdjustNutrition : PlantAdjustAttribute
{
+ public override string GuidebookAttributeName { get; set; } = "plant-attribute-nutrition";
+
public override void Effect(ReagentEffectArgs args)
{
if (!CanMetabolize(args.SolutionEntity, out var plantHolderComp, args.EntityManager, mustHaveAlivePlant: false))
diff --git a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustPests.cs b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustPests.cs
index 27729b4b2c..9e9787d030 100644
--- a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustPests.cs
+++ b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustPests.cs
@@ -6,6 +6,9 @@ namespace Content.Server.Chemistry.ReagentEffects.PlantMetabolism
[UsedImplicitly]
public sealed partial class PlantAdjustPests : PlantAdjustAttribute
{
+ public override string GuidebookAttributeName { get; set; } = "plant-attribute-pests";
+ public override bool GuidebookIsAttributePositive { get; protected set; } = false;
+
public override void Effect(ReagentEffectArgs args)
{
if (!CanMetabolize(args.SolutionEntity, out var plantHolderComp, args.EntityManager))
diff --git a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustToxins.cs b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustToxins.cs
index 35130238ad..2279f74910 100644
--- a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustToxins.cs
+++ b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustToxins.cs
@@ -6,6 +6,9 @@ namespace Content.Server.Chemistry.ReagentEffects.PlantMetabolism
[UsedImplicitly]
public sealed partial class PlantAdjustToxins : PlantAdjustAttribute
{
+ public override string GuidebookAttributeName { get; set; } = "plant-attribute-toxins";
+ public override bool GuidebookIsAttributePositive { get; protected set; } = false;
+
public override void Effect(ReagentEffectArgs args)
{
if (!CanMetabolize(args.SolutionEntity, out var plantHolderComp, args.EntityManager))
diff --git a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustWater.cs b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustWater.cs
index 71b4670dc6..a1c184d3b7 100644
--- a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustWater.cs
+++ b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustWater.cs
@@ -7,6 +7,8 @@ namespace Content.Server.Chemistry.ReagentEffects.PlantMetabolism
[UsedImplicitly]
public sealed partial class PlantAdjustWater : PlantAdjustAttribute
{
+ public override string GuidebookAttributeName { get; set; } = "plant-attribute-water";
+
public override void Effect(ReagentEffectArgs args)
{
if (!CanMetabolize(args.SolutionEntity, out var plantHolderComp, args.EntityManager, mustHaveAlivePlant: false))
diff --git a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustWeeds.cs b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustWeeds.cs
index 6184b95adb..82958e97a1 100644
--- a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustWeeds.cs
+++ b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAdjustWeeds.cs
@@ -6,6 +6,9 @@ namespace Content.Server.Chemistry.ReagentEffects.PlantMetabolism
[UsedImplicitly]
public sealed partial class PlantAdjustWeeds : PlantAdjustAttribute
{
+ public override string GuidebookAttributeName { get; set; } = "plant-attribute-weeds";
+ public override bool GuidebookIsAttributePositive { get; protected set; } = false;
+
public override void Effect(ReagentEffectArgs args)
{
if (!CanMetabolize(args.SolutionEntity, out var plantHolderComp, args.EntityManager))
diff --git a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAffectGrowth.cs b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAffectGrowth.cs
index 54ec628fdc..e92b1954c0 100644
--- a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAffectGrowth.cs
+++ b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantAffectGrowth.cs
@@ -7,6 +7,8 @@ namespace Content.Server.Chemistry.ReagentEffects.PlantMetabolism
[UsedImplicitly]
public sealed partial class PlantAffectGrowth : PlantAdjustAttribute
{
+ public override string GuidebookAttributeName { get; set; } = "plant-attribute-growth";
+
public override void Effect(ReagentEffectArgs args)
{
if (!CanMetabolize(args.SolutionEntity, out var plantHolderComp, args.EntityManager))
diff --git a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantCryoxadone.cs b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantCryoxadone.cs
index 83a5f56e59..55a7e5c97b 100644
--- a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantCryoxadone.cs
+++ b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantCryoxadone.cs
@@ -28,6 +28,6 @@ namespace Content.Server.Chemistry.ReagentEffects.PlantMetabolism
plantHolderComp.ForceUpdate = true;
}
- protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString("reagent-effect-guidebook-missing", ("chance", Probability));
+ protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString("reagent-effect-guidebook-plant-cryoxadone", ("chance", Probability));
}
}
diff --git a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantDiethylamine.cs b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantDiethylamine.cs
index 23cb436d2f..c98f0be78c 100644
--- a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantDiethylamine.cs
+++ b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantDiethylamine.cs
@@ -36,6 +36,6 @@ namespace Content.Server.Chemistry.ReagentEffects.PlantMetabolism
}
}
- protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString("reagent-effect-guidebook-missing", ("chance", Probability));
+ protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString("reagent-effect-guidebook-plant-diethylamine", ("chance", Probability));
}
}
diff --git a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantPhalanximine.cs b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantPhalanximine.cs
index c0640d7fc0..7aaca63b7d 100644
--- a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantPhalanximine.cs
+++ b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/PlantPhalanximine.cs
@@ -19,6 +19,6 @@ namespace Content.Server.Chemistry.ReagentEffects.PlantMetabolism
plantHolderComp.Seed.Viable = true;
}
- protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString("reagent-effect-guidebook-missing", ("chance", Probability));
+ protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString("reagent-effect-guidebook-plant-phalanximine", ("chance", Probability));
}
}
diff --git a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/RobustHarvest.cs b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/RobustHarvest.cs
index 990a5a5003..4a01cdf51f 100644
--- a/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/RobustHarvest.cs
+++ b/Content.Server/Chemistry/ReagentEffects/PlantMetabolism/RobustHarvest.cs
@@ -49,6 +49,6 @@ namespace Content.Server.Chemistry.ReagentEffects.PlantMetabolism
}
}
- protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString("reagent-effect-guidebook-missing", ("chance", Probability));
+ protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString("reagent-effect-guidebook-plant-robust-harvest", ("seedlesstreshold", PotencySeedlessThreshold), ("limit", PotencyLimit), ("increase", PotencyIncrease), ("chance", Probability));
}
}
diff --git a/Content.Shared/Chemistry/Reagent/ReagentPrototype.cs b/Content.Shared/Chemistry/Reagent/ReagentPrototype.cs
index 6095676b9e..7e96332ebe 100644
--- a/Content.Shared/Chemistry/Reagent/ReagentPrototype.cs
+++ b/Content.Shared/Chemistry/Reagent/ReagentPrototype.cs
@@ -195,12 +195,22 @@ namespace Content.Shared.Chemistry.Reagent
public Dictionary, ReagentEffectsGuideEntry>? GuideEntries;
+ public List? PlantMetabolisms = null;
+
public ReagentGuideEntry(ReagentPrototype proto, IPrototypeManager prototype, IEntitySystemManager entSys)
{
ReagentPrototype = proto.ID;
GuideEntries = proto.Metabolisms?
.Select(x => (x.Key, x.Value.MakeGuideEntry(prototype, entSys)))
.ToDictionary(x => x.Key, x => x.Item2);
+ if (proto.PlantMetabolisms.Count > 0)
+ {
+ PlantMetabolisms = new List (proto.PlantMetabolisms
+ .Select(x => x.GuidebookEffectDescription(prototype, entSys))
+ .Where(x => x is not null)
+ .Select(x => x!)
+ .ToArray());
+ }
}
}
diff --git a/Resources/Locale/en-US/guidebook/chemistry/core.ftl b/Resources/Locale/en-US/guidebook/chemistry/core.ftl
index 5179915e05..2ffb0b2be2 100644
--- a/Resources/Locale/en-US/guidebook/chemistry/core.ftl
+++ b/Resources/Locale/en-US/guidebook/chemistry/core.ftl
@@ -15,6 +15,8 @@ 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-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]
guidebook-reagent-recipes-mix-info = {$minTemp ->
[0] {$hasMax ->
diff --git a/Resources/Locale/en-US/guidebook/chemistry/effects.ftl b/Resources/Locale/en-US/guidebook/chemistry/effects.ftl
index 5b449cd520..5579c95e9d 100644
--- a/Resources/Locale/en-US/guidebook/chemistry/effects.ftl
+++ b/Resources/Locale/en-US/guidebook/chemistry/effects.ftl
@@ -339,7 +339,7 @@ reagent-effect-guidebook-innoculate-zombie-infection =
*[other] cure
} an ongoing zombie infection, and provides immunity to future infections
-reagent-effect-guidebook-reduce-rotting =
+reagent-effect-guidebook-reduce-rotting =
{ $chance ->
[1] Regenerates
*[other] regenerate
@@ -350,3 +350,33 @@ reagent-effect-guidebook-missing =
[1] Causes
*[other] cause
} an unknown effect as nobody has written this effect yet
+
+reagent-effect-guidebook-plant-attribute =
+ { $chance ->
+ [1] Adjusts
+ *[other] adjust
+ } {$attribute} by [color={$colorName}]{$amount}[/color]
+
+reagent-effect-guidebook-plant-cryoxadone =
+ { $chance ->
+ [1] Ages back
+ *[other] age back
+ } the plant, depending on the plant's age and time to grow
+
+reagent-effect-guidebook-plant-phalanximine =
+ { $chance ->
+ [1] Makes
+ *[other] make
+ } a plant not viable due to mutation viable again
+
+reagent-effect-guidebook-plant-diethylamine =
+ { $chance ->
+ [1] Increases
+ *[other] increase
+ } the plant's lifespan and/or base health with 10% chance for each.
+
+reagent-effect-guidebook-plant-robust-harvest =
+ { $chance ->
+ [1] Increases
+ *[other] increase
+ } the plant's potency by {$increase} up to a maximum of {$limit}. Causes the plant to lose its seeds once the potency reaches {$seedlesstreshold}. Trying to add potency over {$limit} may cause decrease in yield at a 10% chance.
diff --git a/Resources/Locale/en-US/guidebook/chemistry/plant-attributes.ftl b/Resources/Locale/en-US/guidebook/chemistry/plant-attributes.ftl
new file mode 100644
index 0000000000..2575221008
--- /dev/null
+++ b/Resources/Locale/en-US/guidebook/chemistry/plant-attributes.ftl
@@ -0,0 +1,9 @@
+plant-attribute-growth = age
+plant-attribute-water = water level
+plant-attribute-weeds = weeds level
+plant-attribute-toxins = toxins level
+plant-attribute-nutrition = nutrition level
+plant-attribute-mutation-level = mutation level
+plant-attribute-pests = pests level
+plant-attribute-mutation-mod = mutation modifier
+plant-attribute-health = health
diff --git a/Resources/Locale/en-US/metabolism/metabolism-groups.ftl b/Resources/Locale/en-US/metabolism/metabolism-groups.ftl
index 404d0fc786..b9bd477fbb 100644
--- a/Resources/Locale/en-US/metabolism/metabolism-groups.ftl
+++ b/Resources/Locale/en-US/metabolism/metabolism-groups.ftl
@@ -5,3 +5,4 @@ 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/Prototypes/Chemistry/metabolism_groups.yml b/Resources/Prototypes/Chemistry/metabolism_groups.yml
index b2035671af..1cc1f19311 100644
--- a/Resources/Prototypes/Chemistry/metabolism_groups.yml
+++ b/Resources/Prototypes/Chemistry/metabolism_groups.yml
@@ -27,3 +27,8 @@
- type: metabolismGroup
id: Gas
name: metabolism-group-gas
+
+# Dummy for the guide
+- type: metabolismGroup
+ id: PlantMetabolisms
+ name: metabolism-group-plant-metabolisms