diff --git a/Content.Client/Guidebook/Controls/GuideReagentReaction.xaml b/Content.Client/Guidebook/Controls/GuideReagentReaction.xaml
index becffbdc6d..82a7edf418 100644
--- a/Content.Client/Guidebook/Controls/GuideReagentReaction.xaml
+++ b/Content.Client/Guidebook/Controls/GuideReagentReaction.xaml
@@ -1,4 +1,5 @@
+
+
+
+
+
+
+
+
+
diff --git a/Content.Client/Guidebook/Controls/GuideReagentReaction.xaml.cs b/Content.Client/Guidebook/Controls/GuideReagentReaction.xaml.cs
index 168f352d1a..288e0e351b 100644
--- a/Content.Client/Guidebook/Controls/GuideReagentReaction.xaml.cs
+++ b/Content.Client/Guidebook/Controls/GuideReagentReaction.xaml.cs
@@ -1,5 +1,6 @@
using System.Linq;
using Content.Client.Message;
+using Content.Client.UserInterface.Controls; // CP14 random reactions
using Content.Client.UserInterface.ControlExtensions;
using Content.Shared.Atmos.Prototypes;
using Content.Shared.Chemistry.Components;
@@ -37,13 +38,36 @@ public sealed partial class GuideReagentReaction : BoxContainer, ISearchableCont
var reactantsLabel = ReactantsLabel;
SetReagents(prototype.Reactants, ref reactantsLabel, protoMan);
var productLabel = ProductsLabel;
- var products = new Dictionary(prototype.Products);
+ var products = new Dictionary(prototype._products); // CP14 random reactions
foreach (var (reagent, reactantProto) in prototype.Reactants)
{
if (reactantProto.Catalyst)
products.Add(reagent, reactantProto.Amount);
}
SetReagents(products, ref productLabel, protoMan);
+ // CP14 random reagents begin
+ foreach (var randomVariation in prototype.Cp14RandomProducts)
+ {
+ // If there aren't any variations, this label will be not visible
+ RandomVariationsLabel.Visible = true;
+ var randomProductLabel = new RichTextLabel {
+ HorizontalAlignment=HAlignment.Left,
+ VerticalAlignment=VAlignment.Center,
+ };
+ var randomProducts = new Dictionary(randomVariation);
+ RandomVariations.AddChild(randomProductLabel);
+ RandomVariations.AddChild(new SplitBar
+ {
+ MinHeight = 10,
+ });
+ foreach (var (reagent, reactantProto) in prototype.Reactants)
+ {
+ if (reactantProto.Catalyst)
+ randomProducts.Add(reagent, reactantProto.Amount);
+ }
+ SetReagents(randomProducts, ref randomProductLabel, protoMan);
+ }
+ // CP14 random reagents end
var mixingCategories = new List();
if (prototype.MixingCategories != null)
diff --git a/Content.Server/_CP14/Alchemy/CP14MortarComponent.cs b/Content.Server/_CP14/Alchemy/Components/CP14MortarComponent.cs
similarity index 100%
rename from Content.Server/_CP14/Alchemy/CP14MortarComponent.cs
rename to Content.Server/_CP14/Alchemy/Components/CP14MortarComponent.cs
diff --git a/Content.Server/_CP14/Alchemy/CP14PestleComponent.cs b/Content.Server/_CP14/Alchemy/Components/CP14PestleComponent.cs
similarity index 100%
rename from Content.Server/_CP14/Alchemy/CP14PestleComponent.cs
rename to Content.Server/_CP14/Alchemy/Components/CP14PestleComponent.cs
diff --git a/Content.Server/_CP14/Alchemy/CP14SolutionNormalizerComponent.cs b/Content.Server/_CP14/Alchemy/Components/CP14SolutionNormalizerComponent.cs
similarity index 100%
rename from Content.Server/_CP14/Alchemy/CP14SolutionNormalizerComponent.cs
rename to Content.Server/_CP14/Alchemy/Components/CP14SolutionNormalizerComponent.cs
diff --git a/Content.Server/_CP14/Alchemy/CP14AlchemyExtractionSystem.cs b/Content.Server/_CP14/Alchemy/EntitySystems/CP14AlchemyExtractionSystem.cs
similarity index 100%
rename from Content.Server/_CP14/Alchemy/CP14AlchemyExtractionSystem.cs
rename to Content.Server/_CP14/Alchemy/EntitySystems/CP14AlchemyExtractionSystem.cs
diff --git a/Content.Server/_CP14/Alchemy/EntitySystems/CP14RandomReagentReactionsSystem.cs b/Content.Server/_CP14/Alchemy/EntitySystems/CP14RandomReagentReactionsSystem.cs
new file mode 100644
index 0000000000..46253e01fb
--- /dev/null
+++ b/Content.Server/_CP14/Alchemy/EntitySystems/CP14RandomReagentReactionsSystem.cs
@@ -0,0 +1,26 @@
+using Content.Server.GameTicking.Events;
+using Content.Shared.Chemistry.Reaction;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Random;
+
+namespace Content.Server._CP14.Alchemy.EntitySystems;
+
+public sealed class CP14RandomReagentReactionsSystem : EntitySystem
+{
+ [Dependency] private readonly IPrototypeManager _proto = default!;
+ [Dependency] private readonly IRobustRandom _random = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+ SubscribeLocalEvent(OnRoundStart);
+ }
+
+ private void OnRoundStart(RoundStartingEvent ev)
+ {
+ foreach (var reaction in _proto.EnumeratePrototypes())
+ {
+ reaction.Cp14RandomProductIndex = _random.Next(reaction.Cp14RandomProducts.Count);
+ }
+ }
+}
diff --git a/Content.Server/_CP14/Alchemy/CP14SolutionNormalizerSystem.cs b/Content.Server/_CP14/Alchemy/EntitySystems/CP14SolutionNormalizerSystem.cs
similarity index 100%
rename from Content.Server/_CP14/Alchemy/CP14SolutionNormalizerSystem.cs
rename to Content.Server/_CP14/Alchemy/EntitySystems/CP14SolutionNormalizerSystem.cs
diff --git a/Content.Shared/Chemistry/Reaction/ReactionPrototype.cs b/Content.Shared/Chemistry/Reaction/ReactionPrototype.cs
index a58cbbffe7..ca5a9b2e4f 100644
--- a/Content.Shared/Chemistry/Reaction/ReactionPrototype.cs
+++ b/Content.Shared/Chemistry/Reaction/ReactionPrototype.cs
@@ -51,11 +51,42 @@ namespace Content.Shared.Chemistry.Reaction
[DataField("requiredMixerCategories")]
public List>? MixingCategories;
+ // CP14 random reactions begin
///
/// Reagents created when the reaction occurs.
///
[DataField("products", customTypeSerializer:typeof(PrototypeIdDictionarySerializer))]
- public Dictionary Products = new();
+ public Dictionary _products = new(); // CP14 random reactions
+
+ public Dictionary Products
+ {
+ get {
+ if (Cp14RandomProducts.Count == 0)
+ return _products;
+ // New dict because we don't want to modify original products dict
+ Dictionary res = new(_products);
+ foreach (var product in Cp14RandomProducts[Cp14RandomProductIndex])
+ {
+ if (res.ContainsKey(product.Key))
+ res[product.Key] += product.Value;
+ else
+ res[product.Key] = product.Value;
+ }
+ return res;
+ }
+ set {
+ _products = value;
+ }
+ }
+
+ public int Cp14RandomProductIndex = 0;
+
+ ///
+ /// Random reagents groups, one of which will be selected at the roundstart and will be used as a reaction product.
+ ///
+ [DataField("cp14RandomProducts")]
+ public List> Cp14RandomProducts = new();
+ // CP14 random reactions end
///
/// Effects to be triggered when the reaction occurs.
diff --git a/Resources/Locale/en-US/_CP14/guidebook/guides.ftl b/Resources/Locale/en-US/_CP14/guidebook/guides.ftl
index 03886f7db9..dd15db927f 100644
--- a/Resources/Locale/en-US/_CP14/guidebook/guides.ftl
+++ b/Resources/Locale/en-US/_CP14/guidebook/guides.ftl
@@ -3,4 +3,6 @@ cp14-guide-entry-english = English guidebook
cp14-guide-entry-alchemy = Alchemy
cp14-guide-entry-basic-alchemy = Basic alchemical reagents
-cp14-guide-entry-biological = Biological
\ No newline at end of file
+cp14-guide-entry-biological = Biological
+
+cp14-guidebook-random-variations-title = Random products
diff --git a/Resources/Locale/ru-RU/_CP14/guidebook/guides.ftl b/Resources/Locale/ru-RU/_CP14/guidebook/guides.ftl
index b45b825310..c41bea4b66 100644
--- a/Resources/Locale/ru-RU/_CP14/guidebook/guides.ftl
+++ b/Resources/Locale/ru-RU/_CP14/guidebook/guides.ftl
@@ -3,4 +3,6 @@ cp14-guide-entry-english = Английское руководство
cp14-guide-entry-alchemy = Алхимия
cp14-guide-entry-basic-alchemy = Базовые алхимические элементы
-cp14-guide-entry-biological = Биологические вещества
\ No newline at end of file
+cp14-guide-entry-biological = Биологические вещества
+
+cp14-guidebook-random-variations-title = Случайные продукты
diff --git a/Resources/Prototypes/_CP14/Recipes/Reactions/Alchemy/brewing_bloodgrass.yml b/Resources/Prototypes/_CP14/Recipes/Reactions/Alchemy/brewing_bloodgrass.yml
index b2f1f221b2..435cdd3169 100644
--- a/Resources/Prototypes/_CP14/Recipes/Reactions/Alchemy/brewing_bloodgrass.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Reactions/Alchemy/brewing_bloodgrass.yml
@@ -18,8 +18,11 @@
amount: 0.5
products:
CP14BasicEffectEmpty: 0.25
- CP14BasicEffectSatiateHunger: 0.5
+ CP14BasicEffectSatiateHunger: 0.25
CP14BasicEffectHealBrute: 0.25
+ cp14RandomProducts:
+ - CP14BasicEffectSatiateHunger: 0.25
+ - CP14BasicEffectHealBrute: 0.25
effects:
- !type:CP14AffectSolutionTemperature
addTemperature: -250
@@ -35,8 +38,11 @@
amount: 0.5
products:
CP14BasicEffectEmpty: 0.25
- CP14BasicEffectSatiateHunger: 0.5
+ CP14BasicEffectSatiateHunger: 0.25
CP14BasicEffectHealCold: 0.25
+ cp14RandomProducts:
+ - CP14BasicEffectSatiateHunger: 0.25
+ - CP14BasicEffectHealCold: 0.25
effects:
- !type:CP14AffectSolutionTemperature
addTemperature: -250
@@ -52,8 +58,11 @@
amount: 0.5
products:
CP14BasicEffectEmpty: 0.25
- CP14BasicEffectSatiateHunger: 0.5
+ CP14BasicEffectSatiateHunger: 0.25
CP14BasicEffectHealPoison: 0.25
+ cp14RandomProducts:
+ - CP14BasicEffectSatiateHunger: 0.25
+ - CP14BasicEffectHealPoison: 0.25
effects:
- !type:CP14AffectSolutionTemperature
addTemperature: -250
\ No newline at end of file
diff --git a/Resources/Prototypes/_CP14/Recipes/Reactions/Alchemy/brewing_complex.yml b/Resources/Prototypes/_CP14/Recipes/Reactions/Alchemy/brewing_complex.yml
index cd0d0f7f56..35348f8b6d 100644
--- a/Resources/Prototypes/_CP14/Recipes/Reactions/Alchemy/brewing_complex.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Reactions/Alchemy/brewing_complex.yml
@@ -20,8 +20,8 @@
products:
CP14BasicEffectEmpty: 0.25
CP14BasicEffectHealBrute: 0.25
- CP14BasicEffectSatiateHunger: 0.25
CP14BasicEffectEmoteCough: 0.25
+ CP14BasicEffectSatiateHunger: 0.25
effects:
- !type:CP14AffectSolutionTemperature
addTemperature: -250
@@ -41,4 +41,4 @@
CP14BasicEffectVomit: 0.25
effects:
- !type:CP14AffectSolutionTemperature
- addTemperature: -250
\ No newline at end of file
+ addTemperature: -250
diff --git a/Resources/Prototypes/_CP14/Recipes/Reactions/Alchemy/brewing_simple.yml b/Resources/Prototypes/_CP14/Recipes/Reactions/Alchemy/brewing_simple.yml
index b15ac60f78..0f7a872a37 100644
--- a/Resources/Prototypes/_CP14/Recipes/Reactions/Alchemy/brewing_simple.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Reactions/Alchemy/brewing_simple.yml
@@ -17,7 +17,9 @@
products:
CP14BasicEffectEmpty: 0.5
CP14BasicEffectDamagePoison: 0.25
- CP14BasicEffectRainbow: 0.25
+ cp14RandomProducts:
+ - CP14BasicEffectVomit: 0.25
+ - CP14BasicEffectRainbow: 0.25
effects:
- !type:CP14AffectSolutionTemperature
addTemperature: -250
@@ -32,7 +34,9 @@
products:
CP14BasicEffectEmpty: 0.5
CP14BasicEffectHealBrute: 0.25
- CP14BasicEffectEmoteCough: 0.25
+ cp14RandomProducts:
+ - CP14BasicEffectEmoteCough: 0.25
+ - CP14BasicEffectHealCold: 0.25
effects:
- !type:CP14AffectSolutionTemperature
addTemperature: -250
@@ -59,8 +63,10 @@
amount: 1
products:
CP14BasicEffectEmpty: 0.5
- CP14BasicEffectRainbow: 0.25
CP14BasicEffectVomit: 0.25
+ cp14RandomProducts:
+ - CP14BasicEffectRainbow: 0.25
+ - CP14BasicEffectEmoteCough: 0.25
effects:
- !type:CP14AffectSolutionTemperature
addTemperature: -250
\ No newline at end of file
diff --git a/Resources/Prototypes/_CP14/Recipes/Reactions/Alchemy/fail.yml b/Resources/Prototypes/_CP14/Recipes/Reactions/Alchemy/fail.yml
index babeb67e01..88e0b87a0e 100644
--- a/Resources/Prototypes/_CP14/Recipes/Reactions/Alchemy/fail.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Reactions/Alchemy/fail.yml
@@ -1,7 +1,7 @@
- type: reaction
id: CP14MeltingFail
- minTemp: 1000
+ minTemp: 800
reactants:
CP14BasicEffectEmpty:
amount: 1
diff --git a/Resources/Prototypes/_CP14/Recipes/Reactions/Alchemy/mixing_simple.yml b/Resources/Prototypes/_CP14/Recipes/Reactions/Alchemy/mixing_simple.yml
index f84e8d3ac2..e2afe8744d 100644
--- a/Resources/Prototypes/_CP14/Recipes/Reactions/Alchemy/mixing_simple.yml
+++ b/Resources/Prototypes/_CP14/Recipes/Reactions/Alchemy/mixing_simple.yml
@@ -18,8 +18,10 @@
CP14BasicEffectEmpty:
amount: 0.25
products:
- CP14BasicEffectRainbow: 0.25
CP14BasicEffectDamageBrute: 0.25
+ cp14RandomProducts:
+ - CP14BasicEffectRainbow: 0.25
+ - CP14BasicEffectDamageBrute: 0.25
- type: reaction
id: CP14HealBruteSplitting
@@ -46,8 +48,10 @@
CP14BasicEffectEmpty:
amount: 0.25
products:
- CP14BasicEffectEmoteCough: 0.25
CP14BasicEffectHealBrute: 0.25
+ cp14RandomProducts:
+ - CP14BasicEffectEmoteCough: 0.25
+ - CP14BasicEffectHealBrute: 0.25
- type: reaction
id: CP14SatiateThirstSplitting
@@ -60,8 +64,10 @@
CP14BasicEffectEmpty:
amount: 0.25
products:
- CP14BasicEffectEmoteCough: 0.25
CP14BasicEffectHealBrute: 0.25
+ cp14RandomProducts:
+ - CP14BasicEffectEmoteCough: 0.25
+ - CP14BasicEffectHealBrute: 0.25
- type: reaction
id: CP14EmoteCoughSplitting
@@ -75,7 +81,9 @@
amount: 0.25
products:
CP14BasicEffectSatiateThirst: 0.25
- CP14BasicEffectHealBrute: 0.25
+ cp14RandomProducts:
+ - CP14BasicEffectSatiateThirst: 0.25
+ - CP14BasicEffectHealBrute: 0.25
- type: reaction
id: CP14RainbowSplitting
@@ -88,8 +96,10 @@
CP14BasicEffectEmpty:
amount: 0.25
products:
- CP14BasicEffectSatiateThirst: 0.25
CP14BasicEffectHealCold: 0.25
+ cp14RandomProducts:
+ - CP14BasicEffectSatiateThirst: 0.25
+ - CP14BasicEffectHealCold: 0.25
- type: reaction
id: CP14VomitSplitting
@@ -102,8 +112,10 @@
CP14BasicEffectEmpty:
amount: 0.25
products:
- CP14BasicEffectEmoteCough: 0.25
CP14BasicEffectDamagePoison: 0.25
+ cp14RandomProducts:
+ - CP14BasicEffectEmoteCough: 0.25
+ - CP14BasicEffectDamagePoison: 0.25
- type: reaction
id: CP14EmptySplitting
diff --git a/Resources/ServerInfo/_CP14/Guidebook_EN/Alchemy.xml b/Resources/ServerInfo/_CP14/Guidebook_EN/Alchemy.xml
index f749d9db94..79a571acf3 100644
--- a/Resources/ServerInfo/_CP14/Guidebook_EN/Alchemy.xml
+++ b/Resources/ServerInfo/_CP14/Guidebook_EN/Alchemy.xml
@@ -1,13 +1,86 @@
# Alchemy
-There are a large number of reagents in the game. Some of them can be extracted from living creatures, some of them can be found in the wild, or you can use alchemy to get new reagents by mixing them together under certain conditions.
+Alchemy is one of the activities that can be practiced during the expedition.
-Knowing different types of chemicals and their effects is important for being able to manage injury and danger.
+The main task of alchemy is to produce various substances, from medicines to poisons, by processing, mixing and transforming reagents.
-## Basic alchemical reagents
-
+The produced substances, your character as a mercenary, can use for anything. Selling healing potions, smearing weapons with poison, or poisoning your target as an antagonist.
-## Biological
-
-
\ No newline at end of file
+## What you have to work with
+
+A large number of “raw” substances can be found in the world. The juices of plants, the blood of living creatures, or even crushed crystals. A skilled alchemist can transform these, to most people, useless items into something valuable.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Most of these “raw” ingredients can first be pulverized using a pestle and mortar:
+
+
+
+
+
+
+
+After putting the raw substances inside the mortar, you need to grind them thoroughly, clicking them frequently with the pestle. Gradually, all the objects will disappear and there will be a liquid left in the mortar, which you can pour wherever you want.
+
+To learn what kind of liquids are in the vessels, you can use special alchemical glasses, available only for the “Alchemist” role.
+
+
+
+
+
+
+Also, the following tools can help you in your science:
+- Dropper. Allows you to transfer small doses of liquids, from 0.25u to 1u
+- Vials of various sizes and strength.
+- Small cauldron. Not a bad vessel to heat on an alchemical stove.
+- Large Vat. A huge container that can be heated on a campfire. Will help to produce substances on an industrial scale.
+- Alchemical furnace. A wood-fueled stove that allows you to heat your solutions.
+- Solution Normalizer. A technological device capable of rounding down to the nearest multiple of 0.25u all the reagents poured into it. Helps get rid of tiny interfering residues if something went wrong. Requires an energy crystal to work.
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Basic Reagent System
+
+All alchemy is based on the idea of [textlink="Basic Reagents" link="CP14_EN_BasicAlchemy"]. Each basic reagent is a liquid with one strong effect.
+
+There is also an “Empty Solution”. This is a special basic reagent that has no effects.
+
+Chances are 50% or more of your potions will be filled with Empty Solution, and that's okay: The balance is built so that even highly diluted base reagents are quite effective.
+
+Given that you [color=red]do not have the ability to separate mixed substances[/color], your job as an alchemist is to find methods of brewing pure potions without impurities, or brewing effective combinations of effects in a single potion.
+
+## Random Reagent Generation
+
+As you study recipes for brewing basic reagents, you may notice a “Random Reagents” box. Each game round, most recipes have unknown additional reagents. In one round, the fly reagents may yield only poison, while in another round they may additionally yield a hallucinogen, or vomit solution.
+
+These additional reagents are stable throughout the round, but it still means you have to find your way to pure solutions each time anew.
+
+## Impurities
+
+Most raw reagents can be boiled down to produce a set of base reagents.
+But also, most raw reagents have a second use: impurities.
+
+By interfering a raw, uncooked reagent into a potion of base reagents, you can edit it. For example, by adding chromium slime to a potion, you can invert all of its effects - turning poison into medicine.
+
+
diff --git a/Resources/ServerInfo/_CP14/Guidebook_RU/Alchemy.xml b/Resources/ServerInfo/_CP14/Guidebook_RU/Alchemy.xml
index 47ec4813f8..32190a848e 100644
--- a/Resources/ServerInfo/_CP14/Guidebook_RU/Alchemy.xml
+++ b/Resources/ServerInfo/_CP14/Guidebook_RU/Alchemy.xml
@@ -1,13 +1,86 @@
# Алхимия
-В игре существует большое количество реагентов. Некоторые из них можно добыть из живых существ, некоторые - найти в природе, а другие получить при помощи исскуств алхимии.
+Алхимия - одна из активностей, которой можно заниматься в течении экспедиции.
-Знание различных типов химикатов и их эффектов важно для того, чтобы уметь справляться с травмами и опасностями.
+Основная задача алхимии - производство различных веществ, от лекарств до ядов, при помощи обработки, смешивания и трансформации подручных реагентов.
-## Базовые алхимические реагенты
-
+Произведенные вещества, ваш персонаж как наемник, может использовать для чего угодно. Продажа зелий лечения, смазывание оружия ядом, или отравление вашей цели, как антагониста.
-## Биологические вещества
-
-
\ No newline at end of file
+## С чем вам придется работать
+
+В мире можно найти большое количество "сырых" веществ. Соки растений, кровь живых существ, или даже раздробленные кристаллы. Грамотный алхимик может преобразовать эти, для большинства людей, бесполезные предметы, в нечто ценное.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Большая часть таких "сырых" ингредиентов может быть сначала измельчена при помощи пестика и ступки:
+
+
+
+
+
+
+
+Положив сырые вещества внутрь ступки, вам нужно тщательно измеличьть их, часто кликая пестиком. Постепенно все предметы исчезнут, и в ступке останется жидкость, которую вы можете перелить куда вам нужно.
+
+Чтобы изучить, что за жидкости находятся в емкостях, вы можете использовать специальные алхимические очки, доступные только для роли "Алхимик".
+
+
+
+
+
+
+Так же в вашей науке вам могут помочь следующие инструменты:
+- Пипетка. Позволяет переносить небольшие дозы жидкостей, от 0.25u до 1u
+- Флаконы разных размеров и прочности.
+- Небольшой котел. Неплохая емкость, которую можно греть на алхимической плите.
+- Большой чан. Огромная емкость, которую можно разогревать на костре. Поможет для производства веществ в промышленных масштабах.
+- Алхимическая печь. Печь, работающая на древесном топливе, позволяющая нагревать ваши растворы.
+- Нормализатор растворов. Технологичное устройство, способное округлять вниз до ближайшего кратному 0.25u значению все залитые в него реагенты. Поможет избавиться от крохотных мешающих остатков, если что-то пошло не так. Требуется энергокристалл для работы.
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Система базовых реагентов
+
+Вся алхимия стоит на идее [textlink="Базовых реагентов" link="CP14_RU_BasicAlchemy"]. Каждый базовый реагент представляет из себя жидкость с одним сильно выраженным эффектом.
+
+Так же существует "Пустой раствор". Это особенный базовый реагент, не имеющий никаких эффектов.
+
+Скорее всего 50% и больше ваших зелий будут заполнены пустым раствором, и это нормально: Баланс построен так, что даже сильно разбавленные базовые реагенты достаточно эффективны.
+
+Учитывая, что у вас [color=red]нет возможности разделять смешанные вещества[/color], ваша задача как алхимика заключается в поиске методов варки чистых зелий без примесей, либо варке эффективных комбинаций эффектов в одном зелье.
+
+## Случайная генерация реакций
+
+Изучая рецепты варки базовых реагентов, можно заметить поле "Случайные реагенты". Каждый игровой раунд большинство рецептов имеют неизвестные дополнительные реагенты. В одном раунде мухоморы могут давать только яд, в другом - дополнительно галлюциноген, или рвотный раствор.
+
+Эти дополнительные реагенты стабильны в течении всего раунда, но тем не менее это означает, что вам придется искать путь к чистым растворам каждый раз по новой.
+
+## Примеси
+
+Большинство сырых реагентов можно сварить, чтобы получить набор базовых реагентов.
+Но так же, у большинства сырых реагентов есть еще второй способ применения - примеси.
+
+Вмешивая сырой, не сваренный реагент в зелье из базовых реагентов, можно отредактировать его. Например, вмешав хромиевую слизь в зелье, можно инвертировать все его эффекты - превратив яд в лекарство.
+
+