diff --git a/Content.Client/Guidebook/Controls/GuideFoodComposition.xaml b/Content.Client/Guidebook/Controls/GuideFoodComposition.xaml
new file mode 100644
index 0000000000..6a3072ce08
--- /dev/null
+++ b/Content.Client/Guidebook/Controls/GuideFoodComposition.xaml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
diff --git a/Content.Client/Guidebook/Controls/GuideFoodComposition.xaml.cs b/Content.Client/Guidebook/Controls/GuideFoodComposition.xaml.cs
new file mode 100644
index 0000000000..b4f25a02e4
--- /dev/null
+++ b/Content.Client/Guidebook/Controls/GuideFoodComposition.xaml.cs
@@ -0,0 +1,31 @@
+using Content.Client.UserInterface.ControlExtensions;
+using Content.Shared.Chemistry.Reagent;
+using Content.Shared.FixedPoint;
+using JetBrains.Annotations;
+using Robust.Client.AutoGenerated;
+using Robust.Client.UserInterface.Controls;
+using Robust.Client.UserInterface.XAML;
+
+namespace Content.Client.Guidebook.Controls;
+
+[UsedImplicitly, GenerateTypedNameReferences]
+public sealed partial class GuideFoodComposition : BoxContainer, ISearchableControl
+{
+ public GuideFoodComposition(ReagentPrototype proto, FixedPoint2 quantity)
+ {
+ RobustXamlLoader.Load(this);
+
+ ReagentLabel.Text = proto.LocalizedName;
+ AmountLabel.Text = quantity.ToString();
+ }
+
+ public bool CheckMatchesSearch(string query)
+ {
+ return this.ChildrenContainText(query);
+ }
+
+ public void SetHiddenState(bool state, string query)
+ {
+ Visible = CheckMatchesSearch(query) ? state : !state;
+ }
+}
diff --git a/Content.Client/Guidebook/Controls/GuideFoodEmbed.xaml b/Content.Client/Guidebook/Controls/GuideFoodEmbed.xaml
new file mode 100644
index 0000000000..8aa2b10356
--- /dev/null
+++ b/Content.Client/Guidebook/Controls/GuideFoodEmbed.xaml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Content.Client/Guidebook/Controls/GuideFoodEmbed.xaml.cs b/Content.Client/Guidebook/Controls/GuideFoodEmbed.xaml.cs
new file mode 100644
index 0000000000..355d3a020f
--- /dev/null
+++ b/Content.Client/Guidebook/Controls/GuideFoodEmbed.xaml.cs
@@ -0,0 +1,161 @@
+using System.Diagnostics.CodeAnalysis;
+using System.Linq;
+using Content.Client.Chemistry.EntitySystems;
+using Content.Client.Guidebook.Richtext;
+using Content.Client.Message;
+using Content.Client.Nutrition.EntitySystems;
+using Content.Shared.Chemistry.Reagent;
+using Content.Shared.FixedPoint;
+using JetBrains.Annotations;
+using Robust.Client.AutoGenerated;
+using Robust.Client.Graphics;
+using Robust.Client.UserInterface;
+using Robust.Client.UserInterface.Controls;
+using Robust.Client.UserInterface.XAML;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Utility;
+
+namespace Content.Client.Guidebook.Controls;
+
+///
+/// Control for embedding a food recipe into a guidebook.
+///
+[UsedImplicitly, GenerateTypedNameReferences]
+public sealed partial class GuideFoodEmbed : BoxContainer, IDocumentTag, ISearchableControl
+{
+ [Dependency] private readonly IEntitySystemManager _systemManager = default!;
+ [Dependency] private readonly IPrototypeManager _prototype = default!;
+
+ private readonly FoodGuideDataSystem _foodGuideData;
+ private readonly ISawmill _logger = default!;
+
+ public GuideFoodEmbed()
+ {
+ RobustXamlLoader.Load(this);
+ IoCManager.InjectDependencies(this);
+ _foodGuideData = _systemManager.GetEntitySystem();
+ _logger = Logger.GetSawmill("food guide");
+ MouseFilter = MouseFilterMode.Stop;
+ }
+
+ public GuideFoodEmbed(FoodGuideEntry entry) : this()
+ {
+ GenerateControl(entry);
+ }
+
+ public bool CheckMatchesSearch(string query)
+ {
+ return FoodName.GetMessage()?.Contains(query, StringComparison.InvariantCultureIgnoreCase) == true
+ || FoodDescription.GetMessage()?.Contains(query, StringComparison.InvariantCultureIgnoreCase) == true;
+ }
+
+ public void SetHiddenState(bool state, string query)
+ {
+ Visible = CheckMatchesSearch(query) ? state : !state;
+ }
+
+ public bool TryParseTag(Dictionary args, [NotNullWhen(true)] out Control? control)
+ {
+ control = null;
+ if (!args.TryGetValue("Food", out var id))
+ {
+ _logger.Error("Food embed tag is missing food prototype argument.");
+ return false;
+ }
+
+ if (!_foodGuideData.TryGetData(id, out var data))
+ {
+ _logger.Warning($"Specified food prototype \"{id}\" does not have any known sources.");
+ return false;
+ }
+
+ GenerateControl(data);
+
+ control = this;
+ return true;
+ }
+
+ private void GenerateControl(FoodGuideEntry data)
+ {
+ _prototype.TryIndex(data.Result, out var proto);
+ if (proto == null)
+ {
+ FoodName.SetMarkup(Loc.GetString("guidebook-food-unknown-proto", ("id", data.Result)));
+ return;
+ }
+
+ var composition = data.Composition
+ .Select(it => _prototype.TryIndex(it.Reagent.Prototype, out var reagent) ? (reagent, it.Quantity) : (null, 0))
+ .Where(it => it.reagent is not null)
+ .Cast<(ReagentPrototype, FixedPoint2)>()
+ .ToList();
+
+ #region Colors
+
+ CalculateColors(composition, out var textColor, out var backgroundColor);
+
+ NameBackground.PanelOverride = new StyleBoxFlat
+ {
+ BackgroundColor = backgroundColor
+ };
+ FoodName.SetMarkup(Loc.GetString("guidebook-food-name", ("color", textColor), ("name", proto.Name)));
+
+ #endregion
+
+ #region Sources
+
+ foreach (var source in data.Sources.OrderBy(it => it.OutputCount))
+ {
+ var control = new GuideFoodSource(proto, source, _prototype);
+ SourcesDescriptionContainer.AddChild(control);
+ }
+
+ #endregion
+
+ #region Composition
+
+ foreach (var (reagent, quantity) in composition)
+ {
+ var control = new GuideFoodComposition(reagent, quantity);
+ CompositionDescriptionContainer.AddChild(control);
+ }
+
+ #endregion
+
+ FormattedMessage description = new();
+ description.AddText(proto?.Description ?? string.Empty);
+ // Cannot describe food flavor or smth beause food is entirely server-side
+
+ FoodDescription.SetMessage(description);
+ }
+
+ private void CalculateColors(List<(ReagentPrototype, FixedPoint2)> composition, out Color text, out Color background)
+ {
+ // Background color is calculated as the weighted average of the colors of the composition.
+ // Text color is determined based on background luminosity.
+ float r = 0, g = 0, b = 0;
+ FixedPoint2 weight = 0;
+
+ foreach (var (proto, quantity) in composition)
+ {
+ var tcolor = proto.SubstanceColor;
+ var prevalence =
+ quantity <= 0 ? 0f
+ : weight == 0f ? 1f
+ : (quantity / (weight + quantity)).Float();
+
+ r = r * (1 - prevalence) + tcolor.R * prevalence;
+ g = g * (1 - prevalence) + tcolor.G * prevalence;
+ b = b * (1 - prevalence) + tcolor.B * prevalence;
+
+ if (quantity > 0)
+ weight += quantity;
+ }
+
+ // Copied from GuideReagentEmbed which was probably copied from stackoverflow. This is the formula for color luminosity.
+ var lum = 0.2126f * r + 0.7152f * g + 0.0722f;
+
+ background = new Color(r, g, b);
+ text = lum > 0.5f ? Color.Black : Color.White;
+ }
+}
diff --git a/Content.Client/Guidebook/Controls/GuideFoodGroupEmbed.xaml b/Content.Client/Guidebook/Controls/GuideFoodGroupEmbed.xaml
new file mode 100644
index 0000000000..da671adaa7
--- /dev/null
+++ b/Content.Client/Guidebook/Controls/GuideFoodGroupEmbed.xaml
@@ -0,0 +1,4 @@
+
+
+
diff --git a/Content.Client/Guidebook/Controls/GuideFoodGroupEmbed.xaml.cs b/Content.Client/Guidebook/Controls/GuideFoodGroupEmbed.xaml.cs
new file mode 100644
index 0000000000..0e1034e394
--- /dev/null
+++ b/Content.Client/Guidebook/Controls/GuideFoodGroupEmbed.xaml.cs
@@ -0,0 +1,38 @@
+using System.Diagnostics.CodeAnalysis;
+using System.Linq;
+using Content.Client.Guidebook.Richtext;
+using Content.Client.Nutrition.EntitySystems;
+using JetBrains.Annotations;
+using Robust.Client.AutoGenerated;
+using Robust.Client.UserInterface;
+using Robust.Client.UserInterface.Controls;
+using Robust.Client.UserInterface.XAML;
+using Robust.Shared.Prototypes;
+
+namespace Content.Client.Guidebook.Controls;
+
+[UsedImplicitly, GenerateTypedNameReferences]
+public sealed partial class GuideFoodGroupEmbed : BoxContainer, IDocumentTag
+{
+ [Dependency] private readonly IEntitySystemManager _sysMan = default!;
+ [Dependency] private readonly IPrototypeManager _prototype = default!;
+
+ public GuideFoodGroupEmbed()
+ {
+ RobustXamlLoader.Load(this);
+ IoCManager.InjectDependencies(this);
+ MouseFilter = MouseFilterMode.Stop;
+
+ foreach (var data in _sysMan.GetEntitySystem().Registry.OrderBy(it => it.Identifier))
+ {
+ var embed = new GuideFoodEmbed(data);
+ GroupContainer.AddChild(embed);
+ }
+ }
+
+ public bool TryParseTag(Dictionary args, [NotNullWhen(true)] out Control? control)
+ {
+ control = this;
+ return true;
+ }
+}
diff --git a/Content.Client/Guidebook/Controls/GuideFoodSource.xaml b/Content.Client/Guidebook/Controls/GuideFoodSource.xaml
new file mode 100644
index 0000000000..74e3a2ec30
--- /dev/null
+++ b/Content.Client/Guidebook/Controls/GuideFoodSource.xaml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Content.Client/Guidebook/Controls/GuideFoodSource.xaml.cs b/Content.Client/Guidebook/Controls/GuideFoodSource.xaml.cs
new file mode 100644
index 0000000000..b0fee70975
--- /dev/null
+++ b/Content.Client/Guidebook/Controls/GuideFoodSource.xaml.cs
@@ -0,0 +1,160 @@
+using System.Linq;
+using Content.Client.Chemistry.EntitySystems;
+using Content.Client.UserInterface.ControlExtensions;
+using Content.Shared.Chemistry.Reagent;
+using Content.Shared.FixedPoint;
+using Content.Shared.Nutrition.Components;
+using JetBrains.Annotations;
+using Robust.Client.AutoGenerated;
+using Robust.Client.GameObjects;
+using Robust.Client.Graphics;
+using Robust.Client.UserInterface.Controls;
+using Robust.Client.UserInterface.XAML;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Utility;
+
+namespace Content.Client.Guidebook.Controls;
+
+[UsedImplicitly, GenerateTypedNameReferences]
+public sealed partial class GuideFoodSource : BoxContainer, ISearchableControl
+{
+ private readonly IPrototypeManager _protoMan;
+ private readonly SpriteSystem _sprites = default!;
+
+ public GuideFoodSource(IPrototypeManager protoMan)
+ {
+ RobustXamlLoader.Load(this);
+ _protoMan = protoMan;
+ _sprites = IoCManager.Resolve().GetEntitySystem();
+ }
+
+ public GuideFoodSource(EntityPrototype result, FoodSourceData entry, IPrototypeManager protoMan) : this(protoMan)
+ {
+ switch (entry)
+ {
+ case FoodButcheringData butchering:
+ GenerateControl(butchering);
+ break;
+ case FoodSlicingData slicing:
+ GenerateControl(slicing);
+ break;
+ case FoodRecipeData recipe:
+ GenerateControl(recipe);
+ break;
+ case FoodReactionData reaction:
+ GenerateControl(reaction);
+ break;
+ default:
+ throw new ArgumentOutOfRangeException(nameof(entry), entry, null);
+ }
+
+ GenerateOutputs(result, entry);
+ }
+
+ private void GenerateControl(FoodButcheringData entry)
+ {
+ if (!_protoMan.TryIndex(entry.Butchered, out var ent))
+ {
+ SourceLabel.SetMessage(Loc.GetString("guidebook-food-unknown-proto", ("id", entry.Butchered)));
+ return;
+ }
+
+ SetSource(ent);
+ ProcessingLabel.Text = Loc.GetString("guidebook-food-processing-butchering");
+
+ ProcessingTexture.Texture = entry.Type switch
+ {
+ ButcheringType.Knife => GetRsiTexture("/Textures/Objects/Weapons/Melee/kitchen_knife.rsi", "icon"),
+ _ => GetRsiTexture("/Textures/Structures/meat_spike.rsi", "spike")
+ };
+ }
+
+ private void GenerateControl(FoodSlicingData entry)
+ {
+ if (!_protoMan.TryIndex(entry.Sliced, out var ent))
+ {
+ SourceLabel.SetMessage(Loc.GetString("guidebook-food-unknown-proto", ("id", entry.Sliced)));
+ return;
+ }
+
+ SetSource(ent);
+ ProcessingLabel.Text = Loc.GetString("guidebook-food-processing-slicing");
+ ProcessingTexture.Texture = GetRsiTexture("/Textures/Objects/Misc/utensils.rsi", "plastic_knife");
+ }
+
+ private void GenerateControl(FoodRecipeData entry)
+ {
+ if (!_protoMan.TryIndex(entry.Recipe, out var recipe))
+ {
+ SourceLabel.SetMessage(Loc.GetString("guidebook-food-unknown-proto", ("id", entry.Result)));
+ return;
+ }
+
+ var combinedSolids = recipe.IngredientsSolids
+ .Select(it => _protoMan.TryIndex(it.Key, out var proto) ? FormatIngredient(proto, it.Value) : "")
+ .Where(it => it.Length > 0);
+ var combinedLiquids = recipe.IngredientsReagents
+ .Select(it => _protoMan.TryIndex(it.Key, out var proto) ? FormatIngredient(proto, it.Value) : "")
+ .Where(it => it.Length > 0);
+
+ var combinedIngredients = string.Join("\n", combinedLiquids.Union(combinedSolids));
+ SourceLabel.SetMessage(Loc.GetString("guidebook-food-processing-recipe", ("ingredients", combinedIngredients)));
+
+ ProcessingTexture.Texture = GetRsiTexture("/Textures/Structures/Machines/microwave.rsi", "mw");
+ ProcessingLabel.Text = Loc.GetString("guidebook-food-processing-cooking", ("time", recipe.CookTime));
+ }
+
+ private void GenerateControl(FoodReactionData entry)
+ {
+ if (!_protoMan.TryIndex(entry.Reaction, out var reaction))
+ {
+ SourceLabel.SetMessage(Loc.GetString("guidebook-food-unknown-proto", ("id", entry.Reaction)));
+ return;
+ }
+
+ var combinedReagents = reaction.Reactants
+ .Select(it => _protoMan.TryIndex(it.Key, out var proto) ? FormatIngredient(proto, it.Value.Amount) : "")
+ .Where(it => it.Length > 0);
+
+ SourceLabel.SetMessage(Loc.GetString("guidebook-food-processing-recipe", ("ingredients", string.Join("\n", combinedReagents))));
+ ProcessingTexture.TexturePath = "/Textures/Interface/Misc/beakerlarge.png";
+ ProcessingLabel.Text = Loc.GetString("guidebook-food-processing-reaction");
+ }
+
+ private Texture GetRsiTexture(string path, string state)
+ {
+ return _sprites.Frame0(new SpriteSpecifier.Rsi(new ResPath(path), state));
+ }
+
+ private void GenerateOutputs(EntityPrototype result, FoodSourceData entry)
+ {
+ OutputsLabel.Text = Loc.GetString("guidebook-food-output", ("name", result.Name), ("number", entry.OutputCount));
+ OutputsTexture.Texture = _sprites.Frame0(result);
+ }
+
+ private void SetSource(EntityPrototype ent)
+ {
+ SourceLabel.SetMessage(ent.Name);
+ OutputsTexture.Texture = _sprites.Frame0(ent);
+ }
+
+ private string FormatIngredient(EntityPrototype proto, FixedPoint2 amount)
+ {
+ return Loc.GetString("guidebook-food-ingredient-solid", ("name", proto.Name), ("amount", amount));
+ }
+
+ private string FormatIngredient(ReagentPrototype proto, FixedPoint2 amount)
+ {
+ return Loc.GetString("guidebook-food-ingredient-liquid", ("name", proto.LocalizedName), ("amount", amount));
+ }
+
+ public bool CheckMatchesSearch(string query)
+ {
+ return this.ChildrenContainText(query);
+ }
+
+ public void SetHiddenState(bool state, string query)
+ {
+ Visible = CheckMatchesSearch(query) ? state : !state;
+ }
+}
diff --git a/Content.Client/Language/LanguageMenuWindow.xaml.cs b/Content.Client/Language/LanguageMenuWindow.xaml.cs
index 301bb8902b..2f8370c3a6 100644
--- a/Content.Client/Language/LanguageMenuWindow.xaml.cs
+++ b/Content.Client/Language/LanguageMenuWindow.xaml.cs
@@ -1,4 +1,5 @@
using Content.Client.Language.Systems;
+using Content.Shared.Language.Events;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.CustomControls;
@@ -7,7 +8,7 @@
namespace Content.Client.Language;
[GenerateTypedNameReferences]
-public sealed partial class LanguageMenuWindow : DefaultWindow
+public sealed partial class LanguageMenuWindow : DefaultWindow, IEntityEventSubscriber
{
private readonly LanguageSystem _clientLanguageSystem;
private readonly List _entries = new();
@@ -17,6 +18,14 @@ public LanguageMenuWindow()
{
RobustXamlLoader.Load(this);
_clientLanguageSystem = IoCManager.Resolve().GetEntitySystem();
+
+ _clientLanguageSystem.OnLanguagesChanged += OnUpdateState;
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ base.Dispose(disposing);
+ _clientLanguageSystem.OnLanguagesChanged -= OnUpdateState;
}
protected override void Opened()
@@ -28,6 +37,11 @@ protected override void Opened()
}
+ private void OnUpdateState(object? sender, LanguagesUpdatedMessage args)
+ {
+ UpdateState(args.CurrentLanguage, args.Spoken);
+ }
+
public void UpdateState(string currentLanguage, List spokenLanguages)
{
var langName = Loc.GetString($"language-{currentLanguage}-name");
diff --git a/Content.Client/Language/Systems/LanguageSystem.cs b/Content.Client/Language/Systems/LanguageSystem.cs
index 5dc2fc1f4e..cb6bb60512 100644
--- a/Content.Client/Language/Systems/LanguageSystem.cs
+++ b/Content.Client/Language/Systems/LanguageSystem.cs
@@ -29,6 +29,8 @@ public sealed class LanguageSystem : SharedLanguageSystem
///
public List UnderstoodLanguages { get; private set; } = new();
+ public event EventHandler? OnLanguagesChanged;
+
public override void Initialize()
{
base.Initialize();
@@ -39,9 +41,13 @@ public override void Initialize()
private void OnLanguagesUpdated(LanguagesUpdatedMessage message)
{
+ // TODO this entire thing is horrible. If someone is willing to refactor this, LanguageSpeakerComponent should become shared with SendOnlyToOwner = true
+ // That way, this system will be able to use the existing networking infrastructure instead of relying on this makeshift... whatever this is.
CurrentLanguage = message.CurrentLanguage;
SpokenLanguages = message.Spoken;
UnderstoodLanguages = message.Understood;
+
+ OnLanguagesChanged?.Invoke(this, message);
}
private void OnRunLevelChanged(object? sender, RunLevelChangedEventArgs args)
diff --git a/Content.Client/Nutrition/EntitySystems/FoodGuideDataSystem.cs b/Content.Client/Nutrition/EntitySystems/FoodGuideDataSystem.cs
new file mode 100644
index 0000000000..37c7a25e21
--- /dev/null
+++ b/Content.Client/Nutrition/EntitySystems/FoodGuideDataSystem.cs
@@ -0,0 +1,30 @@
+using Content.Client.Chemistry.EntitySystems;
+using Robust.Shared.Prototypes;
+
+namespace Content.Client.Nutrition.EntitySystems;
+
+public sealed class FoodGuideDataSystem : SharedFoodGuideDataSystem
+{
+ public override void Initialize()
+ {
+ SubscribeNetworkEvent(OnReceiveRegistryUpdate);
+ }
+
+ private void OnReceiveRegistryUpdate(FoodGuideRegistryChangedEvent message)
+ {
+ Registry = message.Changeset;
+ }
+
+ public bool TryGetData(EntProtoId result, out FoodGuideEntry entry)
+ {
+ var index = Registry.FindIndex(it => it.Result == result);
+ if (index == -1)
+ {
+ entry = default;
+ return false;
+ }
+
+ entry = Registry[index];
+ return true;
+ }
+}
diff --git a/Content.Client/UserInterface/Systems/Language/LanguageMenuUIController.cs b/Content.Client/UserInterface/Systems/Language/LanguageMenuUIController.cs
index f36521ce81..e351a16bfb 100644
--- a/Content.Client/UserInterface/Systems/Language/LanguageMenuUIController.cs
+++ b/Content.Client/UserInterface/Systems/Language/LanguageMenuUIController.cs
@@ -2,7 +2,6 @@
using Content.Client.Gameplay;
using Content.Client.UserInterface.Controls;
using Content.Shared.Input;
-using Content.Shared.Language.Events;
using Robust.Client.UserInterface.Controllers;
using Robust.Client.UserInterface.Controls;
using Robust.Shared.Input.Binding;
@@ -18,12 +17,6 @@ public sealed class LanguageMenuUIController : UIController, IOnStateEntered UIManager.GetActiveUIWidgetOrNull()?.LanguageButton;
- public override void Initialize()
- {
- SubscribeNetworkEvent((LanguagesUpdatedMessage message, EntitySessionEventArgs _) =>
- LanguageWindow?.UpdateState(message.CurrentLanguage, message.Spoken));
- }
-
public void OnStateEntered(GameplayState state)
{
DebugTools.Assert(LanguageWindow == null);
@@ -31,6 +24,17 @@ public void OnStateEntered(GameplayState state)
LanguageWindow = UIManager.CreateWindow();
LayoutContainer.SetAnchorPreset(LanguageWindow, LayoutContainer.LayoutPreset.CenterTop);
+ LanguageWindow.OnClose += () =>
+ {
+ if (LanguageButton != null)
+ LanguageButton.Pressed = false;
+ };
+ LanguageWindow.OnOpen += () =>
+ {
+ if (LanguageButton != null)
+ LanguageButton.Pressed = true;
+ };
+
CommandBinds.Builder.Bind(ContentKeyFunctions.OpenLanguageMenu,
InputCmdHandler.FromDelegate(_ => ToggleWindow())).Register();
}
@@ -60,12 +64,6 @@ public void LoadButton()
return;
LanguageButton.OnPressed += LanguageButtonPressed;
-
- if (LanguageWindow == null)
- return;
-
- LanguageWindow.OnClose += () => LanguageButton.Pressed = false;
- LanguageWindow.OnOpen += () => LanguageButton.Pressed = true;
}
private void LanguageButtonPressed(ButtonEventArgs args)
diff --git a/Content.Server/Body/Components/BloodstreamComponent.cs b/Content.Server/Body/Components/BloodstreamComponent.cs
index dd93da9598..a272d5f365 100644
--- a/Content.Server/Body/Components/BloodstreamComponent.cs
+++ b/Content.Server/Body/Components/BloodstreamComponent.cs
@@ -181,9 +181,9 @@ public sealed partial class BloodstreamComponent : Component
public bool HasBloodDeficiency = false;
///
- /// How much reagent of blood should be removed with blood deficiency in each update interval?
+ /// How much percentage of max blood volume should be removed with blood deficiency in each update interval?
///
[DataField]
- public FixedPoint2 BloodDeficiencyLossAmount;
+ public float BloodDeficiencyLossPercentage;
}
}
diff --git a/Content.Server/Body/Systems/BloodstreamSystem.cs b/Content.Server/Body/Systems/BloodstreamSystem.cs
index b37ac5efeb..91ed7a2480 100644
--- a/Content.Server/Body/Systems/BloodstreamSystem.cs
+++ b/Content.Server/Body/Systems/BloodstreamSystem.cs
@@ -122,7 +122,7 @@ public override void Update(float frameTime)
if (bloodstream.HasBloodDeficiency)
{
if (!_mobStateSystem.IsDead(uid))
- RemoveBlood(uid, bloodstream.BloodDeficiencyLossAmount, bloodstream);
+ RemoveBlood(uid, bloodstream.BloodMaxVolume * bloodstream.BloodDeficiencyLossPercentage, bloodstream);
}
// Adds blood to their blood level if it is below the maximum.
else if (bloodSolution.Volume < bloodSolution.MaxVolume && !_mobStateSystem.IsDead(uid))
@@ -349,6 +349,14 @@ public void SetBloodLossThreshold(EntityUid uid, float threshold, BloodstreamCom
comp.BloodlossThreshold = threshold;
}
+ public void SetBloodMaxVolume(EntityUid uid, FixedPoint2 volume, BloodstreamComponent? comp = null)
+ {
+ if (!Resolve(uid, ref comp))
+ return;
+
+ comp.BloodMaxVolume = volume;
+ }
+
///
/// Attempts to modify the blood level of this entity directly.
///
diff --git a/Content.Server/HeightAdjust/BloodstreamAdjustSystem.cs b/Content.Server/HeightAdjust/BloodstreamAdjustSystem.cs
index 92e03e0c11..9ba0ee4b00 100644
--- a/Content.Server/HeightAdjust/BloodstreamAdjustSystem.cs
+++ b/Content.Server/HeightAdjust/BloodstreamAdjustSystem.cs
@@ -1,4 +1,5 @@
using Content.Server.Body.Components;
+using Content.Server.Body.Systems;
using Content.Server.Chemistry.Containers.EntitySystems;
using Content.Shared.CCVar;
using Content.Shared.Chemistry.Reagent;
@@ -10,6 +11,7 @@ namespace Content.Server.HeightAdjust;
public sealed class BloodstreamAdjustSystem : EntitySystem
{
+ [Dependency] private readonly BloodstreamSystem _bloodstream = default!;
[Dependency] private readonly IConfigurationManager _config = default!;
[Dependency] private readonly ContestsSystem _contests = default!;
[Dependency] private readonly SolutionContainerSystem _solutionContainer = default!;
@@ -40,6 +42,8 @@ public bool TryAdjustBloodstream(Entity ent)
bloodSolution.MaxVolume = newVolume;
bloodSolution.SetContents([new ReagentQuantity(bloodstream.BloodReagent, newBloodLevel, null)], false);
+ _bloodstream.SetBloodMaxVolume(ent.Owner, newVolume, bloodstream);
+
return true;
}
}
diff --git a/Content.Server/Language/TranslatorSystem.cs b/Content.Server/Language/TranslatorSystem.cs
index 6cdca12440..a893993e88 100644
--- a/Content.Server/Language/TranslatorSystem.cs
+++ b/Content.Server/Language/TranslatorSystem.cs
@@ -9,6 +9,7 @@
using Content.Shared.PowerCell;
using Content.Shared.Language.Components.Translators;
using Robust.Shared.Containers;
+using Robust.Shared.Timing;
namespace Content.Server.Language;
@@ -27,7 +28,7 @@ public override void Initialize()
SubscribeLocalEvent(OnProxyDetermineLanguages);
SubscribeLocalEvent(OnTranslatorInserted);
- SubscribeLocalEvent(OnTranslatorRemoved);
+ SubscribeLocalEvent(OnTranslatorParentChanged);
SubscribeLocalEvent(OnTranslatorToggle);
SubscribeLocalEvent(OnPowerCellSlotEmpty);
}
@@ -65,8 +66,7 @@ private void OnProxyDetermineLanguages(EntityUid uid, HoldsTranslatorComponent c
private void OnTranslatorInserted(EntityUid translator, HandheldTranslatorComponent component, EntGotInsertedIntoContainerMessage args)
{
- if (args.Container.Owner is not {Valid: true} holder
- || !EntityManager.HasComponent(holder))
+ if (args.Container.Owner is not {Valid: true} holder || !HasComp(holder))
return;
var intrinsic = EnsureComp(holder);
@@ -75,14 +75,19 @@ private void OnTranslatorInserted(EntityUid translator, HandheldTranslatorCompon
_language.UpdateEntityLanguages(holder);
}
- private void OnTranslatorRemoved(EntityUid translator, HandheldTranslatorComponent component, EntGotRemovedFromContainerMessage args)
+ private void OnTranslatorParentChanged(EntityUid translator, HandheldTranslatorComponent component, EntParentChangedMessage args)
{
- if (args.Container.Owner is not {Valid: true} holder
- || !EntityManager.TryGetComponent(holder, out var intrinsic))
+ if (!HasComp(args.OldParent))
return;
- intrinsic.Translators.RemoveWhere(it => it.Owner == translator);
- _language.UpdateEntityLanguages(holder);
+ // Update the translator on the next tick - this is necessary because there's a good chance the removal from a container
+ // Was caused by the player moving the translator within their inventory rather than removing it.
+ // If that is not the case, then OnProxyDetermineLanguages will remove this translator from HoldsTranslatorComponent.Translators.
+ Timer.Spawn(0, () =>
+ {
+ if (Exists(args.OldParent) && TryComp(args.OldParent, out var speaker))
+ _language.UpdateEntityLanguages(args.OldParent.Value, speaker);
+ });
}
private void OnTranslatorToggle(EntityUid translator, HandheldTranslatorComponent translatorComp, ActivateInWorldEvent args)
@@ -125,6 +130,9 @@ private void OnPowerCellSlotEmpty(EntityUid translator, HandheldTranslatorCompon
component.Enabled = false;
_powerCell.SetPowerCellDrawEnabled(translator, false);
OnAppearanceChange(translator, component);
+
+ if (_containers.TryGetContainingContainer(translator, out var holderCont) && TryComp(holderCont.Owner, out var languageComp))
+ _language.UpdateEntityLanguages(holderCont.Owner, languageComp);
}
private void CopyLanguages(BaseTranslatorComponent from, DetermineEntityLanguagesEvent to, LanguageKnowledgeComponent knowledge)
diff --git a/Content.Server/Medical/PenLightSystem.cs b/Content.Server/Medical/PenLightSystem.cs
index f48a84d047..0e0f22684a 100644
--- a/Content.Server/Medical/PenLightSystem.cs
+++ b/Content.Server/Medical/PenLightSystem.cs
@@ -1,4 +1,5 @@
using Content.Server.DoAfter;
+using Content.Server.Popups;
using Content.Server.PowerCell;
using Content.Shared.Damage;
using Content.Shared.DoAfter;
@@ -7,6 +8,7 @@
using Content.Shared.Eye.Blinding.Components;
using Content.Shared.Interaction;
using Content.Shared.Medical;
+using Content.Shared.Mobs.Components;
using Content.Shared.Mobs.Systems;
using Content.Shared.Traits.Assorted.Components;
using Robust.Server.GameObjects;
@@ -22,7 +24,9 @@ public sealed class PenLightSystem : EntitySystem
[Dependency] private readonly IEntityManager _entityManager = default!;
[Dependency] private readonly DoAfterSystem _doAfter = default!;
[Dependency] private readonly PowerCellSystem _powerCell = default!;
+ [Dependency] private readonly PopupSystem _popup = default!;
[Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
+
///
public override void Initialize()
{
@@ -30,20 +34,23 @@ public override void Initialize()
SubscribeLocalEvent(OnDoAfter);
}
- private void OnAfterInteract(EntityUid uid, PenLightComponent component, AfterInteractEvent args)
+ private void OnAfterInteract(EntityUid uid, PenLightComponent component, ref AfterInteractEvent args)
{
- if (args.Handled
- || args.Target is not { } target)
+ if (args.Handled
+ || args.Target is not {} target
+ || target == null
+ || !args.CanReach
+ || !HasComp(target)
+ || !_powerCell.HasDrawCharge(uid, user: args.User))
return;
-
args.Handled = TryStartExam(uid, target, args.User, component);
}
private void OnDoAfter(Entity uid, ref PenLightDoAfterEvent args)
{
- if (args.Handled
- || args.Cancelled
- || args.Target == null
+ if (args.Handled
+ || args.Cancelled
+ || args.Target == null
|| !_powerCell.HasDrawCharge(uid, user: args.User))
return;
@@ -52,6 +59,13 @@ private void OnDoAfter(Entity uid, ref PenLightDoAfterEvent a
args.Handled = true;
}
+ ///
+ /// Checks if the PointLight component is enabled.
+ ///
+ private bool IsLightEnabled(EntityUid uid)
+ {
+ return TryComp(uid, out var pointLight) && pointLight.Enabled;
+ }
///
/// Actually handles the exam interaction.
@@ -61,6 +75,18 @@ public bool TryStartExam(EntityUid uid, EntityUid target, EntityUid user, PenLig
if (!Resolve(uid, ref component))
return false;
+ if (!IsLightEnabled(uid))
+ {
+ if (user != null)
+ _popup.PopupEntity(Loc.GetString("penlight-off"), uid, user);
+ return false;
+ }
+ // can't examine your own eyes, dingus
+ if (user == target)
+ {
+ _popup.PopupEntity(Loc.GetString("penlight-cannot-examine-self"), uid, user);
+ return false;
+ }
return _doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager, user, component.ExamSpeed, new PenLightDoAfterEvent(),
uid, target, uid)
{
@@ -73,7 +99,7 @@ public bool TryStartExam(EntityUid uid, EntityUid target, EntityUid user, PenLig
}
private void OpenUserInterface(EntityUid user, EntityUid penlight)
{
- if (!TryComp(user, out var actor)
+ if (!TryComp(user, out var actor)
|| !_uiSystem.TryGetUi(penlight, PenLightUiKey.Key, out var ui))
return;
@@ -86,8 +112,10 @@ private void OpenUserInterface(EntityUid user, EntityUid penlight)
private void Diagnose(EntityUid penlight, EntityUid target)
{
if (!_uiSystem.TryGetUi(penlight, PenLightUiKey.Key, out var ui)
- || !HasComp(target))
+ || !HasComp(target)
+ || !HasComp(target))
return;
+
// Blind
var blind = _entityManager.HasComponent(target);
diff --git a/Content.Server/Nutrition/EntitySystems/FoodGuideDataSystem.cs b/Content.Server/Nutrition/EntitySystems/FoodGuideDataSystem.cs
new file mode 100644
index 0000000000..f21c509ace
--- /dev/null
+++ b/Content.Server/Nutrition/EntitySystems/FoodGuideDataSystem.cs
@@ -0,0 +1,138 @@
+using System.Linq;
+using Content.Client.Chemistry.EntitySystems;
+using Content.Server.Chemistry.ReactionEffects;
+using Content.Server.Nutrition.Components;
+using Content.Shared.Chemistry.Components.SolutionManager;
+using Content.Shared.Chemistry.Reaction;
+using Content.Shared.Chemistry.Reagent;
+using Content.Shared.Kitchen;
+using Content.Shared.Nutrition.Components;
+using Robust.Server.Player;
+using Robust.Shared.Enums;
+using Robust.Shared.Player;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Utility;
+
+namespace Content.Server.Nutrition.EntitySystems;
+
+public sealed class FoodGuideDataSystem : SharedFoodGuideDataSystem
+{
+ public static readonly ProtoId[] ReagentWhitelist =
+ [
+ "Nutriment",
+ "Vitamin",
+ "Protein",
+ "UncookedAnimalProteins",
+ "Fat",
+ "Water"
+ ];
+
+ public static readonly string[] ComponentNamesBlacklist = ["HumanoidAppearance"];
+
+ public static readonly string[] SuffixBlacklist = ["debug", "do not map", "admeme"];
+
+ [Dependency] private readonly IPlayerManager _player = default!;
+ [Dependency] private readonly IPrototypeManager _protoMan = default!;
+
+ private Dictionary> _sources = new();
+
+ public override void Initialize()
+ {
+ SubscribeLocalEvent(OnPrototypesReloaded);
+ _player.PlayerStatusChanged += OnPlayerStatusChanged;
+
+ ReloadRecipes();
+ }
+
+ private void OnPrototypesReloaded(PrototypesReloadedEventArgs args)
+ {
+ if (!args.WasModified()
+ && !args.WasModified()
+ && !args.WasModified()
+ )
+ return;
+
+ ReloadRecipes();
+ }
+
+ public void ReloadRecipes()
+ {
+ // TODO: add this code to the list of known recipes because this is spaghetti
+ _sources.Clear();
+
+ // Butcherable and slicable entities
+ foreach (var ent in _protoMan.EnumeratePrototypes())
+ {
+ if (ent.Abstract
+ || ent.Components.Any(it => ComponentNamesBlacklist.Contains(it.Key))
+ || ent.SetSuffix is {} suffix && SuffixBlacklist.Any(it => suffix.Contains(it, StringComparison.OrdinalIgnoreCase))
+ )
+ continue;
+
+ if (ent.TryGetComponent(out var butcherable))
+ {
+ var butcheringSource = new FoodButcheringData(ent, butcherable);
+ foreach (var butchlet in butcherable.SpawnedEntities)
+ {
+ if (butchlet.PrototypeId is null)
+ continue;
+
+ _sources.GetOrNew(butchlet.PrototypeId).Add(butcheringSource);
+ }
+ }
+
+ if (ent.TryGetComponent(out var slicable) && slicable.Slice is not null)
+ {
+ _sources.GetOrNew(slicable.Slice).Add(new FoodSlicingData(ent, slicable.Slice.Value, slicable.TotalCount));
+ }
+ }
+
+ // Recipes
+ foreach (var recipe in _protoMan.EnumeratePrototypes())
+ {
+ _sources.GetOrNew(recipe.Result).Add(new FoodRecipeData(recipe));
+ }
+
+ // Entity-spawning reactions
+ foreach (var reaction in _protoMan.EnumeratePrototypes())
+ {
+ foreach (var effect in reaction.Effects)
+ {
+ if (effect is not CreateEntityReactionEffect entEffect)
+ continue;
+
+ _sources.GetOrNew(entEffect.Entity).Add(new FoodReactionData(reaction, entEffect.Entity, (int) entEffect.Number));
+ }
+ }
+
+ Registry.Clear();
+
+ foreach (var (result, sources) in _sources)
+ {
+ var proto = _protoMan.Index(result);
+ var composition = proto.TryGetComponent(out var food) && proto.TryGetComponent(out var manager)
+ ? manager?.Solutions?[food.Solution]?.Contents?.ToArray() ?? []
+ : [];
+
+ // We filter out food without whitelisted reagents because well when people look for food they usually expect FOOD and not insulated gloves.
+ // And we get insulated and other gloves because they have ButcherableComponent and they are also moth food
+ if (!composition.Any(it => ReagentWhitelist.Contains(it.Reagent.Prototype)))
+ continue;
+
+ // We also limit the number of sources to 10 because it's a huge performance strain to render 500 raw meat recipes.
+ var distinctSources = sources.DistinctBy(it => it.Identitier).Take(10);
+ var entry = new FoodGuideEntry(result, proto.Name, distinctSources.ToArray(), composition);
+ Registry.Add(entry);
+ }
+
+ RaiseNetworkEvent(new FoodGuideRegistryChangedEvent(Registry));
+ }
+
+ private void OnPlayerStatusChanged(object? sender, SessionStatusEventArgs args)
+ {
+ if (args.NewStatus != SessionStatus.Connected)
+ return;
+
+ RaiseNetworkEvent(new FoodGuideRegistryChangedEvent(Registry), args.Session);
+ }
+}
diff --git a/Content.Server/Traits/BloodDeficiencyComponent.cs b/Content.Server/Traits/BloodDeficiencyComponent.cs
index 616f60cd83..c6219d3e02 100644
--- a/Content.Server/Traits/BloodDeficiencyComponent.cs
+++ b/Content.Server/Traits/BloodDeficiencyComponent.cs
@@ -7,8 +7,8 @@ namespace Content.Server.Traits.Assorted;
public sealed partial class BloodDeficiencyComponent : Component
{
//
- // How much reagent of blood should be removed in each update interval?
+ /// How much percentage of max blood volume should be removed in each update interval?
//
[DataField(required: true)]
- public float BloodLossAmount;
+ public float BloodLossPercentage;
}
diff --git a/Content.Server/Traits/BloodDeficiencySystem.cs b/Content.Server/Traits/BloodDeficiencySystem.cs
index f1ae490995..ee7a39e46e 100644
--- a/Content.Server/Traits/BloodDeficiencySystem.cs
+++ b/Content.Server/Traits/BloodDeficiencySystem.cs
@@ -18,6 +18,6 @@ private void OnStartup(EntityUid uid, BloodDeficiencyComponent component, Compon
return;
bloodstream.HasBloodDeficiency = true;
- bloodstream.BloodDeficiencyLossAmount = component.BloodLossAmount;
+ bloodstream.BloodDeficiencyLossPercentage = component.BloodLossPercentage;
}
}
diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs
index 12ccf2681f..cd66c783a7 100644
--- a/Content.Shared/CCVar/CCVars.cs
+++ b/Content.Shared/CCVar/CCVars.cs
@@ -2467,5 +2467,21 @@ public static readonly CVarDef
CVarDef.Create("reclaimer.allow_gibbing", true, CVar.SERVER);
#endregion
+
+ #region Jetpack System
+
+ ///
+ /// When true, Jetpacks can be enabled anywhere, even in gravity.
+ ///
+ public static readonly CVarDef JetpackEnableAnywhere =
+ CVarDef.Create("jetpack.enable_anywhere", false, CVar.REPLICATED);
+
+ ///
+ /// When true, jetpacks can be enabled on grids that have zero gravity.
+ ///
+ public static readonly CVarDef JetpackEnableInNoGravity =
+ CVarDef.Create("jetpack.enable_in_no_gravity", true, CVar.REPLICATED);
+
+ #endregion
}
}
diff --git a/Content.Shared/Medical/PenLightComponent.cs b/Content.Shared/Medical/PenLightComponent.cs
index 50dacae3dc..770e8af7e9 100644
--- a/Content.Shared/Medical/PenLightComponent.cs
+++ b/Content.Shared/Medical/PenLightComponent.cs
@@ -9,6 +9,7 @@ namespace Content.Shared.Medical;
[RegisterComponent, NetworkedComponent, AutoGenerateComponentPause]
public sealed partial class PenLightComponent : Component
{
+
///
/// Cooldown Time, exams take a bit
///
diff --git a/Content.Shared/Movement/Systems/SharedJetpackSystem.cs b/Content.Shared/Movement/Systems/SharedJetpackSystem.cs
index 8c42511f84..8d358f8db3 100644
--- a/Content.Shared/Movement/Systems/SharedJetpackSystem.cs
+++ b/Content.Shared/Movement/Systems/SharedJetpackSystem.cs
@@ -1,9 +1,11 @@
using Content.Shared.Actions;
+using Content.Shared.CCVar;
using Content.Shared.Gravity;
using Content.Shared.Interaction.Events;
using Content.Shared.Movement.Components;
using Content.Shared.Movement.Events;
using Content.Shared.Popups;
+using Robust.Shared.Configuration;
using Robust.Shared.Containers;
using Robust.Shared.Physics.Components;
using Robust.Shared.Physics.Systems;
@@ -20,6 +22,7 @@ public abstract class SharedJetpackSystem : EntitySystem
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly SharedPhysicsSystem _physics = default!;
[Dependency] private readonly ActionContainerSystem _actionContainer = default!;
+ [Dependency] private readonly IConfigurationManager _config = default!;
public override void Initialize()
{
@@ -125,8 +128,11 @@ private void OnJetpackToggle(EntityUid uid, JetpackComponent component, ToggleJe
private bool CanEnableOnGrid(EntityUid? gridUid)
{
- return gridUid == null ||
- (!HasComp(gridUid));
+ return _config.GetCVar(CCVars.JetpackEnableAnywhere)
+ || gridUid == null
+ || _config.GetCVar(CCVars.JetpackEnableInNoGravity)
+ && TryComp(gridUid, out var comp)
+ && comp.Enabled;
}
private void OnJetpackGetAction(EntityUid uid, JetpackComponent component, GetItemActionsEvent args)
diff --git a/Content.Shared/Nutrition/Components/ButcherableComponent.cs b/Content.Shared/Nutrition/Components/ButcherableComponent.cs
index 4fce45422a..975d4329dc 100644
--- a/Content.Shared/Nutrition/Components/ButcherableComponent.cs
+++ b/Content.Shared/Nutrition/Components/ButcherableComponent.cs
@@ -1,5 +1,6 @@
using Content.Shared.Storage;
using Robust.Shared.GameStates;
+using Robust.Shared.Serialization;
namespace Content.Shared.Nutrition.Components
{
@@ -25,6 +26,7 @@ public sealed partial class ButcherableComponent : Component
public bool BeingButchered;
}
+ [Serializable, NetSerializable]
public enum ButcheringType : byte
{
Knife, // e.g. goliaths
diff --git a/Content.Shared/Nutrition/EntitySystems/SharedFoodGuideDataSystem.cs b/Content.Shared/Nutrition/EntitySystems/SharedFoodGuideDataSystem.cs
new file mode 100644
index 0000000000..c31776cd75
--- /dev/null
+++ b/Content.Shared/Nutrition/EntitySystems/SharedFoodGuideDataSystem.cs
@@ -0,0 +1,158 @@
+using System.Linq;
+using Content.Shared.Chemistry.Reaction;
+using Content.Shared.Chemistry.Reagent;
+using Content.Shared.Kitchen;
+using Content.Shared.Nutrition.Components;
+using Content.Shared.Storage;
+using Robust.Shared.Prototypes;
+using Robust.Shared.Serialization;
+
+namespace Content.Client.Chemistry.EntitySystems;
+
+public abstract class SharedFoodGuideDataSystem : EntitySystem
+{
+ public List Registry = new();
+}
+
+[Serializable, NetSerializable]
+public sealed class FoodGuideRegistryChangedEvent : EntityEventArgs
+{
+ [DataField]
+ public List Changeset;
+
+ public FoodGuideRegistryChangedEvent(List changeset)
+ {
+ Changeset = changeset;
+ }
+}
+
+[DataDefinition, Serializable, NetSerializable]
+public partial struct FoodGuideEntry
+{
+ [DataField]
+ public EntProtoId Result;
+
+ [DataField]
+ public string Identifier; // Used for sorting
+
+ [DataField]
+ public FoodSourceData[] Sources;
+
+ [DataField]
+ public ReagentQuantity[] Composition;
+
+ public FoodGuideEntry(EntProtoId result, string identifier, FoodSourceData[] sources, ReagentQuantity[] composition)
+ {
+ Result = result;
+ Identifier = identifier;
+ Sources = sources;
+ Composition = composition;
+ }
+}
+
+[ImplicitDataDefinitionForInheritors, Serializable, NetSerializable]
+public abstract partial class FoodSourceData
+{
+ ///
+ /// Number of products created from this source. Used for primary ordering.
+ ///
+ public abstract int OutputCount { get; }
+
+ ///
+ /// A string used to distinguish different sources. Typically the name of the related entity.
+ ///
+ public string Identitier;
+
+ public abstract bool IsSourceOf(EntProtoId food);
+}
+
+[Serializable, NetSerializable]
+public sealed partial class FoodButcheringData : FoodSourceData
+{
+ [DataField]
+ public EntProtoId Butchered;
+
+ [DataField]
+ public ButcheringType Type;
+
+ [DataField]
+ public List Results;
+
+ public override int OutputCount => Results.Count;
+
+ public FoodButcheringData(EntityPrototype butchered, ButcherableComponent comp)
+ {
+ Identitier = butchered.Name;
+ Butchered = butchered.ID;
+ Type = comp.Type;
+ Results = comp.SpawnedEntities;
+ }
+
+ public override bool IsSourceOf(EntProtoId food) => Results.Any(it => it.PrototypeId == food);
+}
+
+[Serializable, NetSerializable]
+public sealed partial class FoodSlicingData : FoodSourceData
+{
+ [DataField]
+ public EntProtoId Sliced, Result;
+
+ [DataField]
+ private int _outputCount;
+ public override int OutputCount => _outputCount;
+
+ public FoodSlicingData(EntityPrototype sliced, EntProtoId result, int outputCount)
+ {
+ Identitier = sliced.Name;
+ Sliced = sliced.ID;
+ Result = result;
+ _outputCount = outputCount; // Server-only
+ }
+
+ public override bool IsSourceOf(EntProtoId food) => food == Result;
+}
+
+[Serializable, NetSerializable]
+public sealed partial class FoodRecipeData : FoodSourceData
+{
+ [DataField]
+ public ProtoId Recipe;
+
+ [DataField]
+ public EntProtoId Result;
+
+ public override int OutputCount => 1;
+
+ public FoodRecipeData(FoodRecipePrototype proto)
+ {
+ Identitier = proto.Name;
+ Recipe = proto.ID;
+ Result = proto.Result;
+ }
+
+ public override bool IsSourceOf(EntProtoId food) => food == Result;
+}
+
+[Serializable, NetSerializable]
+public sealed partial class FoodReactionData : FoodSourceData
+{
+ [DataField]
+ public ProtoId Reaction;
+
+ [DataField]
+ public EntProtoId Result;
+
+ [DataField]
+ private int _outputCount;
+ public override int OutputCount => _outputCount;
+
+ public FoodReactionData(ReactionPrototype reaction, EntProtoId result, int outputCount)
+ {
+ Identitier = reaction.Name;
+ Reaction = reaction.ID;
+ Result = result;
+ _outputCount = outputCount;
+ }
+
+ public override bool IsSourceOf(EntProtoId food) => food == Result;
+}
diff --git a/Resources/Audio/Announcers/_NTH/events/gas_leak.ogg b/Resources/Audio/Announcers/_NTH/events/gas_leak.ogg
index f4b83911f1..d37aedc8d1 100644
Binary files a/Resources/Audio/Announcers/_NTH/events/gas_leak.ogg and b/Resources/Audio/Announcers/_NTH/events/gas_leak.ogg differ
diff --git a/Resources/Audio/DeltaV/Jukebox/DOS=HIGH,_UMB.ogg b/Resources/Audio/DeltaV/Jukebox/DOS=HIGH,_UMB.ogg
new file mode 100644
index 0000000000..b16a328b13
Binary files /dev/null and b/Resources/Audio/DeltaV/Jukebox/DOS=HIGH,_UMB.ogg differ
diff --git a/Resources/Audio/DeltaV/Jukebox/Patricia_Taxxon_-_Minute_-_MONO.ogg b/Resources/Audio/DeltaV/Jukebox/Patricia_Taxxon_-_Minute_-_MONO.ogg
new file mode 100644
index 0000000000..05a7fb5fda
Binary files /dev/null and b/Resources/Audio/DeltaV/Jukebox/Patricia_Taxxon_-_Minute_-_MONO.ogg differ
diff --git a/Resources/Audio/DeltaV/Jukebox/Phoron_Will_Make_Us_RichMONO2.ogg b/Resources/Audio/DeltaV/Jukebox/Phoron_Will_Make_Us_RichMONO2.ogg
new file mode 100644
index 0000000000..f0c5919c3c
Binary files /dev/null and b/Resources/Audio/DeltaV/Jukebox/Phoron_Will_Make_Us_RichMONO2.ogg differ
diff --git a/Resources/Audio/DeltaV/Jukebox/Scratch_Post_-_OST_MONO.ogg b/Resources/Audio/DeltaV/Jukebox/Scratch_Post_-_OST_MONO.ogg
new file mode 100644
index 0000000000..edaa29c836
Binary files /dev/null and b/Resources/Audio/DeltaV/Jukebox/Scratch_Post_-_OST_MONO.ogg differ
diff --git a/Resources/Audio/DeltaV/Jukebox/a_different_reality_lagoona_remix.xm-MONO.ogg b/Resources/Audio/DeltaV/Jukebox/a_different_reality_lagoona_remix.xm-MONO.ogg
new file mode 100644
index 0000000000..bb857bd105
Binary files /dev/null and b/Resources/Audio/DeltaV/Jukebox/a_different_reality_lagoona_remix.xm-MONO.ogg differ
diff --git a/Resources/Audio/DeltaV/Jukebox/aggravated.it-MONO.ogg b/Resources/Audio/DeltaV/Jukebox/aggravated.it-MONO.ogg
new file mode 100644
index 0000000000..5570556f4d
Binary files /dev/null and b/Resources/Audio/DeltaV/Jukebox/aggravated.it-MONO.ogg differ
diff --git a/Resources/Audio/DeltaV/Jukebox/attributions.yml b/Resources/Audio/DeltaV/Jukebox/attributions.yml
new file mode 100644
index 0000000000..67555c5445
--- /dev/null
+++ b/Resources/Audio/DeltaV/Jukebox/attributions.yml
@@ -0,0 +1,88 @@
+# sorted alphabetically based on filenames in the folder Resources/Audio/DeltaV/Jukebox
+# keep it ordered or I'll stab you
+
+- files: ["a_different_reality_lagoona_remix.xm-MONO.ogg"]
+ license: "CC-BY-4.0"
+ copyright: "A.D.R (Lagoona rmx) by Andreas Viklund, converted to mono"
+ source: "https://modarchive.org/index.php?request=view_by_moduleid&query=134786"
+
+- files: ["aggravated.it-MONO.ogg"]
+ license: "CC-BY-NC-SA-4.0"
+ copyright: "MEL -Aggravated Assault by melcom, converted to mono"
+ source: "https://modarchive.org/index.php?request=view_by_moduleid&query=176234"
+
+- files: ["autumnal_equinox.xm-MONO.ogg"]
+ license: "CC-BY-NC-4.0"
+ copyright: "Autumnal Equinox by lemonade, converted to mono"
+ source: "https://modarchive.org/index.php?request=view_by_moduleid&query=143993"
+
+- files: ["DOS=HIGH,_UMB.ogg"]
+ license: "Custom"
+ copyright: "DOS=HIGH, UMB by MASTER BOOT RECORD may be used non-commercially in the Delta-V fork of SS14. Converted from FLAC to OGG, then converted to mono."
+ source: "https://masterbootrecord.bandcamp.com/album/c-edit-config-sys"
+
+- files: ["drozerix_-_alone.xm-MONO.ogg"]
+ license: "Custom"
+ copyright: "Alone by Drozerix, converted to mono"
+ source: "https://modarchive.org/index.php?request=view_by_moduleid&query=199968"
+
+- files: ["drozerix_-_leisurely_voice.xm-MONO.ogg"]
+ license: "Custom"
+ copyright: "Leisurely Voice by Drozerix, converted to mono"
+ source: "https://modarchive.org/index.php?request=view_by_moduleid&query=183837"
+
+- files: ["every_light_is_blinking_at_onceMONO.ogg"]
+ license: "CC-BY-NC-SA-3.0"
+ copyright: "every light blinking at once by Sunbeamstress, converted to mono"
+ source: "https://soundcloud.com/sunbeamstress/every-light-is-blinking-at-once"
+
+- files: ["hackers-MONO.ogg"]
+ license: "CC-BY-NC-SA-3.0"
+ copyright: "Hackers by Karl Casey @ White Bat Audio, converted to mono"
+ source: "https://www.youtube.com/watch?v=k8nHWwO1U2Q"
+
+- files: [lasers_rip_apart_the_bulkheadMONO.ogg]
+ license: "CC-BY-NC-SA-3.0"
+ copyright: "lasers rip apart by Sunbeamstress, converted to mono"
+ source: "https://soundcloud.com/sunbeamstress/lasers-rip-apart-the-bulkhead"
+
+- files: ["marhaba-MONO.ogg"]
+ license: "CC-BY-NC-SA-3.0"
+ copyright: "Marhaba by Ian Alex Mac. Converted from MP3 to OGG, then converted to mono"
+ source: "https://freemusicarchive.org/music/Ian_Alex_Mac/Cues/Marhaba"
+
+- files: ["Patricia_Taxxon_-_Minute_-_MONO.ogg"]
+ license: "CC-BY-SA-3.0"
+ copyright: "Minute by Patricia Taxxon off the album 'Aeroplane,' converted to mono"
+ source: "https://patriciataxxon.bandcamp.com/track/minute"
+
+- files: ["Phoron_Will_Make_Us_RichMONO2.ogg"]
+ license: "CC-BY-NC-SA-3.0"
+ copyright: "phoron will make us rich by Sunbeamstress, converted to mono"
+ source: "https://soundcloud.com/sunbeamstress/phoron-will-make-us-rich"
+
+- files: ["psirius_-_nymphs_of_the_forest.mptm-MONO.ogg"]
+ license: "CC-BY-NC-SA-4.0"
+ copyright: "Nymphs of the forest by Psirius, converted to mono"
+ source: "https://modarchive.org/index.php?request=view_by_moduleid&query=185545"
+
+- files: ["Scratch_Post_-_OST_MONO.ogg"]
+ license: "CC-BY-SA-4.0"
+ copyright: "Scratch Post by Ghirardelli7 on SoundCloud, used with the understanding that credit is given to the artist."
+ source: "https://soundcloud.com/ghirardelli7/scratch-post-ost"
+
+- files: ["shibamata-MONO.ogg"]
+ license: "Custom"
+ copyright: "Shibamata by .2gou / Dot Nigou. This track is not released under any formal licensure, and exists in the public domain in multiple forms, including remixes and mashups. Converted to mono."
+ source: "https://www.youtube.com/watch?v=FIw-HUP7XK0"
+
+- files: ["space_asshole.ogg"]
+ license: "Custom"
+ copyright: "Space Asshole by Chris Remo is used with special permission from the author, under the condition that the project remains non-commercial and open source. The author also requested that a link to his bandcamp be included: https://chrisremo.bandcamp.com/ Converted from stereo to mono."
+ source: "https://idlethumbs.bandcamp.com/track/space-asshole"
+
+- files: ["superposition-MONO.ogg"]
+ license: "CC-BY-NC-3.0"
+ copyright: "Superposition by Amie Waters, converted to mono"
+ source: "https://amiewaters.bandcamp.com/track/superposition-2"
+
diff --git a/Resources/Audio/DeltaV/Jukebox/autumnal_equinox.xm-MONO.ogg b/Resources/Audio/DeltaV/Jukebox/autumnal_equinox.xm-MONO.ogg
new file mode 100644
index 0000000000..db13ac8d70
Binary files /dev/null and b/Resources/Audio/DeltaV/Jukebox/autumnal_equinox.xm-MONO.ogg differ
diff --git a/Resources/Audio/DeltaV/Jukebox/drozerix_-_alone.xm-MONO.ogg b/Resources/Audio/DeltaV/Jukebox/drozerix_-_alone.xm-MONO.ogg
new file mode 100644
index 0000000000..7bb1cefdde
Binary files /dev/null and b/Resources/Audio/DeltaV/Jukebox/drozerix_-_alone.xm-MONO.ogg differ
diff --git a/Resources/Audio/DeltaV/Jukebox/drozerix_-_leisurely_voice.xm-MONO.ogg b/Resources/Audio/DeltaV/Jukebox/drozerix_-_leisurely_voice.xm-MONO.ogg
new file mode 100644
index 0000000000..9eb8028c2f
Binary files /dev/null and b/Resources/Audio/DeltaV/Jukebox/drozerix_-_leisurely_voice.xm-MONO.ogg differ
diff --git a/Resources/Audio/DeltaV/Jukebox/every_light_is_blinking_at_onceMONO.ogg b/Resources/Audio/DeltaV/Jukebox/every_light_is_blinking_at_onceMONO.ogg
new file mode 100644
index 0000000000..5de6bfe2c7
Binary files /dev/null and b/Resources/Audio/DeltaV/Jukebox/every_light_is_blinking_at_onceMONO.ogg differ
diff --git a/Resources/Audio/DeltaV/Jukebox/hackers-MONO.ogg b/Resources/Audio/DeltaV/Jukebox/hackers-MONO.ogg
new file mode 100644
index 0000000000..3603aeac32
Binary files /dev/null and b/Resources/Audio/DeltaV/Jukebox/hackers-MONO.ogg differ
diff --git a/Resources/Audio/DeltaV/Jukebox/lasers_rip_apart_the_bulkheadMONO.ogg b/Resources/Audio/DeltaV/Jukebox/lasers_rip_apart_the_bulkheadMONO.ogg
new file mode 100644
index 0000000000..addbfcc6c0
Binary files /dev/null and b/Resources/Audio/DeltaV/Jukebox/lasers_rip_apart_the_bulkheadMONO.ogg differ
diff --git a/Resources/Audio/DeltaV/Jukebox/marhaba-MONO.ogg b/Resources/Audio/DeltaV/Jukebox/marhaba-MONO.ogg
new file mode 100644
index 0000000000..18b39a0296
Binary files /dev/null and b/Resources/Audio/DeltaV/Jukebox/marhaba-MONO.ogg differ
diff --git a/Resources/Audio/DeltaV/Jukebox/psirius_-_nymphs_of_the_forest.mptm-MONO.ogg b/Resources/Audio/DeltaV/Jukebox/psirius_-_nymphs_of_the_forest.mptm-MONO.ogg
new file mode 100644
index 0000000000..aa26988bcd
Binary files /dev/null and b/Resources/Audio/DeltaV/Jukebox/psirius_-_nymphs_of_the_forest.mptm-MONO.ogg differ
diff --git a/Resources/Audio/DeltaV/Jukebox/shibamata-MONO.ogg b/Resources/Audio/DeltaV/Jukebox/shibamata-MONO.ogg
new file mode 100644
index 0000000000..24fc190218
Binary files /dev/null and b/Resources/Audio/DeltaV/Jukebox/shibamata-MONO.ogg differ
diff --git a/Resources/Audio/DeltaV/Jukebox/space_asshole-MONO.ogg b/Resources/Audio/DeltaV/Jukebox/space_asshole-MONO.ogg
new file mode 100644
index 0000000000..90e7848b77
Binary files /dev/null and b/Resources/Audio/DeltaV/Jukebox/space_asshole-MONO.ogg differ
diff --git a/Resources/Audio/DeltaV/Jukebox/superposition-MONO.ogg b/Resources/Audio/DeltaV/Jukebox/superposition-MONO.ogg
new file mode 100644
index 0000000000..5e7d45a886
Binary files /dev/null and b/Resources/Audio/DeltaV/Jukebox/superposition-MONO.ogg differ
diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml
index d7068562a8..d833e86ffb 100644
--- a/Resources/Changelog/Changelog.yml
+++ b/Resources/Changelog/Changelog.yml
@@ -6130,3 +6130,144 @@ Entries:
id: 6340
time: '2024-09-09T14:21:56.0000000+00:00'
url: https://github.com/Simple-Station/Einstein-Engines/pull/794
+- author: Mnemotechnician
+ changes:
+ - type: Add
+ message: >-
+ The "food recipes" page in guidebook now contains an automatically
+ generated list of food recipes.
+ id: 6341
+ time: '2024-09-11T17:55:11.0000000+00:00'
+ url: https://github.com/Simple-Station/Einstein-Engines/pull/783
+- author: VMSolidus
+ changes:
+ - type: Add
+ message: Rat Kings have returned to the default event rotation.
+ id: 6342
+ time: '2024-09-11T19:59:32.0000000+00:00'
+ url: https://github.com/Simple-Station/Einstein-Engines/pull/903
+- author: VMSolidus
+ changes:
+ - type: Add
+ message: Jetpacks now work in zero gravity.
+ - type: Add
+ message: >-
+ New CCVar "jetpack.enable_anywhere" allows server hosts to optionally
+ make it so that jetpacks can be used anywhere, even in gravity and on
+ grids.
+ - type: Add
+ message: >-
+ New CCVar "jetpack.enable_in_no_gravity" allows server hosts to
+ optionally disable jetpacks being usable in zero gravity.
+ id: 6343
+ time: '2024-09-11T19:59:45.0000000+00:00'
+ url: https://github.com/Simple-Station/Einstein-Engines/pull/901
+- author: VMSolidus
+ changes:
+ - type: Add
+ message: >-
+ Medical Job related items are now part of a Medical loadout group, and
+ have all been significantly discounted.
+ id: 6344
+ time: '2024-09-11T20:00:07.0000000+00:00'
+ url: https://github.com/Simple-Station/Einstein-Engines/pull/902
+- author: Tilkku
+ changes:
+ - type: Tweak
+ message: Penlight Exam Messages
+ - type: Fix
+ message: Penlights now need to be on in order to examine
+ - type: Fix
+ message: Penlights can no longer be used on self
+ id: 6345
+ time: '2024-09-11T20:02:51.0000000+00:00'
+ url: https://github.com/Simple-Station/Einstein-Engines/pull/900
+- author: Mnemotechnician
+ changes:
+ - type: Fix
+ message: Fixed a couple issues with the language menu UI and translators.
+ id: 6346
+ time: '2024-09-11T20:03:25.0000000+00:00'
+ url: https://github.com/Simple-Station/Einstein-Engines/pull/893
+- author: Mocho
+ changes:
+ - type: Add
+ message: >-
+ Cargo Job related items are now part of a Cargo loadout group, and have
+ all been significantly discounted.
+ id: 6347
+ time: '2024-09-11T20:27:13.0000000+00:00'
+ url: https://github.com/Simple-Station/Einstein-Engines/pull/909
+- author: Mocho
+ changes:
+ - type: Add
+ message: >-
+ Security Job related items are now part of a Security loadout group, and
+ have all been significantly discounted.
+ id: 6348
+ time: '2024-09-11T20:39:55.0000000+00:00'
+ url: https://github.com/Simple-Station/Einstein-Engines/pull/908
+- author: Mocho
+ changes:
+ - type: Add
+ message: >-
+ Service Job related items are now part of a Service loadout group, and
+ have all been significantly discounted.
+ - type: Tweak
+ message: >-
+ Musicians now have significant discounts on all instruments in loadouts,
+ but can only take a maximum of 3.
+ id: 6349
+ time: '2024-09-11T20:52:21.0000000+00:00'
+ url: https://github.com/Simple-Station/Einstein-Engines/pull/906
+- author: Mocho
+ changes:
+ - type: Add
+ message: >-
+ Engineering Job related items are now part of a Engineering loadout
+ group, and have all been significantly discounted.
+ id: 6350
+ time: '2024-09-11T21:03:37.0000000+00:00'
+ url: https://github.com/Simple-Station/Einstein-Engines/pull/907
+- author: Squishy77
+ changes:
+ - type: Add
+ message: >-
+ added rcds to the list of possible re and ported over the re update from
+ delta
+ - type: Tweak
+ message: >-
+ tweaked the costs of boards re-machine boards to be more consistent with
+ their post hyper lathe update counter parts
+ id: 6351
+ time: '2024-09-12T00:12:39.0000000+00:00'
+ url: https://github.com/Simple-Station/Einstein-Engines/pull/910
+- author: SleepyScarecrow
+ changes:
+ - type: Tweak
+ message: Ethanol Contents
+ - type: Fix
+ message: SnowWhite Recipe
+ - type: Tweak
+ message: Ethanol overdose changed from 15 to 45
+ id: 6352
+ time: '2024-09-12T00:14:06.0000000+00:00'
+ url: https://github.com/Simple-Station/Einstein-Engines/pull/911
+- author: Mnemotechnician
+ changes:
+ - type: Add
+ message: Ported a number of jukebox songs from Delta-V.
+ id: 6353
+ time: '2024-09-12T00:14:56.0000000+00:00'
+ url: https://github.com/Simple-Station/Einstein-Engines/pull/912
+- author: Skubman
+ changes:
+ - type: Fix
+ message: >-
+ Blood Deficiency now makes you lose a consistent percentage of blood
+ regardless of your blood volume, which is dictated by size. This makes
+ the time to low blood and death consistent for every character of all
+ sizes with this trait.
+ id: 6354
+ time: '2024-09-12T00:15:18.0000000+00:00'
+ url: https://github.com/Simple-Station/Einstein-Engines/pull/895
diff --git a/Resources/Locale/en-US/guidebook/food.ftl b/Resources/Locale/en-US/guidebook/food.ftl
new file mode 100644
index 0000000000..bd4fa03251
--- /dev/null
+++ b/Resources/Locale/en-US/guidebook/food.ftl
@@ -0,0 +1,16 @@
+guidebook-food-name = [bold][color={$color}]{CAPITALIZE($name)}[/color][/bold]
+guidebook-food-unknown-proto = Unknown prototype
+guidebook-food-sources-header = Sources
+guidebook-food-sources-ent-wrapper = {$name}
+guidebook-food-reagents-header = Chemical composition
+
+guidebook-food-processing-butchering = Butcher
+guidebook-food-processing-slicing = Slice
+guidebook-food-processing-cooking = Microwave for {$time}s
+guidebook-food-processing-reaction = Mix
+
+guidebook-food-processing-recipe = {$ingredients}
+guidebook-food-ingredient-solid = add {$amount} {$name}
+guidebook-food-ingredient-liquid = add {$amount}u {$name}
+
+guidebook-food-output = {$name} ({$number})
diff --git a/Resources/Locale/en-US/medical/components/penlight.ftl b/Resources/Locale/en-US/medical/components/penlight.ftl
index f0639ad738..c8a5d66f5d 100644
--- a/Resources/Locale/en-US/medical/components/penlight.ftl
+++ b/Resources/Locale/en-US/medical/components/penlight.ftl
@@ -1,11 +1,12 @@
penlight-off = The pen light is off.
+penlight-cannot-examine-self = You cannot examine your own eyes.
pen-light-exam-title = Pen Light
pen-light-window-entity-eyes-text = {$entityName}'s conditions:
pen-light-window-no-patient-data-text = No patient data.
pen-light-window-entity-unknown-text = unknown
pen-light-exam-blind-text = The patient's eyes are glassy and unfocused. They can't follow the light at all.
-pen-light-exam-drunk-text = The patient's eyes are slow to follow the light, droopy.
-pen-light-exam-eyedamage-text = The patient's eyes are partially focused, though they struggle to look at the light for too long.
+pen-light-exam-drunk-text = There's a clear delay between moving the light and the patient's eyes following.
+pen-light-exam-eyedamage-text = The patient's eyes have dark spots within the pupil, evident when the light is shone in them.
pen-light-exam-hallucinating-text = The patient's eyes are wandering around, with dilated pupils. They don't focus on the light.
pen-light-exam-healthy-text = The patient follows the light perfectly with no stuttering.
\ No newline at end of file
diff --git a/Resources/Locale/ru-RU/bed/cryostorage/cryogenic-storage.ftl b/Resources/Locale/ru-RU/bed/cryostorage/cryogenic-storage.ftl
index 0f63d1dfdf..0e65038d23 100644
--- a/Resources/Locale/ru-RU/bed/cryostorage/cryogenic-storage.ftl
+++ b/Resources/Locale/ru-RU/bed/cryostorage/cryogenic-storage.ftl
@@ -1,5 +1,5 @@
### Announcement
earlyleave-cryo-job-unknown = Должность неизвестна
-earlyleave-cryo-announcement = {$character} ({$job}) был перемещён в криогенное хранилище!
+earlyleave-cryo-announcement = { $character } ({ $job }) был перемещён в криогенное хранилище!
earlyleave-cryo-sender = Станция
diff --git a/Resources/Locale/ru-RU/corvax/paper/books-lore.ftl b/Resources/Locale/ru-RU/corvax/paper/books-lore.ftl
index 88852c2108..8c5c28d30a 100644
--- a/Resources/Locale/ru-RU/corvax/paper/books-lore.ftl
+++ b/Resources/Locale/ru-RU/corvax/paper/books-lore.ftl
@@ -2,292 +2,292 @@ book-expensive-crystal-contents =
Блюспейс кристаллы состоят из атомов, которые на Земле не встречались. Они определённо являются веществом, а не антивеществом. Элемент решено было назвать Космецием.
Чистые кристаллы космеция встречаются крайне-крайне-крайне редко и стоят целое состояние. Чаще всего встречаются кристаллы сложного состава, а именно космеций с оксидом меди(II), космеций с оксидом кремния и железом. Блюспейс кристаллы имеют сингонию, которая более нигде не встречается. Анизотропные. Имеют одно кристаллографическое направление, по которому происходит наиболее быстрая обработка, в частности раскол, слом и крошение.
Также известно, что космеций обладает карбидообразующими свойствами.
-
-
+
+
В природе встречается и иная форма природных кристаллов космеция, а именно космеций с примесью оксида алюминия и хрома.
Данный тип кристаллов образовывается в зонах активности аномалий, после действия редспейс разломов, а также на астероидах и обломках, претерпевших контакт с редспейс-пространством.
Они также анизотропны, и обладают такой же незнакомой земным материалам сингонией, но при этом имеют целых два направления удобного слома.
-
-
+
+
Истинный потенциал Блюспейс кристалла проявляется в его связанной работой с твёрдой плазмой. Плазма при распаде выделяет колоссальное количество энергии, которую способен поглотить и сохранить космеций. Далее он сможет постепенно отдавать эту энергию в специальные устройства. Но истинной уникальностью является то, что блюспейс кристалл способен стать основой для мощного квантового осциллятора, способного взаимодействовать напрямую с волнами вероятности де Бройля.
Этот эффект используется в модулях БС скачков для двигателей космических кораблей.
Отдельными свойствами выделяются кристаллы, измельчённые в мелкодисперсный порошок.
При взаимодействия такого порошка с углеродными материалами происходит образование карбида космеция. Данный материал приводит к невероятному квантово-механическому явлению: Неопределённость Гейзенберга, указывающая на сильную неточность координат, начинает играть определяющую роль и невероятно усиливается, ибо предмет, созданный с использованием карбида космеция теряет чёткие внутренние границы, при относительной стабильности внешних. Таким образом можно создавать, скажем, рюкзаки или мензурки, чей внутренний объём сильно превышает объём внешний.
Качество данных уникальных свойств тем выше, чем ниже примесей в кристалле. При этом у космеция с примесью оксида меди самые худшие свойства, а у чистого космеция самые лучшие.
-
-
+
+
Космеций также способен через неопределённость Гейзенберга влиять на волны вероятности де Бройля. Но в отличии от блюспейс кристаллов, редспейс не выборочно либо изменяют пространство, либо проводят колебания квантовых волн, а делают это одновременно.
Таким образом при накоплении в редспейс кристалле энергии, открывается возможность колебания волн вероятности для мгновенного перемещения некого объекта к кристаллу из более-менее конкретной выбранной точки. При этом данное действие способно разрушить кристалл, распылив его атомы в произвольной области пространства.
Из-за этой, по факту, телепортации редспейс кристаллы прозвали телепортационными кристаллами, или же телекристаллами.
book-clones-contents =
По началу отношение к клонированию и к самим клонам было крайне отрицательным, немало людей страдали бионализмом (страх перед клонированными людьми). Они отказывались признавать клонов не то, что за личностей, а за живых существ как таковых. Некоторые принимали их за расходный материал, другие – за чудовищное надругательство над законами природы. Впоследствии это выливалось в гонения клонов, их убийствами и погромами их жилищ. Большими проблемами также стали вопросы о юридических правах клонов, их интеграции в общество, осмысления этичности самого процесса клонирования.
-
-
+
+
Апофеозом всего этого стал “Туртельский Кризис” []Данные удалены[] года, когда несколько десятков клонов начали забастовку на малой научной станции под названием “Туртель”, находившейся на орбите Марса и занимавшейся секретными разработками компании NanoTrasen (именно поэтому на ней было довольно большое количество клонов-экипажа), работа станции была саботирована, а всему не клонированному персоналу было предложено эвакуироваться с неё. После того как все желающие эвакуировались, были и те, кто не являясь клонами, решили всё-таки остаться на станции тем самым выказав поддержку идеям клонов. Клоны и им сочувствующие смогли настроить аппаратуру станции на одну известную медиа-частоту и обратились по ней со своими требованиями, главным из которых было – предоставления всем клонам на территориях ОПЗ и объектах NanoTrasen равных с обычными гуманоидами прав. В результате долгих и не очень продуктивных переговоров, NanoTrasen не нашла ничего лучше, чем послать на станцию отряд зачистки, прибыв на место они устроили настоящую кровавую баню и когда уже подходили к мостику, были взорваны вместе со всей станцией одним из клонов-инженеров, который смог активировать ядерную боеголовку. Когда все произошедшие стало достоянием широкой публики репутации и активам NanoTrasen был нанесен огромный удар, а на многих планетах и станциях прошли митинги и забастовки в поддержку клонов. Массовые беспорядки нарастали, а СМИ лишь ещё больше подливали масло в огонь, так что ОПЗ приняла “Хартию Прав Клонов” и потребовала того же от NanoTrasen, что последние поспешили и сделать.
-
-
+
+
Примерно в те же времена был основан “Комитет по защите прав клонов” (КЗПК), который и по сей день занимается защитой прав клонов и предоставлением им юридических услуг.
book-dam-contents =
Получение энергии из антиматерии – дело не хитрое, но опасное. Оно основано на эффекте взаимной аннигиляции материи и антиматерии при соприкосновении. При этом вся масса материи и антиматерии преобразуется в чистейшую световую энергию, то есть формирует мощнейшую фотонную вспышку.
-
-
+
+
Контейнеры с топливом представляют собой магнитные ловушки, где граммы антиматерии парят в полном вакууме, не соприкасаясь со стенками контейнера.
-
-
+
+
Двигатель Антиматерии состоят из ядер и стенок. Ядра являются реакционными камерами, где соприкасаются материя и антиматерия. Для простоты используют Гелий и Антигелий. В ядрах установлены мощнейшие преобразователи, способные улавливать как световую, так и тепловую энергию. Стенки ДАМ выполнены из взрывостойкой, сверхпрочной, плохо проводящей тепло композитов и покрытий с парамагнитными свойствами.
-
-
+
+
Важнейшей частью ДАМ является его контроллер. Это сложное устройство состоит из набора трубок и магнитных бесконтактных транспортёров, которые призваны безопасно и дозированно перенести антиматерию в ядро. Также на контроллере присутствует консоль, показывающая количество оставшегося топлива по показанию сверхточных весов, и система настройки впрыска. Двух условных единиц антиматерии хватает для полной работоспособности одного ядра ДАМ. При этом если превысить это значение, то преобразователи энергии начнут нагреваться и перегреваться. Со временим тепло может проникнуть в камеры с гелием. Увеличение давления выше критической точки спровоцирует нарушение целостности ДАМ, это выведет из строя магнитные системы, под действием гравитации или иных внешних сил антиматерия коснётся любого вещества в помещении и спровоцирует бесконтрольный уничтожающий взрыв.
book-faks-contents =
Схема работы Факса проста. Оператор пишет текст на бумаге нужного стандартного формата, ставит печать и отправляет в приёмное окно устройства. В области приёма располагается подвижная планка, перемещающаяся вдоль листа. На планке закреплён распределитель излучения, а над ним находится несколько источников фиолетового лазера низкой энергии. Фиолетовый лазер был выбран по причине наиболее благоприятного выполнения критерия Релея и повышения разрешающей способности. Распределитель превращает гауссовы пучки лазера в лазерную линию, которая проходит по всему листу. Помимо распределителя в нижней части планки располагаются датчики оптического излучения. Лучи света отражаются от бумаги и чернил и попадают в датчики. Датчики анализируют отражённые лучи и записывают в память факса показания, что и является сканированием текста. Особенность представляет место для печатей, ибо печати глав используют не стандартные чернила, а чернила с определённым процентом примеси вполне конкретных металлических и жидко-органических добавок. Поэтому у факсов присутствует система Рентгеновской фотоэлектронной спектроскопии, для определения процентного атомного состава с поверхности печати. Все проценты также заносятся в память.
-
+
Все данные в памяти проходят процедуру шифрования, а затем разбиваются на два потока данных по особому алгоритму, после чего оба потока получают код протокола разбиение на потоки данных, проходят процедуру расчёта и присваивания кода исправления ошибок и скремблирования, также каждому потоку данных прибавляется кодированный адрес станции и адрес конкретного факса на станции. Наконец эти потоки данных при помощи метода импульсного биполярного кодирования отправляются по системе дальней связи в пункт назначения. Все антенны дальней связи принимают сообщение с факса и считывают адрес станции, сравнивают со своим адресом и отбраковывают пакеты данных, если он не подходит, или принимают всю остальную посылку, если адрес совпадает. Далее специально выделенный ретранслятор отфильтровывает адрес станции и начинает рассылку на все факсы станции. Приёмное устройство факсов в свою очередь аналогичным образом производит сравнение адреса факса.
-
-
+
+
Целевой факс получает оба потока данных одновременно и извлекает их из частот методом анализа амплитуд, затем дескремблирует оба потока данных, производит анализ кода исправления ошибок и исправляет ошибки. После система факса по полученному коду разбиения на потоки восстанавливает из двух потоков единый пакет данных, который затем декодируется и анализируется печатной системой факса.
-
-
+
+
Печатная система раздельно анализирует данные текста и данные снятые с области для печатей. На электрофотографический цилиндр при помощи коротрона наносится электрический заряд. Далее идёт облучение фиолетовым лазером участков, где должна остаться белая область (область без текста). Из-за действия света заряд в облучённых участках стекает. Далее ЭФЦ обсыпается заряженным цветным тонером, а потом к нему прижимается бумага, формируя таким образом отпечатанное изображение. После чего цилиндр очищается от воздействия заряда и от остатков печатного тоника.
-
-
+
+
Нечто аналогичное происходит и с печатью собственно печатей оригинала. Но факс использует обычные цветной тоник, но при этом использует пометку об соответствии пришедших закодированных данных состава оригинальной печати или несоответствия, по которым член командования может понять оригинальное ли ему пришло письмо или фальшивое.
book-famalis-contents =
Семья Дилли Джонсона
-
+
Внутри государства джони выполняют роль полиции. Несмотря на суть государства, в нём сложили определённые законы, гарантом которых выступает власть Дона, а джони занимаются патрулированием улиц городов, преследованием нарушителей, расследований противоправных преступлений и наказанием виновных. Само собой такая «полиция» не является для граждан бесплатной, а потому и существует термин «противоправное преступление». Граждане, не заплатившие за услуги «полиции», могут также быть подвергнуты атаке джони или не получать услуги расследования или охраны. Если же так получилось, что джони защитили гражданине без оплаченной услуги, то тот обязуется выплатить пени за оказанную услугу. В случае невыполнения этого обязательства, его долг может быть продан другой Семье, или же джони позаботятся о вечном покое неплатильщика.
-
+
Во внешнем мире джони известны как опасные налётчики. Они грабят торговые суда, совершают атаки на чиновников, банки, биржи, хранилища денег, драгоценностей, музеи. Они славятся своей вероломностью, быстрой расправой, а также молниеносными налётами «через парадный вход». При этом они же известны как явные пижоны, любители моды и стиля. Их фирменной визитной карточной является длинное пальто, плащ или тренч, со знаком Семьи на спине – Устаревшей латинской буквой «D», лентой патронов вокруг и одной красной розой, продетой через букву.
-
-
+
+
Клан Сава
-
+
Внутри государства савы занимаются охраной важных шишек, чиновников, управленцев, а также всех, кто наймёт их услуги. Это профессиональные телохранители. Также они ведают утилизацией и переработкой мусора. «Мусорная» мафия вызывает смех только у тех, кто ничего в этом не смыслит. Услуги вывоза мусора являются платными, самостоятельно утилизировать или перерабатывать не дадут крупные братки-савы, а при скоплении невыброшенного мусора гражданину будет попросту невозможно жить. А также его соседи вызовут джони, для урегулирования вопроса, которые церемониться не станут. Помимо мусора савы утилизируют самые разные вещи за сходную договорную цену. Так что все знают, что если что-то или кто-то пропал бесследно, то вполне вероятно его останки находятся где-то у сав. Таким образом вся вторсырьевая продукция также является продуктом работы заводов клана Сава.
-
+
Во всей галактике савы – это пираты, налётчики, грабители торговых судов, а также крупная мафия в области рэкета, похищений и запугиваний. Их услуги порой применяются для «протаскивания» нужных законов посредством «общения» с несогласными политиками, а также для уборки неугодных, лидеров оппозиций. Порой с помощью них даже подавляют мятежи, но пока они не наняты, они являются жуткой головной болью для логистов и охранно-сопровождающих ведомств.
-
-
+
+
Союз «Клевер»
-
+
Клеверы чаще внутри стороны занимают сразу четыре ниши, а именно они владеют крупными юридическими бюро, они управляют планетарными и космическими тюрьмами, они владеют половиной планетарных дорог и третью космических торговых путей, а также они являются организацией государственной безопасности. Благодаря тому, что лучшие Адвкоаты работают на них или являются членами их Семьи, Союз «Клевер» часто может толковать законы в свою пользу, получая существенную выгоду. Владение частными тюрьмами позволяет взымать плату с планет и государств, чей преступник содержиться в тюрьме. В случае отказа или превышения срока оплаты, преступник выходит на волю и возвращается в родные края. Клеверы же не звери, готовы предоставить практически нищему билетик до родины, но увы… содержание обходится «так» дорого! При этом важно понимать, что перемещение по дорогам и космическим путям Клевера – дело платное, но оплата сугубо добровольная. Вы по доброй воле можете заплатить или отправиться другим путём. При этом пути клеверов самые защищённые и скоростные с отлично развитой инфраструктурой (тоже доход!) и прекрасным состоянием. Помимо этого, клеверы выступают как контрразведка и занимаются расследованиями, связанными со шпионажем, саботажем, похищениями, убийствами и т.п. направленными от других государств.
-
+
В остальной галактике клеверы – это лучшие независимые эксперты в области юриспруденции и политологии. За деньги они способны перевернуть практически любое дело с ног на голову и вывернуть своего Адвкоата-оппонента наизнанку. Также их знают, как отличных трассовладельцев в пространстве Братства и, местами, за его приделами. Для правоохранительных органов клеверы становятся прекрасным способом убрать особо опасных заключённых как можно дальше от себя и больше их не видеть, а вот разведывательные управления лютой ненавистью не любят эту Семью.
-
-
+
+
Организация «Ворбакс»
-
+
Ворбаки или же ворбы выполняют роль тайной полиции государства, а также им принадлежат текстильные фабрики и плантации по всему сектору. Они шьют одежду и продают её. Вполне легальный бизнес. Также они владеют сетью гостиниц и кафе. Как ни странно, но магазины ткани, одежды, пошивочные мастерские, гостиницы и кафе становятся для них отличными источниками информации, а также прекрасным способом перемещения и внедрения своих агентов. Они занимаются преследованием и устранением опасных для Собрания Семей, для Дона и для их Семьи членов общества, репортёров, беглых шпионов, оппозиционеров, бунтовщиков, революционеров. А также осуществляют шпионаж, разведку и саботажи на территории других государств.
-
+
Контрразведывательные управления и организации госбезопасности разных стран тратят достаточно много средств и усилий, борясь с ворбаками. При этом в тот же момент миллионы граждан по всей галактике знает компанию ткани и удобной одежды «Ворбакс Текст», небольшие кафе «Ворбачная» и сеть дешёвых, но уютных трёхзвёздочных гостиниц «Тенистый Домик»
-
-
+
+
Семья Глазиуса Мора
-
+
Внутри государства многие очень не любят членов семьи Глазиуса Мора. «Глаза», как их называют вызывают огромное количество трат. Глаза занимаются контролем качества, экологическим аудитом, налоговыми сборами, выявлением всяческих нарушений, а также трудовыми и всякими разными другими инспекциями. Само собой, они прекрасные профессионалы и крайне быстро находят несоответствия. А так как именно они в своё время «протащили» ряд законов о стандартах производства, то имеют право сообщить о нарушениях джони или клеверам. Чтобы избежать неприятного общения с этими господами, владельцы предприятий платят глазам немалые суммы, а те взамен не только не докладывают правоохранителям, но ещё и за отдельную плату составляют подробные инструкции, как исправить недочёты.
-
+
За пределами Братства глаза известны как опасные мошенники, воры, шпионы, кляузники, а ещё как успешные торговцы, игроки на бирже. Кроме того они оказывают услуги независимого аудита, консультации перед гос.проверками. Порой их нанимают даже в качестве кризис-менеджеров в некоторые филиалы компаний.
-
-
+
+
Семья Фенарио
-
+
Семья Фенарио владеет казино, игорными домами, клубами эротического содержания, дорогими отелями, а также производством и продажей алкоголя. Все эти места приносят отличную прибыль, кроме того, позволяют собирать весомый компромат на различные грязные выходки очень разных людей с целью последующего шантажа. Помимо прочего на счётчике у Семьи стоят должники, которым приходится отрабатывать проценты самыми разными способами. Но при этом главы Семей Фенарио славятся своей щедростью! Порой они списывают долги своих должников, рождая тем самым кучу благодарных, а от того затем и преданных ему людей. также они вносят пожертвования на образование и благотворительность, также устанавливая дружеские связи, создавая преданность или сажая некоторые заведения и организации на денежную иглу. Кроме того, благодаря огромным денежным запасам Семья спонсирует научные лаборатории, проводящие исследования вне рамок морали.
-
+
В большом мире Семья Фенарио известна, как династия промышленников в области хорошего алкоголя. Дорогие вина, коньяк, портвейн, джин, ром, пиво и многое другое. Также они почитаются за известных меценатов и щедрых благотворителях. Они имеют во владении несколько известных на всю галактику крупных отелей и пару легальных казино. Знакомство с ними охотно заводят представители политической элиты всех стран, кроме СССП. Впрочем, у органов государственной безопасности порой возникают подозрение, что ряд чиновников и политиков находится у Фенарио на долговом счету или на коротком поводке компромата. Но доказательства собрать пока не удаётся.
-
-
+
+
Фонд Мола Гола
-
+
Граждане Межпланетарного братства могут, конечно, опасаться джони, сав или ворбаков, но членов Фонда они воистину боятся. Они похищают всех представителей разумных существ во всех уголках галактики, а затем делают из них рабов. Рабы продаются в самые разные безымянные места, где затем до самой смерти в нечеловеческих условиях вкалывают на полях, плантациях. Промышленных теплицах, шахтах, штольнях, рудниках, на заводах, фабриках и в цехах. Они теряют имена, имущество, родных, друзей, а всю личность им заменяет номер, отпечатанный на груди. Таким образом Фонд становится промышленным сердцем и одновременно рабовладельческим гигантом.
-
-
+
+
Семья Синий Камень
-
+
Областью деятельности Семьи являются курительные смеси, кальянные заправки и наркотики. Самые разные, всех мастей. Массовые, авторские. В любом объёме. Регулярные запросы на наркотики от подсаженных на иглу обеспечивают стабильный доход, а распространения курева всех мастей позволяет легализовать точки сбыта в других системах. В галактике эта Семья известна под именем «Синекаменный табак». Мелкая компания, продающая табачные изделия. Она не попадает в поле зрения правоохранителей и умудряется тихонько распространять длинные сети дистрибуции наркотиков.
-
-
+
+
Союз Границ
-
+
Название граничников говорит само за себя. Он взымает таможенную пошлину с ввозимых товаров. Проверяет на список запряжённых вещей. также управляют потоками контрабанды и занимаются защитой космического пространства и наёмным сопровождением в космосе. Сети контрабанды распространяются далеко за пределы сектора Арабеллы. Правоохранители всех стран стараются обрубать головы этой гидры, но Семья находит новые пути. При этом наёмные боевые корабли сопровождения граничников считаются элитными наёмными отрядами, которые пользуются популярностью у многих логистов всех корпораций и стран.
book-grav-contents =
Генераторы гравитации отличаются лишь мощностью, но в сути их работы лежат выдающиеся патенты НТ по работе с антиматерией и, в частности, с антиполем. В привычной механике мы привыкли, что объект с существенной массой создаёт в пространстве гравитационное искажение по законам Ньютона, из-за которого все объекты начинают к нему стремиться.
-
-
+
+
Генератор же гравитации представляет собой невероятное сочетание уникальной по своей природе плазмы с антиматерией. При облучении плазмы антигелием формируется не обычная фотонная вспышка, а вспышка гравитационного антиполя (оно же «поле искусственной гравитации»). Все тела, попадающие в действие антиполя начинают воспроизводить гравитационное искажение, не меняя свою стандартную массу, а формируя мнимую гравитационную массу. Таким образом у всего в поле действия генератора гравитации увеличивается ньютоновское притяжение друг к другу, не используя центробежное вращение, как в космических кораблях тысячелетней давности.
-
-
+
+
Незначительным побочным эффектом является формирование отрицательной мнимой массы у самого генератора, из-за чего его может переносить один человек, ибо генератор очень лёгкий.
book-halifat-contents =
Духовная составляющая
-
-
+
+
Шахада
-
+
Является первым и наиболее важным символом веры. «Свидетельствую, что нет божества достойного поклонения кроме Аллаха и ещё свидетельствую, что Мухаммад — посланник Аллаха». Является необходимой формулой для признания себя правоверным. Отдельно стоит отметить, что в понимании ражулитов нет принципиальной разницы между понятиями «Бог», «Создатель», «Вселенский перводвигатель», «Объект поклонения». Попытка разделить эти понятия может быть встречена абсолютно глухим непониманием. Шахада может быть использована религиозными деятелями или истинно правоверными, как дополнительный аргумент при свидетельствовании или доказательстве чего-либо другому лицу, если произносящий шахаду не лукавит, не пытается врать, утаить факты, а полностью уверен в том, что доказывает.
-
-
+
+
Намаз
-
+
Является обязательным столпом для истинно правоверных и религиозных деятелей. Это ежедневный цикл молитв, который состоит двукратной утренней молитвы (фадж), четырёхкратной полуденной (зухр), четырёхкратной предвечерней (аср), трёхкратной вечерней (магриб) и четырёхкратной ночной (иша). Молитвы должны быть принесены с условием выполнения определённых правил.
-
-
+
+
Саум
-
+
Необходимость совершать воздержание в течение священного месяца Рамодана, который отсчитывается по лунному (по Земле) исламскому календарю. Именно в этот месяц пророк Мухаммад получил с небес Коран. В ходе воздержания правоверным запрещается есть пищу от момента наступления утренней молитвы и до вечерней молитвы. Считается, что временем начала поста и утренней молитвы можно назвать тот момент, когда на улице при естественном свете получиться отличить белую нить от чёрной. В случае если пост был нарушен по уважительной причине, вроде тяжёлой болезни, ражулит должен восполнить пропущенный день одним днём поста или отдать нуждающимся пищу, эквивалентную по стоимости 3,3 кг муки. Позволяется отдавать муку, мясо, яйца, хлеб, овощи или фрукты. Если же причина была неуважительной, то есть воплощала недержание и слабость воли ражулита, то он будет обязан со следующего лунного месяца начать личный пост на 60 дней под присмотром священнослужителя или накормить досыта 60 бедняков.
-
-
+
+
Закят
-
+
Выплата налогов Духовному собранию и в государственную казну всеми дееспособными, самостоятельными, взрослыми ражулитами. При этом пятая часть денег, идущих к Духовному собранию, идёт на развитие проектов и поддержку самого собрания, а остальные 80% идут на поддержку нуждающихся, коих достаточно особенно в пограничных регионах, где идут военные действия. Кроме нищих и обездоленных, деньги идут для выкупания должников или рабов мусульман у других государств или корпораций, также на помощь в погашении долга тем ражулитам, что взяли в долг у мечети или Духовного собрания на организацию богоугодного дела. Среди прочего эти деньги идут в поддержку джихада и на развитие общей инфраструктуры государства для разного рода путников.
-
-
+
+
Хадж
-
+
Священное паломничество. «Пророка Мухаммеда спросили - „Какое дело является наилучшим?“ Он ответил - „Вера в Аллаха и Его посланника“. Его спросили - „А после этого?“ Он ответил - „Борьба на пути Аллаха“. Его снова спросили - „А после этого?“ Он ответил - „Безупречный хадж“». Из-за веяний истории и времени до современных последователей Неоислама не дошли точные знания о том, как древние мусульмане совершали хадж. А потому Духовным Собранием было решено разделить хадж на три категории, а именно
-
+
1) Наиболее влиятельным и богатым предписывается, если их присутствие в данный момент не критично важно для страны, посетить пространство ОПЗ, прилететь на Землю, дабы вознести там свои молитвы на священной Мусульманской земле. Тоже предписывается и религиозным деятелям и истинно правоверным.
-
+
2) Правоверным среднего социального статуса и достатка предписывается совершить перелёт в систему София на планету Фараби и вознести молитву там, где первый Халиф решил основать Конгломерат.
-
+
3) Ражулитам малого достатка предписывается совершить хадж на своей планете до святыни, которую установил имам Духовного собрания при колонизации.
-
-
-
+
+
+
Земная составляющая
-
-
+
+
Ограниченная монархия
-
+
Халиф никогда не должен иметь полностью безраздельную власть. Его решения должны обсуждать и осуждаться, если они направлены на личную выгоду, а не на благо государства. А потому лидеры Министерств могут устроить голосование за наложения вета на приказ Халифа. При этом от Совета философии выступает два диалектических лидера.
-
-
+
+
Национализм
-
+
Не должно быть различий, которые могут пошатнуть, устои страны. А потому гражданское и этническое должны быть отождествлены. Если кто-то хочет стать ражулитом, гражданином, то он должен отбросить свои культурные, расовые или кланово-национальные устои или привести их под образец устоев государства.
-
-
+
+
Народность
-
+
Нужно максимально преодолевать все возможные классовые расслоения, приводя их лишь к необходимому минимуму. Это устанавливает равенство каждого ражулита перед законом, вне зависимости от его рода деятельности, достатка или положения. И нищий, и Халиф должны быть подсудны одинаково.
-
-
+
+
Лациизм
-
+
Установление преимущественно светского характера государства. Недопускания религиозного права в государственную судебную систему. А также не полное подчинение образования религиозным канонам.
-
-
+
+
Этатизм
-
+
Построение экономической системы, при которой государство будет играть лидирующую роль, что могло бы привести к национализации промышленных предприятий, банков, транспортных систем и прочего. Осуществление этого могло происходить как через реквизицию, так и через конфискацию.
-
-
+
+
Революционность
-
+
Недопускание полумер. Если уж выкупать предприятие, то не долу владения, а целиком. Если уж отказываться от расовых устоев, то полностью. При этом с опорой на просвещение, прогресс и реформацию.
book-redspace-contents =
Считается, что редспейс в общем случае невозможно полностью рационализировать и понять. Учёные и исследователи потратили многие годы и многие тысячи жизней на исследование этого пространства, а узнали практически ничего. Тем не менее в данный момент существует научная теория, являющаяся доминирующей в научном мире. Согласно данной теории Редспейс является категорически иным видом пространства. Когда учёные заходят в тупик при своих суждениях, они пытаются сделать шаг в другую сторону и найти вдохновение в другой сфере. В данном случае идеи существования других миров, множественных вселенных или даже астрал из оккультизма вкупе с вероятностным характером квантовой механики навели на мысль, что вполне может существовать иной вид пространства. Редспейс.
-
-
+
+
Итак, по большому счёту Редспейс – это тоже евклидово пространство, как и наше, но при этом, если единичный отрезок в нашем пространстве можно назначить один орт конкретной бесконечно малой длины (или варьируемой малой длины под конкретную задачу), то в пространстве Редспейс ортом выступает функция или же оператор, притом для каждого орта задаётся своя функция. Таким образом каждая точка пространства задаётся не просто координатами и сочетанием нескольких функций. Это было бы сложно, но возможно предсказать, если бы Редспейс, как и наше привычное пространство, имел всего три координатные оси, но различные эксперименты дают основания предположить, что у него куда больше осей, что позволяет внести его в класс предгильбертовых.
-
-
+
+
Учёные могут лишь предполагать количество осей и орты-операторы, которые по ним отложены. Тем не менее уже есть определённые идеи описания процессов данного пространства. Каждая точка является сочетанием операторов квантовой вероятности, импульса, координаты и понятия существования. Неотъемлемым элементом динамики подобных пространств является оператор эволюции. Он воплощает в себе вариант изменения пространства.
-
-
+
+
По вышеизложенным причинам любой объект находящийся в Редспейсе и живущий (существующий) по его законам способен мгновенно поменять свой импульс в определённых пределах с определённой вероятность, совершить мгновенное перемещение с определённой вероятностью, пропасть совсем с определённой вероятность или неожиданно восстановить себя во времени с определённой вероятностью. При этом используемый оператор вероятности оказывается чётным относительно времени, то есть при подстановки отрицательного времени в расчёт (то есть время идущее назад) оказывает, что вероятность всё ещё есть и вполне положительная из-за несходящейся системы и из-за практически повсеместно положительного определённого скалярного произведения векторов различных осей. Таким образом в Редспейсе может восстановиться нечто, существовавшее очень много лет и тысяч лет назад. И наоборот.
book-ships-contents =
(S - Sigma) МКК – маленькие космические корабли.
-
+
К гражданским МКК относятся корабли следующий назначений.
-
+
1) Шаттлы. Такие корабли зачастую не превышают нескольких десятков метров в длину и выполняют вполне тривиальные функции такие, как перевозка пассажиров и грузов.
-
+
2) Добывающие суда. Не превышают пары метров в длину и занимаются добычей, транспортировкой, а также в некоторых случаях переработкой полезных ископаемых.
-
+
3) Персональные МКК. Не превышают пары метров в длину и рассчитаны на перевозку от двух, до пятнадцати гражданских лиц.
-
-
+
+
К военным МКК относят корабли, несущие на себе какое-либо вооружение. Они имеют следующие назначения.
-
+
1) Истребитель – Разведчик (ИР). Такие МКК используют для разведки и сбора информации. Они очень маневренны и быстры, но практически не несут на себе какого-либо вооружения и брони.
-
+
2) Истребитель – Перехватчик (ИП). ИП используются в массовых сражениях. Зачастую несут на себе слабое вооружение не способное нанести существенного вреда крупным кораблям.
-
+
3) Истребитель – Бомбардировщик (ИБ). ИБ – это более крупный собрат простого истребителя, он менее манёвренный, при этом он имеет улучшенное бронирование, а также несёт на себе пару мощных боеголовок, способных нанести серьёзный вред крупным судам.
-
-
-
+
+
+
(T – Teta) СКК – средние космические корабли.
-
+
К гражданским СКК относятся.
-
+
1) Космические лайнеры. Данные суда способны перевозить несколько тысяч разумных существ. Зачастую они используются для межсистемных перелётов.
-
+
2) Космические грузовые корабли, танкеры. Используются для перевозки огромного объёма грузов на очень дальние расстояния.
-
-
+
+
К военным ССК относятся.
-
+
1) Фрегаты. Данный тип кораблей слабо вооружён и не способен оказать достойное сопротивление кораблям своего класса. Зачастую он используется для сопровождения некрупных конвоев или в составе крупных боевых групп, в качестве корабля ПВО – ПРО.
-
+
2) Корветы. Данный тип кораблей несёт на себе среднее вооружение. Обычно входит в состав средних боевых групп. Также он способен выступать в роле основного боевого корабля в составе сверхмалых боевых групп.
-
+
3) Эсминец. Данный тип кораблей считается универсальным и несёт на себе оружие, которое считается самым сильным в своём классе кораблей. Зачастую появляться в составе средних боевых соединений и выполняет роль ударного корабля.
-
-
-
+
+
+
(O – Omicron) СККК – Среднекрупные космические корабли.
-
+
1)Лёгкий крейсер. Это более подвижная и более слабо вооружённая версия простых крейсеров. Предназначенная для сопровождения и охранения более крупных судов, либо же для патрулирования в составе небольшой боевой группы.
-
+
2) Авианесущий крейсер. Данный тип кораблей представляет собой небольшие авианосцы несущие на себе некрупные боевые группы. Предназначен для прикрытия более крупных судов.
-
-
-
+
+
+
(G – Gamma) ККК – Крупный космический корабль.
-
+
1) Тяжёлый авианесущий крейсер. Данный тип представляет собой универсальные корабли, предназначенные в основном для уничтожения авианосцев всех классов. Несут авиакрыло равное по численности авиакрылу лёгкого авианосца, и в дополнение к нему многоцелевые или противокорабельные ракеты.
-
+
2) Броненосный крейсер. Данный тип, это убийцы крейсеров. Основное назначение уничтожение кораблей класса выше. Данные корабли можно считать недолинкорами.
-
+
3) Монитор артиллерийский. Данный тип кораблей является ещё более урезанным вариантом линкоров, по существу являющимся подвижным аналогам орбитальных артиллерийских платформ. Отличаются весьма низкой мобильностью, но компенсирующий это высокой огневой мощью.
-
-
-
+
+
+
(B – Beta) ТКК – Тяжёлые космические корабли.
-
+
1) Линкор. Линкоры — это наиболее мощные артиллерийские корабли, хорошо бронированы, но не слишком подвижны. Предназначены для уничтожения кораблей всех классов, орбитальных сооружений и орбитальной бомбардировке поверхности планет.
-
+
2) Линейный крейсер. Это облегченная, за счёт бронирования версия линкора. Более подвижный линейный крейсер предназначен не только для линейного сражения, но и для рейдерских и разведывательных операции. Прикрытия флангов эскадры, сопровождения авианосцев.
-
+
3) Тяжелый (ударный) авианосец. Эти корабли являются крупными авианесущими единицами, предназначенными для уничтожения силами авиагруппы, космических целей всех типов, непосредственной поддержки войск, завоевания превосходства в пространстве, ударных операций, обеспечения ПВО\ПКО\ПРО баз, а также поддержке наземных соединений.
-
+
4) Десантный авианосец. Это разновидность тяжелых авианосцев, предназначенная для базирования и десантирования пехотных соединений. Обычно несколько превосходят по габаритам тяжёлые авианосцы.
-
-
-
+
+
+
(A – Alpha) СТКК – Сверхтяжёлые боевые корабли.
-
+
Единственным представителем кораблей данного класса является Дредноут. Дредноут или «суперлинкор». Дредноуты — это самые большие корабли, совмещающие в себе мощь линкора и способности тяжелого авианосца. Обычно в составе всего космического флота одной страны, находится не более двух таких кораблей, поскольку даже постройка одного такого корабля считается сверх затратной, а уж их содержание может обходится в не меньшую сумму, чем затраты на содержание какой-нибудь около столичной планеты.
-
-
-
+
+
+
ОКК – Особые космические корабли.
-
+
1) Исследовательские космические корабли, дальнего действия. Используются для изучения ещё неизученных секторов космоса. Запаса хода, как и полезной нагрузки им хватает на несколько лет. Также они оснащены полноценными лабораториями и иногда несут на себе мелкое вооружение.
-
+
2) Колониальные космические корабли, используются для заселения недавно терраформированных планет. Несут на себе несколько десятков тысяч живых существ, не находящихся в стазисе, а также пару сотен тысяч живых существ, находящихся в состоянии гибернации.
book-zp-contents =
Базовая криптовалюта начисляется за каждую минуту пребывания сотрудника на смене. Учитывается каждая полная минута, все секунды в зачёт не идут. Базовая сумма начисления умножается на коэффициент, который зависит от типа договора, должности сотрудника, назначении станции и цели станции. В случае применения санкции к отделу, коэффициент всех сотрудников отдела отдела признается равным единице.
-
-
+
+
Формула расчета заработной платы за 1 смену -- ЗП = БС х min х Кд х Кр х Кнс х Кцс х Кп х Кш Обнулением или отменой коэффициента признается приравнивание коэффициента к единице. Базовая ставка равна 10 единицам.
-
-
+
+
Коэффициенты по договорам -- Бессрочный– 1,5 Долгосрочный – 1,3 Среднесрочный - 1,1 Краткосрочный – 1,05
-
-
+
+
Коэффициенты по рождению -- Родился на территории ОПЗ – 1,05 Родился на территории корпорации – 1,10 Родился на иных территориях - 1,0
-
-
+
+
Коэффициенты по назначении станции:
Административная станция – 2,0;
Бизнес станция – 1,6;
@@ -297,106 +297,106 @@ book-zp-contents =
Медицинская станция – 1,2;
Оборонная станция – 1,7;
Транспортная станция – 1,0.
-
-
+
+
Коэффициенты по цели станции:
Отдел напрямую занимается целью станции – 1,5;
Отдел косвенно связан с целью станции – 1,25;
Отдел не занимается целью станции – 1,0.
-
-
+
+
Коэффициенты по профессиям
-
+
Повар -- 1
-
+
Уборщик -- 1
-
+
Сервисный работник -- 1
-
+
Священник -- 1
-
+
Репортёр -- 1
-
+
Музыкант -- 1
-
+
Мим -- 1
-
+
Клоун -- 1
-
+
Зоотехник -- 1
-
+
Ботаник -- 1
-
+
Боксёр -- 1
-
+
Библиотекарь -- 1
-
+
Бармен -- 1
-
+
Грузчик -- 1
-
+
Технический ассистент -- 1
-
+
Кадет СБ -- 1
-
+
Научный ассистент -- 1
-
+
Интерн -- 1
-
-
+
+
Офицер СБ -- 1.1
-
+
Врач -- 1.1
-
+
Инженер -- 1.1
-
+
Психолог -- 1.1
-
-
+
+
Химик -- 1.2
-
+
Утилизатор -- 1.2
-
+
Атмосферный техник -- 1.2
-
-
+
+
медицинский офицер -- 1.3
-
+
Детектив -- 1.3
-
+
Учёный -- 1.3
-
-
+
+
Глава персонала -- 1.4
-
+
Квартирмейстер -- 1.4
-
-
+
+
Смотритель -- 1.5
-
+
Ведущий врач -- 1.5
-
+
Ведущий инженер -- 1.5
-
+
Инструктор СБ -- 1.5
-
+
Ведущий учёный -- 1.5
-
-
+
+
Старший инженер -- 1.8
-
+
Научный Директор -- 1.8
-
+
Главный Врач -- 1.8
-
+
Глава Службы Безопасности -- 1.8
-
-
+
+
Капитан -- 2.5
-
-
+
+
Коэффициенты штрафов
-
+
Нахождение в заключении – 0. Отчет о времени заключения составляет смотритель.
Нахождение в медицинском отделе на лечении в обычном состоянии - 0,9. Отчет о времени лечения составляет лечащий врач.
Нахождение в медицинском отделе в критическом состоянии – 0,8. Отчет о времени болезни составляет лечащий врач.
@@ -405,593 +405,593 @@ book-zp-contents =
Гибель вне станции – 0,1. Факт формируется после окончания смены.
Гибель на станции или при исполнении должностных обязанностей – 0,2. Факт формируется после окончания смены.
Отстранение от должности и нарушение СРП. При отстранении от должности или нарушении СРП все коэффициенты замораживаются до отдельного разбирательства после окончания смены. По итогам разбирательства итоговая заработная плата рассчитывается отдельно.
-
-
+
+
Гибель
-
+
В случае гибели сотрудника и невозможности клонирования его заработная плата выплачивается ближайшим родственникам. Если таковых нет, удерживается в пользу корпорации. В случае возможности клонирования, коэффициент гибели признается равным 0,5. Страхование жизни и здоровья. Во время пребывания на станции каждый сотрудник и посетитель имеет право безвозмездного использования результатами труда других сотрудников станции и находящимися в раздатчиках ценностями (активами, продуктами, товарами). При получении инвалидности по итогу смены, компания назначает выплату на установку замены потерянной сотрудником конечности. По достижению старости компания выплачивает пенсионное вознаграждение - Ежемесячно 30% от среднемесячной заработной платы не работающим пенсионерам; ежемесячно 10% от среднемесячной заработной платы в дополнение к их заработной плате. Среднемесячная заработная плата рассчитывается, как сумма заработной платы за весь период работы, разделенная на количество полных месяцев работы на корпорацию.
-
-
+
+
Прибыль станции
-
+
Из результата деятельности станции на конец смены (результат/прибыль работы отдела снабжения) станция удерживает 75%. Квартирмейстер получает 3% от прибыли станции вне зависимости от участия в доставке грузов. Остальная часть распределяется в виде премии между сотрудниками станции, сформировавшими доход. Например, Атмосферный техник создал газ, грузчик отнес его в отдел снабжения, оба делят доход между собой. Второй пример - Утилизаторы притащили на станцию двигатели с обломка, которые были проданы. Утилизаторы делят доход между собой.
-
-
+
+
Растраты
-
+
Растратами признаются любое нецелевое использование средств, предоставленных корпорацией. Например, строительство космической техники в то время, когда цель – исследование артефактов. При таком использовании средств станции, виновный лишается всех коэффициентов выше единицы, а результат его деятельности признается собственностью корпорации. В любых нестандартных ситуациях специальная комиссия назначает дополнительные штрафные санкции.
-
-
+
+
Дополнительное премирование
-
+
Награждение медалью добавляет 50% к итоговой заработной плате. Быстрое окончание смены добавляет 50% к заработной плате руководителей отделов. Центральное командование корпорации может по своему усмотрению назначить дополнительную премию по итогам смены.
book-ussp-contents =
Первые среди равных
-
+
Важнейшим управляющим законодательным органом СССП является Политическое бюро Социалистической Партии Союзных планет. В него входят граждане, достигшие наибольшего политического и партийного влияния в составе партии. Обычно в Политбюро входят не очень много членов. В разное время их число колебалось от 5-и до 16-ти. На данный момент в него входят 9 членов. Тартышников А.П. Морроу Д.В., Огнева А.В., Р.Р. Старшинов, Пламя Коллективизма, Вариван’Зен, Пульт Валливс, Ровкуд Красноусая, Укар’вар Дари.
-
-
+
+
Президиум и Советы
-
+
Первые отцы революции боялись, что в будущем найдутся индивидуумы, которые, преисполнившись хитростью, будут делать вид, что верны идеалам коммунизма, а на деле проникнут в верха власти, узурпируют её и отбросят страну назад от идеалов коммунизма. Они не могли придумать, как не пустить таких «товарищей» во власть. Однако, было найдено решение, как их полномочия возможно ограничить.
-
+
Был основан Президиум Совета СССП — верховный совет, который включал в себя трёх делегатов из каждой системы Союза. Отбор в делегаты происходил по достаточно длинной схеме. Сообщества крестьянства, рабочих и деятелей образования каждого города выдвигали своих кандидатов. Из делегатов создавался Совгор (Совет города). В Совгор, в зависимости от размеров поселения, входило от 9 до более чем сотни делегатов. Тройку лучших делегатов (крестьянин-рабочий-преподаватель) выдвигали на должность делегата планеты. Из них создавался Совплан (Совет планеты). В него входило по три делегата с каждого города. И трёх лучших выдвигали на должность делегата системы, из которых создавался Совсис (Совет системы), и уже оттуда трое лучших попадали в Президиум СССП.
-
+
Президиум занимается обсуждением законопроектов, выдвигаемых Политбюро, созданием списка замечаний, просьб по уточнению. Кроме того, Президиум имеет право вето на ввод какого-либо распоряжения или закона Политбюро. В возможностях Президиума есть право на собственную разработку законов и постановлений, которые также могут быть запрещены или исправлены.
-
-
+
+
Народные секретариаты и Генеральный Секретарь
-
+
Для создания дополнительной объединяющей граждан силы изначально формировался культ личности Генерального Секретаря, члена Политбюро, выбранного в качестве главы государства «первого среди равных» и одобренного Президиумом. Он должен был стать особой фигурой, сочетающей в себе лицо законодательной власти от Президиума, Политбюро и исполнительной власти Секретариатов. На данный момент роль генсека исполняет Р.Р. Старшинов.
-
+
Исполнительная власть, коей управлял и контролировал генсек, была сосредоточена в двенадцати народных секретариатах, которыми руководят нарсеки (народные секретари). Секретариаты осуществляют свою власть через комитеты разного уровня - Сисисполкомы, Планисполкомы, Горисполкомы и Райисполкомы (Системные, планетарные, городские и районные исполнительные комитеты соответсвенно). Комитеты занимаются местным надзором за исполнением всех постановлений и законодательной базы государства в районах своего действия. Очень часто разные комитеты размещаются в одном здании, которое граждане чаще всего так и зовут — Исполкомом. Как правило, милиция, прокуратура и ВГБ базируются в отдельных зданиях.
-
-
+
+
Суды и главное управление красных комиссаров
-
+
Судебная система СССП делится на две ветви - Суды гражданских дел и Главное Управление Красных Комиссаров (ГУКК).
-
+
Суды гражданских дел также классифицируются по величине области действия. Районные, городские, окружные, планетарные, системные, секторальные и верховный. Они разбирают дела разного уровня по всем видам преступлений или тяжб, которые могут пройти по отношению к гражданам, комитетам или иными собраниями.
Главное Управление Красных Комиссаров занимается разбором преступлений, совершенных сотрудниками милиции, Красной армии или (не часто, но порой случается) сотрудниками прокуратуры и ВГБ. Так как в Союзе считается, что гражданин в форме должен быть опорой и поддержкой для всего населения СССП, то в случае выявления совершенного ими преступления, их карают куда серьёзней, нежели гражданских лиц. Активно применяются телесные наказания, тяжелейшие исправительные работы и расстрелы.
book-mirt-contents =
В данный момент в народе доминирует одна единственная идея.
-
+
«Все умрут. Гибель неминуема. Ничто это не остановит. Всё что мы можем – отсрочить конец галактики». Бесконечный рой ксеноморфов показал тщетность существования человечества. Но миртранийцы давно преодолели панику и свыклись с мыслью о своей смерти. Они всегда готовы умереть. Они верят, что являются щитом для Галактики. Не несокрушимым. Щитом с ограниченной толщиной, что истончается с каждым днём.
-
+
Они осознают, что умрут сами. Что умрут их любимые родители. Что умрут их близкие, их друзья. Что, возможно, им придётся хоронить своих детей. Или то что от них осталось. А возможно их детей сожрут с концом и на могильном холмике окажется лишь небольшой памятный камень с фотографией того, от кого не осталось и мизинца. Эта идея живёт в каждом гражданине, но особенно она сильна у жителей планет-крепостей в Линии Надежда и Любовь. Каждый гражданин Империи проходил базовую военную подготовку и умеет пользоваться оружием. Но жители Линий могут соревноваться в умении с солдатами некоторых ЧВК и стран. Они дисциплинированы, живут по практически военному расписанию, знают где находятся склад с оружием и по первому протяжному и рвущему душу сигналу тревоги готовы стиснуть зубы, сжать кулаки до крови, и, стараясь игнорировать подступающие слёзы, заранее хороня своих детей, друзей и близких, идти к ближайшему арсеналу и вооружаться, дабы отсрочить момент гибели человечества хотя бы на мгновение.
-
+
Так умирали люди на планетах-крепостях Линии Вера. Так умирают люди на планетах Линии Надежда прямо сейчас. Так готовы умирать люди на планетах-крепостях Линии любовь.
-
+
И они не уедут. Не улетят. Не потому, что тоталитарное государство их не выпустит. Нет. Просто… они понимают, что гибель неминуема в любом случае. Так лучше встретить с оружием в руках! Когда закончатся патроны – штыками! Когда сломаются штыки – ножами! А когда затупится нож, выгрызать ксеноморфам глотки ногтями и зубами. Ибо нужно отсрочить неминуемое… Хоть на одну наносекунду. Хоть на одного ксеноморфа.
-
+
Легенды гласят о моментах, когда Империя была в шаге от падения. Тогда являлся Император Миртан и создавал Проявление! Оно помогало уничтожить угрозу, но и заставляло Императора угаснуть… А потому каждый гражданин понимает, что Император это не просто небожитель, а буквально равный им спаситель Человечества. Потому он всеми любимый и почитаемый.
-
+
Согласно религиозным убеждениям души погибших от ксеноморфов не пропадают, а попадают в Цитадель Миртана! В небесный чертог вечных солдат. Там они готовятся к последнему Бою императора. Когда Три Линии падут, когда рой захлестнёт Империю, когда дойдёт до границ ОПЗ, Явится Император Миртан и его павшее воинство в последний раз. Они остановят рой на один год и один день, чтобы дать галактике подготовиться к бою. Затем они передадут флаг и бремя смерти ОПЗ и исчезнут в бесконечности космоса…
-
+
Отдельное место в культуре получил нож. Нож, кинжал, кортик, скарамасакс и всё подобное есть буквально у каждого при себе. Это не только инструмент и средство выживания, это оружие последнего боя. Нож в Империи является символом конца, самоотверженности и, как ни странно, надежды. Многие гражданские Линий, что пережили бой с ксеноморфами делают себе татуировку в виде ножа. Чаще всего на видном месте. Некоторые прямо на лице. Многие декоративные элементы делаются в виде черепов и костей, а названия даются по староземным мотивам смерти. Потому можно нередко встретить корабли «Анубис», «Аид» или «Харон» или подразделения «Костяные войны», «Мёртвые головы», «Бегущие к гибели».
book-gior-contents =
ГИОР (Галактическая Инициатива Объединённых Рас) – это исполнительный комитет межрасового надгосударственного общения, сформированный ОПЗ, после обнаружения первых инопланетных рас (Унатхов, Дворфов и Ниан), идейно ГИОР пришла на замену ООН, организации, некогда созданной на земле. По сути, целью ГИОР является урегулирование разнообразных конфликтов в галактике, собрание её участниц на заседаниях, которые проводятся раз в 5 лет, выдвижение каких, либо резолюций, а также контроль за соблюдением принятых законов.
-
-
+
+
Сама ГИОР как-бы разделена ещё на 4 организации, которые отвечают за урегулирование конкретных ситуаций.
-
+
Галактическая Инициатива Объединённых Рас и Межрасового Урегулирования (ГИОРиМУ)
-
+
Галактическая Инициатива Объединённых Рас и Государственного Урегулирования (ГИОРиГУ)
-
+
Галактическая Инициатива Объединённых Рас и Корпоративного Урегулирования (ГИОРиКУ)
-
+
Совет Безопасности Галактической Инициативы Объединённых Рас (СовБезГИОР)
-
-
+
+
1) Галактическая Инициатива Объединённых Рас и Межрасового Урегулирования (ГИОРиМУ), является достаточно старым формированием, и именно она изначально и носила название ГИОР, и только позже, после формирования других государств она была переименована в ГИОРиМУ. Целью данной организации является урегулирование вопросов касаемых межрасового общения, а также отслеживание за соблюдением ОПРС (Общие Права Разумных Существ), важным уточнением будет то, что при нарушении ОПРС каким-либо государством или корпорацией, эту ситуацию будет рассматривать Всегалактический Суд Разумных Существ.
-
-
+
+
В состав данной организации входят все расы галактики, интересы которых представляют их представители. От каждой расы может выдвигаться несколько представителей, и их число зависит от численности самой расы (1 представитель на 10 миллиардов представителей этой расы). Из-за того, что точное число представителей какой-либо расы подчитать достаточно сложно, общим решением принято округлять число представителей в меньшую сторону. Также важным уточнением будет, что ГИОРиМУ является надгосударственным формированием, а значит, что представители рас могут являться гражданами разных государств.
-
-
+
+
В состав ГИОРиМУ входят.
-
+
Люди – порядка 71 представителей
-
+
Унатхи – порядка 31 представителей
-
+
Дворфы – порядка 35 представителя
-
+
Слаймолюды – порядка 11 представителей
-
+
Нианаы – порядка 34 представителя
-
+
Воксы – 1 представитель (выступает в качестве наблюдателя)
-
+
Арахниды – порядка 47 представителей
-
+
Дионы – 1 представитель (выступает в качестве наблюдателя)
-
+
Таяраны – порядка 46 представителей
-
+
Вульпканины – порядка 60 представителей
-
-
+
+
2) Галактическая Инициатива Объединённых Рас и Государственного Урегулирования (ГИОРиГУ), появилась после обнаружения ОПЗ Империи Миртана, а также после откола СССП и СНК от ОПЗ. Целью ГИОРиГУ является урегулирование всех межгосударственных вопросов, также ГИОРиГУ обладает контингентом оранжевых касок (OH – Orange Helmets), которые занимаются поддержанием галактического порядка, путём принудительных мер и действий. Также на заседаниях ГИОРиГУ, могут подписываться пакты, которые обязательны к исполнению всеми государствами, подписавшими оные. От каждого из государств в ГИОРиГУ выступает по одному представителю.
-
-
+
+
В состав ГИОРиГУ входят.
-
+
ОПЗ (Объединённое Правительство Земли)
-
+
Государства Сателлиты ОПЗ – Унатхи, Таяраны, Вульпканины
-
+
Союз Советских Социалистических Планет
-
+
Умпорская Федерация
-
+
Великая Империя Нотда
-
+
Ноократия Эранта
-
+
СНК (Союз Независимых Колоний)
-
+
Халифатский Божественный Конгломерат
-
-
+
+
В качестве наблюдателей в ГИОР находятся.
-
+
Империя Миртана
-
+
Корпорации Большой Пятёрки
-
-
+
+
3) Галактическая Инициатива Объединённых Рас и Корпоративного Урегулирования (ГИОРиКУ), была создана относительно недавно в 2781 году, в ответ на разрешение, выданное правительством ОПЗ, корпорациям на освоение регионов фронтира. Занимается контролем за исполнением принятых резолюций и соглашений, а также подписанием новых. При этом ГИОРиКУ имеет огромную когорту своих представителей, которые постоянно находятся в разъездах по всей галактике и занимаются отслеживанием нарушений.
-
-
+
+
4) Совет Безопасности Галактической Инициативы Объединённых Рас (СовБезГИОР), самая «молодая» организация в составе ГИОР. Занимается тем, что отслеживает всевозможные угрозы галактике, а также старается их предотвратить. Самой первой и на данный момент единственной задачей является отслеживание ситуации с ксеноморфами, а также всевозможная поддержка государств, которые занимаются урегулированием данной проблемы. Постоянными членами СовБезГИОР) являются ОПЗ и Империя Миртана (не смотря на статус наблюдателя в заседаниях самой ГИОРиГУ, с недавних пор Империя Миртана обладает особым правовым статусов в СовБезГИОР из-за того, что именно она является щитом галактики от угрозы ксеноморфов).
-
+
Также в состав СовБезГИОР входят все остальные государства и организации, которые входят в ГИОРиГУ
book-snk-contents =
С ОПЗ ведётся постоянная борьба за право на существование. СНК считает ОПЗ жадными до власти и денег тиранами, которые не уделяют должного внимания как народу, так и развитию своего рынка, черпая деньги с любых источников и невзирая на благосостояние своих граждан – именно так вела себя ОПЗ на момент формирования условий для революции СНК. Грызня между СНК и ОПЗ не прекратится до тех пор, пока ОПЗ будет иметь претензии как на территории СНК, так и на сам факт его существования.
-
+
Немалая часть бюджета уходит на попытки упрочнить политические отношения с Умпорской Федерацией. В этом правительство СНК находит крайне благодатную почву, ибо Умпорская Федерация страдает от внутренних кризисов, постепенно становясь зависимой от поставок гуманитарной помощи и производственного сырья из СНК и СССП.
-
+
К Ноократии Эранта СНК относится нейтрально. Ноократия в своё время также пошла против ОПЗ, что принималось одобрительно со стороны СНК, так как это могло значить появление ценного союзника в будущих конфликтах. К всеобщему удивлению, ОПЗ спокойно согласилось принять независимость при условии выполнения ряда требований, чему СНК могло лишь позавидовать. На данный момент в Ноократии есть филиалы компаний СНК, а сама Ноократия рассматривается скорее как поставщик ценного технологического оборудования и кладезь выдающихся ученых, что крайне интересуют как отделы разработок отдельных компаний СНК, так и всего государства в целом.
-
+
Правительством СНК проводятся мероприятия по налаживанию безопасности торговых путей с Халифатским Божественным Конгломератом, постепенно налаживая активную торговлю и культурный обмен. Однако дальнейшему укреплению дружеских отношений препятствуют активные боевые действия с ОПЗ и неготовность Конгломерата принимать чью-либо сторону. Не менее важной проблемой является подрывная пиратская деятельность Межпланетарного Братства на торговых маршрутах.
-
+
Отношения между СНК и СССП находятся в висячем положении. Политика СНК во многом отличается от ОПЗ, но государство целиком и полностью продолжает полагаться на частные компании, куда меньше ограничивая их в сравнении с компаниями ОПЗ. Они обрели непозволительное для СССП влияние и силу, а также создали огромный разрыв между финансами и влиянием жителей. С другой стороны — именно возгоревшийся очаг революции зарождающейся СНК дал возможность СССП отделиться от ОПЗ относительно бескровно, ровно как и тихий переворот СССП стал ключевым фактором для ОПЗ в прекращении полномасштабных боевых действий против СНК, давая последним время окрепнуть.
-
+
С Миртанийской Империей, как и ожидало правительство СНК, наладить дружественные отношения не вышло из-за ксенофобной политики первых и высокой популяции ксеносов у вторых. Торговых отношений и спейслиза с Империей тоже не ведётся как из-за отсутствия общих границ, так и из-за политики закрытой торговли самой Империи, а также из-за того, что все доступные боевые силы и корабли нужны самой СНК позарез.
-
+
Межпланетарное братство удостоилось особого внимания со стороны СНК, ведь именно Братство, по мнению СНК, может стать очередным столь востребованным союзником в борьбе против ОПЗ, благодаря которому можно значительно расширить информационную сеть. Правда, действия отдельных группировок братства на территориях СНК, порой, носят абсолютно не дружественный характер. Примером могут послужить многочисленные улики, что напрямую указывают на причастность семьи Дилли Джонса к террористическим актам на государственных заводах СНК.
-
+
Конечно же и в ГИОР есть представители СНК. Если отношения с ОПЗ вновь достигнут войны, то именно возможность воззвать к жалости остальных членов ГИОР может помочь быстро пресечь военный конфликт. В других случаях, особых отношений с ГИОР нет. Можно сказать, что предоставляемая СНК помощь и степень выполнения требований ГИОР в основном зависит от настроения компаний СНК.
-
+
С НТ правительство СНК связывает закупка некоторые патентов и научных статей, которые могли бы так или иначе помочь улучшить эффективность своих войск и получить преимущество над ОПЗ. Иные же технологии покупаются отдельными корпорациями, учреждениями и, в общей сложности, разношерстными бизнесменами. Также СНК неоднократно намекало НТ, что если та в будущем решит выйти из состава ОПЗ насильственным способом, то СНК готово предоставить ей место в своем реестре и военную помощь в обмен на финансирование правительства. Потеря НТ была бы крайне сильным ударом для ОПЗ и значительным дополнением казны СНК.
book-umpor-contents =
В своё время ОПЗ попросту отпустила Ноократию Эранта и Умпорскую Федерацию, когда они ещё были единым государством. Им было невыгодно содержать эти колонии, где было население, но не было богатых месторождений ресурсов. Сейчас под небольшим давлением ГИОР ОПЗ посылает в Федерацию гуманитарную помощь и торгует некоторыми товарами через Корпоративную Зону большой пятёрки. Но помощь эта весьма нерегулярна и порой, чтобы её получить, посольским делегациям Федерации приходится чуть ли не умолять и идти на крайне чувствительные политические уступки.
-
+
Когда гуманитарный кризис стал особенно острым на помощь Федерации пришло СНК. Сейчас практически на безвозмездной основе они совершают регулярные поставки (с помощью корпорации «Космологистика») гуманитарной помощи, сырья и готовой продукции. А также присылают своих специалистов. Правительство Умпорцев понимает, что рано или поздно СНК потребует что-то взамен. Что-то очень существенное, но сейчас у них нет выбора, кроме как принимать поставки.
-
+
С Великой Империей Нотда установился нейтралитет. Ведётся торговля, есть определённое политическое взаимодействие, но нет никаких тесных взаимоотношений.
-
+
СССП считают, что основные ценности Федрации очень близки их социалистическому духу коллективизма труда и общего блага, а потому они договорились с Великой Империей Нотда организовать гуманитарный коридор для поставок материалов и гуманитарной помощи. Взамен Умпорцы предоставляют некоторые технические решения в области химии и биологии чрезвычайных ситуаций, а также приёмы быстрого строительства и перестройки.
-
+
Ноократия Эратна является для Умпорской Федреации жутким и непримиримым врагом. Они находятся в постоянной оппозиции, а на границах всегда дежурят свежие боевые части и флоты. Обе стороны осознают. Что хоть вторая война за отделение минула, но впереди ещё будет третья. Между Империей Миртрана и Федерацией нет практически никаких отношений. Они полностью не интересуют друг друга.
-
+
Халифатский Божественный Конгломерат видит в гуманитарном и нравственном кризисе Федерации возможность распространения своей религии и идеологии. На территории государство действую группы проповедников, речи которых находят активный отклик в самых разных слоях населения.
-
+
Гуманитарный, образовательный и нравственный кризис спровоцировал рост преступности. Межпланетарное Братство воспользовалось этим для расширение своего влияния из-за чего появляются всё более организованные ОПГ.
-
+
Для решения экономических проблем Федерация учредила ряд зон с упрощённым налогообложением, ослабленным законодательством и прочими льготами для привлечения внешних корпораций. Это позволило привлечь немало внешнего капитала. Кроме того, из-за особенности планеты Крения на ней были построены судоверфи Космологистики. Космологистика также помогает со снабжение гуманитарной помощью из других государств. Из-за активности пиратов Федераия и её компании часто нанимаю для защиты транспорта авиагруппы корпорации Витезтви. Корпорация Гефест (Глобальная Инициатива) активно продаёт Федерации сырьё и еду.
-
+
У Федерации нет отношений с Накамура Инжениринг, а с NanoTrasen некоторое время были натянутые отношения из-за их тесного взаимодействия с Ноократией Эранта. Но сейчас отношения выправляются, и Умпорцы интересуются последними научными достижениями в некоторых важных для них областях.
book-nooc-contents =
Центральной идеей устройства общества является система классов. Всего существует 15 классов. Они делятся по три на низшие, низкие, средние, высокие и высшие классы.
-
+
Разделение по классам происходит на основе сложной проверки интеллектуальных способностей, которая включает в себя целый ряд испытаний, которые каждый гражданин происходит в возрасте 20-ти лет. Испытания проверяют знания, скорость обучения, работу мозга, интуицию, склонность к психическим заболеваниям, способность применять знания, собирать, усваивать и использоваться предметы и информацию в условиях экстренных ситуаций. Весь этот комплекс мероприятий в народе назван Экзамен. Результат Экзамена зачисляет гражданина в конкретный класс. По ходу жизни гражданин имеет право пересдавать Экзамен каждые два года. Оценка Экзамена составляется по шкале баллов Эранта. В шкале 300 баллов, и она разделена на 15 равных промежутков, которые и соответствуют классам.
-
+
Низший класс (15-13) может претендовать на самые низкие должности - шахтёры, уборщики, работники канализации, чернорабочие, батраки на фермах и подобное. Тупой и монотонный тяжёлый труд. Низкий класс (12-10) может рассчитывать на низкоквалифицированные должности в различных конторах и предприятиях - секретари, судьи, техники, грузчики, монтёры, медсёстры, санитары, водители, солдаты и тому подобное. Не слишком ответственное дело. Средний класс (9-7) могут занимать профессиональные должности, но не выше определённого уровня - инженер, врач, фельдшер, лаборант, бухгалтер, офицер младшего состава и тому подобное. Важное и полезное занятие, но без заделов на руководство. Высокий класс (6-4) могут быть руководителями отделов, заведующими отделения, лабораториями, офицерами среднего состава и так далее. Эти люди важные и уважаемые начальники и руководители. Высший класс (3-1) – это директора, акционеры, члены правительства, высшие чины государства и армии и все подобные сильны сего мира и государства.
-
+
Важно понимать, что высший класс пользуются благами, как у королей. У них есть личные слуги из более низких классов. Их слова — это практически закон. Они по одному движению руки получают всё, что хотят. Их личных счетов хватит на покупку целых городов, а у Умнейших и планет. Напротив, низший класс влачит жалкое существование. Заработанных денег едва хватает на поддержание жизни - базовое питание, уплату налогов, транспортные расходы.
-
+
Очень часто классовое расслоение выражается и в раздельном проживании. Гетто низших, трущобы низких, кварталы средних, районы высоких и планеты высших. Это накладывает не просто сильный отпечаток на единстве общества, но приводит к практически полному регрессу института семьи. Желание жить как можно лучше закладывается в каждого гражданина с детства, и если у родителей появляется ребёнок, который после первого Экзамена оказывается более высокого класса, то он вполне может покинуть родителей и разорвать с ними связи.
-
+
Культивирование личного таланта и интеллекта, а также возможностей, которые можно получить, применяя эти самые интеллект и талант становятся центральной идеей внутренней политики Ноократии. Но если в стремящейся к прибыли научной корпорации NanoTrasen была организована полноценная и сложная система образования, которая требует на своё существование безумное количество сил и финансов, чтобы как можно большее количество образованных людей приносили как можно большее количество полезной работы и научно-технических достижений, то Ноократия на государственном уровне сформировала культ личности гения. Любого гения государства. При это гения природного. Очень часто редкие граждане, которые имеют врождённый талант крайне быстро поднимались по социальной лестнице классов и росли в карьере, тогда как трудолюбивые люди порой достигали границы, которую уже не в силах были преодолеть своим трудом.
book-nakamura-contents =
Прибыль компании основана на продаже высокотехнологичной продукции. Массовая постройка производственных комплексов значительно удешевляет производство и вытесняет конкурентов с рынка.
-
+
О колонизации. На изведанную солнечную систему прилетает колонизационная группа, состоящая из нескольких кораблей, которые терраформируют планеты и строят звездную электростанцию, которая снабжает электричеством все звездные системы. Номенклатура экспедиции состоит из двух кораблей-флагманов, нескольких вспомогательных шаттлов, нужных для организации снабжения, а также корабль-танкер, способный выдерживать температуру звёзд. Впоследствии один корабль-флагман становится космической станцией-хабом, а второй используется службой безопасности для защиты колонии от внешних и внутренних угроз.
-
+
Подробнее о колонизации Звезда. На ее орбите строят космическую электростанцию, которая, с помощью солнечных панелей вырабатывает массу энергии. Полученное электричество используют для синтеза антиматериевого топлива, которое впоследствии развозят на танкере по всем колониям. Всю работу на станции выполняют борги, люди не переносят высокую жару.
-
+
Планета для сельского хозяйства. Колонизационный отдел выбирает планету с наиболее подходящей почвой для выращивания растительных культур и разведения скота. Впоследствии эту планету начинают терраформировать - Устанавливают генератор гравитации и создают благоприятную атмосферу на планете. После чего на нее завозят почву пригодную для выращивания еды, а также возводят станцию по добычи воды из атмосферы. Когда на планете появляется достаточно воды происходит массовая высадка генномодифицированных деревьев и растений, которые способны к быстрому фотосинтезу и высокой урожайностью. Когда воздушно-водный цикл способен стабильно поддерживаться, на планете начинают разводить домашний скот. Скот используют для получения мяса и удобрений. Большую часть работе на планете выполняют борги. Люди контролируют стабильность цикла, химический состав почвы и допустимость токсичности растений.
-
+
Планета для добычи. Для этих планет выполняется не полный алгоритм терраформирования - Устанавливается генератор гравитации и строится завод для переплавки ресурсов. Всю работу на планете выполняют борги.
-
+
Планета для производства. Для этих планет выполняется полный алгоритм терраформирования, за исключением посадки плодоносящих растений и разведения крупного домашнего скота. На этих планетах строят различные заводы и станции техобслуживания боргов. Именно на этих планетах выпускается лицензионная продукция компании Nakamura Engineering! На этих планетах основную работу выполняют борги, однако люди осуществляют контроль качества и управление заводами.
-
+
Станция-хаб. Бывший колонизационный корабль-флагман. После доставки ресурсов для колонизации, данный корабль перестраивается в космическую станцию для управления колонией и связи с начальством секторов.
book-vitz-contents =
1) Разведывательная авиапара
-
+
Два лёгких космических судна сделанных на манер истребителей-Разведчиков ОПЗ (машина класса «Комар» по документам Vitezstvi), но с облегчённой бронёй, большей скоростью и более слабыми орудиями. Пара состоит из ведущего и ведомого. Предназначена для скрытной авиаразведки. Часто авиапары посылают на простые задания и ставят в них новичков, чтобы они освоились перед настоящими опасными делами.
-
-
+
+
2) Истребительная авиапара
-
+
Два лёгких космических судна сделанных на манер истребителей-перехватчиков ОПЗ (машина класса «Лилия» по документам Vitezstvi). Пара состоит из ведущего и ведомого. Предназначена для патрулирования и охраны. Часто в пару к опытному ведущему-ветерану ставят ведомого-юнца, чтобы быстрей обучить его.
-
-
+
+
3) Истребительное звено
-
+
Пять лёгких машин, аналогичных используемых в соответствующей авиапаре. Подразделение включает в себя командира звена и четырёх ведомых. Предназначена для охраны транспортных судов, для поддержки бомбардировочных соединений, а также для изматывающих налётов на сухопутные силы. В звеньях служат уже полноценные состоявшиеся лётчики-истребители.
-
-
+
+
4) Разведывательное звено
-
+
Четыре машины, аналогичные используемым в соответствующей паре. Чаще всего разведчики равны друг другу по званию и среди них не выделяют командира, а лишь ответственного за задание. Данное подразделение предназначено для проведения разведки в зоне боевых действий, где всегда можно попасть под обстрел и погибнуть, а потому в этих звеньях служат лишь опытные пилоты, чья выживаемость всегда на высоте.
-
-
+
+
5) Легкобомбардировочное звено
-
+
Шесть машин, аналогичных по строению истребителям-бомбардировщикам ОПЗ (машина класса «Чарли» по документам Vitezstvi). В звено входят командир звена, зам.командира звена и четыре ведомых. Подразделение предназначено для атаки на крупные суда, для штурмовки планетарных сил, для уничтожения планетарных объектов, для отвлечения внимания ПВО и истребителей. Сюда поступают уже набравшиеся опыта в авиапарах истребители. Они быстро проходят курс обучения на бомбардировщика, стремительно приноравливаются к новому делу и сразу готовы к бою.
-
-
+
+
6) Тяжелобомбардировочное звено
-
+
Три машины, созданные на базе истребителей-бомбардировщиков ОПЗ. У них укреплена броня, увеличен размер и количество перевозимого бомбового вооружения, а также увеличена огневая мощь (машина класса «Барон» по документам Vitezstvi). При этом сильно страдает скорость и манёвренность. Подразделение не имеет командира, только ответственного за задание. Используется для поражения крупных судов, разрешения линий планетарных обороны, а также объектов производства, инфраструктуры или военных объектов. В эти подразделения идут служить только самые смелые пилоты-бомбардировщики, ибо полёт в медленной машине во многом зависит от качества стрелков и поддержки.
-
-
+
+
7) Истребительная эскадрилья
-
+
Состоит из трёх истребительных звеньев (15 машин «Лилия»). Предназначена для защиты караванов, крупных судов, а также для перехвата бомбардировщиков и для достижения превосходства в воздухе.
-
-
+
+
8) Разведывательная эскадрилья
-
+
Состоит из трёх разведывательных авиапар и двух разведывательных звеньев (14 машин «Комар»). Предназначена для проведения полного комплекса разведывательных мероприятий в зоне боевых действий.
-
-
+
+
9) Легкобомбардировочная эскадрилья
-
+
Состоит из трёх легкобомбардировочных звеньев (18 машин «Чарли»). Предназначена для ковровых бомбардировок, для массивных авиаударов, для уничтожения боевого порядка крупных судов в космосе.
-
-
+
+
10) Тяжелобомбардировочная эскадрилья
-
+
Состоит из трёх тяжелобомбардировочных звеньев (9 машин «Барон»). Предназначены для крупномасштабной стратегической бомбардировки на крупные планетарные объекты, а также для уничтожения купных космических судов.
-
-
+
+
11) Истребительный авиаполк
-
+
Состоит из одной разведывательной эскадрильи, пяти истребительных, а также ещё одного отдельного разведывательного звена и одного отдельного истребительного звена (всего 98 машин, из которых 18 «Комаров» и 80 «Лилий»). Предназначены для подавления и уничтожения всего малого летательного в зоне действия полка.
-
-
+
+
12) Бомбардировочный авиаполк
-
+
Состоит из одной разведывательной эскадрильи, одной истребительной, трёх легкобомбардировочных и двух тяжелобомбардировочных (всего 101 машина, из которых 14 «Комаров», 15 «Лилий», 54 «Чарли» и 18 «Баронов»). Предназначены для уничтожения планетарных линий фронта, а также для поражения крупных флотов.
-
-
+
+
13) Специальный авиаполк
-
+
Такие авиаполки формируют под требования командира авиаполка. В них встречаются всевозможные вариации, которые становятся необходимостью при применении определённых тактик или при необходимости следовать определённому сценарию сражений.
book-gefest-contents =
Гефест был основан в конце XXII века, как частное космическое агентство, которое занималось добычей полезных ископаемых на Луне и Марсе. В дальнейшем компания начала добывать ресурсы на огромном поясе астероидов между Марсом и Юпитером. Также, агентство приняло участие в колонизации Марса и постройкой одной из первых космических станций на его орбите. Именно Гефест снабжал колонистов Марса ресурсами. В дальнейшем, компания начала добывать ресурсы во всей солнечной системе.
-
+
После открытия плазмы, корпорация начала искать способы обнаружения ее в космосе. Как оказалось, планеты, в атмосфере которых, находилось приличное количество плазмы можно было обнаружить путем наблюдения - из-за особых физических свойств плазмы, даже незначительного звездного света хватало, чтобы атмосфера светилась фиолетовым цветом.
-
+
Несколько веков бизнес Гефеста развивался в соответствии со всем миром, однако плазмы, впрочем, как и нефти было недостаточно, относительно масштабов ОПЗ. И если нефтяные месторождения можно найти на планетах с жизнью, то с плазмой дела обстояли сложнее. Руководство корпорации стремилось решить проблему плазменного и нефтяного голода.
-
+
С помощью запатентованного метода специального радиоэлектронного анализа, разработанного профессором Рулевым, удалось узнать, что на краю галактики плазмы оказалось на несколько порядков больше, чем в изученной галактике.
-
+
Экономика ОПЗ требовала все больше и больше плазмы, и с течением времени идеи о колонизации фронтира не казались такими дорогими как это могло показаться на первый взгляд. Череда удачных событий привела Гефест на фронтир. Вслед за Гефестом проследовали и другие корпорации.
-
+
Как оказалось, на фронтире есть не только плазма, но множество артефактов, оставленные некогда великой цивилизацией, изучением которых занимаются другие корпорации.
-
-
+
+
По прибытии на фронтир Гефест начал разворачиваться, и активно начал строить маленькие колонии-поселения. Все дома были построены из специальных модульных блоков, части которых помещаются в стандартные грузовые контейнеры. Некоторые сооружения представляют из себя сломанные шаттлы, пострадавшие в результате работы. Все колонии выполняют строго определенную работу - добычу ресурсов, выращивание пищи, производство лекарств и удобрений. Такая система была введена для того, чтобы поселения изначально не были самодостаточными и зависели от других колоний и центрального управления. Однако, во всех колониях должен быть пункт охраны и хотя бы один врач и мэр. Количество колонистов на один населенный пункт не превышает сотни.
-
+
С течением времени начали появляться новые жители-колонисты, которые были вынуждены работать на Гефест, у них просто не было выбора и средств на то чтобы выбраться с фронтира. Через несколько поколений среди молодежи стали появляться анти-корпоративные настроения основанные на желании выбраться из этого корпоративного рабства.
-
+
Новые поколения не понимали, почему им приходится работать на корпорацию. Они не согласны с тем, что корпорации используют ресурсы их родной планеты во благо ОПЗ, а не во благо местного населения этой. Многие из них бежали из компании, часто с кражей дорогостоящего оборудования. Гефест, в свою очередь, решал данную проблему путем увеличения количества охраны. И если на момент начала колонизации в городах процент охраны составлял 5-10%, то после подобных событий их количество выросло до 20-30%.
-
+
Ситуация изменилась, когда на фронтир прибыли и другие корпорации и у людей появился более обширный выбор работы. Многие не хотели вести преступную жизнь, а просто искали способ заработать денег и выбраться из этой дыры. Появилось множество независимых локальных компаний, основанными потомками беглецов.
-
+
Гефест не вел преследования за людьми, которые ушли из компании, в розыске были только преступники, особенно проявившие себя.
book-conarex-contents =
2706 год. Эмиль Хотакайнен, владелец крупной компании по производству и продаже изделий медицинско-интимно-постельного применения, чьи магазины действовали по всему ОПЗ, составил завещание, оставив всю свою компанию старшему 28-милетнему сыну Симо.
-
+
2709 год. Симо Хотакайнен, будучи весёлым и немного безбашенным, понимает, что не хочет управлять такой компанией. Не лежит душа, а потому он её продаёт за невиданно большие деньги.
-
+
2710 год. Эгиль Хотакайнен, брат Симо, обвиняет брата в том, что тот продал семейный бизнес, которым владели многие поколения. Всё сводится к требованию денег, и Симо, без лишних слов, переводит ему на счёт половину.
-
+
2711 год. Симо решает уехать в слаборазвитые сектора, чтобы там основать новую компанию. Выбор падает на маленький сектор Лаксимус.
-
+
2713 год. Симо основал компанию Conarex, которая занялась производством двигателей для шаттлов и космических кораблей.
-
+
2717 год. Симо знакомится с представителями организации Эранта. Он заинтересовывается их идеями, а они его бизнесом.
-
+
2718 год. Помимо производства двигателей, Conarex начинает совершать грузовые перевозки между секторами Лаксимус и Рацио.
-
+
2721 год. В сферу работы попадает и сектор Импор.
-
+
2726 год. Ноократия объявляет независимость, а прошляпивший этот момент в организации Симо оказывается в другом, по сути, государстве. Ноократия даёт ему новую регистрацию компании и предлагает выгодные контракты на грузовые перевозки и производство.
-
+
2728 год. Умирает основатель Ноократии. А Симо почему-то думает, что это повлечёт за собой массовый спрос на шаттлы и начинает производство корпусов для них.
-
+
2730 год. Новая политика государства включает в себя активную колонизацию планет секторов Ноократии. Симо решает начать производство и систем навигации для шаттлов.
-
+
2740 год. К бездетному Симо Хотакайнену приезжает дочь его брата Эгиля, Лийса с сыном Онни. Симо узнаёт, что его брат тоже попытался основать компанию, но несколько раз дело прогорело, а сам Эгиль тяжело заболел и умер, обвиняя во всех несчастьях брата.
-
+
2743 год. Лийса видит безграничную доброту Симо, который воспринимает её не как племянницу, а как дочь. А её сына, как внука, и забывает все обиды отца. Она высказывает Симо своё мнение на жуткие порядки Ноократии. У Симо открываются глаза, и он начинает искать способ выведение своей компании из этого государства.
-
+
2744 год. Лийса выходит за муж за одного из молодых акционеров Космологистики. В течении года, она понимает, что весь брак был ради присоединения Conarex к Космологистике, а потому она расторгает брак и сохраняет свою фамилию. Хотя от второго мужа у неё остаётся сын Юхани.
-
+
2746 год. Симо переписывает компанию на племянницу, наказывает ей вывести Conarex из Ноократии и через несколько месяцев умирает.
-
+
2767 год. Лийса начинает общение с Умпором-Касой. Они вместе приходят к выводам о гнилом нутре Ноократии.
-
+
2772 год. Conarex начинает пассажирские перевозки. Многие обсуждения и сборища сепаратистов Умпор-Касы происходят на шаттлах Conarex.
-
+
2773 год. Прямо перед началом войны Лийса перевозит часть заводов в сектор Импор, а также начинает строительство ремонтных станций.
-
+
2779 год. Лийса погибает в бою с несколькими сподвижниками Умпора-Касы, оставляя компанию на сыновей Онни и Юхани.
-
+
2882 год. Conarex, которая осталась действовать и со стороны умпорцев, и со стороны ноократов помогает сепаратистам нанести удар по Мозговому центру Ноократии. Conarex объявляется вне закона в Ноократии. А её имущество национализируется.
-
+
2788 год. Conarex помогает посольским делегациям ОПЗ и ГИОР начать мирные переговоры между Умпорской Федерацией и Ноократией Эранта. ОПЗ востанавливает лицензию Conarex на производственную и транспортную деятельность в своих границах.
-
+
2790 год. Из-за разрухи и возрастания преступности Conarex создаёт департамент охраны.
-
+
2805 год. Conarex договаривает на получение лицензии в Великой империи Нотда.
-
+
2807 год. Умпорская Федерация просит полностью оснастить их торгово-транспортные маршруты. Conarex получает невиданное расширение влияния и финансов.
-
+
2813 год. Онни умирает, оставляя всё брату Юхани.
-
+
2814 год. Юхани чувствуя конец смерти оставляет компанию соракалетнему сыну Олафу Хотакайнену.
-
+
2836 год. Conarex распространилась по всей Великой Империи Нотда. А также пользуется старой лицензией в ОПЗ, чтобы распространить своё влияние на два их сектора. Conarex уж производит всё необходимое для шаттлов.
-
+
2841 год. Олаф передаёт компанию тридцатилетней дочери Анникки.
-
+
2845 год. Анники будучи очень пробивной, сильной и хитрой женщиной, умудряется подписать договор на временную лицензию с СССП!
-
+
2865 год. После 20-ти лет сотрудничества Анникки добивается постоянной лицензии у СССП и передаёт дело сыну Микелю Мадсену (Да. Матушка успела выйти замуж и сменить фамилию).
-
+
2877 год. Микель всё время занимался расширением производств, постройкой станций, наращиванием единиц торгово-пассажирского флота и улучшением качества обслуживания. Кроме того, Conarex начинает работу на Фронтире.
-
+
2889 год. Уже сын Микеля, Элиас, обеспокоенный ростом преступности начинает усиление департамента охраны, закупая оружие, снаряжение и технику у Витезтви, взамен поставляя им компоненты для боевых кораблей.
-
+
2890 год. Новая война Ноократии Эранта и Умпорской Федерации начинает сильно вредить развитию Conarex. Космологистика выдавливает их из Фронтира.
-
+
2891 год. Conarex начинает активное военное снабжение флотов и планетарных сил умпорцев. Из-за прекрасного снабжения даже в условиях попыток блокад, умпорские планетарные силы уничтожают почти все десантные силы Ноократии.
-
+
2907 год. Conarex снова становится пособником ГИОР по началу мирных переговоров.
-
+
2916-3023 год. Conarex начинает помогать разным государства доставлять гуманитарную момощь Федерации, соперничая в этом плане с Космологистикой. Соперничество продолжается до сих пор. Со стороны Космологистики выступает СНК, а со стороны Conarex СССП. За это время Элиас Мадсен передавал компанию племяннице Хелене Свенсон,а она своему сыну Матиасу Свенсону, который и сейчас является единоличным директором компании.
book-petr-contents =
Петрищевцы верят, что единственный и необходимый путь для галактики — переход к Коммунистическим ценностям. Но Галактика отказалась это сделать мирно, когда отцы-революционеры СССП предложили это. Революция в ОПЗ показала, что социалисты и коммунисты могут сражаться за свои идеалы. После при образовании Петрищевцев выработалась идея, что истинные коммунисты должны, просто обязаны бороться со всем миром.
-
+
Идеология выработалась радикальная. И в какой-то момент движение к цели заменило саму цель. Идеологи и отцы-командиры вся ещё говорят, что целью всей организации является установление Коммунизма во всей галактике, но, по большому счёту сейчас их целью скорей является заявление своего протеста миру. Все эти терракты, налёты, нападения, по мнению. Специалистов разных стран, скорей являются выпуском большой обиды нежели реальным движением к галактической революции. Бунтари, освободители, революционеры превратились даже не в фанатиков, а в простых экстремистов.
-
+
В качестве задач Петрищевцы занимаются подрывом крупных «оплотов капитализма», охотятся на высокопоставленных «буржуев и толстосумов», налётами на суда «продажных угнетателей». Кроме того, краснорукавники часто пытаются освобождать тех, кто их об этом не просил - налетают на объекты крупных корпораций, казнят безопасников и командование, остальных выгоняют и взрывают объект. Но есть и важный фактор. При желании каждый может попросить Петрищевцев о помощи, указав на угнетение капиталистами. И с большой долей вероятности они явятся и действительно накажут угнетателей, при этом не требуя за это никакой мзды. Впрочем, принимают добровольные пожертвования на дело Революции.
-
+
Несмотря на то, что Петрищевцы большей частью являются сбродом, у них выработался значительный культурный пласт. Он пронизывает всё, что окружает революционеров и является важным для них. Основан на символизме.
-
+
Командиры рассказывают новобранцам, что рукава выкрашены в тёмные красные цвета, дабы показать, как глубоко готовы Петрищевцы окунуться в кровь, чтобы добиться равенства для всех пролетариев всех народов. И куртки их будут чёрными, пока не возвысится над всеми странами красные флаги!
-
+
Все боевики вне зависимости от ранга носят одинаковую форму. Это соответствует Петрищевским идеалам всеобщего равенства. Каждый, будь то новобранец, бывалый боевик, специалист, ветеран или командир, носят одинаковые штаны, куртки с багровыми рукавами, одинаковые пилотки и сапоги.
-
+
Плащ ветеранов и командиров олицетворяет окрашенное кровью угнетённого пролетариата красное знамя. Такие плащи доверяют лишь бывалым воякам и сподвижникам идей революции. Это большая честь, это настоящее признание бойца уважаемым Петрищевцем.
-
+
Абсолютным почтением пользуются исторические революционные личности. На каждой базе Петрищевцев можно найти портреты, исторические труды или иную литературу посвящённую отцам-революции СССП и самым разным революционерам Старой Земли. Эти материалы часто используют в политбеседах с революционерами. Многие перечитываются, как библия революции.
-
+
Петрищевцы живут на базах в атмосфере постоянного братства. Это уже больше, чем товарищество, хоть и зовут друг друга товарищами. Боевики просыпаются вместе, едят вместе, тренируются и занимаются снаряжением вместе, вместе идут в бой. У них нет своей собственности, кроме предметов личной гигиены и мелких мелочей. Им не из-за чего толком ругаться.
-
+
Каждый без промедления готов отдать жизнь ради своих братьев-товарищей. Петрищевцы осознают, как на самом деле они одиноки в широкой галактике. И они осознают это особенно явно, когда встаёт вопрос разрыва с СССП и изгнания. Очень ярко это видно по шлемам скафандров, которые выглядят «плачущими, но опасными». Это ощущение одиночества, не исключительности, а именно одиночества усиливает то самое чувство братства! Петрищевцы всегда спасают своих товарищей. Пилоты десантных транспортов, никогда не покинут падающий шаттл, если на борту братья.
book-saibasan-contents =
Заводы
-
+
Не нужно много заводов, чтобы обеспечить всех электроникой. Тысячу лет назад несколько крупных предприятий хватало на обеспечение планеты. Сейчас после изменения технологии и многих веков модификаций методов изготовления и заводской техники несколько заводов уже способны обеспечить целый сектор.
-
+
Заводы представляют собой крупные автоматические почти что конвейерные линии. Автоматически происходит всё - подготовка подложек, нанесение резистов, экспонирование, эпитаксия, металлизация и многое другое. Из-за этого все этапы производства находятся в чистых зонах, и им требуются сложные системы очистных сооружений. Таким образом большая часть заводского персонала – это инженеры тех. обеспечения коммуникаций, а также инженеры выходного контроля.
-
-
+
+
Дизайн центры
-
+
Как правило — это небольшие офисы, расположенные в самых разных местах. В них работают инженеры-проектировщики схемотехники. Они занимаются разработкой схем по заказам различных предприятий и государств. Проектировка происходит, как полностью сквозная, с созданием полностью своей уникальной микросхемы, так и использующая готовые технологические шаблоны одной из имеющихся сборочных линий.
-
-
+
+
Технологически лаборатории
-
+
Данных лабораторий не много. В них учёные-материаловеды и инженеры-технологи проводят исследования и эксперименты над различными параметрами и показателями, варьируя их и добиваясь куда лучших результатов характеристик! (на самом деле они достигают главной истины любого технолога - «Не ТРОГАЙ, МАТЬ ТВОЮ, НАСТРОЙКИ, А ТО Я ТЕБЕ БОШКУ РАЗНЕСУ!»
-
-
+
+
Административное отделение
-
+
В это отделение входят бухгалтерия, директорат корпорации. Тут же отдел приёма заказов, подразделение спикеров и, как ни странно, информационная безопасность, которая на самом деле напрямую связана с директоратом.
-
-
+
+
Взаимодействие с обществом
-
+
Ни у кого не было уверенности, что дочерняя компания корпорации Cybersun Industries, сможет быть чем-то помимо вспомогательного подразделения, созданного для уменьшения расходов на электронику. Но в итоге это, хоть и дочерняя, но крупная компания-производитель электроники, известная по всей изведанной Галактике. Приборы с чипами Saibasan – это гарантия качества и надёжности.
-
-
+
+
Активы корпорации
По большому счёту Saibasan обеспечивает электроникой (по примерноым расчётам) 4 сектора Фронтира, 2 сектора ОПЗ, 2 сектора Умпорской Федерации и 1 Сектор СНК. Посему у корпорации 45 заводов, 121 дизайн-центр, 9 технологических лабораторий и 10 административных отделений, одно из которых главное.
book-unath-ptone-contents =
Мимика и Жесты
-
+
В разговоре унатхи активно жестикулируют, задействуя свои руки и гибкий хвост. Менее экспрессивная чем у людей мимика компенсируется движением кожных складок и капюшонов. Сначала полагалось, что движение хвоста используется для трансляции конкретных эмоций, но на самом деле его значение сильно зависит от контекста и личности говорящего. Удары хвостом по земле могут означать восторг, нервозность, ярость, скуку, страх, или что-то совершенно иное – поэтому переводчик для унатхских жестов так и не был составлен.
-
+
При менее формальном общении с семьей, друзьями и подчиненными, унатхи могут быть крайне тактильными. Для более хрупко сложенных рас, объятия, толчки и хлопки по телу могут быть чересчур сильными, и не каждому будет приятно ощущение когтей на коже. Ассимилируясь в общество, где мало сородичей, унатхи отучаются от подобных привычек, а вот навещая Моргха Унатх, путешественнику стоит приготовиться к такому отношению.
-
-
+
+
Одежда и Украшения
-
+
Традиционная одежда унатхов обычно крайне открытая, с менее строгими стандартами пристойности, чем людская. Текстура материала играет меньшую роль, чем цвет, а в застёжках ценится прочность. Богатая одежда, в противоречие стандарту, очень тёплая и основана на большом количестве замысловато перекрывающих друг друга слоёв. В местах с прохладным климатом, тёплая одежда наслаждается значительно более утилитарным отношением и резко контрастирует с тропическими аналогами своей обыденностью.
-
+
За годы контакта унатхи переняли человеческую одежду, слегка адаптировав её под свою анатомию. В сферах правления, бизнеса, науки и военного дела, человеческая форма одежды стала стандартной даже среди более традиционалистически настроенных родов.
-
+
За пределами родного сектора одежда унатха больше определяется местной культурой, чем какими-то историческими предпочтениями, но некоторые всё равно будут выбирать более свободную одежду для труда, и более тёплую одежду для щегольства.
-
+
Расположенные вдоль шеи и по бокам головы кожные складки и выступы часто украшаются пирсингом или тату. В рисунках преобладают абстрактные узоры с природными мотивами, которые не потеряют своего смысла или структуры при движении кожи.
-
+
Многие унатхи берегут свои рога, хотя не у всех они встречаются, и их отсутствие не считается чем-то унизительным. Боязнь отколов и повреждений выливается в относительно низкую популярность каких-либо модификаций, но иногда можно встретить ящера с вырезанными на рогах узорами. Нарочное спиливание одного или обоих рогов, сверление и стачивание также имеют место быть, но редко.
-
+
В попытках сгладить или наоборот — подчеркнуть естественные неровности черепа, унатхи обоих полов могут использовать краску и макияж. У мужчин встречаются искусственные костяные наросты, прикрепляющиеся на бровные дуги – подобное, как считается, придаёт образу внушительности и серьезности.
book-unath-ptwo-contents =
Искусство
-
+
Подобное влияние не обязательно было однобоким. После контакта людям открылся мир унатхского искусства. Пройдя через абсолютно другую историю, стили и устои их творчества значительно отличались от привычных людям, но были и объединяющие факторы, но были и параллели. Например, в унатхской живописи существовали одиночные портреты, однако большой популярностью пользовались массивные родовые и семейные картины, также выполнявшие функцию генеалогического древа. С одним отличием — вместо древовидной структуры, унатхские рода сплетались из множества лиан и ростков, вились вместе, потом расплетались снова или меняли свою конфигурацию. От всей запутанности некоторых образцов у зрителей могла закружиться голова. В целом, во всех визуальных медиумах унатхов часто присутствует больше мелких деталей, чем в человеческих.
-
+
Как и музыка любой другой разумной расы, музыка унатхов предстает в невероятном количестве форм, так что покрыть её в достаточной степени в этой статье не представляется возможным. За последние сотни лет в музыке появилось бесчисленное множество электронных, синтезированных звуков, но унатхи не забывают и свои традиционные инструменты. Унатхские песни пользуются умеренной популярностью — некоторые находят их излишне громкими, с большей ролью ударных инструментов и меньшим упором в мелодию.
-
+
С распространением ТрансЛита, к доступной людям части унатхского наследия присоединились кино и литература. Среди рассказываемых унатхами историй выделяется много отличных от человеческих архетипов. Одним из них являются ссен'гха — мореплаватели времён Золотого Века Морей, исследователи, послы, шпионы. Рассказами об их приключениях изобилует как литература унатхской современности, так и популярная культура. Человеческому наблюдателю будет удобно думать о ссен'гха, как об унатхских аналогах рыцарей или ковбоев — в той роли, которую они играют в культурном сознании общества.
-
-
+
+
Война и Мир
-
+
По окончании Последней Войны в обществе унатхов одно из лидирующих мест заняли антимилитаризм и пацифизм. Всем было ясно одно — подобное не должно повториться никогда. Многие участники Кшеса Д’тхун, федерации-предшественника Унатхской Автономии, начали уменьшать свои армии, полагаясь на сеть тесных торговых и дипломатических связей для урегулирования конфликтов. С раннего возраста унатхам объясняли ужасы войны, и обучали способам решать конфликты без насилия. Молодым унатхам и унати показывали, что сотни лет мира привели к совместному процветанию, и поэтому у каждого разумного существа есть моральная обязанность не допустить войны. Такая практика сохранилась с незначительными изменениями до наших дней, но полтысячи лет назад ее популярность пошатнулась.
-
+
Война с воксами, возникновение ненавидящей всех нелюдей Миртанийской Империи и военное присутствие ОПЗ пошатнули повальную веру в послевоенные идеалы. Часть унатхов начала рассматривать войну и армию как необходимые инструменты для обеспечения дальнейшего существования унатхской цивилизации, а пацифизм — как проявление слабости перед лицом неумолимого врага. Популярность унатхов в качестве солдат ОПЗ и наемников также повысила привлекательность милитаристских настроений. В наши дни военный сектор Моргха Унатх постепенно набирает во влиянии и богатстве, что выливается в растущее недовольство идеологической миролюбивостью.
book-dione-contents =
Биология дион в своём роде уникальна хотя бы по той причине, что оно представляется собой сочетание биологии нескольких нимф и растенеобразного тела.
-
+
Притом стоит отметить, что нимфы являются самобытным живым организмом, способным существовать без остальных нимф и древовидного тела. Посему у каждой нимфы есть собственные мозг, желудок, печень, почки, лёгкие, сердце и прочие органы. Но при этом в сочетании трёх нимф и древовидного тела некоторые органы начинали видоизменяться, своего рода, срастаясь с растениями тела. Для одной нимфы метаморфозы нескольких органов разом стали бы смертельны, потому нужно минимум три. У одной видоизменяется мозг, у второй – желудок, у третьей – лёгкие.
-
+
По этим причинам примечателен процесс питания дион. При поглощении еды, диона посредством прочных побегов проталкивает пищу или жидкость в углубление в голове, где располагаются рты трёх нимф. Нимфы потребляют не равное количество еды. Нимфа с видоизменённым мозгом ввиду сравнительно малого (в сравнении с другими видоизменёнными органами вместе) энергопотребления есть всего седьмую часть всей еды, диона с видоизменёнными лёгкими – две седьмые, а нимфа с видоизменённым желудком получает в общей сложности четыре седьмые. Притом из полученной третьей нимфой пищи лишь четверть разлагается полностью и передаёт всю энергию самой нимфе, остальное раскладывается на простые сахара, минеральные вещества, углеводороды и воду. Видоизменённый желудок дионы соединяется напрямую с корнями растений. Это позволяет передавать питательные вещества и воду в растениевидное тело. Притом проводящей питательные вещества жидкостью является вода, которая насыщается получаемыми из еды минеральными веществами, витаминами и сахарами, становясь веществом, напоминающим берёзовый сок.
-
+
Дополнительным механизмом питания и жизнеобеспечения является химосинтез, который у дион отличается от фотосинтеза классических растений несколькими деталями и протекает в видоизменённых лёгких одной из них. Это всё ещё квантовохимическое взаимодействие, которое способно за счёт энергии разделять молекулы воды и углекислого газа, формируя молекулярный кислород и простые сахара для питания растениевидного тела (через похожую корневую систему, сплетённую с альвеолами видоизменённых лёгких одной из нимф). Притом энергия, необходимая для химосинтеза, в отличии от фотосинтеза, получается не от поглощения квантов света, а от энергии, получаемой из расщеплённой пищи в желудке нимфы. Получаемый избыток молекулярного кислорода, может быть, не только поглощён лёгкими производящей его нимфы, но и выйти наружу для дыхания двух других. Так дионы способны буквально дышать углекислым газом.
-
+
Видоизменённый мозг одной из нимф является сравнительно небольшим потребителем энергии и к тому же соединён с мозгами других нимф, но является руководящим органом принятия решений.
book-bss-contents =
Тут описаны бесчисленные диаграммы, графики, картинки и сотни формул, что поднимают вопросы от квантовой механики атомного строения до орбитальной динамики...
-
+
Если же описывать всё очень кратко, то необходимо вспомнить о неопределённостях Гейзенберга. И да, она не одна! Их две. Первая говорит о том, что нельзя одновременно понять, где объект и куда с какой скоростью движется. Всегда будет погрешность. Вторая говорит, что одновременно нельзя определить изменение энергии объекта и время изменения. И эти неопределённости взаимосвязаны.
-
+
Что же это для нас значит? Что всегда есть вероятность, что мы не тут, не туда, не так быстро, не за это время и не с такой энергией. А в случае БСС самым важным становится вопрос... Где? Где шаттл.
-
+
Так вот. Мы не видим шаттл, но нам сказали, что оно находится в неком месте. Но есть вероятность, что он находится в другом. И чем больше колебания энергии, тем больше погрешность этого самого места. То есть, если вложить ну ОЧЕНЬ много энергии, то появится вероятность нахождения шаттла ну ОЧЕНЬ далеко.
-
+
Тут в дело вступают Блюспейс-кристаллы и Блюспейс-модуль двигателей. Кристаллы способны сохранить, а потом дать огромное количество энергии, а модуль способен принять всю эту энергию и запустить колебание вол вероятности такого масштаба, что шаттл просто... окажется в другом месте - квантово туннелирует через пространство.
book-scaf-contents =
EVA скафандры
-
+
Образовано от сочетания слов на старом языке землян Extra-Vehicular Activity, что обозначало внетранспортную деятельность, подразумевая, что это скафандр для выхода из космического шаттла в открытый космос. Скафандры серии EVA появились ещё до NT, по большому счёту эта серия была повторением успехов старых скафандров, но с использованием новых материалов. Их оболочка включала в себя три слоя
-
+
1) Внутренний слой. Является теплоизоляционным и герметизирующим. Предотвращает потерю тепла и выход газовой смеси из скафандра. Используется полимерный композитный материал на основе резины.
-
+
2) Защитный слой. Является армированным стали-полимерным нетканым материалом для погашения ударов мелких космических объектов, вроде пыли и крохотных частичек космического мусора с орбитальными скоростями.
-
+
3) Внешний слой. Он исполняет больше эстетическую функцию. Он скрывает внутренние неровности, трубки и крепления. Кроме того, именно на этот слой наносится краска, которая позволяет разделять EVA скафандры по типам - тюремный, аварийный и т.д.
-
-
+
+
Скафандры специалистов по работе в открытом космосе
-
+
Следующие итерацией развития скафандров после достижения пределов серией EVA стала разработка принципиально новой серии скафандров. И первым в серии стал скафандр для работы в открытом космосе. Это было совершенно необходимо для строительство новых космических объектов прямо в космосе, для проведения диагностики внешних покровов космических объектов, а также для прочих работ. Скафандр конструировали таким образом, чтобы погасить большую часть вероятных рисков космоса. Из-за этого скафандр насчитывал четыре слоя
-
+
• 1) Дереакционное покрытие. Покрытие, сделанное из слабоактивных композитов, что предотвращает деградацию других слоёв, при попадании скафандра в условия действия кислотной атмосферы.
-
+
• 2) Бронированный слой. Второй внешний стальной пластинчатый слой, который должен был защитить внутренние слои и оператора от скоростной встречи даже со средним космическим мусором, а также мог спасти жизнь, если происходила авария, сопровождающаяся взрывом.
-
+
• 3) Антирадиационный экран. Сделан из листового свинца. Третий слой. Тяжёлый, но дешёвый и блокирует около половины всей космической радиации практически от любой звезды или иного источника.
-
+
• 4) Внутренний слой. Выполнен из достаточно армированного прорезиненного композита. Он препятствует переохлаждению. А также может защитить от ударов о небольшие предметы.
-
+
Создатели вдохновлялись Земными латными доспехами эпохи позднего Средневековья. Пластинчатое покрытие позволяло быть защищённым от крупных ударов и при этом иметь определённую мобильность. Но при этом от удара, скажем, ножа или укуса кого-нибудь хищного защищал в результате только внутренний крепкий, но не непробиваемый слой. Впрочем... где в космосе можно попасть на нож или клык… Помимо этого, скафандр вышел банально слишком тяжёлым. В нём неудобно было заниматься строительством, даже в условиях невесомости. В целом разработка не была признана провальной, но требовала доработки. Да и вообще руководство НТ считало эти скафандры лучше серии EVA, а потому развернуло массовое производство, но дала команду конструкторам облегчить модель, добавив больше удобства.
-
+
Облегчённый скафандр изобретали не долго. Сперва сильно сократили толщину свинцового слоя. Затем уменьшили количество стальных пластин. Убрали армирование и переработали структуру внутреннего слоя. Скафандр защищал не так сильно, но был всё ещё шагом вперёд в сравнении с серией EVA. Инженеры продолжили скептически относиться к данному новшеству, но специалисты по утилизации обломков приняли такие скафандры, как вторую кожу, потому ныне их и зовут скафандрами утилизаторов.
book-mbsone-contents =
Модуль «Маяк-01»
-
+
В первой своей итерации учёные начали решать проблему нестабильности посредством разработки расчётного модуля «Маяк-01», способного более точно настроить колебания вол вероятностей. Установка на шаттл и испытания в рамках прыжков в пределах солнечной системы показали отличные результаты. Но уже при испытании на межсистемном скачке случилась авария и связь с шаттлом была утеряна. Новые эксперименты были приостановлены и началась длительная серия моделирования. Результаты не дали объяснения, и инцидент бы признан случайной ошибкой, и была отдана санкция на его повторение.
-
+
В результате повторного эксперимента новый шаттл снова пропал. Стало ясно, что это не ошибка и началась новая «эпоха» скрупулёзных тестов, которые не давали результатов. Но через год, к радости инженеров, второй потерянный шаттл вернулся. Записи «черного ящика» показали, что взаимодействие БС-модуля двигателей с волнами квантовой вероятности повлияли также и на вероятностные процессы в электронике шаттла и особенно в модуле «Маяк-01», что привело не к точной настройке, а к большей нестабильности, что усугубило проблему.
-
-
+
+
Суперкомпьютер «Маяк-02»
-
+
Выяснилось, что для таких задач никакого модуля не хватит. В любом случае размещение его на шаттле приводит к плачевным последствиям. Постепенно улучшая систему и наращивая расчётную мощность, увеличивая надёжность и добавляя системы, препятствующие искажению вероятностных волн, инженеры превратили модуль в целый суперкомпьютер «Маяк-02».
-
+
Суперкомпьютер располагался на важных космических узлах. Например, на транспортных станция и космопортах. Результаты его использования вдохнули в идеи покорения дальнего космоса новую жизнь. Расчёты получались столь точны, что расхождение в координатах назначенных и полученных составляли всего несколько километров. При этом суперкомпьютер обладал и существенными недостатками
-
+
1. Время расчёта скачка порой составляло несколько суток. (И для каждого корабля группы отдельно)
-
+
2. Производство суперкомпьютера было сверхдорогим и очень долгим.
-
+
3. Использование суперкомпьютера было сопряжено с значительными энергозатратами, а именно требовалась небольшая электростанция.
-
+
4. Он мог отправить только в одну сторону, но не мог вернуть.
-
+
Был совершён эксперимент, при котором суперкомпьютер отправлял шаттл с таким же суперкомпьютеров целевую систему, затем требовалось развернуть в целевой системе электростанцию, подстанцию, коммуникации и установить суперкомпьютер. Идея была чрез чур авантюрно с самого начала. Требовалось быстро возвести космическую станцию, способную обслуживать столь ценное и сложное оборудование. Любой незначительный негативный фактор мог всё испортить.
-
+
Провал эксперимента подал идею создания отправляемого спутника-маяка.
-
-
+
+
Спутник «Маяк-03»
-
+
На помощь пришли промышленные квантовые компьютеры. Они позволили упростить вычисления, производимые суперкомпьютером, хотя и делали их куда менее точными. При этом новый модуль требовал на много меньше энергии, был сложен в производстве, но, как ни странно, сравнительно дешёвым.
-
+
Важнейшей особенностью нового прототипа была поразительная защита от воздействия БС-модуля. Квантовый компьютер «Маяка-03» был способен находить «битые» данные и расчёты после воздействия колебаний вероятностных вол, и сам их устранял при помощи крайне специфических автоматизированных способов исправления ошибок.
-
+
Всё это позволило создать серию лёгких спутников, которые практически случайно рассылались в разные звёздные системы. После прибытия спутники начинали посылать сигнал отбоя, сообщающий, что всё в порядке, или посылающие сигналы ошибки, сообщающие, что со спутником что-то случилось. также часто случалось, что спутник переставал передавать сигналы, что могло служить признаком его уничтожения.
-
+
Рассылка спутников способствовало колонизации и следованиям дальнего космоса. Но всё ещё оставалась значительная погрешность вычислений и ненадёжности систем даже в уже проложенных путях. Маршруты были налажены, но раз в Земной квартал несколько шаттлов уничтожались или пропадали без вести.
book-mbstwo-contents =
Искажатели «Маяк-04» и «Маяк-05»
-
+
Рывок произошёл, когда длительные фундаментальные исследования Блюспейса и плазмы позволили создавать искажения в волнах вероятности в определённом радиусе вокруг искажателя «Маяк-04». Суть искажения была в притягивании объектов, находящихся в Блюспейс пространстве, к себе. Проблема была лишь в том, что после притягивания, шаттл врезался в искажатель и уничтожал его, то есть система была одноразовой.
-
+
Следующая итерация, «Маяк-05», получила сложный вычислительный модуль. Который был на самом деле переработанным модулем «Маяк-01», но с технологиями квантовой электроники. Новый модуль позволил «вытягивать» шаттлы из Блюспейс пространства на некотором небольшом расстоянии от себя (с погрешностью).
-
-
+
+
Установка «Маяк-06»
-
+
Определённая кульминация серии маяков стала, когда было решено объединить суперкомпьютер «Маяк-02», который переработали, сделав дешевле, быстрей и энергоэффективней, спутник «Маяк-03» и искажатель «Маяк-05». В результате вышла крупная и дорогая установка «Маяк-06», которая давала возможность вычислять прыжки для нескольких шаттлов, а также принимать прилетающие шаттлы и делать всё так, чтобы многие потоки шаттлов между собой не врезались. Это наиболее современная система, устанавливаемая на космических объектах, станциях, верфях, портах.
-
-
+
+
Искажатель «Маяк-07»
-
+
На данный момент это последняя разработанная итерация технологии. Это громадная и крайне мощная версия искажателя «Маяк-05», совмещённая с переработанным суперкомпьютером. Особенностью его является то, что она «вытягивает» объекты не в радиусе, а вытянутой полосе. Это позволило создать установку, способную реализовывать таможенный контроль на границе секторов, заставляя все шаттлы перемещаться к таможенно-пограничной станции.
-
+
Особенностью выступает то, что на длину полосы «вытягивания» влияют самые разны параметры, а потому порой она сокращается или удлиняется. Это даёт некоторое пространство для реализации возможностей различных челноков, подпольных организаций, террористов, контрабандистов и товарищей с чёрного рынка.
-
-
+
+
Искажатель «Маяк-08»
-
+
Искажать «Маяк-04» имел и иной путь развития, нежели выведение судов из БС пространства к самому маяку на некоторое расстояние. Новая модель была оснащена куда более скромным расчётным модулем, менее чувствительными сканерами, но большей мощностью. Кто-то с иронией считал, что такая модель только и способна, что вытягивать к себе линкоры. Остальным объектам просто не хватило бы энергии, чтобы быть точно замеченными. Но идея изобретателей была не в этом. Данный маяк был способен притягивать к себе высокоэнергетические объекты. То есть субстанции. Которые и без БС-модуля имели огромный отклик в пространстве энергий. Например, сбежавшие из-под контроля сингулярности. Таким образом «Маяк-08» стал серьёзным ответом всем тем обществам, которые ежегодно и ежемесячно твердили об отказе в использовании сингулярных двигателей по причине существования вероятности аварии с их побегом и дальнейшим прилётом непойми куда и созданием ещё большей аварии. Теперь сингулярности можно было ловить.
book-implants-contents =
Импланты NT
-
+
Во время решения ряда проблем, связанного с секретностью, доступом и безопасностью руководство пришло к выводу, что в конкретных частных, но порой регулярно встречающихся ситуациях ни в коем случае нельзя полагаться ни на какое снаряжение. И причина этому весьма проста - снаряжение можно снять. То есть в спешке, по небрежности или под воздействием злого умысла сотрудник может утерять нечто важное. Чтобы преодолеть эту сложность руководство NT учредило грант на создание подкожных имплантов, способных хоть в малой степени заменить некоторые виды снаряжения.
-
-
+
+
Имплант трекера
-
+
Данный имплант устанавливается в грудную клетку неподалёку от сердца. Сердце является мышцей, которая постоянно пребывает в движении. А от того постоянно генерирует поверхностное напряжение, которого хватает на поддержание работы импланта. Помимо системы зарядки от мышцы имплант имеет антенну-передатчик, которая при каждом движении сердечной мышцы генерирует сигнал. Сигнал достигает антенн системы внутренней связи объекта НТ, а затем АЛУ (Арифметическо-Логическое устройство) при помощи Фурье-преобразований устанавливает положение импланта и передаёт данные на сервер. Таким образом трекер – это система локального позиционирования, но под кожей. Было бы глупо, если бы при остановке сердца от, скажем, инфаркта или прочих неприятных ситуаций имплант вышел из строя. А потому в него встроек небольшой аккумулятор, продолжающий работу импланта после тревожного использования.
-
-
+
+
Имплант света
-
+
Имплант света представляет собой небольшой, но достаточно мощный светодиодный фонарик на аккумуляторе, и устанавливается в руку. Очевидной проблемой может стать подзарядка аккумулятора, но решение подсказали древние фонарики тысячелетней давности с рычажной подзарядкой. Но в случае импланта рычагом для подзарядки являются мышцы. Носитель может совершить несложные движения рукой и подзарядить батарею своего фонарика, что делает имплант крайне полезным и долговечным.
-
-
+
+
Имплант грустного тромбона
-
+
Имплант устанавливается в район диафрагмы. Имеет в себе небольшой аккумулятор, сторожевой таймер, небольшой чип логики и динамик. При дыхании происходит периодическое расширение и сужение диафрагмы, что совершенно не влияет на имплант. Если же диафрагма перестаёт, то начинается отсчёт секунд на сторожевом таймере. Если время превышает среднее максимальное время задержки дыхания, то сторожевой таймер переполняется и активирует чип, заставляя динамик издать грустный тревожный звук.
-
-
+
+
Имплант водокодера
-
+
Встраивается в горло. Имплант включает в себя матрицу подвижных наночастиц, которые способные перестаиваться, «нарастая» и изменяя параметры голосовых связок из-за чего они начинают звучать иначе. Для регулировки требуется итерационное взаимодействие с подкожными регуляторами частоты и тембра. А именно требуется повернуть регулятор и тут же что-то произнести, дабы проверить звучание.
-
-
+
+
Имплант хонк
-
+
И кто-то же придумал идею, что ряду сотрудников понадобится, возможно, издать громкий предупреждающий звук в ситуации, когда, скажем, коридор заполнен стоящими сотрудниками, мешающими пройти. Для этого был разработан имплант он, работающий аналогично импланту света. Четырёх-шести сгибаний руки хватит, чтобы зарядить батарею импланта и издать громкий предупреждающий звук.
-
-
+
+
Mindshield (майндшилд или имплант защиты разума) – имплант защиты разработки корпорации NanoTrasen, позволяющий нивелировать гипнотическое или психологическое воздействие на носителя.
-
+
Имплант представляет из себя вычислительный чип, микросканер ЭЭГ и сложную сеть искусственный нейронов, а также чип, создающий искусственное увеличение лояльности к корпорации NanoTrasen. Имплант является сложным в производстве, поэтому даже не весь состав станции удостоен быть носителем данного импланта, впрочем, со временем долгих исследований и модификаций, учёным удалось добиться того, что устанавливать его стало сравнительно просто любому обученному врачу при помощи имплантера стандартного образца. Использование искусственных нейронов позволяет как сканировать активность лобной доли головного мозга, выявляя гипноз или психологическое воздействие, так и стимулировать лобную кору, чтобы вывести мозг в нормальное состояние и избавиться от гипноза или психологического воздействия. Данный имплант постоянно сканирует лобную долю носителя, точно соотносит отклонения от нормы, достигая точности нивелирования гипноза или психологического воздействия на 99%. Работает, если воздействие на носителя протекает малое количество времени, иначе действия гипноза входит в нормальное состояние мозга, перестраивая структура мозга, чьи нейронные сети постоянно видоизменяются, и вывести носителя в первоначальное состояние используя имплант невозможно.
diff --git a/Resources/Locale/ru-RU/corvax/paper/doc-printer.ftl b/Resources/Locale/ru-RU/corvax/paper/doc-printer.ftl
index f9f9d99a00..26031a3994 100644
--- a/Resources/Locale/ru-RU/corvax/paper/doc-printer.ftl
+++ b/Resources/Locale/ru-RU/corvax/paper/doc-printer.ftl
@@ -10,7 +10,7 @@ doc-text-printer-report-station =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Цель:
Статус выполнения цели:
Код уровня угрозы:
@@ -18,7 +18,7 @@ doc-text-printer-report-station =
Активные угрозы:
Потери среди экипажа:
Текущая ситуация:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-report-on-elimination-of-violations =
@@ -33,14 +33,14 @@ doc-text-printer-report-on-elimination-of-violations =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), отчитываюсь об устранении нарушений в работе, выявленных (ФИО), в должности (полное наименование должности).
Предъявленные нарушения:
-
+
Причина нарушений:
-
+
Проведённые мероприятия по устранению нарушений:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-report-department =
@@ -55,14 +55,14 @@ doc-text-printer-report-department =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Количество сотрудников в отделе:
Количество стажёров:
Неактивные сотрудники отдела:
ФИО, должность, причина
Степень готовности цели:
Общее состояние отдела:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-report-employee-performance =
@@ -77,10 +77,10 @@ doc-text-printer-report-employee-performance =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименования должности), в ходе исполнения своих обязанностей выполнил положенный объём работ. Прошу принять результат работ Главой отдела (наименование отдела).
Произведённые работы:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-report-on-the-chapters-meeting =
@@ -95,18 +95,18 @@ doc-text-printer-report-on-the-chapters-meeting =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Причина созыва Собрания Глав:
Формулировка поставленного перед Главами вопроса:
Количество голосов «За»:
Проголосовавшие «За»:
-
+
Количество голосов «Против»:
Проголосовавшие «Против»:
-
+
Количество воздержавшихся от голосования:
Воздержавшиеся от голосования:
-
+
Решение Собрания Глав:
=============================================
⠀[italic]Место для печатей[/italic]
@@ -122,11 +122,11 @@ doc-text-printer-internal-affairs-agents-report =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности Агента Внутренних Дел, в ходе внутренней проверки, запрошенной (ФИО), в должности (полное наименование должности) по причине (причина проверки) выявил следующие нарушения:
-
+
Также хочу сообщить о следующем:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-condition-report =
@@ -141,14 +141,14 @@ doc-text-printer-condition-report =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Была произведена проверка (название системы или объекта), результаты проверки были проанализированы, был проведён анализ причин возникновения нестабильной работы объекта.
Причина поломки объекта:
-
+
Выявленные повреждения объекта:
-
+
Произведённый ремонт объекта:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-Report-study-object =
@@ -163,12 +163,12 @@ doc-text-printer-Report-study-object =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Для проведения экспертизы было представлено (кто или какой отдел передал объект) приспособление с неизученными свойствами. В ходе экспертизы объект был изучен, были установлены свойства объекта и его видовая принадлежность.
Внешнее описание объекта:
-
+
Выявленные свойства объекта:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-experiment-report =
@@ -183,20 +183,20 @@ doc-text-printer-experiment-report =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Внешнее описание объекта эксперимента:
-
+
Экспериментатор(-ы):
-
+
Эксперимент №...
Описание эксперимента:
-
+
Ожидаемый результат:
-
+
Используемое оборудование:
-
+
Фактический результат:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-disposal-report =
@@ -211,10 +211,10 @@ doc-text-printer-disposal-report =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Отделом снабжения была произведена утилизация объектов при (метод утилизации). В ходе утилизации были обнаружены ценные предметы и вещи, ценные предметы были переданы в соответствующие отделы для их использования.
Перечень найденных вещей:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-application-appointment-interim =
@@ -229,10 +229,10 @@ doc-text-printer-application-appointment-interim =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), прошу согласовать моё назначение на должность временно исполняющего обязанности Главы (полное наименование отдела)/Капитана.
При вступлении в должность обязуюсь следовать Стандартным Рабочим Процедурам и до появления Главы (полное наименование отдела)/Капитана с Центрального Командования обеспечивать порядок и управление отделом, обеспечивать сохранность вверяемых мне особо ценных предметов и снаряжения.
-
+
По прибытии Главы отдела/Капитана с Центрального Командования обязуюсь сдать повышенный доступ, особо ценные предметы и снаряжение.
=============================================
⠀[italic]Место для печатей[/italic]
@@ -248,7 +248,7 @@ doc-text-printer-application-employment =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в текущей должности (полное наименование должности), прошу назначить меня сотрудником (название отдела трудоустройства) в должности (полное наименование должности).
Обязуюсь следовать Стандартным Рабочим Процедурам отдела. Обязуюсь сдать рабочее снаряжение и экипировку отдела при переводе.
=============================================
@@ -265,7 +265,7 @@ doc-text-printer-letter-resignation =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в текущей должности (полное наименование должности), хочу уволится с отдела (название отдела) по причине (причина).
Обязуюсь заплатить штраф, установленный условиями расторжения срочного/бессрочного контракта, на станции Центрального Командования.
=============================================
@@ -282,11 +282,11 @@ doc-text-printer-application-access =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), прошу предоставить мне следующие доступы:
-
+
Причина получения повышенного доступа:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-application-equipment =
@@ -301,11 +301,11 @@ doc-text-printer-application-equipment =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное название должности), прошу выдать мне следующее снаряжение отдела (наименование отдела)/личное снаряжение:
-
+
Причина получения снаряжения:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-appeal =
@@ -320,12 +320,12 @@ doc-text-printer-appeal =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), прошу рассмотреть (ФИО), в должности (полное наименование должности) моё обращение.
Содержание обращения:
-
+
Причины его написания:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-evacuation-shuttle-request =
@@ -340,10 +340,10 @@ doc-text-printer-evacuation-shuttle-request =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Уважаемое Центральное Командование! Я, (ФИО), в должности (полное наименование должности), прошу запустить протоколы эвакуации и прислать эвакуационный шаттл, приняв решение об окончании смены.
Причина окончания смены:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-shuttle-registration-request =
@@ -358,16 +358,16 @@ doc-text-printer-shuttle-registration-request =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), прошу провести регистрацию шаттла в системе NanoTrasen для идентификации.
Размеры шаттла:
-
+
Класс шаттла:
-
+
Ответственный за постройку:
-
+
Запрашиваемое наименование:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-request-call-members-central-committee-dso =
@@ -382,11 +382,11 @@ doc-text-printer-request-call-members-central-committee-dso =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), прошу рассмотреть возможность вызова на станцию:
-
+
Причина вызова:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-request-to-establish-threat-level =
@@ -401,11 +401,11 @@ doc-text-printer-request-to-establish-threat-level =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), прошу рассмотреть возможность установления на станции уровня угрозы:
-
+
Причина установления кода:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-request-change-salary =
@@ -420,10 +420,10 @@ doc-text-printer-request-change-salary =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), прошу рассмотреть возможность повышения/понижения заработной платы на (сумма или количество процентов) сотруднику (ФИО) в должности (полное название должности)/отделу (наименование отдела)/текущей смене.
Причина повышения/понижения заработной платы:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-request-for-non-listed-employment =
@@ -438,18 +438,18 @@ doc-text-printer-request-for-non-listed-employment =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), прошу рассмотреть возможность принятия в рабочий штат текущей смены (ФИО) на внеперечневую должность.
Полное наименование должности:
-
+
Ответственный за работника глава или сотрудник:
-
+
Выполняемые работы в должности (СРП):
-
+
Предоставляемые доступы работнику:
-
+
Причина трудоустройства:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-request-for-promotion =
@@ -464,14 +464,14 @@ doc-text-printer-request-for-promotion =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), прошу рассмотреть возможность повышения (ФИО), в должности (полное наименование должности), согласно иерархии командования. Сотрудник получил необходимую для данной работы квалификацию.
Запрашиваемая должность:
-
+
Ответственный за работника глава или сотрудник:
-
+
Причина повышения:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-request-documents =
@@ -486,9 +486,9 @@ doc-text-printer-request-documents =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности Агента Внутренних Дел, прошу предоставить для проверки соответствия Корпоративному Закону копию/оригинал документов:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-request-euthanasia =
@@ -503,7 +503,7 @@ doc-text-printer-request-euthanasia =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), прошу содействие медицинского отдела в проведении эвтаназии в качестве врачебного лечения по причине (указать причину запроса). С последствиями данного решения ознакомлен, медицинским персоналом была установлена рациональность и гуманность данного решения. Претензий к к медицинскому отделу при соблюдении ими протоколов эвтаназии не имею.
По окончании процедуры прошу утилизировать тело путём (способ утилизации) при наличии на это возможности.
=============================================
@@ -520,10 +520,10 @@ doc-text-printer-request-construction-work =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), прошу провести строительные работы в (название отдела или объекта) по причине (причина запроса).
Перечень строительных работ:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-request-modernization =
@@ -538,10 +538,10 @@ doc-text-printer-request-modernization =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), прошу модернизировать приборы в (название отдела или объекта) по причине (причина запроса).
Перечень модернизации:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-complaint-violation-labor-rules =
@@ -556,9 +556,9 @@ doc-text-printer-complaint-violation-labor-rules =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), считаю, что в ходе работы отдела (наименование отдела) были допущены следующие нарушения:
-
+
Прошу провести внутреннюю проверку по данным фактам нарушений.
=============================================
⠀[italic]Место для печатей[/italic]
@@ -574,10 +574,10 @@ doc-text-printer-complaint-offense =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), считаю, что (ФИО), в должности (полное наименование должности), нарушил Корпоративный Закон, потому что (причина).
Произошедшее с моей точки зрения:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-permission-equipment =
@@ -592,9 +592,9 @@ doc-text-printer-permission-equipment =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности главы отдела (полное наименование отдела), разрешаю использовать (ФИО) в должности (полное наименование должности) следующее рабочее снаряжение отдела:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-permission-to-travel-in-case-of-threat =
@@ -609,12 +609,12 @@ doc-text-printer-permission-to-travel-in-case-of-threat =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), разрешаю сотруднику (ФИО) в должности (полное наименование должности) передвижение по станции с целью выполнения им рабочих обязанностей.
Уровни кодов угроз, при которых даётся данное разрешение:
-
+
Разрешённые части станции для местонахождения сотрудника (можно указать всю станцию):
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-search-permission =
@@ -629,10 +629,10 @@ doc-text-printer-search-permission =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), разрешаю произвести обыск (ФИО)/(полное наименование отдела), в должности (полное наименование должности).
Причина обыска:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-permission-to-carry-weapons =
@@ -647,14 +647,14 @@ doc-text-printer-permission-to-carry-weapons =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), разрешаю ношение оружия (ФИО), в должности (полное наименование должности), до тех пор, пока оно используется по назначению. В случае нарушения разрешение аннулируется, оружие изымается Службой Безопасности.
Оружие и тип патронов к нему:
-
+
Способ получения оружия и патронов к нему:
-
+
Причина выдачи разрешения:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-prescription-drug-authorization =
@@ -669,12 +669,12 @@ doc-text-printer-prescription-drug-authorization =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), разрешаю хранение и использование рецептурного препарата или наркотического препарата "(полное наименование вещества)" пациенту (ФИО), в должности (полное наименование должности).
Поставленный диагноз:
-
+
Причина выдачи препарата:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-permission-dispose-body =
@@ -689,10 +689,10 @@ doc-text-printer-permission-dispose-body =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), разрешаю утилизировать тело (ФИО), в должности (полное наименование должности) в связи с невозможностью его реанимации и клонирования.
Способ утилизации:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-construction-permit =
@@ -707,10 +707,10 @@ doc-text-printer-construction-permit =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), разрешаю произвести (ФИО), в должности (полное наименование должности), перепланировку части станции (указание места перепланировки) по причине (причина перепланировки).
Согласованный объём перепланировки:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-permission-to-extend-marriage =
@@ -725,7 +725,7 @@ doc-text-printer-permission-to-extend-marriage =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), даю своё разрешение на расширение брака, заключённого между:
(ФИО), в должности (полное наименование должности)
⠀...
@@ -748,9 +748,9 @@ doc-text-printer-order-dismissal =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), приказываю уволить сотрудника (ФИО) отдела (наименование отдела) в должности (полное наименование должности увольняемого) по причине:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-order-deprivation-access =
@@ -765,9 +765,9 @@ doc-text-printer-order-deprivation-access =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), приказываю лишить сотрудника (ФИО) в должности (полное наименование должности) следующего доступа(-ов):
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-order-encouragement =
@@ -782,9 +782,9 @@ doc-text-printer-order-encouragement =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности) награждаю (ФИО) в должности (полное наименование должности награждаемого) медалью/грамотой/памятной вещью/премией в размере (размер премии) за следующие заслуги:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-order-parole-prisoner =
@@ -799,7 +799,7 @@ doc-text-printer-order-parole-prisoner =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), разрешаю освободить заключённого под стражу (ФИО) в бриг/пермабриг. После выдачи условно-досрочного заключения заключённому под стражу будет выдана гражданская профессия с обязательной работой до конца смены.
Выдаваемая профессия:
=============================================
@@ -816,12 +816,12 @@ doc-text-printer-order-recognizing-rentience-creature =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
В ходе тестирования существа были выявлены признаки высшей мозговой деятельности и разумности данного существа, его способность мыслить, обучаться, понимание морали, наличие здравого смысла в поступках. Таким образом я, (ФИО), в должности (полное наименование должности), исходя из принципов равенства прав всех разумных существ, установленного ОПРС, признаю данное существо разумным.
Внешний вид существа:
-
+
Устанавливаемое полное имя существа:
-
+
Существо принято/не принято в качестве пассажира станции до окончания смены.
=============================================
⠀[italic]Место для печатей[/italic]
@@ -837,10 +837,10 @@ doc-text-printer-order-medical-intervention =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), распоряжаюсь провести медицинское вмешательство с целью (описание цели медицинского вмешательства), в отношении (ФИО) в должности (полное наименование должности).
Основание для проведения операции:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-product-manufacturing-order =
@@ -855,12 +855,12 @@ doc-text-printer-product-manufacturing-order =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), прошу произвести продукцию отделом (наименование отдела).
Перечень необходимых продуктов:
-
+
Причина заказа:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-order-purchase-resources-equipment =
@@ -875,13 +875,13 @@ doc-text-printer-order-purchase-resources-equipment =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Перечень товаров для заказа:
-
+
Место доставки товара:
-
+
Причина:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-ordering-special-equipment =
@@ -896,12 +896,12 @@ doc-text-printer-ordering-special-equipment =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), прошу предоставить специальное снаряжение станции от Центрального Командования.
Перечень запрашиваемого снаряжения:
-
+
Причина запроса:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-order-purchase-weapons =
@@ -916,10 +916,10 @@ doc-text-printer-order-purchase-weapons =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), произвожу заказ боевого оружия и (или) боевых приспособлений через отдел снабжения.
Причина заказа:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-certificate =
@@ -934,9 +934,9 @@ doc-text-printer-certificate =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
(ФИО), в должности (полное наименование должности) награждается грамотой за следующие заслуги:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-certificate-advanced-training =
@@ -951,7 +951,7 @@ doc-text-printer-certificate-advanced-training =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности главы отдела (полное наименование отдела), свидетельствую, что сотрудник (ФИО) в должности (должность сотрудника), успешно завершил образовательный курс "(название курса)" и был аттестован.
=============================================
⠀[italic]Место для печатей[/italic]
@@ -967,7 +967,7 @@ doc-text-printer-certificate-offense =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), свидетельствую о правонарушениях/самолично признаюсь в совершении правонарушений, предусмотренных статьями:
(перечисление статей)
По данному инциденту могу пояснить следующее.
@@ -977,7 +977,7 @@ doc-text-printer-certificate-offense =
Характер и размер вреда, причинённого преступлением:
Пособники в преступлении:
Полная хронология событий:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-death-certificate =
@@ -992,14 +992,14 @@ doc-text-printer-death-certificate =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
ФИО умершего:
Должность умершего:
Раса:
Пол:
Причина смерти:
Возможность проведения реанимации или клонирования:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-marriage-certificate =
@@ -1014,13 +1014,13 @@ doc-text-printer-marriage-certificate =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), заключаю брак между:
⠀(ФИО), в должности (полное наименование должности)
⠀...
⠀(ФИО), в должности (полное наименование должности)
После заключения брака брачующимся были присвоены следующие полные имена:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-divorce-certificate =
@@ -1035,15 +1035,15 @@ doc-text-printer-divorce-certificate =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), расторгаю брак между:
(ФИО), в должности (полное наименование должности)
⠀...
(ФИО), в должности (полное наименование должности)
После расторжения брака бывшим супругам были присвоены следующие полные имена:
-
+
Разделение имущества было произведено следующим образом:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-closing-indictment =
@@ -1058,14 +1058,14 @@ doc-text-printer-closing-indictment =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), разрешаю произвести арест (ФИО), в должности (полное наименование должности) в связи с подозрением в совершении данным лицом следующих правонарушений:
-
+
В ходе предварительного следствия были обнаружены доказательства, указывающие на совершение правонарушения данным лицом.
Прямые доказательства:
-
+
Косвенные доказательства:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-sentence =
@@ -1080,7 +1080,7 @@ doc-text-printer-sentence =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное название должности), выношу приговор согласно данным мне полномочиям в отношении (ФИО), в должности (полное название должности).
Данное лицо нарушило следующие статьи Корпоративного Закона:
(перечисление статей)
@@ -1103,14 +1103,14 @@ doc-text-printer-judgment =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), выношу решение по судебному разбирательству в отношении (ФИО), в должности (полное наименование должности).
Предъявляемые правонарушения:
-
+
Решение приговора Службы Безопасности:
-
+
Проведённое до судебного разбирательства время ареста:
-
+
Данное лицо нарушило следующие статьи Корпоративного Закона:
(перечисление статей)
С учётом всех смягчающих и отягчающих обстоятельств, правовое наказание данного лица представлено в виде:
@@ -1120,7 +1120,7 @@ doc-text-printer-judgment =
Срок заключения под стражу отсчитывается с:
(время начала заключения)
Моё решение обосновано (тем, что):
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-statement-health =
@@ -1135,18 +1135,18 @@ doc-text-printer-statement-health =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Пациент (ФИО), в должности (полное наименование должности), был направлен на медицинское обследование в связи с (причина прохождения обследования). Был произведён полный осмотр пациента, проведены необходимые исследования и анализы.
Состав врачебной комиссии:
(ФИО врача, полное наименование должности или специализации)
Состояние пациента при поступлении:
-
+
Поставленный диагноз:
-
+
Психологическое состояние пациента:
-
+
Оказанное лечение в ходе госпитализации:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-decision-to-start-trial =
@@ -1161,10 +1161,10 @@ doc-text-printer-decision-to-start-trial =
Время от начала смены и дата:
Составитель документа:
Должность составителя:
-
+
Я, (ФИО), в должности (полное наименование должности), сообщаю о начале судебного разбирательства по делу (ФИО) в связи со сложностью и неоднозначностью дела.
Предъявляемые правонарушения:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-error-loading-form-header =
@@ -1178,7 +1178,7 @@ doc-text-printer-error-loading-form-header =
=============================================
Время от начала смены и дата:
Позывной Агента:
-
+
Полное содержание документа со всей необходимой информацией и описанием
=============================================
⠀[italic]Место для печатей[/italic]
@@ -1193,10 +1193,10 @@ doc-text-printer-notice-of-liquidation =
=============================================
Время от начала смены и дата:
Позывной агента:
-
+
Уважаемый (ФИО), в должности (полное наименование должности)! Руководством Синдиката принято решение о вашей немедленной ликвидации в ходе данной смены. Просим заранее подготовить завещание и направить его Медицинскому отделу станции. Уничтожение вашего тела будет произведено силами Синдиката.
Причина ликвидации:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-business-deal =
@@ -1210,11 +1210,11 @@ doc-text-printer-business-deal =
=============================================
Время от начала смены и дата:
Позывной агента:
-
+
Синдикат любезно предлагает заключить сделку между станцией и агентом (позывной агента). Со стороны станции необходимо:
-
+
Причина выполнения условий сделки:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-note-beginning-military-actions =
@@ -1228,10 +1228,10 @@ doc-text-printer-note-beginning-military-actions =
=============================================
Время от начала смены и дата:
Позывной агента:
-
+
Неуважаемые корпоративные крысы NanoTrasen! Синдикат официально объявляет о начале военных действий с вами, а также о начале операции по вашему истреблению.
Причина предъявления ноты:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
doc-text-printer-report-accomplishment-goals =
@@ -1245,9 +1245,9 @@ doc-text-printer-report-accomplishment-goals =
=============================================
Время от начала смены и дата:
Позывной агента:
-
+
Я, (позывной агента), успешно выполнил поставленные передо мной руководством Синдиката цели. Прошу принять отчёт о выполнении.
Отчёт:
-
+
=============================================
⠀[italic]Место для печатей[/italic]
diff --git a/Resources/Locale/ru-RU/guidebook/food.ftl b/Resources/Locale/ru-RU/guidebook/food.ftl
new file mode 100644
index 0000000000..0204494702
--- /dev/null
+++ b/Resources/Locale/ru-RU/guidebook/food.ftl
@@ -0,0 +1,13 @@
+guidebook-food-name = [bold][color={ $color }]{ CAPITALIZE($name) }[/color][/bold]
+guidebook-food-unknown-proto = Неизвестный прототип
+guidebook-food-sources-header = Источники
+guidebook-food-sources-ent-wrapper = { $name }
+guidebook-food-reagents-header = Химический состав
+guidebook-food-processing-butchering = Нарежте
+guidebook-food-processing-slicing = Слайсуйте
+guidebook-food-processing-cooking = Разогрейте на { $time }сек
+guidebook-food-processing-reaction = Смешайте
+guidebook-food-processing-recipe = { $ingredients }
+guidebook-food-ingredient-solid = добавьте { $amount } { $name }
+guidebook-food-ingredient-liquid = добавьте { $amount }u { $name }
+guidebook-food-output = { $name } ({ $number })
diff --git a/Resources/Locale/ru-RU/medical/components/penlight.ftl b/Resources/Locale/ru-RU/medical/components/penlight.ftl
index 01dd27482e..c29b735765 100644
--- a/Resources/Locale/ru-RU/medical/components/penlight.ftl
+++ b/Resources/Locale/ru-RU/medical/components/penlight.ftl
@@ -1,4 +1,5 @@
penlight-off = Свет фонарика выключен
+penlight-cannot-examine-self = Вы не можете осмотреть себя.
pen-light-exam-title = Диагностический фонарик
pen-light-window-entity-eyes-text = { $entityName }'s conditions:
pen-light-window-no-patient-data-text = Нет данных о пациенте.
diff --git a/Resources/Locale/ru-RU/station-goal/station-goals.ftl b/Resources/Locale/ru-RU/station-goal/station-goals.ftl
index 4845c1f4be..e056496edf 100644
--- a/Resources/Locale/ru-RU/station-goal/station-goals.ftl
+++ b/Resources/Locale/ru-RU/station-goal/station-goals.ftl
@@ -14,34 +14,34 @@ station-goal-xeno =
1. Иметь как минимум один слой защиты из армированного стекла;
2. Хотя бы одна из камер должна быть оборудована системой воздухоснабжения;
3. На входе должна быть предусмотрена система циклических шлюзов.
-
+
Попросите утилизаторов поймать как минимум 2 представителей экзотической фауны (например, космического карпа) и перевезти их в вышеописанные камеры.
-
+
Требования к захвату:
1. Экзотическая фауна не должна иметь тяжелых повреждений на момент помещения в научно-исследовательское отделение;
2. При гибели отловленной фауны вы обязаны поймать другую, клонирование строго запрещено.
-
+
После того, как вы соберете необходимую фауну, вы должны изучить её и написать отчёт о свойствах и способностях.
Отчет должен быть заверен печатью капитана, старшего инженера и главы научно-исследовательского отдела с последующей отправкой документа по факсу Центральному Командованию.
-
+
Требования к опыту:
1. Опыт должен быть подробно документирован;
2. Тестовые мероприятия могут включать в себя: работу с газами, дымом, пеной или введение экспериментальных реагентов (например, когнизина) в пойманную фауну.
station-goal-museum =
Уважаемое командование станции, цель вашей смены – построить музей, экспонатами для которого станут уникальные предметы, собранные со станции.
-
+
Ниже приведены требования к оформлению музея:
1. Музей должен быть конструктивно связан со станцией защищённым коридором или располагаться внутри него;
2. Помещения должны иметь размеры, позволяющие беспрепятственно принимать большое количество посетителей;
3. Помещения должны быть обеспечены нормальной атмосферой, вентиляцией и стабильным электроснабжением;
4. Оформление помещения должно быть приятным визуально;
5. Отсеки для экспонатов должны быть усилены соответственно тому, что в них содержится.
-
+
Требования к экспонату:
1. Экспонаты должны быть уникальными в своём роде;
2. Каждый отдел обязан предоставить в музейный фонд не менее 2 экспонатов;
3. Общее количество экспонатов должно быть не менее 20.
-
+
Экспонаты могут включать в себя:
1. Экзотические напитки и блюда, требующие необычного способа производства и/или нестандартных ингредиентов;
2. Экзотическую материя или необычное вещество;
@@ -53,11 +53,11 @@ station-goal-museum =
8. Мутировавшие биологические организмы;
9. Одомашненные дикие животные или разумные негуманоидные формы жизни;
10. Найденные сокровища или предметы, к которым нет свободного доступа.
-
+
По завершении строительства музея необходимо предоставить персоналу не менее 20 минут свободного от работы времени для посещения музея.
station-goal-area =
Уважаемое командование станции, цель вашей смены — повысить эффективность использования пространства станции.
-
+
Требуется привести заброшенные помещения в надлежащий вид и найти им применение.
Каждое подразделение должно оборудовать и эффективно использовать площадь прилегающих тоннелей технического обслуживания.
Достаточно просторные служебные тоннели необходимо переоборудовать в жилые помещения.
@@ -65,23 +65,23 @@ station-goal-area =
Кроме того, необходимо предусмотреть общественный, хорошо освещенный коридор, соединяющий все отреставрированные отсеки и новые жилые блоки.
station-goal-bureaucraticerror =
ДОСТУП К ДАННОМУ ДОКУМЕНТУ ЗАПРЕЩЁН ЛИЦАМ, НЕ ЯВЛЯЮЩИМСЯ ГЛАВАМИ ОТДЕЛОВ ИЛИ ВЫСШИМИ ЛИЦАМИ НА СТАНЦИИ.
-
+
Уважаемое командование станции, сообщаем Вам, что цель вашей смены была утрачена в результате бюрократической ошибки.
В связи с этим у вас есть возможность самостоятельно назначить новую цель для станции.
-
+
Новые требования к цели:
1. Актуальность: цель должна быть актуальной и актуальной для текущей ситуации;
2. Вовлеченность: цель должна требовать сотрудничества как можно большего количества отделов;
3. Масштабность: Цель должна включать достаточный, но не чрезмерный объем работы для обеспечения эффективного выполнения задачи.
-
+
Напоминаем, что распространение содержания данного документа лицам, указанным выше по тексту, строго запрещено из-за возможности дискредитации руководства корпорации.
Поэтому, чтобы предъявить экипажу новую цель, командный состав должен обратиться к Центральному Командованию для одобрения идей.
station-goal-anomalies =
Уважаемое командование станции, цель вашей смены — предоставить НаноТрейзен новую информацию об аномалиях.
-
+
Необходимо провести экспериментальные исследования, направленные на проверку последствий обрушения как минимум 4-х уникальных аномалий.
Во время или после экспериментов необходимо изолировать и документировать вышеупомянутые аномалии.
-
+
Требования к документам:
1. Официальное название аномалии;
2. Физическое описание;
@@ -89,11 +89,11 @@ station-goal-anomalies =
4. Реакция аномалии на различные частицы;
5. Последствия коллапса;
6. Местоположение аномалии.
-
+
Документ необходимо заверить печатью руководителя научно-исследовательского отдела и отправить по факсу в Центральное Командование.
station-goal-combat =
Уважаемое командование станции, в связи с увеличением атак пиратских кораблей в этом секторе, целью вашей смены является повышение общей боеготовности станции.
-
+
Необходимо:
1. Организовать досмотр каждого разумного существа и груза, прибывающего на станцию или покидающего её.
2. Построить или модифицировать существующий контрольно-пропускной пункт при прибытии и отбытии. КПП должен иметь возможность полностью блокировать порты со стороны основной части станции.
@@ -115,7 +115,7 @@ station-goal-combat =
Если боксерского ринга нет, необходимо его создать.
station-goal-shuttle =
Уважаемое командование станции, цель вашей смены — построить пилотируемый космический шаттл.
-
+
Требования качества:
1. Шаттл должен иметь запираемый мостик;
Медицинский кабинет с необходимыми медикаментами и химическим оборудованием;
@@ -124,7 +124,7 @@ station-goal-shuttle =
2. Между стыковочным шлюзом и основными помещениями должно быть промежуточное помещение для предотвращения возможной разгерметизации.
3. Шаттл должен иметь стандартную атмосферу, а также несколько баллонов с воздухом и газом для её поддержания.
4. Шаттл должен иметь возможность двигаться во всех направлениях и достаточно хорошо поворачиваться.
-
+
По завершении необходимо набрать экипаж шаттла из персонала станции.
В состав экипажа шаттла должны входить:
1 пилот;
@@ -133,68 +133,68 @@ station-goal-shuttle =
1 сотрудник службы безопасности.
station-goal-singularity =
Уважаемое командование станции, цель вашей смены — построить генератор на основе гравитационной сингулярности.
-
+
Требования к постройке следующие:
1. Сооружение должно располагаться на значительном расстоянии от станции.
2. Сооружение должно быть защищено от метеоритов и космического мусора.
3. Удерживающее поле должно предотвращать потерю сингулярности 3-го класса.
station-goal-solarpanels =
Уважаемое командование станции, цель вашей смены – организация системы резервного питания станции.
-
+
Требуется следующая работа:
1. Построить две новые ветки солнечных панелей.
2. Выделите место для отсека с запасным оборудованием.
В этом отсеке должно быть размещено не менее трех полностью заряженных СМЭСов, которые без необходимости не следует подключать к основной энергосистеме станции.
station-goal-artifacts =
Уважаемое командование станции, цель вашей смены — предоставить НаноТрейзен новую информацию об инопланетных артефактах.
-
+
Цель вашей смены обнаружить, исследовать и доставить космические артефакты.
Для её выполнения будет необходима работа утилизаторов для поиска и доставки артефактов с обломков вокруг станции.
После доставки их необходимо передать в специальном контейнере отделу исследования для изучения и документирования их свойств.
Необходимо доставить на шаттле эвакуации в специальных контейнерах как минимум 2 полностью изученных и задокументированных артефакта.
-
+
Рекомендуемая информация для документа:
1. Название артефакта.
2. Физическое описание.
3. Свойства объекта.
4. Место, где был найден артефакт.
5. Дополнительные примечания.
-
+
Документ должен быть заверен печатью руководителя научно-исследовательского отдела.
station-goal-storage =
Уважаемое командование станции, цель вашей смены — построить орбитальное хранилище припасов и технологий.
-
+
Хранилище должно быть размещено в космосе отдельно от основной станции, проследите за прочностью его конструкции, случайный метеорит не должен повредить его.
-
+
В хранилище необходимо разместить 4 ящика с, соответственно:
- Передовыми медикаментами;
- Запасами лучших семян;
- Ящик-холодильником для продуктов с высокой пищевой ценностью;
- Ценные, но не уникальные платы.
-
+
Проследите за сохранностью содержимого в хранилище до окончания смены.
station-goal-zoo =
Уважаемое командование станции, цель вашей смены – увеличить рекреацию персонала станции.
-
+
Необходимо построить зоопарк не менее чем с 5 вольерами, в которых содержатся разные виды животных, заказанные в отделе снабжения.
Обеспечьте животных едой, хотя бы одним чистоботом в каждом вольере и всем необходимым для жизни в зависимости от вида животного.
Также необходимо создать благоприятный климат в вольере, путём изменения количества водяного пара в камере атмосферными техниками.
-
+
По завершении строительства зоопарка необходимо предоставить персонал не менее 20 минут свободного от работы времени для посещения нового зоопарка.
station-goal-labor =
Уважаемое командование станции, цель вашей смены – повышение мотивации личного состава к росту производительности труда.
-
+
Для этого необходимо, чтобы каждый из руководителей в течение смены внимательно следил за выполнением своих сотрудников обязанностей и оценивал их.
По истечении установленного Командованием времени для оценки в каждом из подразделений должен быть выбран лучший, по мнению главы, сотрудник, которого пригласят на обед, где сотрудники Командования будут обязаны наградить его медалью и особым призом.
Главы должны предоставить отчет с указанием должности и заслуг работника за смену.
К ужину следует подготовить напитки и еду, а также, по возможности, несколько развлекательных мероприятий, допускающих присутствие актёров и музыкантов.
На время торжества столовая или иное место, выбранное для проведения мероприятия, должно быть недоступно для остальных членов экипажа.
-
+
Продолжительность смены для более точной оценки работы личного состава должна устанавливаться Центральным Командованием.
После ужина следует объявить об окончании смены и вызвать эвакуационный шаттл.
station-goal-lectures =
Уважаемое командование станции, целью вашей смены является проведение ряда мероприятий в рамках плана корпорации по повышению знаний её сотрудников.
-
+
Командному составу поручено организовать площадку для публичных лекций.
Зал должен быть оборудован достаточно большой сценой для выступающих посередине, подиумом для докладчика с одной стороны, большим количеством сидячих мест для гостей и специальной стойкой/столом для брошюр у входа.
Также необходимо выбрать ведущего/организатора мероприятия.
@@ -202,5 +202,5 @@ station-goal-lectures =
Отобранные сотрудники под руководством главы отдела должны подготовить короткую лекцию/презентацию на конкретную тему в рамках своей специализации (например, вред наркотиков и причина их криминализации, влияние курения на организм, актерская деятельность, ценообразование продуктов, кулинария и т. д.), желательно с демонстрационными материалами, и не менее чем 10 брошюрами, на которых должны быть указаны тезисы лекции.
В указанное командованием время экипаж должен собраться на месте проведения мероприятия, где будут читаться лекции.
Между лекциями могут быть перерывы, чтобы гости могли прочитать брошюры и отдохнуть.
-
+
После окончания мероприятия следует объявить об окончании смены и вызвать эвакуационный шаттл.
diff --git a/Resources/Locale/ru-RU/traits/traits.ftl b/Resources/Locale/ru-RU/traits/traits.ftl
index a6d5e212e3..d0c52f4cc9 100644
--- a/Resources/Locale/ru-RU/traits/traits.ftl
+++ b/Resources/Locale/ru-RU/traits/traits.ftl
@@ -157,7 +157,7 @@ trait-description-LatentPsychic =
Вполне возможно, что за вами охотятся потусторонние силы, поэтому подумайте о том, чтобы сохранить свои способности в секрете.
trait-name-PsionicInsulation = Изменение формы сигнала
trait-description-PsionicInsulation =
- Вы - автомат из плоти и крови, оживляемый нейротрансмиттерами. Внутри вашего черепа находится полуторакилограммовый мешок мяса, дающий вам разумным. Согласно современной теории познания, вы даже не софонт.
+ Вы - автомат из плоти и крови, оживляемый нейротрансмиттерами. Внутри вашего черепа находится полуторакилограммовый мешок мяса, дающий вам разум. Согласно современной теории познания, вы даже не существо с правами.
Из хороших новостей то, что вы невосприимчивы к большинству положительных и отрицательных воздействий экстрасенсорных способностей.
У этого заболевания могут быть и другие, неизвестные последствия.
trait-name-NaturalTelepath = Врождённая телепатия
diff --git a/Resources/Locale/ru-RU/zombies/zombie.ftl b/Resources/Locale/ru-RU/zombies/zombie.ftl
index 25c86770bc..6e2403212c 100644
--- a/Resources/Locale/ru-RU/zombies/zombie.ftl
+++ b/Resources/Locale/ru-RU/zombies/zombie.ftl
@@ -2,7 +2,7 @@ zombie-transform = { CAPITALIZE($target) } теперь зомби!
zombie-infection-greeting = Вы стали зомби. Ваша задача - искать и заражать живых. Работайте сообща со своими воскресшими коллегами, чтобы одолеть оставшихся членов экипажа.
zombie-generic = зомби
# Corvax-Zombies
-zombie-name-prefix = Зараженный {$target}
+zombie-name-prefix = Зараженный { $target }
zombie-role-desc = Зловещий мертвец.
zombie-role-rules = Вы - антагонист. Ищите и кусайте живых людей, чтобы заразить их и превратить в зомби. Работайте сообща с другими зомби, чтобы захватить станцию.
zombie-permadeath = В этот раз вы мертвы по-настоящему.
diff --git a/Resources/Prototypes/CharacterItemGroups/cargoGroups.yml b/Resources/Prototypes/CharacterItemGroups/cargoGroups.yml
new file mode 100644
index 0000000000..6b12652b33
--- /dev/null
+++ b/Resources/Prototypes/CharacterItemGroups/cargoGroups.yml
@@ -0,0 +1,19 @@
+- type: characterItemGroup
+ id: LoadoutOuterCargo
+ items:
+ - type: loadout
+ id: LoadoutCargoOuterWinterCargo
+ - type: loadout
+ id: LoadoutCargoOuterWinterMiner
+
+- type: characterItemGroup
+ id: LoadoutNeckCargo
+ items:
+ - type: loadout
+ id: LoadoutCargoNeckGoliathCloak
+
+- type: characterItemGroup
+ id: LoadoutShoesCargo
+ items:
+ - type: loadout
+ id: LoadoutCargoShoesBootsWinterCargo
diff --git a/Resources/Prototypes/CharacterItemGroups/engineeringGroups.yml b/Resources/Prototypes/CharacterItemGroups/engineeringGroups.yml
new file mode 100644
index 0000000000..6db873cecf
--- /dev/null
+++ b/Resources/Prototypes/CharacterItemGroups/engineeringGroups.yml
@@ -0,0 +1,39 @@
+- type: characterItemGroup
+ id: LoadoutUniformsEngineering
+ items:
+ - type: loadout
+ id: LoadoutEngineeringUniformHazard
+ - type: loadout
+ id: LoadoutEngineeringUniformJumpskirtSenior
+ - type: loadout
+ id: LoadoutEngineeringUniformJumpsuitSenior
+
+- type: characterItemGroup
+ id: LoadoutOuterEngineering
+ items:
+ - type: loadout
+ id: LoadoutEngineeringOuterHazard
+ - type: loadout
+ id: LoadoutEngineeringChickenSuit
+
+- type: characterItemGroup
+ id: LoadoutHeadEngineering
+ items:
+ - type: loadout
+ id: LoadoutEngineeringHeadBeret
+ - type: loadout
+ id: LoadoutEngineeringHeadHardhatBlue
+ - type: loadout
+ id: LoadoutEngineeringHeadHardhatOrange
+ - type: loadout
+ id: LoadoutEngineeringHeadHardhatRed
+ - type: loadout
+ id: LoadoutEngineeringHeadHardhatWhite
+ - type: loadout
+ id: LoadoutEngineeringHeadHardhatYellow
+
+- type: characterItemGroup
+ id: LoadoutEyesEngineering
+ items:
+ - type: loadout
+ id: LoadoutEngineeringEyesMeson
\ No newline at end of file
diff --git a/Resources/Prototypes/CharacterItemGroups/medicalGroups.yml b/Resources/Prototypes/CharacterItemGroups/medicalGroups.yml
new file mode 100644
index 0000000000..396f07290f
--- /dev/null
+++ b/Resources/Prototypes/CharacterItemGroups/medicalGroups.yml
@@ -0,0 +1,101 @@
+- type: characterItemGroup
+ id: LoadoutUniformsMedical
+ items:
+ - type: loadout
+ id: LoadoutMedicalUniformScrubsBlue
+ - type: loadout
+ id: LoadoutMedicalUniformScrubsGreen
+ - type: loadout
+ id: LoadoutMedicalUniformScrubsPurple
+ - type: loadout
+ id: LoadoutMedicalUniformScrubsCyan
+ - type: loadout
+ id: LoadoutMedicalUniformScrubsBlack
+ - type: loadout
+ id: LoadoutMedicalUniformScrubsPink
+ - type: loadout
+ id: LoadoutMedicalUniformScrubsCybersun
+ - type: loadout
+ id: LoadoutMedicalUniformParamedicJumpsuit
+ - type: loadout
+ id: LoadoutMedicalUniformParamedicJumpskirt
+ - type: loadout
+ id: LoadoutMedicalUniformJumpskirtSenior
+ - type: loadout
+ id: LoadoutMedicalUniformJumpsuitSenior
+ - type: loadout
+ id: LoadoutMedicalUniformJumpsuitChemShirt
+
+- type: characterItemGroup
+ id: LoadoutOuterMedical
+ items:
+ - type: loadout
+ id: LoadoutMedicalOuterLabcoat
+ - type: loadout
+ id: LoadoutMedicalOuterCybersunWindbreaker
+ - type: loadout
+ id: LoadoutMedicalOuterLabcoatChem
+ - type: loadout
+ id: LoadoutMedicalOuterApronChemist
+
+- type: characterItemGroup
+ id: LoadoutGlovesMedical
+ items:
+ - type: loadout
+ id: LoadoutMedicalGlovesNitrile
+ - type: loadout
+ id: LoadoutMedicalHandsGlovesChemist
+
+- type: characterItemGroup
+ id: LoadoutNeckMedical
+ items:
+ - type: loadout
+ id: LoadoutMedicalNeckStethoscope
+ - type: loadout
+ id: LoadoutMedicalBedsheetMedical
+ - type: loadout
+ id: LoadoutMedicalNeckTieChem
+
+- type: characterItemGroup
+ id: LoadoutHeadMedical
+ items:
+ - type: loadout
+ id: LoadoutMedicalHeadNurse
+ - type: loadout
+ id: LoadoutMedicalHeadBeretSeniorPhysician
+ - type: loadout
+ id: LoadoutMedicalHeadSurgcapBlue
+ - type: loadout
+ id: LoadoutMedicalHeadSurgcapPurple
+ - type: loadout
+ id: LoadoutMedicalHeadSurgcapGreen
+ - type: loadout
+ id: LoadoutMedicalHeadSurgcapCyan
+ - type: loadout
+ id: LoadoutMedicalHeadSurgcapBlack
+ - type: loadout
+ id: LoadoutMedicalHeadSurgcapPink
+ - type: loadout
+ id: LoadoutMedicalHeadSurgcapWhite
+ - type: loadout
+ id: LoadoutMedicalHeadSurgcapCybersun
+
+- type: characterItemGroup
+ id: LoadoutEyesMedical
+ items:
+ - type: loadout
+ id: LoadoutMedicalEyesHudMedical
+ - type: loadout
+ id: LoadoutMedicalEyesEyepatchHudMedical
+ - type: loadout
+ id: LoadoutMedicalEyesHudMedicalPrescription
+ - type: loadout
+ id: LoadoutMedicalEyesGlassesChemical
+ - type: loadout
+ id: LoadoutMedicalEyesGlassesChemist
+
+- type: characterItemGroup
+ id: LoadoutShoesMedical
+ items:
+ - type: loadout
+ id: LoadoutMedicalShoesEnclosedChem
diff --git a/Resources/Prototypes/CharacterItemGroups/musicianInstrumentsGroups.yml b/Resources/Prototypes/CharacterItemGroups/musicianInstrumentsGroups.yml
new file mode 100644
index 0000000000..ccad399e74
--- /dev/null
+++ b/Resources/Prototypes/CharacterItemGroups/musicianInstrumentsGroups.yml
@@ -0,0 +1,31 @@
+- type: characterItemGroup
+ id: LoadoutMusicianInstruments
+ maxItems: 3
+ items:
+ - type: loadout
+ id: LoadoutItemSynthesizerInstrumentMusician
+ - type: loadout
+ id: LoadoutItemMicrophoneInstrumentMusician
+ - type: loadout
+ id: LoadoutItemKalimbaInstrumentMusician
+ - type: loadout
+ id: LoadoutItemTrumpetInstrumentMusician
+ - type: loadout
+ id: LoadoutItemElectricGuitarInstrumentMusician
+ - type: loadout
+ id: LoadoutItemBassGuitarInstrumentMusician
+ - type: loadout
+ id: LoadoutItemRockGuitarInstrumentMusician
+ - type: loadout
+ id: LoadoutItemAcousticGuitarInstrumentMusician
+ - type: loadout
+ id: LoadoutItemViolinInstrumentMusician
+ - type: loadout
+ id: LoadoutItemHarmonicaInstrumentMusician
+ - type: loadout
+ id: LoadoutItemAccordionInstrumentMusician
+ - type: loadout
+ id: LoadoutItemFluteInstrumentMusician
+ - type: loadout
+ id: LoadoutItemOcarinaInstrumentMusician
+
diff --git a/Resources/Prototypes/CharacterItemGroups/securityGroups.yml b/Resources/Prototypes/CharacterItemGroups/securityGroups.yml
new file mode 100644
index 0000000000..edd5f8700a
--- /dev/null
+++ b/Resources/Prototypes/CharacterItemGroups/securityGroups.yml
@@ -0,0 +1,142 @@
+- type: characterItemGroup
+ id: LoadoutUniformsSecurity
+ items:
+ - type: loadout
+ id: LoadoutSecurityUniformJumpsuitBlue
+ - type: loadout
+ id: LoadoutSecurityUniformJumpskirtBlue
+ - type: loadout
+ id: LoadoutSecurityUniformJumpsuitGrey
+ - type: loadout
+ id: LoadoutSecurityUniformJumpskirtGrey
+ - type: loadout
+ id: LoadoutSecurityUniformJumpsuitSenior
+ - type: loadout
+ id: LoadoutSecurityUniformJumpskirtSenior
+ - type: loadout
+ id: LoadoutSecurityUniformJumpsuitWardenBlue
+ - type: loadout
+ id: LoadoutSecurityUniformJumpskirtWardenBlue
+ - type: loadout
+ id: LoadoutSecurityUniformJumpsuitWardenGrey
+ - type: loadout
+ id: LoadoutSecurityUniformJumpskirtWardenGrey
+ - type: loadout
+ id: LoadoutSecurityUniformJumpsuitHoSBlue
+ - type: loadout
+ id: LoadoutSecurityUniformJumpskirtHoSBlue
+ - type: loadout
+ id: LoadoutSecurityUniformJumpsuitHoSGrey
+ - type: loadout
+ id: LoadoutSecurityUniformJumpskirtHoSGrey
+ - type: loadout
+ id: LoadoutUniformJumpsuitSecFormal
+ - type: loadout
+ id: LoadoutUniformJumpsuitSecSummer
+
+- type: characterItemGroup
+ id: LoadoutOuterSecurity
+ items:
+ - type: loadout
+ id: LoadoutClothingOuterArmorPlateCarrier
+ - type: loadout
+ id: LoadoutClothingOuterArmorDuraVest
+ - type: loadout
+ id: LoadoutClothingOuterCoatDetective
+ - type: loadout
+ id: LoadoutOuterVestDetective
+ - type: loadout
+ id: LoadoutClothingOuterCoatWarden
+ - type: loadout
+ id: LoadoutClothingOuterCoatHoSTrench
+ - type: loadout
+ id: LoadoutClothingOuterWinterHoS
+
+- type: characterItemGroup
+ id: LoadoutGlovesSecurity
+ items:
+ - type: loadout
+ id: LoadoutClothingHandsGlovesNitrile
+
+- type: characterItemGroup
+ id: LoadoutNeckSecurity
+ items:
+ - type: loadout
+ id: LoadoutClothingNeckCloakHos
+ - type: loadout
+ id: LoadoutClothingNeckMantleHOS
+ - type: loadout
+ id: LoadoutBedsheetBrigmedic
+
+- type: characterItemGroup
+ id: LoadoutHeadSecurity
+ items:
+ - type: loadout
+ id: LoadoutSecurityHeadHatBeret
+ - type: loadout
+ id: LoadoutClothingHeadHelmetBasic
+ - type: loadout
+ id: LoadoutClothingHeadHatBeretBrigmedic
+ - type: loadout
+ id: LoadoutClothingHeadHatBeretCorpsman
+ - type: loadout
+ id: LoadoutClothingHeadHatBeretWarden
+ - type: loadout
+ id: LoadoutClothingHeadHatBeretHoS
+ - type: loadout
+ id: LoadoutClothingHeadHelmetInsulated
+
+- type: characterItemGroup
+ id: LoadoutMaskSecurity
+ items:
+ - type: loadout
+ id: LoadoutSecurityMaskGasSwat
+
+- type: characterItemGroup
+ id: LoadoutBeltSecurity
+ items:
+ - type: loadout
+ id: LoadoutSecurityBeltWebbing
+ - type: loadout
+ id: LoadoutClothingBeltCorpsmanWebbing
+ - type: loadout
+ id: LoadoutClothingBeltSecurity
+
+- type: characterItemGroup
+ id: LoadoutEyesSecurity
+ items:
+ - type: loadout
+ id: LoadoutSecurityEyesHudSecurity
+ - type: loadout
+ id: ClothingEyesGlassesSunglasses
+ - type: loadout
+ id: LoadoutSecurityEyesEyepatchHudSecurity
+ - type: loadout
+ id: LoadoutSecurityEyesHudSecurityPrescription
+ - type: loadout
+ id: LoadoutClothingEyesGlassesSecurity
+
+- type: characterItemGroup
+ id: LoadoutShoesSecurity
+ items:
+ - type: loadout
+ id: LoadoutSecurityShoesJackboots
+ - type: loadout
+ id: LoadoutClothingShoesBootsCombat
+
+- type: characterItemGroup
+ maxItems: 5 # No clue what the actual number should be.
+ id: LoadoutEquipmentSecurity
+ items:
+ - type: loadout
+ id: LoadoutSecurityCombatKnife
+ - type: loadout
+ id: LoadoutSecurityFlash
+ - type: loadout
+ id: LoadoutSecurityDisabler
+ - type: loadout
+ id: LoadoutMagazinePistolRubber
+ - type: loadout
+ id: LoadoutSpeedLoaderMagnumRubber
+
+
diff --git a/Resources/Prototypes/CharacterItemGroups/serviceGroups.yml b/Resources/Prototypes/CharacterItemGroups/serviceGroups.yml
new file mode 100644
index 0000000000..305375930c
--- /dev/null
+++ b/Resources/Prototypes/CharacterItemGroups/serviceGroups.yml
@@ -0,0 +1,80 @@
+- type: characterItemGroup
+ id: LoadoutUniformsService
+ items:
+ - type: loadout
+ id: LoadoutServiceClownOutfitJester
+ - type: loadout
+ id: LoadoutServiceClownOutfitJesterAlt
+ - type: loadout
+ id: LoadoutServiceBartenderUniformPurple
+ - type: loadout
+ id: LoadoutServiceBotanistUniformOveralls
+ - type: loadout
+ id: LoadoutServiceLawyerUniformBlueSuit
+ - type: loadout
+ id: LoadoutServiceLawyerUniformBlueSkirt
+ - type: loadout
+ id: LoadoutServiceLawyerUniformRedSuit
+ - type: loadout
+ id: LoadoutServiceLawyerUniformRedSkirt
+ - type: loadout
+ id: LoadoutServiceLawyerUniformPurpleSuit
+ - type: loadout
+ id: LoadoutServiceLawyerUniformPurpleSkirt
+ - type: loadout
+ id: LoadoutServiceLawyerUniformGoodSuit
+ - type: loadout
+ id: LoadoutServiceLawyerUniformGoodSkirt
+ - type: loadout
+ id: LoadoutServiceReporterUniformJournalist
+ - type: loadout
+ id: LoadoutServiceReporterUniformDetectivesuit
+ - type: loadout
+ id: LoadoutServiceReporterUniformDetectiveskirt
+
+- type: characterItemGroup
+ id: LoadoutOuterService
+ items:
+ - type: loadout
+ id: LoadoutServiceClownOuterWinter
+ - type: loadout
+ id: LoadoutServiceClownOuterClownPriest
+ - type: loadout
+ id: LoadoutServiceMimeOuterWinter
+
+- type: characterItemGroup
+ id: LoadoutNeckService
+ items:
+ - type: loadout
+ id: LoadoutServiceClownBedsheetClown
+ - type: loadout
+ id: LoadoutServiceMimeBedsheetMime
+
+- type: characterItemGroup
+ id: LoadoutMaskService
+ items:
+ - type: loadout
+ id: LoadoutServiceClownMaskSexy
+ - type: loadout
+ id: LoadoutServiceMimeMaskSad
+ - type: loadout
+ id: LoadoutServiceMimeMaskScared
+ - type: loadout
+ id: LoadoutServiceMimeMaskSexy
+
+- type: characterItemGroup
+ id: LoadoutShoesService
+ items:
+ - type: loadout
+ id: LoadoutServiceClownBootsWinter
+ - type: loadout
+ id: LoadoutServiceMimeShoesBootsWinter
+
+- type: characterItemGroup
+ id: LoadoutEquipmentService
+ items:
+ - type: loadout
+ id: LoadoutServiceClownCowToolboxFilled
+
+
+
diff --git a/Resources/Prototypes/Datasets/story_generation.yml b/Resources/Prototypes/Datasets/story_generation.yml
index 1083a6acdb..fff25ac3a1 100644
--- a/Resources/Prototypes/Datasets/story_generation.yml
+++ b/Resources/Prototypes/Datasets/story_generation.yml
@@ -1,15 +1,15 @@
- type: dataset
id: book_type
values:
- - story-gen-book-type1
- - story-gen-book-type2
- - story-gen-book-type3
- - story-gen-book-type4
- - story-gen-book-type5
- - story-gen-book-type6
- - story-gen-book-type7
- - story-gen-book-type8
- - story-gen-book-type9
+ - story-gen-book-type1
+ - story-gen-book-type2
+ - story-gen-book-type3
+ - story-gen-book-type4
+ - story-gen-book-type5
+ - story-gen-book-type6
+ - story-gen-book-type7
+ - story-gen-book-type8
+ - story-gen-book-type9
- story-gen-book-type10
- story-gen-book-type11
- story-gen-book-type12
@@ -17,15 +17,15 @@
- type: dataset
id: book_genre
values:
- - story-gen-book-genre1
- - story-gen-book-genre2
- - story-gen-book-genre3
- - story-gen-book-genre4
- - story-gen-book-genre5
- - story-gen-book-genre6
- - story-gen-book-genre7
- - story-gen-book-genre8
- - story-gen-book-genre9
+ - story-gen-book-genre1
+ - story-gen-book-genre2
+ - story-gen-book-genre3
+ - story-gen-book-genre4
+ - story-gen-book-genre5
+ - story-gen-book-genre6
+ - story-gen-book-genre7
+ - story-gen-book-genre8
+ - story-gen-book-genre9
- story-gen-book-genre10
- story-gen-book-genre11
- story-gen-book-genre12
@@ -35,15 +35,15 @@
- type: dataset
id: book_hint_appearance
values:
- - story-gen-book-appearance1
- - story-gen-book-appearance2
- - story-gen-book-appearance3
- - story-gen-book-appearance4
- - story-gen-book-appearance5
- - story-gen-book-appearance6
- - story-gen-book-appearance7
- - story-gen-book-appearance8
- - story-gen-book-appearance9
+ - story-gen-book-appearance1
+ - story-gen-book-appearance2
+ - story-gen-book-appearance3
+ - story-gen-book-appearance4
+ - story-gen-book-appearance5
+ - story-gen-book-appearance6
+ - story-gen-book-appearance7
+ - story-gen-book-appearance8
+ - story-gen-book-appearance9
- story-gen-book-appearance10
- story-gen-book-appearance11
- story-gen-book-appearance12
@@ -66,15 +66,15 @@
- type: dataset
id: book_character
values:
- - story-gen-book-character1
- - story-gen-book-character2
- - story-gen-book-character3
- - story-gen-book-character4
- - story-gen-book-character5
- - story-gen-book-character6
- - story-gen-book-character7
- - story-gen-book-character8
- - story-gen-book-character9
+ - story-gen-book-character1
+ - story-gen-book-character2
+ - story-gen-book-character3
+ - story-gen-book-character4
+ - story-gen-book-character5
+ - story-gen-book-character6
+ - story-gen-book-character7
+ - story-gen-book-character8
+ - story-gen-book-character9
- story-gen-book-character10
- story-gen-book-character11
- story-gen-book-character12
@@ -110,15 +110,15 @@
- type: dataset
id: book_character_trait
values:
- - story-gen-book-character-trait1
- - story-gen-book-character-trait2
- - story-gen-book-character-trait3
- - story-gen-book-character-trait4
- - story-gen-book-character-trait5
- - story-gen-book-character-trait6
- - story-gen-book-character-trait7
- - story-gen-book-character-trait8
- - story-gen-book-character-trait9
+ - story-gen-book-character-trait1
+ - story-gen-book-character-trait2
+ - story-gen-book-character-trait3
+ - story-gen-book-character-trait4
+ - story-gen-book-character-trait5
+ - story-gen-book-character-trait6
+ - story-gen-book-character-trait7
+ - story-gen-book-character-trait8
+ - story-gen-book-character-trait9
- story-gen-book-character-trait10
- story-gen-book-character-trait11
- story-gen-book-character-trait12
@@ -139,15 +139,15 @@
- type: dataset
id: book_event
values:
- - story-gen-book-event1
- - story-gen-book-event2
- - story-gen-book-event3
- - story-gen-book-event4
- - story-gen-book-event5
- - story-gen-book-event6
- - story-gen-book-event7
- - story-gen-book-event8
- - story-gen-book-event9
+ - story-gen-book-event1
+ - story-gen-book-event2
+ - story-gen-book-event3
+ - story-gen-book-event4
+ - story-gen-book-event5
+ - story-gen-book-event6
+ - story-gen-book-event7
+ - story-gen-book-event8
+ - story-gen-book-event9
- story-gen-book-event10
- story-gen-book-event11
- story-gen-book-event12
@@ -167,15 +167,15 @@
- type: dataset
id: book_action
values:
- - story-gen-book-action1
- - story-gen-book-action2
- - story-gen-book-action3
- - story-gen-book-action4
- - story-gen-book-action5
- - story-gen-book-action6
- - story-gen-book-action7
- - story-gen-book-action8
- - story-gen-book-action9
+ - story-gen-book-action1
+ - story-gen-book-action2
+ - story-gen-book-action3
+ - story-gen-book-action4
+ - story-gen-book-action5
+ - story-gen-book-action6
+ - story-gen-book-action7
+ - story-gen-book-action8
+ - story-gen-book-action9
- story-gen-book-action10
- story-gen-book-action11
- story-gen-book-action12
@@ -183,15 +183,15 @@
- type: dataset
id: book_action_trait
values:
- - story-gen-book-action-trait1
- - story-gen-book-action-trait2
- - story-gen-book-action-trait3
- - story-gen-book-action-trait4
- - story-gen-book-action-trait5
- - story-gen-book-action-trait6
- - story-gen-book-action-trait7
- - story-gen-book-action-trait8
- - story-gen-book-action-trait9
+ - story-gen-book-action-trait1
+ - story-gen-book-action-trait2
+ - story-gen-book-action-trait3
+ - story-gen-book-action-trait4
+ - story-gen-book-action-trait5
+ - story-gen-book-action-trait6
+ - story-gen-book-action-trait7
+ - story-gen-book-action-trait8
+ - story-gen-book-action-trait9
- story-gen-book-action-trait10
- story-gen-book-action-trait11
- story-gen-book-action-trait12
@@ -200,15 +200,15 @@
- type: dataset
id: book_location
values:
- - story-gen-book-location1
- - story-gen-book-location2
- - story-gen-book-location3
- - story-gen-book-location4
- - story-gen-book-location5
- - story-gen-book-location6
- - story-gen-book-location7
- - story-gen-book-location8
- - story-gen-book-location9
+ - story-gen-book-location1
+ - story-gen-book-location2
+ - story-gen-book-location3
+ - story-gen-book-location4
+ - story-gen-book-location5
+ - story-gen-book-location6
+ - story-gen-book-location7
+ - story-gen-book-location8
+ - story-gen-book-location9
- story-gen-book-location10
- story-gen-book-location11
- story-gen-book-location12
@@ -251,16 +251,16 @@
- type: dataset
id: book_story_element_trait
values:
- - story-gen-book-element-trait1
- - story-gen-book-element-trait2
- - story-gen-book-element-trait3
- - story-gen-book-element-trait4
- - story-gen-book-element-trait5
- - story-gen-book-element-trait6
- - story-gen-book-element-trait7
- - story-gen-book-element-trait8
- - story-gen-book-element-trait9
+ - story-gen-book-element-trait1
+ - story-gen-book-element-trait2
+ - story-gen-book-element-trait3
+ - story-gen-book-element-trait4
+ - story-gen-book-element-trait5
+ - story-gen-book-element-trait6
+ - story-gen-book-element-trait7
+ - story-gen-book-element-trait8
+ - story-gen-book-element-trait9
- story-gen-book-element-trait10
- story-gen-book-element-trait11
- story-gen-book-element-trait12
- - story-gen-book-element-trait13
\ No newline at end of file
+ - story-gen-book-element-trait13
diff --git a/Resources/Prototypes/DeltaV/Catalog/Jukebox/Standard.yml b/Resources/Prototypes/DeltaV/Catalog/Jukebox/Standard.yml
new file mode 100644
index 0000000000..aec4fc3503
--- /dev/null
+++ b/Resources/Prototypes/DeltaV/Catalog/Jukebox/Standard.yml
@@ -0,0 +1,104 @@
+# sorted alphabetically based on filenames in the folder Resources/Audio/DeltaV/Jukebox
+# keep it ordered or I'll stab you
+
+- type: jukebox
+ id: ADiffReal
+ name: Andreas Viklund - A.D.R (Lagoona rmx)
+ path:
+ path: /Audio/DeltaV/Jukebox/a_different_reality_lagoona_remix.xm-MONO.ogg
+
+- type: jukebox
+ id: AggAss
+ name: melcom - Aggravated Assault
+ path:
+ path: /Audio/DeltaV/Jukebox/aggravated.it-MONO.ogg
+
+- type: jukebox
+ id: AutEqu
+ name: lemonade - Autumnal Equinox
+ path:
+ path: /Audio/DeltaV/Jukebox/autumnal_equinox.xm-MONO.ogg
+
+- type: jukebox
+ id: DosHighUmb
+ name: MASTER BOOT RECORD - DOS=HIGH, UMB
+ path:
+ path: /Audio/DeltaV/Jukebox/DOS=HIGH,_UMB.ogg
+
+- type: jukebox
+ id: DrozAlone
+ name: Drozerix - Alone
+ path:
+ path: /Audio/DeltaV/Jukebox/drozerix_-_alone.xm-MONO.ogg
+
+- type: jukebox
+ id: DrozLeisure
+ name: Drozerix - Leisurely Voice
+ path:
+ path: /Audio/DeltaV/Jukebox/drozerix_-_leisurely_voice.xm-MONO.ogg
+
+- type: jukebox
+ id: SunbeamEvery
+ name: Sunbeamstress - Every Light Is Blinking At Once
+ path:
+ path: /Audio/DeltaV/Jukebox/every_light_is_blinking_at_onceMONO.ogg
+
+- type: jukebox
+ id: KCHaxors
+ name: Karl Casey @ White Bat Audio - Hackers
+ path:
+ path: /Audio/DeltaV/Jukebox/hackers-MONO.ogg
+
+- type: jukebox
+ id: SunbeamLaser
+ name: Sunbeamstress - Lasers Rip Apart The Bulkhead
+ path:
+ path: /Audio/DeltaV/Jukebox/lasers_rip_apart_the_bulkheadMONO.ogg
+
+- type: jukebox
+ id: IanMarhaba
+ name: Ian Alex Mac. - Marhaba
+ path:
+ path: /Audio/DeltaV/Jukebox/marhaba-MONO.ogg
+
+- type: jukebox
+ id: PTMinute
+ name: Patricia Taxxon - Minute
+ path:
+ path: /Audio/DeltaV/Jukebox/Patricia_Taxxon_-_Minute_-_MONO.ogg
+
+- type: jukebox
+ id: SunbeamPhoron
+ name: Sunbeamstress - Phoron Will Make Us Rich
+ path:
+ path: /Audio/DeltaV/Jukebox/Phoron_Will_Make_Us_RichMONO2.ogg
+
+- type: jukebox
+ id: NymphsForest
+ name: Psirius - Nymphs of the Forest
+ path:
+ path: /Audio/DeltaV/Jukebox/psirius_-_nymphs_of_the_forest.mptm-MONO.ogg
+
+- type: jukebox
+ id: GhirScratch
+ name: ghirardelli7 - Scratch Post
+ path:
+ path: /Audio/DeltaV/Jukebox/Scratch_Post_-_OST_MONO.ogg
+
+- type: jukebox
+ id: JukeShiba
+ name: Dot Nigou - Shibamata
+ path:
+ path: /Audio/DeltaV/Jukebox/shibamata-MONO.ogg
+
+- type: jukebox
+ id: SpaceAsshowl
+ name: Chris Remo - Space Asshole
+ path:
+ path: /Audio/DeltaV/Jukebox/space_asshole-MONO.ogg
+
+- type: jukebox
+ id: AmieSuperpos
+ name: Amie Waters - Superposition
+ path:
+ path: /Audio/DeltaV/Jukebox/superposition-MONO.ogg
diff --git a/Resources/Prototypes/DeltaV/Reagents/Consumable/Drink/drinks.yml b/Resources/Prototypes/DeltaV/Reagents/Consumable/Drink/drinks.yml
index c568c1bc75..7fdc51f1de 100644
--- a/Resources/Prototypes/DeltaV/Reagents/Consumable/Drink/drinks.yml
+++ b/Resources/Prototypes/DeltaV/Reagents/Consumable/Drink/drinks.yml
@@ -19,7 +19,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.3
+ amount: 0.336
- !type:PopupMessage
conditions:
- !type:ReagentThreshold
@@ -55,7 +55,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.20
+ amount: 0.133
Poison:
effects:
- !type:HealthChange
@@ -83,7 +83,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.15
+ amount: 0.16
- type: reagent
id: GreenGrass
@@ -105,7 +105,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.05
+ amount: 0.083
- type: reagent
id: Daiquiri
@@ -128,7 +128,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.25
+ amount: 0.3
- type: reagent
id: ArsonistsBrew
@@ -151,7 +151,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.30
+ amount: 0.08
Poison:
effects:
- !type:HealthChange
@@ -179,6 +179,14 @@
metamorphicMaxFillLevels: 4
metamorphicFillBaseName: fill-
metamorphicChangeColor: false
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.015
- type: reagent
id: Mothamphetamine
@@ -201,7 +209,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.25
+ amount: 0.126
Poison:
effects:
- !type:Jitter
diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml
index 880239b51e..9381b3f208 100644
--- a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml
+++ b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml
@@ -28,6 +28,10 @@
- type: Tag
tags:
- WhitelistChameleon
+ - type: ReverseEngineering
+ difficulty: 2
+ recipes:
+ - ClothingShoesBootsMag
- type: entity
parent: ClothingShoesBootsMag
diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml
index 62f3bbcb3f..891dfc1e79 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml
@@ -29,6 +29,10 @@
Amount: 1
DefaultPrototype: Igniter
ExamineName: Igniter
+ - type: ReverseEngineering # Delta
+ difficulty: 2
+ recipes:
+ - AutolatheHyperConvectionMachineCircuitboard
- type: entity
id: ProtolatheMachineCircuitboard
@@ -66,6 +70,10 @@
Amount: 1
DefaultPrototype: Igniter
ExamineName: Igniter
+ - type: ReverseEngineering # Delta
+ difficulty: 2
+ recipes:
+ - ProtolatheHyperConvectionMachineCircuitboard
- type: entity
id: BiofabricatorMachineCircuitboard
@@ -79,6 +87,10 @@
MatterBin: 4
materialRequirements:
Glass: 1
+ - type: ReverseEngineering # Delta
+ difficulty: 2
+ recipes:
+ - BiofabricatorMachineCircuitboard
- type: entity
id: SecurityTechFabCircuitboard
@@ -151,10 +163,6 @@
Amount: 2
DefaultPrototype: Beaker
ExamineName: Glass Beaker
- - type: ReverseEngineering # Nyano
- difficulty: 3
- recipes:
- - CircuitImprinterMachineCircuitboard
- type: entity
id: ExosuitFabricatorMachineCircuitboard
@@ -171,7 +179,7 @@
materialRequirements:
Glass: 5
- type: ReverseEngineering # Nyano
- difficulty: 3
+ difficulty: 2
recipes:
- ExosuitFabricatorMachineCircuitboard
- type: GuideHelp
@@ -202,10 +210,6 @@
requirements:
MatterBin: 1
Manipulator: 2
- - type: ReverseEngineering # Nyano
- difficulty: 2
- recipes:
- - UniformPrinterMachineCircuitboard
- type: entity
id: VaccinatorMachineCircuitboard
@@ -313,6 +317,10 @@
materialRequirements:
Glass: 1
Steel: 5
+ - type: ReverseEngineering # Delta
+ difficulty: 3
+ recipes:
+ - ArtifactCrusherMachineCircuitboard
- type: entity
parent: BaseMachineCircuitboard
@@ -350,6 +358,10 @@
Cable: 5
PlasmaGlass: 15
MetalRod: 4
+ - type: ReverseEngineering # Nyano
+ difficulty: 2
+ recipes:
+ - AnomalyVesselExperimentalCircuitboard
- type: entity
parent: BaseMachineCircuitboard
@@ -367,6 +379,10 @@
materialRequirements:
PlasmaGlass: 5
Cable: 5
+ - type: ReverseEngineering # Delta
+ difficulty: 3
+ recipes:
+ - AnomalySynchronizerCircuitboard
- type: entity
parent: BaseMachineCircuitboard
@@ -451,6 +467,10 @@
deconstructionTarget: null
graph: ThermomachineBoard
node: hellfirefreezer
+ - type: ReverseEngineering # Delta
+ difficulty: 3
+ recipes:
+ - HellfireFreezerMachineCircuitBoard
- type: entity
parent: BaseMachineCircuitboard
@@ -596,6 +616,10 @@
materialRequirements:
Steel: 1
Cable: 2
+ - type: ReverseEngineering # Delta
+ difficulty: 3
+ recipes:
+ - CrewMonitoringServerMachineCircuitboard
- type: entity
id: CryoPodMachineCircuitboard
@@ -635,10 +659,6 @@
Amount: 2
DefaultPrototype: Beaker
ExamineName: Glass Beaker
- - type: ReverseEngineering # Nyano
- difficulty: 2
- recipes:
- - ChemMasterMachineCircuitboard
- type: entity
id: ChemDispenserMachineCircuitboard
@@ -660,10 +680,6 @@
Amount: 2
DefaultPrototype: Beaker
ExamineName: Glass Beaker
- - type: ReverseEngineering # Nyano
- difficulty: 2
- recipes:
- - ChemDispenserMachineCircuitboard
- type: entity
id: BiomassReclaimerMachineCircuitboard
@@ -750,9 +766,6 @@
PowerCell: 4
materialRequirements:
CableHV: 10
- - type: ReverseEngineering # Nyano
- recipes:
- - SMESMachineCircuitboard
- type: entity
id: CellRechargerCircuitboard
@@ -862,6 +875,10 @@
materialComposition:
Steel: 30
Plastic: 30
+ - type: ReverseEngineering # Delta
+ difficulty: 2
+ recipes:
+ - TurboItemRechargerCircuitboard
- type: entity
id: SubstationMachineCircuitboard
@@ -877,9 +894,6 @@
materialRequirements:
CableMV: 5
CableHV: 5
- - type: ReverseEngineering # Nyano
- recipes:
- - SubstationMachineCircuitboard
- type: PhysicalComposition
materialComposition:
Glass: 200
@@ -921,7 +935,7 @@
DefaultPrototype: SaxophoneInstrument
ExamineName: Woodwind Instrument
- type: ReverseEngineering # Nyano
- difficulty: 3
+ difficulty: 2
recipes:
- DawInstrumentMachineCircuitboard
@@ -938,10 +952,6 @@
Capacitor: 1
materialRequirements:
CableHV: 5
- - type: ReverseEngineering # Nyano
- difficulty: 2
- recipes:
- - GeneratorPlasmaMachineCircuitboard
- type: PhysicalComposition
materialComposition:
Glass: 200
@@ -949,6 +959,10 @@
Silicon: 20
- type: StaticPrice
price: 40
+ - type: ReverseEngineering # Nyano
+ difficulty: 2
+ recipes:
+ - PortableGeneratorPacmanMachineCircuitboard
- type: entity
id: ThrusterMachineCircuitboard
@@ -961,6 +975,10 @@
Capacitor: 4
materialRequirements:
Steel: 5
+ - type: ReverseEngineering # Delta
+ difficulty: 3
+ recipes:
+ - ThrusterMachineCircuitboard
- type: entity
id: GyroscopeMachineCircuitboard
@@ -974,6 +992,10 @@
Capacitor: 1
materialRequirements:
Glass: 2
+ - type: ReverseEngineering # Delta
+ difficulty: 3
+ recipes:
+ - GyroscopeMachineCircuitboard
- type: entity
id: PortableGeneratorSuperPacmanMachineCircuitboard
@@ -993,12 +1015,12 @@
Glass: 200
chemicalComposition:
Silicon: 20
+ - type: StaticPrice
+ price: 40
- type: ReverseEngineering # Nyano
difficulty: 2
recipes:
- PortableGeneratorSuperPacmanMachineCircuitboard
- - type: StaticPrice
- price: 40
- type: entity
id: PortableGeneratorJrPacmanMachineCircuitboard
@@ -1020,6 +1042,10 @@
Silicon: 20
- type: StaticPrice
price: 40
+ - type: ReverseEngineering # Nyano
+ difficulty: 2
+ recipes:
+ - PortableGeneratorJrPacmanMachineCircuitboard
- type: entity
id: ReagentGrinderMachineCircuitboard
@@ -1054,7 +1080,7 @@
Capacitor: 2
materialRequirements:
Glass: 1
- - type: ReverseEngineering # Nyano
+ - type: ReverseEngineering # Delta
difficulty: 2
recipes:
- HotplateMachineCircuitboard
@@ -1072,6 +1098,10 @@
materialRequirements:
Glass: 2
Cable: 5
+ - type: ReverseEngineering # Delta
+ difficulty: 2
+ recipes:
+ - ElectricGrillMachineCircuitboard
- type: entity
id: StasisBedMachineCircuitboard
@@ -1137,6 +1167,10 @@
materialRequirements:
Steel: 5
Plastic: 5
+ - type: ReverseEngineering # Delta
+ difficulty: 2
+ recipes:
+ - MaterialReclaimerMachineCircuitboard
- type: entity
id: OreProcessorMachineCircuitboard
@@ -1152,9 +1186,6 @@
Manipulator: 3
materialRequirements:
Glass: 1
- - type: ReverseEngineering # Nyano
- recipes:
- - OreProcessorMachineCircuitboard
- type: entity
parent: BaseMachineCircuitboard
@@ -1170,6 +1201,10 @@
Manipulator: 3
materialRequirements:
Glass: 1
+ - type: ReverseEngineering # Delta
+ difficulty: 2
+ recipes:
+ - OreProcessorIndustrialMachineCircuitboard
- type: entity
id: SheetifierMachineCircuitboard
@@ -1216,6 +1251,10 @@
Amount: 1
DefaultPrototype: ForkPlastic
ExamineName: Utensil
+ - type: ReverseEngineering # Delta
+ difficulty: 2
+ recipes:
+ - FatExtractorMachineCircuitboard
- type: entity
parent: BaseMachineCircuitboard
@@ -1229,6 +1268,10 @@
MatterBin: 1
materialRequirements:
Steel: 1
+ - type: ReverseEngineering # Delta
+ difficulty: 2
+ recipes:
+ - FlatpackerMachineCircuitboard
- type: entity
id: EmitterCircuitboard
@@ -1348,9 +1391,6 @@
Amount: 1
DefaultPrototype: Beaker
ExamineName: Glass Beaker
- - type: ReverseEngineering # Nyano
- recipes:
- - BoozeDispenserMachineCircuitboard
- type: entity
id: CargoTelepadMachineCircuitboard
@@ -1367,6 +1407,10 @@
materialRequirements:
Steel: 5
Bluespace: 2 #DeltaV Bluespace Exists
+ - type: ReverseEngineering # Delta
+ difficulty: 3
+ recipes:
+ - CargoTelepadMachineCircuitboard
- type: entity
id: SodaDispenserMachineCircuitboard
@@ -1385,9 +1429,6 @@
Amount: 1
DefaultPrototype: Beaker
ExamineName: Glass Beaker
- - type: ReverseEngineering # Nyano
- recipes:
- - SodaDispenserMachineCircuitboard
- type: entity
id: TelecomServerCircuitboard
@@ -1437,6 +1478,10 @@
Steel: 5
CableHV: 5
Uranium: 2
+ - type: ReverseEngineering # Delta
+ difficulty: 3
+ recipes:
+ - MiniGravityGeneratorCircuitboard
- type: entity
id: ShuttleGunSvalinnMachineGunCircuitboard
@@ -1454,6 +1499,10 @@
materialRequirements:
Steel: 5
CableHV: 5
+ - type: ReverseEngineering # Delta
+ difficulty: 3
+ recipes:
+ - ShuttleGunSvalinnMachineGunCircuitboard
- type: entity
id: ShuttleGunPerforatorCircuitboard
@@ -1471,6 +1520,10 @@
materialRequirements:
Steel: 10
CableHV: 5
+ - type: ReverseEngineering # Delta
+ difficulty: 3
+ recipes:
+ - ShuttleGunPerforatorCircuitboard
- type: entity
id: ShuttleGunFriendshipCircuitboard
@@ -1488,6 +1541,10 @@
materialRequirements:
Steel: 7
CableHV: 5
+ - type: ReverseEngineering # Delta
+ difficulty: 3
+ recipes:
+ - ShuttleGunFriendshipCircuitboard
- type: entity
id: ShuttleGunDusterCircuitboard
@@ -1506,6 +1563,10 @@
Steel: 10
CableHV: 5
Uranium: 2
+ - type: ReverseEngineering # Delta
+ difficulty: 4
+ recipes:
+ - ShuttleGunDusterCircuitboard
- type: entity
id: ShuttleGunKineticCircuitboard
@@ -1523,6 +1584,10 @@
materialRequirements:
Steel: 5
CableHV: 2
+ - type: ReverseEngineering # Delta
+ difficulty: 2
+ recipes:
+ - ShuttleGunKineticCircuitboard
- type: entity
parent: BaseMachineCircuitboard
@@ -1536,6 +1601,10 @@
Manipulator: 3
materialRequirements:
Glass: 1
+ - type: ReverseEngineering # Delta
+ difficulty: 2
+ recipes:
+ - ReagentGrinderIndustrialMachineCircuitboard
- type: entity
parent: BaseMachineCircuitboard
@@ -1550,3 +1619,8 @@
Steel: 2
Glass: 5
Cable: 2
+ - type: ReverseEngineering # Delta
+ difficulty: 2
+ recipes:
+ - JukeboxCircuitBoard
+
diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml
index ffff8847ed..1210f302fc 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml
@@ -122,6 +122,10 @@
prototype: ComputerSalvageExpedition
- type: StealTarget
stealGroup: SalvageExpeditionsComputerCircuitboard
+ - type: ReverseEngineering # Nyano
+ difficulty: 2
+ recipes:
+ - SalvageExpeditionsComputerCircuitboard
- type: entity
parent: BaseComputerCircuitboard
@@ -177,6 +181,10 @@
- type: Tag
tags:
- ComputerTelevisionCircuitboard
+ - type: ReverseEngineering # Nyano
+ difficulty: 2
+ recipes:
+ - ComputerTelevisionCircuitboard
- type: entity
parent: BaseComputerCircuitboard
@@ -286,6 +294,10 @@
components:
- type: ComputerBoard
prototype: ComputerRadar
+ - type: ReverseEngineering # Nyano
+ difficulty: 2
+ recipes:
+ - RadarConsoleCircuitboard
- type: entity
parent: BaseComputerCircuitboard
@@ -339,6 +351,10 @@
components:
- type: ComputerBoard
prototype: ComputerShuttle
+ - type: ReverseEngineering # Nyano
+ difficulty: 3
+ recipes:
+ - ShuttleConsoleCircuitboard
- type: entity
parent: BaseComputerCircuitboard
@@ -396,6 +412,10 @@
price: 150
- type: ComputerBoard
prototype: ComputerMassMedia
+ - type: ReverseEngineering # Nyano
+ difficulty: 3
+ recipes:
+ - ComputerMassMediaCircuitboard
- type: entity
parent: BaseComputerCircuitboard
diff --git a/Resources/Prototypes/Entities/Objects/Devices/hand_teleporter.yml b/Resources/Prototypes/Entities/Objects/Devices/hand_teleporter.yml
index 2e6c2d8c27..deac20e05e 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/hand_teleporter.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/hand_teleporter.yml
@@ -9,10 +9,6 @@
layers:
- state: icon
- type: HandTeleporter
- - type: ReverseEngineering # Nyano
- difficulty: 4
- recipes:
- - HandTeleporter
- type: Tag
tags:
- HighRiskItem
diff --git a/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml b/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml
index 5cbf64c560..b7ad8ddd6a 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml
@@ -68,6 +68,7 @@
- type: StaticPrice
price: 80
- type: ReverseEngineering # Nyano
+ difficulty: 3
recipes:
- HolofanProjector
@@ -98,6 +99,10 @@
- HolofanProjector
- type: StaticPrice
price: 130
+ - type: ReverseEngineering # Nyano
+ difficulty: 3
+ recipes:
+ - HoloprojectorField
- type: entity
parent: HoloprojectorField
diff --git a/Resources/Prototypes/Entities/Objects/Devices/swapper.yml b/Resources/Prototypes/Entities/Objects/Devices/swapper.yml
index 8a743f4796..3ab014b28c 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/swapper.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/swapper.yml
@@ -25,3 +25,7 @@
- type: Tag
tags:
- QuantumSpinInverter
+ - type: ReverseEngineering # Delta
+ difficulty: 4
+ recipes:
+ - DeviceQuantumSpinInverter
diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml
index 9e68879fb4..fd32523d8f 100644
--- a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml
+++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml
@@ -227,6 +227,10 @@
beaker:
maxVol: 60
canReact: false
+ - type: ReverseEngineering # Delta
+ difficulty: 3
+ recipes:
+ - CryostasisBeaker
- type: entity
name: bluespace beaker
@@ -245,6 +249,10 @@
beaker:
maxVol: 1000
canMix: true
+ - type: ReverseEngineering # Delta
+ difficulty: 4
+ recipes:
+ - BluespaceBeaker
- type: entity
name: dropper
@@ -401,6 +409,10 @@
tags:
- Syringe
- Trash
+ - type: ReverseEngineering # Delta
+ difficulty: 4
+ recipes:
+ - SyringeBluespace
- type: entity
id: SyringeCryostasis
@@ -432,7 +444,10 @@
tags:
- Syringe
- Trash
-
+ - type: ReverseEngineering # Delta
+ difficulty: 3
+ recipes:
+ - SyringeCryostasis
- type: entity
name: pill
diff --git a/Resources/Prototypes/Entities/Objects/Tools/handheld_mass_scanner.yml b/Resources/Prototypes/Entities/Objects/Tools/handheld_mass_scanner.yml
index 5647737219..131bb1960b 100644
--- a/Resources/Prototypes/Entities/Objects/Tools/handheld_mass_scanner.yml
+++ b/Resources/Prototypes/Entities/Objects/Tools/handheld_mass_scanner.yml
@@ -38,6 +38,10 @@
type: RadarConsoleBoundUserInterface
- type: StaticPrice
price: 150
+ - type: ReverseEngineering # Delta
+ difficulty: 3
+ recipes:
+ - HandHeldMassScanner
- type: entity
id: HandHeldMassScannerEmpty
@@ -69,4 +73,4 @@
name: power-cell-slot-component-slot-name-default
startingItem: PowerCellMicroreactor
disableEject: true
- swap: false
\ No newline at end of file
+ swap: false
diff --git a/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml b/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml
index 36d2f1308f..12521ff644 100644
--- a/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml
+++ b/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml
@@ -58,6 +58,10 @@
angle: 20
soundHit:
collection: MetalThud
+ - type: ReverseEngineering # Delta
+ difficulty: 3
+ recipes:
+ - JawsOfLife
- type: entity
name: syndicate jaws of life
diff --git a/Resources/Prototypes/Entities/Objects/Tools/tools.yml b/Resources/Prototypes/Entities/Objects/Tools/tools.yml
index a6926f1d8c..c0d4fa179f 100644
--- a/Resources/Prototypes/Entities/Objects/Tools/tools.yml
+++ b/Resources/Prototypes/Entities/Objects/Tools/tools.yml
@@ -413,10 +413,6 @@
Plastic: 100
# - type: DynamicPrice
# price: 100
- - type: ReverseEngineering # Nyano
- difficulty: 2
- recipes:
- - PowerDrill
- type: StaticPrice
price: 100
- type: MeleeWeapon
@@ -433,6 +429,10 @@
angle: 20
soundHit:
path: "/Audio/Items/drill_hit.ogg"
+ - type: ReverseEngineering # Nyano
+ difficulty: 2
+ recipes:
+ - PowerDrill
- type: entity
id: RCD
@@ -478,7 +478,7 @@
- type: PhysicalComposition
materialComposition:
Steel: 600
- Plastic: 100
+ Plastic: 150
- type: StaticPrice
price: 100
- type: UserInterface
@@ -487,6 +487,10 @@
type: RCDMenuBoundUserInterface
- type: ActivatableUI
key: enum.RcdUiKey.Key
+ - type: ReverseEngineering # Nyano
+ difficulty: 3
+ recipes:
+ - RCD
- type: entity
id: RCDEmpty
@@ -548,7 +552,7 @@
heldPrefix: ammo
- type: PhysicalComposition
materialComposition:
- Steel: 100
+ Steel: 300
Plastic: 100
- type: StaticPrice
price: 60
diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
index dd8182b24f..7986dca6c8 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
@@ -356,6 +356,8 @@
- AnimalTranslator
- MofficTranslatorImplanter
- MofficTranslator
+ - RCDAmmo #DeltaV
+ - RCD #EE
- type: EmagLatheRecipes
emagDynamicRecipes:
- ExplosivePayload
diff --git a/Resources/Prototypes/Guidebook/shiftandcrew.yml b/Resources/Prototypes/Guidebook/shiftandcrew.yml
index 75c1a216a5..8d9fcb33cf 100644
--- a/Resources/Prototypes/Guidebook/shiftandcrew.yml
+++ b/Resources/Prototypes/Guidebook/shiftandcrew.yml
@@ -42,3 +42,4 @@
id: Food Recipes
name: guide-entry-foodrecipes
text: "/ServerInfo/Guidebook/Service/FoodRecipes.xml"
+ filterEnabled: true
diff --git a/Resources/Prototypes/Loadouts/Categories/categories.yml b/Resources/Prototypes/Loadouts/Categories/categories.yml
index 77b1adbe56..236c2d97a0 100644
--- a/Resources/Prototypes/Loadouts/Categories/categories.yml
+++ b/Resources/Prototypes/Loadouts/Categories/categories.yml
@@ -1,6 +1,6 @@
# Alphabetically ordered, except for Uncategorized since it is always first
# AUncategorized is always first in subcategories to stay consistent with the root Uncategorized
-# AUncategorized is not a spelling mistake, and might have more As added as needed
+# AUncategorized is not a spelling mistake, and might have more As added as needed
- type: loadoutCategory
id: Uncategorized
@@ -27,7 +27,12 @@
root: true
subCategories:
- JobsAUncategorized
+ - JobsCargo
- JobsCommand
+ - JobsEngineering
+ - JobsMedical
+ - JobsSecurity
+ - JobsService
- type: loadoutCategory
id: JobsAUncategorized
@@ -44,7 +49,6 @@
- JobsCommandQM
- JobsCommandRD
-
- type: loadoutCategory
id: JobsCommandAUncategorized
@@ -69,6 +73,20 @@
- type: loadoutCategory
id: JobsCommandRD
+- type: loadoutCategory
+ id: JobsCargo
+
+- type: loadoutCategory
+ id: JobsEngineering
+
+- type: loadoutCategory
+ id: JobsMedical
+
+- type: loadoutCategory
+ id: JobsSecurity
+
+- type: loadoutCategory
+ id: JobsService
- type: loadoutCategory
id: Mask
diff --git a/Resources/Prototypes/Loadouts/Jobs/cargo.yml b/Resources/Prototypes/Loadouts/Jobs/cargo.yml
index 2bec0b7c0a..4558e362bf 100644
--- a/Resources/Prototypes/Loadouts/Jobs/cargo.yml
+++ b/Resources/Prototypes/Loadouts/Jobs/cargo.yml
@@ -1,10 +1,12 @@
# Cargo technician
- type: loadout
id: LoadoutCargoOuterWinterCargo
- category: JobsAUncategorized
- cost: 2
+ category: JobsCargo
+ cost: 1
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutOuterCargo
- !type:CharacterJobRequirement
jobs:
- CargoTechnician
@@ -13,10 +15,12 @@
- type: loadout
id: LoadoutCargoShoesBootsWinterCargo
- category: JobsAUncategorized
- cost: 1
+ category: JobsCargo
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutShoesCargo
- !type:CharacterJobRequirement
jobs:
- CargoTechnician
@@ -27,10 +31,12 @@
- type: loadout
id: LoadoutCargoOuterWinterMiner
- category: JobsAUncategorized
- cost: 2
+ category: JobsCargo
+ cost: 1
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutOuterCargo
- !type:CharacterJobRequirement
jobs:
- SalvageSpecialist
@@ -39,10 +45,12 @@
- type: loadout
id: LoadoutCargoNeckGoliathCloak
- category: JobsAUncategorized
- cost: 2
+ category: JobsCargo
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutNeckCargo
- !type:CharacterJobRequirement
jobs:
- SalvageSpecialist
diff --git a/Resources/Prototypes/Loadouts/Jobs/engineering.yml b/Resources/Prototypes/Loadouts/Jobs/engineering.yml
index 94f018e583..2bf857c85f 100644
--- a/Resources/Prototypes/Loadouts/Jobs/engineering.yml
+++ b/Resources/Prototypes/Loadouts/Jobs/engineering.yml
@@ -1,9 +1,11 @@
- type: loadout
id: LoadoutEngineeringUniformHazard
- category: JobsAUncategorized
- cost: 2
+ category: JobsEngineering
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsEngineering
- !type:CharacterJobRequirement
jobs:
- StationEngineer
@@ -12,10 +14,12 @@
- type: loadout
id: LoadoutEngineeringOuterHazard
- category: JobsAUncategorized
- cost: 2
+ category: JobsEngineering
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutOuterEngineering
- !type:CharacterJobRequirement
jobs:
- StationEngineer
@@ -24,10 +28,12 @@
- type: loadout
id: LoadoutEngineeringUniformJumpskirtSenior
- category: JobsAUncategorized
- cost: 2
+ category: JobsEngineering
+ cost: 1
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsEngineering
- !type:CharacterJobRequirement
jobs:
- StationEngineer
@@ -45,10 +51,12 @@
- type: loadout
id: LoadoutEngineeringUniformJumpsuitSenior
- category: JobsAUncategorized
- cost: 2
+ category: JobsEngineering
+ cost: 1
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsEngineering
- !type:CharacterJobRequirement
jobs:
- StationEngineer
@@ -66,10 +74,12 @@
- type: loadout
id: LoadoutEngineeringChickenSuit # :)
- category: JobsAUncategorized
- cost: 3
+ category: JobsEngineering
+ cost: 1
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutOuterEngineering
- !type:CharacterJobRequirement
jobs:
- AtmosphericTechnician
@@ -79,10 +89,12 @@
- type: loadout
id: LoadoutEngineeringEyesMeson
- category: JobsAUncategorized
- cost: 2
+ category: JobsEngineering
+ cost: 1
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutEyesEngineering
- !type:CharacterJobRequirement
jobs:
- StationEngineer
@@ -92,10 +104,12 @@
- type: loadout
id: LoadoutEngineeringHeadBeret
- category: JobsAUncategorized
- cost: 1
+ category: JobsEngineering
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadEngineering
- !type:CharacterJobRequirement
jobs:
- StationEngineer
@@ -106,10 +120,12 @@
- type: loadout
id: LoadoutEngineeringHeadHardhatBlue
- category: JobsAUncategorized
- cost: 2
+ category: JobsEngineering
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadEngineering
- !type:CharacterJobRequirement
jobs:
- StationEngineer
@@ -119,10 +135,12 @@
- type: loadout
id: LoadoutEngineeringHeadHardhatOrange
- category: JobsAUncategorized
- cost: 2
+ category: JobsEngineering
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadEngineering
- !type:CharacterJobRequirement
jobs:
- StationEngineer
@@ -132,10 +150,12 @@
- type: loadout
id: LoadoutEngineeringHeadHardhatYellow
- category: JobsAUncategorized
- cost: 2
+ category: JobsEngineering
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadEngineering
- !type:CharacterJobRequirement
jobs:
- StationEngineer
@@ -145,10 +165,12 @@
- type: loadout
id: LoadoutEngineeringHeadHardhatWhite
- category: JobsAUncategorized
- cost: 2
+ category: JobsEngineering
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadEngineering
- !type:CharacterJobRequirement
jobs:
- StationEngineer
@@ -158,10 +180,12 @@
- type: loadout
id: LoadoutEngineeringHeadHardhatRed
- category: JobsAUncategorized
- cost: 2
+ category: JobsEngineering
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadEngineering
- !type:CharacterJobRequirement
jobs:
- StationEngineer
diff --git a/Resources/Prototypes/Loadouts/Jobs/medical.yml b/Resources/Prototypes/Loadouts/Jobs/medical.yml
index 33d6ff36da..6a2d5fb9d2 100644
--- a/Resources/Prototypes/Loadouts/Jobs/medical.yml
+++ b/Resources/Prototypes/Loadouts/Jobs/medical.yml
@@ -1,9 +1,11 @@
- type: loadout
id: LoadoutMedicalGlovesNitrile
- category: JobsAUncategorized
- cost: 1
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutGlovesMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -16,10 +18,12 @@
- type: loadout
id: LoadoutMedicalOuterLabcoat
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutOuterMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -29,10 +33,12 @@
- type: loadout
id: LoadoutMedicalNeckStethoscope
- category: JobsAUncategorized
- cost: 1
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutNeckMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -43,10 +49,12 @@
- type: loadout
id: LoadoutMedicalUniformScrubsBlue
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -58,10 +66,12 @@
- type: loadout
id: LoadoutMedicalUniformScrubsGreen
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -73,10 +83,12 @@
- type: loadout
id: LoadoutMedicalUniformScrubsPurple
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -88,10 +100,12 @@
- type: loadout
id: LoadoutMedicalUniformScrubsCyan
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -103,10 +117,12 @@
- type: loadout
id: LoadoutMedicalUniformScrubsBlack
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -118,10 +134,12 @@
- type: loadout
id: LoadoutMedicalUniformScrubsPink
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -133,10 +151,12 @@
- type: loadout
id: LoadoutMedicalUniformScrubsCybersun
- category: JobsAUncategorized
- cost: 3
+ category: JobsMedical
+ cost: 1
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -147,10 +167,12 @@
- type: loadout
id: LoadoutMedicalOuterCybersunWindbreaker
- category: JobsAUncategorized
- cost: 5
+ category: JobsMedical
+ cost: 3
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutOuterMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -161,10 +183,12 @@
- type: loadout
id: LoadoutMedicalOuterLabcoatChem
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutOuterMedical
- !type:CharacterJobRequirement
jobs:
- Chemist
@@ -173,7 +197,7 @@
- type: loadout
id: LoadoutMedicalItemHandLabeler
- category: JobsAUncategorized
+ category: JobsMedical
exclusive: true
requirements:
- !type:CharacterJobRequirement
@@ -184,10 +208,12 @@
- type: loadout
id: LoadoutMedicalUniformParamedicJumpsuit
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsMedical
- !type:CharacterJobRequirement
jobs:
- Paramedic
@@ -196,10 +222,12 @@
- type: loadout
id: LoadoutMedicalUniformParamedicJumpskirt
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsMedical
- !type:CharacterJobRequirement
jobs:
- Paramedic
@@ -208,10 +236,12 @@
- type: loadout
id: LoadoutMedicalUniformJumpskirtSenior
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 1
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -232,10 +262,12 @@
- type: loadout
id: LoadoutMedicalUniformJumpsuitSenior
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 1
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -256,10 +288,12 @@
- type: loadout
id: LoadoutMedicalHeadNurse
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -268,10 +302,12 @@
- type: loadout
id: LoadoutMedicalHeadBeretSeniorPhysician
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 1
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -292,10 +328,12 @@
- type: loadout
id: LoadoutMedicalHeadSurgcapBlue
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -307,10 +345,12 @@
- type: loadout
id: LoadoutMedicalHeadSurgcapPurple
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -322,10 +362,12 @@
- type: loadout
id: LoadoutMedicalHeadSurgcapGreen
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -337,10 +379,12 @@
- type: loadout
id: LoadoutMedicalHeadSurgcapCyan
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -352,10 +396,12 @@
- type: loadout
id: LoadoutMedicalHeadSurgcapBlack
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -367,10 +413,12 @@
- type: loadout
id: LoadoutMedicalHeadSurgcapPink
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -382,10 +430,12 @@
- type: loadout
id: LoadoutMedicalHeadSurgcapWhite
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -397,10 +447,12 @@
- type: loadout
id: LoadoutMedicalHeadSurgcapCybersun
- category: JobsAUncategorized
- cost: 3
+ category: JobsMedical
+ cost: 1
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -411,10 +463,12 @@
- type: loadout
id: LoadoutMedicalEyesHudMedical
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutEyesMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -427,10 +481,12 @@
- type: loadout
id: LoadoutMedicalEyesEyepatchHudMedical
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutEyesMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -443,10 +499,12 @@
- type: loadout
id: LoadoutMedicalEyesHudMedicalPrescription
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutEyesMedical
- !type:CharacterJobRequirement
jobs:
- MedicalDoctor
@@ -462,10 +520,12 @@
- type: loadout
id: LoadoutMedicalEyesGlassesChemical
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutEyesMedical
- !type:CharacterJobRequirement
jobs:
- Chemist
@@ -474,10 +534,12 @@
- type: loadout
id: LoadoutMedicalBedsheetMedical
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 1
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutNeckMedical
- !type:CharacterDepartmentRequirement
departments:
- Medical
@@ -487,10 +549,12 @@
# Chemist PPE gear
- type: loadout
id: LoadoutMedicalUniformJumpsuitChemShirt
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsMedical
- !type:CharacterJobRequirement
jobs:
- Chemist
@@ -499,10 +563,12 @@
- type: loadout
id: LoadoutMedicalNeckTieChem
- category: JobsAUncategorized
- cost: 1
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutNeckMedical
- !type:CharacterJobRequirement
jobs:
- Chemist
@@ -511,10 +577,12 @@
- type: loadout
id: LoadoutMedicalShoesEnclosedChem
- category: JobsAUncategorized
- cost: 1
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutShoesMedical
- !type:CharacterJobRequirement
jobs:
- Chemist
@@ -523,10 +591,12 @@
- type: loadout
id: LoadoutMedicalOuterApronChemist
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutOuterMedical
- !type:CharacterJobRequirement
jobs:
- Chemist
@@ -535,10 +605,12 @@
- type: loadout
id: LoadoutMedicalEyesGlassesChemist
- category: JobsAUncategorized
- cost: 2
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutEyesMedical
- !type:CharacterJobRequirement
jobs:
- Chemist
@@ -547,10 +619,12 @@
- type: loadout
id: LoadoutMedicalHandsGlovesChemist
- category: JobsAUncategorized
- cost: 1
+ category: JobsMedical
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutGlovesMedical
- !type:CharacterJobRequirement
jobs:
- Chemist
diff --git a/Resources/Prototypes/Loadouts/Jobs/security.yml b/Resources/Prototypes/Loadouts/Jobs/security.yml
index 13d11b13fa..db11903313 100644
--- a/Resources/Prototypes/Loadouts/Jobs/security.yml
+++ b/Resources/Prototypes/Loadouts/Jobs/security.yml
@@ -1,10 +1,12 @@
# Uniforms
- type: loadout
id: LoadoutSecurityUniformJumpsuitBlue
- category: JobsAUncategorized
- cost: 1
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsSecurity
- !type:CharacterDepartmentRequirement
departments:
- Security
@@ -13,10 +15,12 @@
- type: loadout
id: LoadoutSecurityUniformJumpsuitGrey
- category: JobsAUncategorized
- cost: 1
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsSecurity
- !type:CharacterDepartmentRequirement
departments:
- Security
@@ -25,10 +29,12 @@
- type: loadout
id: LoadoutSecurityUniformJumpskirtGrey
- category: JobsAUncategorized
- cost: 1
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsSecurity
- !type:CharacterDepartmentRequirement
departments:
- Security
@@ -37,10 +43,12 @@
- type: loadout
id: LoadoutSecurityUniformJumpskirtBlue
- category: JobsAUncategorized
- cost: 1
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsSecurity
- !type:CharacterDepartmentRequirement
departments:
- Security
@@ -49,10 +57,12 @@
- type: loadout
id: LoadoutSecurityUniformJumpskirtSenior
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 1
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsSecurity
- !type:CharacterJobRequirement
jobs:
- SecurityOfficer
@@ -73,10 +83,12 @@
- type: loadout
id: LoadoutSecurityUniformJumpsuitSenior
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 1
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsSecurity
- !type:CharacterJobRequirement
jobs:
- SecurityOfficer
@@ -97,10 +109,12 @@
- type: loadout
id: LoadoutUniformJumpsuitWardenBlue
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsSecurity
- !type:CharacterJobRequirement
jobs:
- Warden
@@ -109,10 +123,12 @@
- type: loadout
id: LoadoutUniformJumpsuitWardenGrey
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsSecurity
- !type:CharacterJobRequirement
jobs:
- Warden
@@ -121,10 +137,12 @@
- type: loadout
id: LoadoutUniformJumpskirtWardenBlue
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsSecurity
- !type:CharacterJobRequirement
jobs:
- Warden
@@ -133,10 +151,12 @@
- type: loadout
id: LoadoutUniformJumpskirtWardenGrey
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsSecurity
- !type:CharacterJobRequirement
jobs:
- Warden
@@ -145,10 +165,12 @@
- type: loadout
id: LoadoutUniformJumpskirtHoSBlue
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsSecurity
- !type:CharacterJobRequirement
jobs:
- HeadOfSecurity
@@ -157,10 +179,12 @@
- type: loadout
id: LoadoutUniformJumpskirtHoSGrey
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsSecurity
- !type:CharacterJobRequirement
jobs:
- HeadOfSecurity
@@ -169,10 +193,12 @@
- type: loadout
id: LoadoutUniformJumpsuitSecFormal
- category: JobsAUncategorized
- cost: 1
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsSecurity
- !type:CharacterDepartmentRequirement
departments:
- Security
@@ -181,10 +207,12 @@
- type: loadout
id: LoadoutUniformJumpsuitSecSummer
- category: JobsAUncategorized
- cost: 1
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsSecurity
- !type:CharacterDepartmentRequirement
departments:
- Security
@@ -194,10 +222,12 @@
# Mask
- type: loadout
id: LoadoutSecurityMaskGasSwat
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutMaskSecurity
- !type:CharacterJobRequirement
jobs:
- Warden
@@ -208,9 +238,11 @@
# Shoes
- type: loadout
id: LoadoutSecurityShoesJackboots
- category: JobsAUncategorized
- cost: 1
+ category: JobsSecurity
+ cost: 0
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutShoesSecurity
- !type:CharacterDepartmentRequirement
departments:
- Security
@@ -219,9 +251,11 @@
- type: loadout
id: LoadoutClothingShoesBootsCombat
- category: JobsAUncategorized
- cost: 1
+ category: JobsSecurity
+ cost: 0
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutShoesSecurity
- !type:CharacterDepartmentRequirement
departments:
- Security
@@ -231,10 +265,12 @@
# Eyes
- type: loadout
id: LoadoutSecurityEyesHudSecurity
- category: JobsAUncategorized
+ category: JobsSecurity
cost: 1
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutEyesSecurity
- !type:CharacterDepartmentRequirement
departments:
- Security
@@ -243,10 +279,12 @@
- type: loadout
id: ClothingEyesGlassesSunglasses
- category: JobsAUncategorized
- cost: 1
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutEyesSecurity
- !type:CharacterDepartmentRequirement
departments:
- Security
@@ -255,10 +293,12 @@
- type: loadout
id: LoadoutSecurityEyesEyepatchHudSecurity
- category: JobsAUncategorized
+ category: JobsSecurity
cost: 1
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutEyesSecurity
- !type:CharacterDepartmentRequirement
departments:
- Security
@@ -267,10 +307,12 @@
- type: loadout
id: LoadoutSecurityEyesHudSecurityPrescription
- category: JobsAUncategorized
+ category: JobsSecurity
cost: 1
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutEyesSecurity
- !type:CharacterDepartmentRequirement
departments:
- Security
@@ -282,10 +324,12 @@
- type: loadout
id: LoadoutClothingEyesGlassesSecurity
- category: JobsAUncategorized
- cost: 4
+ category: JobsSecurity
+ cost: 2
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutEyesSecurity
- !type:CharacterDepartmentRequirement
departments:
- Security
@@ -298,10 +342,12 @@
# Head
- type: loadout
id: LoadoutSecurityHeadHatBeret
- category: JobsAUncategorized
- cost: 1
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadSecurity
- !type:CharacterDepartmentRequirement
departments:
- Security
@@ -310,10 +356,12 @@
- type: loadout
id: LoadoutClothingHeadHelmetBasic
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadSecurity
- !type:CharacterDepartmentRequirement
departments:
- Security
@@ -322,10 +370,12 @@
- type: loadout
id: LoadoutClothingHeadHatBeretBrigmedic
- category: JobsAUncategorized
- cost: 1
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadSecurity
- !type:CharacterJobRequirement
jobs:
- Brigmedic
@@ -334,10 +384,12 @@
- type: loadout
id: LoadoutClothingHeadHatBeretCorpsman
- category: JobsAUncategorized
- cost: 1
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadSecurity
- !type:CharacterJobRequirement
jobs:
- Brigmedic
@@ -346,10 +398,12 @@
- type: loadout
id: LoadoutClothingHeadHatBeretWarden
- category: JobsAUncategorized
- cost: 1
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadSecurity
- !type:CharacterJobRequirement
jobs:
- Warden
@@ -358,10 +412,12 @@
- type: loadout
id: LoadoutClothingHeadHatBeretHoS
- category: JobsAUncategorized
- cost: 1
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadSecurity
- !type:CharacterJobRequirement
jobs:
- HeadOfSecurity
@@ -370,9 +426,11 @@
- type: loadout
id: LoadoutSecurityHeadHelmetInsulated
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 1
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutHeadSecurity
- !type:CharacterDepartmentRequirement
departments:
- Security
@@ -382,10 +440,12 @@
# Belt
- type: loadout
id: LoadoutSecurityBeltWebbing
- category: JobsAUncategorized
- cost: 1
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutBeltSecurity
- !type:CharacterDepartmentRequirement
departments:
- Security
@@ -394,10 +454,12 @@
- type: loadout
id: LoadoutClothingBeltCorpsmanWebbing
- category: JobsAUncategorized
- cost: 1
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutBeltSecurity
- !type:CharacterJobRequirement
jobs:
- Brigmedic
@@ -406,10 +468,12 @@
- type: loadout
id: LoadoutClothingBeltSecurity
- category: JobsAUncategorized
- cost: 1
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutBeltSecurity
- !type:CharacterDepartmentRequirement
departments:
- Security
@@ -420,22 +484,28 @@
- type: loadout
id: LoadoutClothingHandsGlovesNitrile
- category: JobsAUncategorized
- cost: 1
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutGlovesSecurity
- !type:CharacterJobRequirement
jobs:
- Brigmedic
items:
- ClothingHandsGlovesNitrile
+# Outerwear
+
- type: loadout
id: LoadoutClothingOuterArmorPlateCarrier
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutOuterSecurity
- !type:CharacterDepartmentRequirement
departments:
- Security
@@ -444,10 +514,12 @@
- type: loadout
id: LoadoutClothingOuterArmorDuraVest
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutOuterSecurity
- !type:CharacterDepartmentRequirement
departments:
- Security
@@ -456,10 +528,12 @@
- type: loadout
id: LoadoutClothingOuterCoatDetective
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutOuterSecurity
- !type:CharacterJobRequirement
jobs:
- Detective
@@ -468,10 +542,12 @@
- type: loadout
id: LoadoutOuterVestDetective
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutOuterSecurity
- !type:CharacterJobRequirement
jobs:
- Detective
@@ -480,10 +556,12 @@
- type: loadout
id: LoadoutClothingOuterCoatWarden
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutOuterSecurity
- !type:CharacterJobRequirement
jobs:
- Warden
@@ -492,10 +570,12 @@
- type: loadout
id: LoadoutClothingOuterCoatHoSTrench
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutOuterSecurity
- !type:CharacterJobRequirement
jobs:
- HeadOfSecurity
@@ -504,10 +584,12 @@
- type: loadout
id: LoadoutClothingOuterWinterHoS
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 1
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutOuterSecurity
- !type:CharacterJobRequirement
jobs:
- HeadOfSecurity
@@ -517,10 +599,12 @@
# Neck
- type: loadout
id: LoadoutClothingNeckCloakHos
- category: JobsAUncategorized
- cost: 1
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutNeckSecurity
- !type:CharacterJobRequirement
jobs:
- HeadOfSecurity
@@ -529,10 +613,12 @@
- type: loadout
id: LoadoutClothingNeckMantleHOS
- category: JobsAUncategorized
- cost: 1
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutNeckSecurity
- !type:CharacterJobRequirement
jobs:
- HeadOfSecurity
@@ -541,23 +627,26 @@
- type: loadout
id: LoadoutBedsheetBrigmedic
- category: JobsAUncategorized
- cost: 1
+ category: JobsSecurity
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutNeckSecurity
- !type:CharacterJobRequirement
jobs:
- Brigmedic
items:
- BedsheetBrigmedic
-
# Equipment
- type: loadout
id: LoadoutSecurityCombatKnife
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 1
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutEquipmentSecurity
- !type:CharacterDepartmentRequirement
departments:
- Security
@@ -566,7 +655,7 @@
- type: loadout
id: LoadoutSecurityFlash
- category: JobsAUncategorized
+ category: JobsSecurity
cost: 1
requirements:
- !type:CharacterDepartmentRequirement
@@ -577,8 +666,8 @@
- type: loadout
id: LoadoutSecurityDisabler
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 1
requirements:
- !type:CharacterDepartmentRequirement
departments:
@@ -588,8 +677,8 @@
- type: loadout
id: LoadoutMagazinePistolRubber
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 1
requirements:
- !type:CharacterDepartmentRequirement
departments:
@@ -599,8 +688,8 @@
- type: loadout
id: LoadoutSpeedLoaderMagnumRubber
- category: JobsAUncategorized
- cost: 2
+ category: JobsSecurity
+ cost: 1
exclusive: true
requirements:
- !type:CharacterJobRequirement
@@ -613,7 +702,7 @@
# # Species
# - type: loadout
# id: LoadoutSecurityEquipmentTruncheon
-# category: JobsAUncategorized
+# category: JobsSecurity
# cost: 8
# requirements:
# - !type:CharacterJobRequirement
diff --git a/Resources/Prototypes/Loadouts/Jobs/service.yml b/Resources/Prototypes/Loadouts/Jobs/service.yml
index 815138e393..65dbf8d1c9 100644
--- a/Resources/Prototypes/Loadouts/Jobs/service.yml
+++ b/Resources/Prototypes/Loadouts/Jobs/service.yml
@@ -1,10 +1,12 @@
# Clown
- type: loadout
id: LoadoutServiceClownOutfitJester
- category: JobsAUncategorized
- cost: 3
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsService
- !type:CharacterJobRequirement
jobs:
- Clown
@@ -15,10 +17,12 @@
- type: loadout
id: LoadoutServiceClownOutfitJesterAlt
- category: JobsAUncategorized
- cost: 3
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsService
- !type:CharacterJobRequirement
jobs:
- Clown
@@ -29,10 +33,12 @@
- type: loadout
id: LoadoutServiceClownOuterWinter
- category: JobsAUncategorized
- cost: 2
+ category: JobsService
+ cost: 1
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutOuterService
- !type:CharacterJobRequirement
jobs:
- Clown
@@ -41,10 +47,12 @@
- type: loadout
id: LoadoutServiceClownOuterClownPriest
- category: JobsAUncategorized
- cost: 2
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutOuterService
- !type:CharacterJobRequirement
jobs:
- Clown
@@ -53,10 +61,12 @@
- type: loadout
id: LoadoutServiceClownBootsWinter
- category: JobsAUncategorized
- cost: 1
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutShoesService
- !type:CharacterJobRequirement
jobs:
- Clown
@@ -65,10 +75,12 @@
- type: loadout
id: LoadoutServiceClownMaskSexy
- category: JobsAUncategorized
- cost: 1
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutMaskService
- !type:CharacterJobRequirement
jobs:
- Clown
@@ -77,21 +89,28 @@
- type: loadout
id: LoadoutServiceClownBedsheetClown
- category: JobsAUncategorized
- cost: 2
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutNeckService
- !type:CharacterJobRequirement
jobs:
- Clown
items:
- BedsheetClown
+# For the most part we dont want people to take this item, so its used as an example of all the things
+# you can do with requirements. Point someone to this thing if they ask "how tf do loadout requirements work?"
+
- type: loadout
id: LoadoutServiceClownCowToolboxFilled
- category: JobsAUncategorized
- cost: 3
+ category: JobsService
+ cost: 2
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutEquipmentService
- !type:CharacterLogicXorRequirement
requirements:
- !type:CharacterLogicAndRequirement
@@ -121,7 +140,7 @@
- !type:CharacterSexRequirement
sex: Male
- !type:CharacterJobRequirement
- inverted: true
+ inverted: true # This is the equivalent of !(condition)
jobs:
- Clown
- !type:CharacterJobRequirement
@@ -133,10 +152,12 @@
# Mime
- type: loadout
id: LoadoutServiceMimeOuterWinter
- category: JobsAUncategorized
- cost: 2
+ category: JobsService
+ cost: 1
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutOuterService
- !type:CharacterJobRequirement
jobs:
- Mime
@@ -145,10 +166,12 @@
- type: loadout
id: LoadoutServiceMimeMaskSad
- category: JobsAUncategorized
- cost: 1
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutMaskService
- !type:CharacterJobRequirement
jobs:
- Mime
@@ -157,10 +180,12 @@
- type: loadout
id: LoadoutServiceMimeMaskScared
- category: JobsAUncategorized
- cost: 1
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutMaskService
- !type:CharacterJobRequirement
jobs:
- Mime
@@ -169,10 +194,12 @@
- type: loadout
id: LoadoutServiceMimeMaskSexy
- category: JobsAUncategorized
- cost: 1
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutMaskService
- !type:CharacterJobRequirement
jobs:
- Mime
@@ -181,10 +208,12 @@
- type: loadout
id: LoadoutServiceMimeShoesBootsWinter
- category: JobsAUncategorized
- cost: 1
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutShoesService
- !type:CharacterJobRequirement
jobs:
- Mime
@@ -193,10 +222,12 @@
- type: loadout
id: LoadoutServiceMimeBedsheetMime
- category: JobsAUncategorized
- cost: 2
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutNeckService
- !type:CharacterJobRequirement
jobs:
- Mime
@@ -206,10 +237,12 @@
# Bartender
- type: loadout
id: LoadoutServiceBartenderUniformPurple
- category: JobsAUncategorized
- cost: 2
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsService
- !type:CharacterJobRequirement
jobs:
- Bartender
@@ -219,10 +252,12 @@
# Botanist
- type: loadout
id: LoadoutServiceBotanistUniformOveralls
- category: JobsAUncategorized
- cost: 2
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsService
- !type:CharacterJobRequirement
jobs:
- Botanist
@@ -232,10 +267,12 @@
# Lawyer
- type: loadout
id: LoadoutServiceLawyerUniformBlueSuit
- category: JobsAUncategorized
- cost: 2
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsService
- !type:CharacterJobRequirement
jobs:
- Lawyer
@@ -244,10 +281,12 @@
- type: loadout
id: LoadoutServiceLawyerUniformBlueSkirt
- category: JobsAUncategorized
- cost: 2
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsService
- !type:CharacterJobRequirement
jobs:
- Lawyer
@@ -256,10 +295,12 @@
- type: loadout
id: LoadoutServiceLawyerUniformRedSuit
- category: JobsAUncategorized
- cost: 2
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsService
- !type:CharacterJobRequirement
jobs:
- Lawyer
@@ -268,10 +309,12 @@
- type: loadout
id: LoadoutServiceLawyerUniformRedSkirt
- category: JobsAUncategorized
- cost: 2
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsService
- !type:CharacterJobRequirement
jobs:
- Lawyer
@@ -280,10 +323,12 @@
- type: loadout
id: LoadoutServiceLawyerUniformPurpleSuit
- category: JobsAUncategorized
- cost: 2
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsService
- !type:CharacterJobRequirement
jobs:
- Lawyer
@@ -292,10 +337,12 @@
- type: loadout
id: LoadoutServiceLawyerUniformPurpleSkirt
- category: JobsAUncategorized
- cost: 2
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsService
- !type:CharacterJobRequirement
jobs:
- Lawyer
@@ -304,10 +351,12 @@
- type: loadout
id: LoadoutServiceLawyerUniformGoodSuit
- category: JobsAUncategorized
- cost: 2
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsService
- !type:CharacterJobRequirement
jobs:
- Lawyer
@@ -316,10 +365,12 @@
- type: loadout
id: LoadoutServiceLawyerUniformGoodSkirt
- category: JobsAUncategorized
- cost: 2
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsService
- !type:CharacterJobRequirement
jobs:
- Lawyer
@@ -328,10 +379,12 @@
- type: loadout
id: LoadoutServiceReporterUniformJournalist
- category: JobsAUncategorized
- cost: 2
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsService
- !type:CharacterJobRequirement
jobs:
- Reporter
@@ -341,10 +394,12 @@
# Reporter
- type: loadout
id: LoadoutServiceReporterUniformDetectivesuit
- category: JobsAUncategorized
- cost: 2
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsService
- !type:CharacterJobRequirement
jobs:
- Reporter
@@ -353,10 +408,12 @@
- type: loadout
id: LoadoutServiceReporterUniformDetectiveskirt
- category: JobsAUncategorized
- cost: 2
+ category: JobsService
+ cost: 0
exclusive: true
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutUniformsService
- !type:CharacterJobRequirement
jobs:
- Reporter
@@ -365,12 +422,170 @@
# Musician
- type: loadout
- id: LoadoutItemSynthesizerInstrument
- category: JobsAUncategorized
- cost: 8
+ id: LoadoutItemSynthesizerInstrumentMusician
+ category: JobsService
+ cost: 2
requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutMusicianInstruments
- !type:CharacterJobRequirement
jobs:
- Musician
items:
- SynthesizerInstrument
+
+- type: loadout
+ id: LoadoutItemMicrophoneInstrumentMusician
+ category: JobsService
+ cost: 0
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutMusicianInstruments
+ - !type:CharacterJobRequirement
+ jobs:
+ - Musician
+ items:
+ - MicrophoneInstrument
+
+- type: loadout
+ id: LoadoutItemKalimbaInstrumentMusician
+ category: Items
+ cost: 0
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutMusicianInstruments
+ - !type:CharacterJobRequirement
+ jobs:
+ - Musician
+ items:
+ - KalimbaInstrument
+
+- type: loadout
+ id: LoadoutItemTrumpetInstrumentMusician
+ category: Items
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutMusicianInstruments
+ - !type:CharacterJobRequirement
+ jobs:
+ - Musician
+ items:
+ - TrumpetInstrument
+
+- type: loadout
+ id: LoadoutItemElectricGuitarInstrumentMusician
+ category: Items
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutMusicianInstruments
+ - !type:CharacterJobRequirement
+ jobs:
+ - Musician
+ items:
+ - ElectricGuitarInstrument
+
+- type: loadout
+ id: LoadoutItemBassGuitarInstrumentMusician
+ category: Items
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutMusicianInstruments
+ - !type:CharacterJobRequirement
+ jobs:
+ - Musician
+ items:
+ - BassGuitarInstrument
+
+- type: loadout
+ id: LoadoutItemRockGuitarInstrumentMusician
+ category: Items
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutMusicianInstruments
+ - !type:CharacterJobRequirement
+ jobs:
+ - Musician
+ items:
+ - RockGuitarInstrument
+
+- type: loadout
+ id: LoadoutItemAcousticGuitarInstrumentMusician
+ category: Items
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutMusicianInstruments
+ - !type:CharacterJobRequirement
+ jobs:
+ - Musician
+ items:
+ - AcousticGuitarInstrument
+
+- type: loadout
+ id: LoadoutItemViolinInstrumentMusician
+ category: Items
+ cost: 2
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutMusicianInstruments
+ - !type:CharacterJobRequirement
+ jobs:
+ - Musician
+ items:
+ - ViolinInstrument
+
+- type: loadout
+ id: LoadoutItemHarmonicaInstrumentMusician
+ category: Items
+ cost: 0
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutMusicianInstruments
+ - !type:CharacterJobRequirement
+ jobs:
+ - Musician
+ items:
+ - HarmonicaInstrument
+
+- type: loadout
+ id: LoadoutItemAccordionInstrumentMusician
+ category: Items
+ cost: 0
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutMusicianInstruments
+ - !type:CharacterJobRequirement
+ jobs:
+ - Musician
+ items:
+ - AccordionInstrument
+
+- type: loadout
+ id: LoadoutItemFluteInstrumentMusician
+ category: Items
+ cost: 0
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutMusicianInstruments
+ - !type:CharacterJobRequirement
+ jobs:
+ - Musician
+ items:
+ - FluteInstrument
+
+- type: loadout
+ id: LoadoutItemOcarinaInstrumentMusician
+ category: Items
+ cost: 0
+ requirements:
+ - !type:CharacterItemGroupRequirement
+ group: LoadoutMusicianInstruments
+ - !type:CharacterJobRequirement
+ jobs:
+ - Musician
+ items:
+ - OcarinaInstrument
\ No newline at end of file
diff --git a/Resources/Prototypes/Loadouts/items.yml b/Resources/Prototypes/Loadouts/items.yml
index 97a3ed2fdc..12fc1cdf85 100644
--- a/Resources/Prototypes/Loadouts/items.yml
+++ b/Resources/Prototypes/Loadouts/items.yml
@@ -139,6 +139,10 @@
requirements:
- !type:CharacterItemGroupRequirement
group: LoadoutInstrumentsAny
+ - !type:CharacterJobRequirement
+ inverted: true
+ jobs:
+ - Musician
- type: loadout
id: LoadoutItemKalimbaInstrument
@@ -149,6 +153,10 @@
requirements:
- !type:CharacterItemGroupRequirement
group: LoadoutInstrumentsAny
+ - !type:CharacterJobRequirement
+ inverted: true
+ jobs:
+ - Musician
- type: loadout
id: LoadoutItemTrumpetInstrument
@@ -159,6 +167,10 @@
requirements:
- !type:CharacterItemGroupRequirement
group: LoadoutInstrumentsAny
+ - !type:CharacterJobRequirement
+ inverted: true
+ jobs:
+ - Musician
- type: loadout
id: LoadoutItemElectricGuitar
@@ -169,6 +181,10 @@
requirements:
- !type:CharacterItemGroupRequirement
group: LoadoutInstrumentsAny
+ - !type:CharacterJobRequirement
+ inverted: true
+ jobs:
+ - Musician
- type: loadout
id: LoadoutItemBassGuitar
@@ -179,6 +195,10 @@
requirements:
- !type:CharacterItemGroupRequirement
group: LoadoutInstrumentsAny
+ - !type:CharacterJobRequirement
+ inverted: true
+ jobs:
+ - Musician
- type: loadout
id: LoadoutItemRockGuitar
@@ -189,6 +209,10 @@
requirements:
- !type:CharacterItemGroupRequirement
group: LoadoutInstrumentsAny
+ - !type:CharacterJobRequirement
+ inverted: true
+ jobs:
+ - Musician
- type: loadout
id: LoadoutItemAcousticGuitar
@@ -199,6 +223,10 @@
requirements:
- !type:CharacterItemGroupRequirement
group: LoadoutInstrumentsAny
+ - !type:CharacterJobRequirement
+ inverted: true
+ jobs:
+ - Musician
- type: loadout
id: LoadoutItemViolin
@@ -209,6 +237,10 @@
requirements:
- !type:CharacterItemGroupRequirement
group: LoadoutInstrumentsAny
+ - !type:CharacterJobRequirement
+ inverted: true
+ jobs:
+ - Musician
- type: loadout
id: LoadoutItemHarmonica
@@ -219,6 +251,10 @@
requirements:
- !type:CharacterItemGroupRequirement
group: LoadoutInstrumentsAny
+ - !type:CharacterJobRequirement
+ inverted: true
+ jobs:
+ - Musician
- type: loadout
id: LoadoutItemAccordion
@@ -229,6 +265,10 @@
requirements:
- !type:CharacterItemGroupRequirement
group: LoadoutInstrumentsAny
+ - !type:CharacterJobRequirement
+ inverted: true
+ jobs:
+ - Musician
- type: loadout
id: LoadoutItemFlute
@@ -239,6 +279,10 @@
requirements:
- !type:CharacterItemGroupRequirement
group: LoadoutInstrumentsAny
+ - !type:CharacterJobRequirement
+ inverted: true
+ jobs:
+ - Musician
- type: loadout
id: LoadoutItemOcarina
@@ -249,6 +293,10 @@
requirements:
- !type:CharacterItemGroupRequirement
group: LoadoutInstrumentsAny
+ - !type:CharacterJobRequirement
+ inverted: true
+ jobs:
+ - Musician
# Survival Kit
- type: loadout
diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/CircuitBoards/production.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/CircuitBoards/production.yml
index 6e80ec7c4e..2ed4a594e3 100644
--- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/CircuitBoards/production.yml
+++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/CircuitBoards/production.yml
@@ -12,9 +12,8 @@
MatterBin: 1
Manipulator: 1
materialRequirements:
- Glass: 1
Cable: 1
- Diamond: 10
+ PlasmaGlass: 5
tagRequirements:
BorgArm:
Amount: 3
diff --git a/Resources/Prototypes/Nyanotrasen/GameRules/events.yml b/Resources/Prototypes/Nyanotrasen/GameRules/events.yml
index 43347ca7d0..524bf4d4b7 100644
--- a/Resources/Prototypes/Nyanotrasen/GameRules/events.yml
+++ b/Resources/Prototypes/Nyanotrasen/GameRules/events.yml
@@ -24,13 +24,13 @@
earliestStart: 25
- type: MidRoundAntagRule
-#- type: entity
-# noSpawn: true
-# parent: BaseMidRoundAntag
-# id: RatKingSpawn
-# components:
-# - type: MidRoundAntagRule
-# spawner: SpawnPointGhostRatKing
+- type: entity
+ noSpawn: true
+ parent: BaseMidRoundAntag
+ id: RatKingSpawn
+ components:
+ - type: MidRoundAntagRule
+ spawner: SpawnPointGhostRatKing
- type: entity
noSpawn: true
diff --git a/Resources/Prototypes/Nyanotrasen/Reagents/Consumable/Drink/alcohol.yml b/Resources/Prototypes/Nyanotrasen/Reagents/Consumable/Drink/alcohol.yml
index 972fc08239..19d49b913a 100644
--- a/Resources/Prototypes/Nyanotrasen/Reagents/Consumable/Drink/alcohol.yml
+++ b/Resources/Prototypes/Nyanotrasen/Reagents/Consumable/Drink/alcohol.yml
@@ -19,7 +19,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.07
+ amount: 0.15
- type: reagent
id: Soju
@@ -42,7 +42,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.15
+ amount: 0.2
- type: reagent
id: OrangeCreamice
@@ -65,7 +65,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.05
+ amount: 0.1
- type: reagent
id: Silverjack
@@ -88,7 +88,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.0625
+ amount: 0.1375
- type: reagent
id: Brainbomb
@@ -118,7 +118,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.085
+ amount: 0.13
- !type:AdjustReagent
reagent: THC
amount: 0.33
@@ -147,7 +147,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.025
+ amount: 0.08
- type: reagent
id: CircusJuice
@@ -170,7 +170,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.0625
+ amount: 0.12
- !type:Emote #It's very funny
emote: Laugh
probability: 0.15
@@ -196,7 +196,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.065
+ amount: 0.1125
- !type:AdjustTemperature
amount: 75 # thermal energy, not temperature!
@@ -221,4 +221,4 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.03
+ amount: 0.12
diff --git a/Resources/Prototypes/Nyanotrasen/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Nyanotrasen/Recipes/Lathes/electronics.yml
index 1e53c715af..695fb42150 100644
--- a/Resources/Prototypes/Nyanotrasen/Recipes/Lathes/electronics.yml
+++ b/Resources/Prototypes/Nyanotrasen/Recipes/Lathes/electronics.yml
@@ -4,7 +4,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 700
Gold: 100
- type: latheRecipe
@@ -13,7 +13,7 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 700
Gold: 100
- type: latheRecipe
@@ -21,8 +21,8 @@
result: CrewMonitoringComputerCircuitboard
completetime: 4
materials:
- Steel: 100
- Glass: 900
+ Steel: 100
+ Glass: 700
- type: latheRecipe
id: ClothingEyesHudMedical
@@ -41,4 +41,4 @@
completetime: 4
materials:
Steel: 100
- Glass: 900
+ Glass: 700
diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml b/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml
index e31087c309..d9e57d5b80 100644
--- a/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml
+++ b/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml
@@ -22,7 +22,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.3
+ amount: 0.7
- type: reagent
id: Ale
@@ -77,7 +77,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.1
+ amount: 0.25
- type: reagent
id: BlueHawaiian
@@ -97,7 +97,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.2
+ amount: 0.154
- type: reagent
id: Cognac
@@ -121,7 +121,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.2
+ amount: 0.4
- type: reagent
id: DeadRum
@@ -144,7 +144,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.2
+ amount: 0.6
- type: reagent
id: Ethanol
@@ -163,7 +163,7 @@
- !type:HealthChange
conditions:
- !type:ReagentThreshold
- min: 15
+ min: 45
damage:
types:
Poison: 1
@@ -278,7 +278,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.2
+ amount: 0.45
- type: reagent
id: CoffeeLiqueur
@@ -294,6 +294,13 @@
metamorphicMaxFillLevels: 3
metamorphicFillBaseName: fill-
metamorphicChangeColor: true
+ metabolisms:
+ Drink:
+ effects:
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.20
+
- type: reagent
id: MelonLiquor
@@ -309,6 +316,12 @@
metamorphicMaxFillLevels: 5
metamorphicFillBaseName: fill-
metamorphicChangeColor: true
+ metabolisms:
+ Drink:
+ effects:
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.20
- type: reagent
id: NTCahors
@@ -324,6 +337,12 @@
metamorphicMaxFillLevels: 5
metamorphicFillBaseName: fill-
metamorphicChangeColor: true
+ metabolisms:
+ Drink:
+ effects:
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.17
- type: reagent
id: PoisonWine
@@ -346,7 +365,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.05
+ amount: 0.11
Poison:
effects:
- !type:HealthChange
@@ -376,7 +395,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.2
+ amount: 0.40
##Commented out in favor of Nyano sake/soju
#- type: reagent
@@ -409,7 +428,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.2
+ amount: 0.40
- type: reagent
id: Vermouth
@@ -425,6 +444,12 @@
metamorphicMaxFillLevels: 4
metamorphicFillBaseName: fill-
metamorphicChangeColor: false
+ metabolisms:
+ Drink:
+ effects:
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.16
- type: reagent
id: Vodka
@@ -448,7 +473,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.2
+ amount: 0.40
- type: reagent
id: Whiskey
@@ -472,7 +497,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.2
+ amount: 0.40
- type: reagent
id: Wine
@@ -489,6 +514,14 @@
metamorphicMaxFillLevels: 5
metamorphicFillBaseName: fill-
metamorphicChangeColor: true
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.11
- type: reagent
id: Champagne
@@ -512,7 +545,7 @@
factor: 3
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.3
+ amount: 0.12
# Mixed Alcohol
@@ -530,6 +563,14 @@
metamorphicMaxFillLevels: 5
metamorphicFillBaseName: fill-
metamorphicChangeColor: false
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 1
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.073
- type: reagent
id: AlliesCocktail
@@ -545,6 +586,14 @@
metamorphicMaxFillLevels: 4
metamorphicFillBaseName: fill-
metamorphicChangeColor: false
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.37
- type: reagent
id: Aloe
@@ -575,6 +624,14 @@
metamorphicMaxFillLevels: 5
metamorphicFillBaseName: fill-
metamorphicChangeColor: false
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.204
- type: reagent
id: Andalusia
@@ -590,6 +647,14 @@
metamorphicMaxFillLevels: 4
metamorphicFillBaseName: fill-
metamorphicChangeColor: false
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.27
- type: reagent
id: Antifreeze
@@ -612,7 +677,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.15
+ amount: 0.2
- type: reagent
id: AtomicBomb
@@ -635,7 +700,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.15
+ amount: 0.254
- !type:AdjustReagent
reagent: Uranium
amount: 0.05
@@ -661,7 +726,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.15
+ amount: 0.28
- type: reagent
id: BahamaMama
@@ -677,6 +742,14 @@
metamorphicMaxFillLevels: 5
metamorphicFillBaseName: fill-
metamorphicChangeColor: true
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.11
- type: reagent
id: BananaHonk
@@ -707,6 +780,14 @@
metamorphicMaxFillLevels: 3
metamorphicFillBaseName: fill-
metamorphicChangeColor: true
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.05
- type: reagent
id: BeepskySmash
@@ -729,7 +810,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.15
+ amount: 0.13
- type: reagent
id: BlackRussian
@@ -752,7 +833,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.2
+ amount: 0.33
- type: reagent
id: BloodyMary
@@ -768,6 +849,14 @@
metamorphicMaxFillLevels: 5
metamorphicFillBaseName: fill-
metamorphicChangeColor: true
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.13
- type: reagent
id: Booger
@@ -783,6 +872,14 @@
metamorphicMaxFillLevels: 5
metamorphicFillBaseName: fill-
metamorphicChangeColor: true
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.08
- type: reagent
id: BraveBull
@@ -805,7 +902,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.2
+ amount: 0.33
- type: reagent
id: CoconutRum
@@ -825,7 +922,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.2
+ amount: 0.26
- type: reagent
id: Cosmopolitan
@@ -845,7 +942,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.15
+ amount: 0.13
- type: reagent
id: CubaLibre
@@ -868,7 +965,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.07
+ amount: 0.13
- type: reagent
id: DemonsBlood
@@ -884,6 +981,14 @@
metamorphicMaxFillLevels: 4
metamorphicFillBaseName: fill-
metamorphicChangeColor: true
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.10
- type: reagent
id: DevilsKiss
@@ -899,6 +1004,14 @@
metamorphicMaxFillLevels: 3
metamorphicFillBaseName: fill-
metamorphicChangeColor: true
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.20
- type: reagent
id: DoctorsDelight
@@ -921,9 +1034,6 @@
factor: 2
- !type:SatiateHunger
factor: -2
- - !type:AdjustReagent
- reagent: Ethanol
- amount: 0.05
Medicine:
effects:
- !type:HealthChange
@@ -955,7 +1065,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.15
+ amount: 0.225
- type: reagent
id: ErikaSurprise
@@ -971,6 +1081,14 @@
metamorphicMaxFillLevels: 5
metamorphicFillBaseName: fill-
metamorphicChangeColor: true
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.02
- type: reagent
id: GargleBlaster
@@ -993,7 +1111,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.2
+ amount: 0.32
- type: reagent
id: GinFizz
@@ -1016,7 +1134,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.07
+ amount: 0.15
- type: reagent
id: GinTonic
@@ -1039,7 +1157,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.07
+ amount: 0.15
- type: reagent
id: Gildlager
@@ -1062,7 +1180,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.2
+ amount: 0.363
- type: reagent
id: Grog
@@ -1078,6 +1196,14 @@
metamorphicMaxFillLevels: 5
metamorphicFillBaseName: fill-
metamorphicChangeColor: true
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.10
- type: reagent
id: HippiesDelight
@@ -1093,6 +1219,14 @@
metamorphicMaxFillLevels: 6
metamorphicFillBaseName: fill-
metamorphicChangeColor: false
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.16
- type: reagent
id: Hooch
@@ -1102,6 +1236,14 @@
physicalDesc: reagent-physical-desc-strong-smelling
flavor: alcohol
color: "#664e00"
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.50
- type: reagent
id: IcedBeer
@@ -1139,7 +1281,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.15
+ amount: 0.16
- type: reagent
id: IrishCream
@@ -1162,7 +1304,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.2
+ amount: 0.266
- type: reagent
id: IrishCoffee
@@ -1185,7 +1327,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.15
+ amount: 0.133
- type: reagent
id: LongIslandIcedTea
@@ -1208,7 +1350,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.15
+ amount: 0.273
- type: reagent
id: Manhattan
@@ -1224,6 +1366,14 @@
metamorphicMaxFillLevels: 3
metamorphicFillBaseName: fill-
metamorphicChangeColor: false
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.32
- type: reagent
id: ManhattanProject
@@ -1239,6 +1389,14 @@
metamorphicMaxFillLevels: 3
metamorphicFillBaseName: fill-
metamorphicChangeColor: false
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.363
- type: reagent
id: ManlyDorf
@@ -1291,7 +1449,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.15
+ amount: 0.353
- type: reagent
id: Mead
@@ -1322,6 +1480,14 @@
metamorphicMaxFillLevels: 6
metamorphicFillBaseName: fill-
metamorphicChangeColor: false
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.10
- type: reagent
id: Moonshine
@@ -1338,7 +1504,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.25
+ amount: 0.40
- type: reagent
id: Neurotoxin
@@ -1361,7 +1527,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.25
+ amount: 0.16
Poison:
effects:
- !type:HealthChange
@@ -1387,7 +1553,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.2
+ amount: 0.04
- type: reagent
id: Patron
@@ -1410,7 +1576,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.2
+ amount: 0.50
- type: reagent
id: RedMead
@@ -1438,6 +1604,14 @@
metamorphicSprite:
sprite: Objects/Consumable/Drinks/pinacolada.rsi
state: icon
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.06
- type: reagent
id: Sbiten
@@ -1453,6 +1627,14 @@
metamorphicMaxFillLevels: 5
metamorphicFillBaseName: fill-
metamorphicChangeColor: true
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.2
- type: reagent
id: ScrewdriverCocktail
@@ -1475,7 +1657,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.07
+ amount: 0.13
- type: reagent
id: CogChamp
@@ -1501,7 +1683,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.15
+ amount: 0.176
- type: reagent
id: Silencer
@@ -1540,6 +1722,14 @@
metamorphicMaxFillLevels: 5
metamorphicFillBaseName: fill-
metamorphicChangeColor: false
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.23
- type: reagent
id: SnowWhite
@@ -1555,6 +1745,14 @@
metamorphicMaxFillLevels: 6
metamorphicFillBaseName: fill-
metamorphicChangeColor: true
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.03
- type: reagent
id: SuiDream
@@ -1570,6 +1768,14 @@
metamorphicMaxFillLevels: 5
metamorphicFillBaseName: fill-
metamorphicChangeColor: false
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.13
- type: reagent
id: SyndicateBomb
@@ -1585,6 +1791,14 @@
metamorphicMaxFillLevels: 6
metamorphicFillBaseName: fill-
metamorphicChangeColor: true
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.095
- type: reagent
id: TequilaSunrise
@@ -1607,7 +1821,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.15
+ amount: 0.26
- type: reagent
id: TheMartinez
@@ -1623,6 +1837,14 @@
metamorphicMaxFillLevels: 3
metamorphicFillBaseName: fill-
metamorphicChangeColor: false
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.13
- type: reagent
id: ThreeMileIsland
@@ -1645,7 +1867,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.15
+ amount: 0.273
- !type:AdjustReagent
reagent: Uranium
amount: 0.05
@@ -1664,6 +1886,14 @@
metamorphicMaxFillLevels: 4
metamorphicFillBaseName: fill-
metamorphicChangeColor: false
+ metabolisms:
+ Drink:
+ effects:
+ - !type:SatiateThirst
+ factor: 2
+ - !type:AdjustReagent
+ reagent: Ethanol
+ amount: 0.112
- type: reagent
id: VodkaMartini
@@ -1686,7 +1916,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.15
+ amount: 0.32
- type: reagent
id: VodkaTonic
@@ -1709,7 +1939,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.07
+ amount: 0.13
- type: reagent
id: WhiskeyCola
@@ -1732,7 +1962,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.07
+ amount: 0.013
- type: reagent
id: WhiskeySoda
@@ -1755,7 +1985,7 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.07
+ amount: 0.13
- type: reagent
id: WhiteGilgamesh
@@ -1772,7 +2002,7 @@
factor: 1
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.15
+ amount: 0.04
- type: reagent
id: WhiteRussian
@@ -1795,4 +2025,4 @@
factor: 2
- !type:AdjustReagent
reagent: Ethanol
- amount: 0.15
+ amount: 0.33
diff --git a/Resources/Prototypes/Recipes/Reactions/drinks.yml b/Resources/Prototypes/Recipes/Reactions/drinks.yml
index c810ebb0ce..812cded972 100644
--- a/Resources/Prototypes/Recipes/Reactions/drinks.yml
+++ b/Resources/Prototypes/Recipes/Reactions/drinks.yml
@@ -857,7 +857,7 @@
LemonLime:
amount: 1
products:
- SnowWhite: 3
+ SnowWhite: 2
- type: reaction
id: SoyLatte
diff --git a/Resources/Prototypes/Research/experimental.yml b/Resources/Prototypes/Research/experimental.yml
index 0dbcded546..d46e1db144 100644
--- a/Resources/Prototypes/Research/experimental.yml
+++ b/Resources/Prototypes/Research/experimental.yml
@@ -56,6 +56,7 @@
cost: 5000
recipeUnlocks:
- TechDiskComputerCircuitboard
+ - ReverseEngineeringMachineCircuitboard #DeltaV
- type: technology
id: MagnetsTech
diff --git a/Resources/Prototypes/Traits/disabilities.yml b/Resources/Prototypes/Traits/disabilities.yml
index ba727cb266..51099839ac 100644
--- a/Resources/Prototypes/Traits/disabilities.yml
+++ b/Resources/Prototypes/Traits/disabilities.yml
@@ -172,8 +172,8 @@
species:
- IPC
components:
- - type: BloodDeficiency # 0.07 = start taking bloodloss damage at around ~21.4 minutes,
- bloodLossAmount: 0.07 # then become crit ~10 minutes later
+ - type: BloodDeficiency # by default, start taking bloodloss damage at around ~21.4 minutes,
+ bloodLossPercentage: 0.0002333333 # then become crit ~10 minutes
- type: trait
id: Hemophilia
diff --git a/Resources/ServerInfo/Guidebook/Service/FoodRecipes.xml b/Resources/ServerInfo/Guidebook/Service/FoodRecipes.xml
index 4690e32e27..e9a81b9bef 100644
--- a/Resources/ServerInfo/Guidebook/Service/FoodRecipes.xml
+++ b/Resources/ServerInfo/Guidebook/Service/FoodRecipes.xml
@@ -4,84 +4,6 @@
Продукты смешиваются в мензурке, еда готовится в микроволновке. Время готовки обычно указывается в рецепте.
-ВНИМАНИЕ: Это не автоматически сгенерированный список, все, что здесь перечислено, может устареть. На Wiki есть гораздо больше, чем перечислено здесь.
-
-## Основы: Смешивание
-
- - Тесто = 15 муки, 10 воды
- - Кукурузное тесто = 1 яйцо (6 ед.), 10 молока, 15 кукурузной муки
- - Тесто для тортильи = 15 кукурузная мука, 10 вода
- - Тофу = 5 универсального фермента (Катализатор), 30 соевого молока
- - Тесто для пирога = 2 яйца (12 ед.), 15 муки, 5 столовой соли
- - Тесто для торта = 2 яйца(12 ед.), 15 муки, 5 сахара
- - Веганское тесто для торта = 15 соевого молока, 15 муки, 5 сахара
- - Масло = 30 молока, 5 столовой соли (Катализатор)
- - Головка сыра = 5 универсального фермента (Катализатор), 40 молока
- - Козий сыр = 5 универсального фермента (Катализатор), 10 козье молоко
- - Фрикаделька = 1 яйцо (6 ед.), 5 муки, 5 непрожаренные животные протеины
- - Шоколад = 6 Какао-порошок, 2 молока, 2 сахар
- - Непрожаренные животные протеины: измельчить сырое мясо
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-## Второстепенные продукты
-
- - Кусочек теста: нарезать тесто
- - Булочка: положить в микроволновку кусочек теста на 5 секунд
- - Сырая котлета: нарезать сырое мясо
- - Сырный ломтик: нарезать головку сыра
- - Плоское тесто: раскатайте тесто скалкой либо другим круглым объектом (огнетушитель, жестяная банка, бутылка).
- - Ломтик теста для тортильи: нарежьте тесто для тортильи
- - Раскатанное тесто для тортильи: Используйте скалку или круглый предмет (огнетушитель, банку из-под содовой, бутылку) на ломтике теста для тортильи
- - Лепёшка тако: Разогрейте тесто для тортильи в микроволновой печи в течение 5 секунд
-
-## Примеры блюд
-
- - Хлеб: положить в микроволновку тесто на 10 секунд
- - Бургер: положить в микроволновку 1 булочку и 1 сырое мясо на 10 секунд
- - Томатный суп: 10 ед. воды, 1 пустая миска и 2 помидора на 10 секунд
- - Цитрусовый салат: 1 пустая миска, 1 лемон, 1 лайм, 1 апельсин на 5 секунд
- - Маргарита: положить в микроволновку 1 плоское тесто, 1 сырный ломтик и 4 помидора на 30 секунд
- - Торт: 1 тесто для торта в микроволновку на 15 секунд
- - Яблочный пирог: 1 тесто для пирога, 3 яблока и 1 формочку для пирога на 15 секунд
- - Тако с говядиной: В микроволновку поместить 1 лепёшка для тако, 1 котлета из сырого мяса, 1 сырная долька на 10 секунд
- - Кубинский карп : В микроволновку поместить 1 тесто, 1 сырная долька, 1 чили, 1 филе карпа на 15 секунд
- - Пирог с банановым кремом : В микроволновку поместить 1 тесто для пирога, 3 банана, and 1 Форму для пирога на 15 секунд
- - Картофель фри из моркови : В микроволновку поместить 1 морковь, 15 ед. соли на 15 секунд
- - Блинчик : В микроволновку поместить 5 ед. муки, 5 ед. молока, 1 яйцо (6ед.) на 5 секунд
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+