diff --git a/Content.Client/White/Items/Tricorder/TricorderSystem.cs b/Content.Client/White/Items/Tricorder/TricorderSystem.cs
new file mode 100644
index 0000000000..3fe0137fbf
--- /dev/null
+++ b/Content.Client/White/Items/Tricorder/TricorderSystem.cs
@@ -0,0 +1,73 @@
+using Content.Client.Items;
+using Content.Client.Message;
+using Content.Client.Stylesheets;
+using Content.Shared.White.Item.Tricorder;
+using Robust.Client.UserInterface;
+using Robust.Client.UserInterface.Controls;
+using Robust.Shared.GameStates;
+using Robust.Shared.Timing;
+
+namespace Content.Client.White.Items.Tricorder;
+
+///
+public sealed class TricorderSystem : SharedTricorderSystem
+{
+ ///
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnCollectItemStatus);
+ SubscribeLocalEvent(HandleTricorderState);
+ }
+
+ private static void OnCollectItemStatus(EntityUid uid, TricorderComponent component, ItemStatusCollectMessage args)
+ {
+ if (component.CurrentMode != TricorderMode.Multitool)
+ {
+ args.Controls.Clear();
+ }
+
+ args.Controls.Add(new StatusControl(component));
+ }
+
+ private static void HandleTricorderState(EntityUid uid, TricorderComponent component, ref ComponentHandleState args)
+ {
+ if (args.Current is not TricorderComponentState state)
+ {
+ return;
+ }
+
+ component.CurrentMode = state.CurrentMode;
+ }
+
+ private sealed class StatusControl : Control
+ {
+ private readonly RichTextLabel _label;
+ private readonly TricorderComponent _tricorder;
+
+ private TricorderMode? _linkModeActive;
+
+ public StatusControl(TricorderComponent tricorder)
+ {
+ _tricorder = tricorder;
+ _label = new RichTextLabel { StyleClasses = { StyleNano.StyleClassItemStatus } };
+ AddChild(_label);
+ }
+
+ protected override void FrameUpdate(FrameEventArgs args)
+ {
+ base.FrameUpdate(args);
+
+ if (_linkModeActive != null && _linkModeActive == _tricorder.CurrentMode)
+ return;
+
+ _linkModeActive = _tricorder.CurrentMode;
+
+ var modeLocString = GetNameByMode(_tricorder.CurrentMode);
+
+ _label.SetMarkup(Robust.Shared.Localization.Loc.GetString("tricorder-item-status-label",
+ ("mode", Robust.Shared.Localization.Loc.GetString(modeLocString))));
+ }
+ }
+}
\ No newline at end of file
diff --git a/Content.Server/Speech/Components/VocalComponent.cs b/Content.Server/Speech/Components/VocalComponent.cs
index 029d638a66..e06dd60ee1 100644
--- a/Content.Server/Speech/Components/VocalComponent.cs
+++ b/Content.Server/Speech/Components/VocalComponent.cs
@@ -1,4 +1,5 @@
using Content.Server.Speech.EntitySystems;
+using Content.Server.White.AspectsSystem.Aspects;
using Content.Shared.Chat.Prototypes;
using Content.Shared.Humanoid;
using Robust.Shared.Audio;
@@ -12,7 +13,7 @@ namespace Content.Server.Speech.Components;
/// Component required for entities to be able to do vocal emotions.
///
[RegisterComponent]
-[Access(typeof(VocalSystem))]
+[Access(typeof(VocalSystem), typeof(CatEarsAspect))]
public sealed partial class VocalComponent : Component
{
///
@@ -41,6 +42,6 @@ public sealed partial class VocalComponent : Component
/// Currently loaded emote sounds prototype, based on entity sex.
/// Null if no valid prototype for entity sex was found.
///
- [ViewVariables]
+ [ViewVariables(VVAccess.ReadWrite)]
public EmoteSoundsPrototype? EmoteSounds = null;
}
diff --git a/Content.Server/White/AspectsSystem/Aspects/CatEarsAspect.cs b/Content.Server/White/AspectsSystem/Aspects/CatEarsAspect.cs
index 2d70763cf2..665a055e18 100644
--- a/Content.Server/White/AspectsSystem/Aspects/CatEarsAspect.cs
+++ b/Content.Server/White/AspectsSystem/Aspects/CatEarsAspect.cs
@@ -1,12 +1,14 @@
using Content.Server.Chat.Systems;
using Content.Server.GameTicking;
using Content.Server.GameTicking.Rules.Components;
+using Content.Server.Speech.Components;
using Content.Server.White.AspectsSystem.Aspects.Components;
using Content.Server.White.AspectsSystem.Base;
using Content.Shared.GameTicking;
using Content.Shared.Humanoid;
using Content.Shared.Humanoid.Markings;
using Content.Shared.Speech;
+using Robust.Shared.Enums;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
@@ -21,6 +23,9 @@ public sealed class CatEarsAspect : AspectSystem
private MarkingPrototype _ears = default!;
private MarkingPrototype _tail = default!;
+ private const string FemaleFelinidVoices = "FemaleFelinid";
+ private const string MaleFelinidVoices = "MaleFelinid";
+
public override void Initialize()
{
base.Initialize();
@@ -42,13 +47,16 @@ public sealed class CatEarsAspect : AspectSystem
var entQuery = EntityQueryEnumerator();
while (entQuery.MoveNext(out var ent, out _, out _))
{
- _chat.TrySendInGameICMessage(ent, _random.Pick(new[] {"Мяу", "Мур", "Ня"}), InGameICChatType.Speak,
+ _chat.TrySendInGameICMessage(ent, _random.Pick(new[] { "Мяу", "Мур", "Ня" }), InGameICChatType.Speak,
ChatTransmitRange.Normal);
}
}
}
- protected override void Started(EntityUid uid, CatEarsAspectComponent component, GameRuleComponent gameRule,
+ protected override void Started(
+ EntityUid uid,
+ CatEarsAspectComponent component,
+ GameRuleComponent gameRule,
GameRuleStartedEvent args)
{
base.Started(uid, component, gameRule, args);
@@ -93,12 +101,14 @@ public sealed class CatEarsAspect : AspectSystem
AddTail(appearance);
Dirty(uid, appearance);
+ ChangeEmotesVoice(uid, appearance);
return;
}
default:
AddEars(appearance);
AddTail(appearance);
Dirty(uid, appearance);
+ ChangeEmotesVoice(uid, appearance);
break;
}
}
@@ -114,7 +124,7 @@ public sealed class CatEarsAspect : AspectSystem
if (!appearance.MarkingSet.TryGetMarking(MarkingCategories.Tail, _tail.ID, out _))
{
appearance.MarkingSet.AddFront(MarkingCategories.Tail,
- new Marking(_tail.ID, GetColors(appearance, _tail)) {Forced = true});
+ new Marking(_tail.ID, GetColors(appearance, _tail)) { Forced = true });
}
}
@@ -123,7 +133,25 @@ public sealed class CatEarsAspect : AspectSystem
if (!appearance.MarkingSet.TryGetMarking(MarkingCategories.HeadTop, _tail.ID, out _))
{
appearance.MarkingSet.AddFront(MarkingCategories.HeadTop,
- new Marking(_ears.ID, GetColors(appearance, _ears)) {Forced = true});
+ new Marking(_ears.ID, GetColors(appearance, _ears)) { Forced = true });
}
}
-}
+
+ private void ChangeEmotesVoice(EntityUid user, HumanoidAppearanceComponent appearanceComponent)
+ {
+ if (!TryComp(user, out VocalComponent? vocals))
+ {
+ return;
+ }
+
+ switch (appearanceComponent.Gender)
+ {
+ case Gender.Female:
+ _protoMan.TryIndex(FemaleFelinidVoices, out vocals.EmoteSounds);
+ break;
+ case Gender.Male:
+ _protoMan.TryIndex(MaleFelinidVoices, out vocals.EmoteSounds);
+ break;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Content.Server/White/Items/Tricorder/TricorderSystem.cs b/Content.Server/White/Items/Tricorder/TricorderSystem.cs
new file mode 100644
index 0000000000..62d0f13689
--- /dev/null
+++ b/Content.Server/White/Items/Tricorder/TricorderSystem.cs
@@ -0,0 +1,161 @@
+using Content.Server.Medical.Components;
+using Content.Server.UserInterface;
+using Content.Shared.Atmos.Components;
+using Content.Shared.Database;
+using Content.Shared.DeviceNetwork;
+using Content.Shared.DeviceNetwork.Components;
+using Content.Shared.Examine;
+using Content.Shared.MedicalScanner;
+using Content.Shared.Verbs;
+using Content.Shared.White.Item.Tricorder;
+using Robust.Server.GameObjects;
+using Robust.Shared.Audio;
+using Robust.Shared.GameStates;
+using Robust.Shared.Utility;
+
+namespace Content.Server.White.Items.Tricorder;
+
+public sealed class TricorderSystem : SharedTricorderSystem
+{
+ [Dependency] private readonly IComponentFactory _componentFactory = default!;
+ [Dependency] private readonly AudioSystem _audioSystem = default!;
+ [Dependency] private readonly IEntityManager _entityManager = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnExamined);
+
+ SubscribeLocalEvent>(OnAddSwitchModeVerbs);
+ }
+
+ private void OnExamined(EntityUid uid, TricorderComponent component, ExaminedEvent args)
+ {
+ var mode = GetNameByMode(component.CurrentMode);
+ args.PushMarkup(Loc.GetString("network-configurator-examine-current-mode", ("mode", Loc.GetString(mode))));
+ }
+
+ private void OnAddSwitchModeVerbs(EntityUid uid, TricorderComponent component, GetVerbsEvent args)
+ {
+ if (!args.CanAccess || !args.CanInteract || !args.Using.HasValue ||
+ !HasComp(args.Target))
+ {
+ return;
+ }
+
+ var icon = new SpriteSpecifier.Texture(new ResPath("/Textures/Interface/VerbIcons/settings.svg.192dpi.png"));
+
+ AlternativeVerb switchToMultitoolVerb = new()
+ {
+ Text = "Переключить на мультитул",
+ Icon = icon,
+ Act = () => SwitchToMode(args.User, uid, component, TricorderMode.Multitool),
+ Impact = LogImpact.Low
+ };
+
+ AlternativeVerb switchToGasAnalyzerlVerb = new()
+ {
+ Text = "Переключить на газоанализатор",
+ Icon = icon,
+ Act = () => SwitchToMode(args.User, uid, component, TricorderMode.GasAnalyzer),
+ Impact = LogImpact.Low
+ };
+
+ AlternativeVerb switchToHealthAnalyzerVerb = new()
+ {
+ Text = "Переключить на анализатор здоровья",
+ Icon = icon,
+ Act = () => SwitchToMode(args.User, uid, component, TricorderMode.HealthAnalyzer),
+ Impact = LogImpact.Low
+ };
+
+ args.Verbs.Add(switchToHealthAnalyzerVerb);
+ args.Verbs.Add(switchToGasAnalyzerlVerb);
+ args.Verbs.Add(switchToMultitoolVerb);
+ }
+
+ public void SwitchToMode(EntityUid? user, EntityUid tricoderUid, TricorderComponent tricorder, TricorderMode mode)
+ {
+ if (tricorder.CurrentMode == mode)
+ {
+ return;
+ }
+
+ tricorder.CurrentMode = mode;
+
+ switch (mode)
+ {
+ case TricorderMode.Multitool:
+ SetToMultitool(tricoderUid);
+ break;
+ case TricorderMode.GasAnalyzer:
+ SetToGasAnalyzer(tricoderUid);
+ break;
+ case TricorderMode.HealthAnalyzer:
+ SetToHealthAnalyzer(tricoderUid);
+ break;
+ }
+
+ if (!user.HasValue)
+ return;
+
+ UpdateModeAppearance(user.Value, tricorder);
+ }
+
+ private void UpdateModeAppearance(
+ EntityUid userUid,
+ TricorderComponent tricorder)
+ {
+ Dirty(tricorder);
+ _audioSystem.PlayPvs(tricorder.SoundSwitchMode, userUid, AudioParams.Default.WithVolume(1.5f));
+ }
+
+ private void SetToMultitool(EntityUid uid)
+ {
+ var comp = AddComp(uid);
+ RemComp(uid);
+ RemComp(uid);
+ Dirty(comp);
+
+ if (!TryComp(uid, out ActivatableUIComponent? ui))
+ {
+ return;
+ }
+
+ ui.Key = NetworkConfiguratorUiKey.Configure;
+ }
+
+ private void SetToGasAnalyzer(EntityUid uid)
+ {
+ RemComp(uid);
+ AddComp(uid);
+ RemComp(uid);
+
+ if (!TryComp(uid, out ActivatableUIComponent? ui))
+ {
+ return;
+ }
+
+ ui.Key = GasAnalyzerComponent.GasAnalyzerUiKey.Key;
+ }
+
+ private void SetToHealthAnalyzer(EntityUid uid)
+ {
+ RemComp(uid);
+ RemComp(uid);
+
+ var healthAnalyzerComponent = _componentFactory.GetComponent();
+ healthAnalyzerComponent.ScanningEndSound = new SoundPathSpecifier("/Audio/Items/Medical/healthscanner.ogg");
+
+ healthAnalyzerComponent.Owner = uid;
+ _entityManager.AddComponent(uid, healthAnalyzerComponent);
+
+ if (!TryComp(uid, out ActivatableUIComponent? ui))
+ {
+ return;
+ }
+
+ ui.Key = HealthAnalyzerUiKey.Key;
+ }
+}
\ No newline at end of file
diff --git a/Content.Shared/White/Item/Tricorder/SharedTricorderSystem.cs b/Content.Shared/White/Item/Tricorder/SharedTricorderSystem.cs
new file mode 100644
index 0000000000..c0f356ea6d
--- /dev/null
+++ b/Content.Shared/White/Item/Tricorder/SharedTricorderSystem.cs
@@ -0,0 +1,30 @@
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.White.Item.Tricorder;
+
+public abstract class SharedTricorderSystem : EntitySystem
+{
+ ///
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(GetTricorderState);
+ }
+
+ private static void GetTricorderState(EntityUid uid, TricorderComponent component, ref ComponentGetState args)
+ {
+ args.State = new TricorderComponentState(component.CurrentMode);
+ }
+
+ public static string GetNameByMode(TricorderMode mode)
+ {
+ return mode switch
+ {
+ TricorderMode.Multitool => "[color=yellow]мультитул[/color]",
+ TricorderMode.GasAnalyzer => "[color=cyan]газоанализатор[/color]",
+ TricorderMode.HealthAnalyzer => "[color=green]анализатор здоровья[/color]",
+ _ => "[color=yellow]мультитул[/color]"
+ };
+ }
+}
\ No newline at end of file
diff --git a/Content.Shared/White/Item/Tricorder/TricorderComponent.cs b/Content.Shared/White/Item/Tricorder/TricorderComponent.cs
new file mode 100644
index 0000000000..7f391c8b2a
--- /dev/null
+++ b/Content.Shared/White/Item/Tricorder/TricorderComponent.cs
@@ -0,0 +1,38 @@
+using Robust.Shared.Audio;
+using Robust.Shared.GameStates;
+using Robust.Shared.Serialization;
+
+namespace Content.Shared.White.Item.Tricorder;
+
+[RegisterComponent]
+[NetworkedComponent]
+[Access(typeof(SharedTricorderSystem))]
+public sealed class TricorderComponent : Component
+{
+ [DataField("currentState"), ViewVariables(VVAccess.ReadWrite)]
+ public TricorderMode CurrentMode = TricorderMode.Multitool;
+
+ [DataField("soundSwitchMode")]
+ public SoundSpecifier SoundSwitchMode = new SoundPathSpecifier("/Audio/Machines/quickbeep.ogg");
+}
+
+///
+/// Contains network state for TricorderComponent.
+///
+[Serializable, NetSerializable]
+public sealed class TricorderComponentState : ComponentState
+{
+ public TricorderMode CurrentMode;
+
+ public TricorderComponentState(TricorderMode currentMode)
+ {
+ CurrentMode = currentMode;
+ }
+}
+
+public enum TricorderMode
+{
+ Multitool,
+ GasAnalyzer,
+ HealthAnalyzer
+}
\ No newline at end of file
diff --git a/Resources/Locale/ru-RU/materials/materials.ftl b/Resources/Locale/ru-RU/materials/materials.ftl
index 8404304f04..a149ddd7a7 100644
--- a/Resources/Locale/ru-RU/materials/materials.ftl
+++ b/Resources/Locale/ru-RU/materials/materials.ftl
@@ -8,6 +8,7 @@ materials-steel = сталь
materials-gold = золото
materials-silver = серебро
materials-plasteel = пласталь
+materials-paper = бумага
# Other
materials-biomass = биомасса
materials-cloth = ткань
diff --git a/Resources/Locale/ru-RU/white/items/tricorder.ftl b/Resources/Locale/ru-RU/white/items/tricorder.ftl
new file mode 100644
index 0000000000..3b73829b81
--- /dev/null
+++ b/Resources/Locale/ru-RU/white/items/tricorder.ftl
@@ -0,0 +1 @@
+tricorder-item-status-label = Текущий режим: { $mode }
\ No newline at end of file
diff --git a/Resources/Locale/ru-RU/white/species/felinid/felinid.ftl b/Resources/Locale/ru-RU/white/species/felinid/felinid.ftl
index 33be7d6643..99d8c0a523 100644
--- a/Resources/Locale/ru-RU/white/species/felinid/felinid.ftl
+++ b/Resources/Locale/ru-RU/white/species/felinid/felinid.ftl
@@ -1,7 +1,7 @@
hairball-action = Откашлять комок шерсти.
hairball-action-desc = Люди это не любят.
hairball-mask = Сначала сними { $mask }.
-hairball-cough = { CAPITALIZE(THE($name)) } пытается выкашлять комок шесрти!
+hairball-cough = { CAPITALIZE(THE($name)) } пытается выкашлять комок шерсти!
action-name-eat-mouse = Съесть мышь.
action-description-eat-mouse = Съешьте мышь в своей руке, получая питательные вещества и заряд комка шерсти.
diff --git a/Resources/Locale/ru-RU/white/structures/doc-printer/paper-text.ftl b/Resources/Locale/ru-RU/white/structures/doc-printer/paper-text.ftl
new file mode 100644
index 0000000000..65684621c1
--- /dev/null
+++ b/Resources/Locale/ru-RU/white/structures/doc-printer/paper-text.ftl
@@ -0,0 +1,610 @@
+paper-text-request = Запрос Центральному Командованию
+ ---------------------------------------------------------------------
+ Я, "имя капитана", в должности Капитана, запрашиваю цель для станции "номер станции"
+ ---------------------------------------------------------------------
+ Для выполнения задачи Центрального Командования будут задействованы все доступные ресурсы станции с минимальным ущербом самой станции, если не было приказано иначе.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-text-report = Заявление в штаб Центрального Командования
+ ---------------------------------------------------------------------
+ Я, "имя заявителя" "должность" станции "номер станции", отправляю рапорт о ходе выполнения цели станции и ее продвижении.
+ Цель: "цель смены".
+ Ситуация: "как проходит цель".
+ ---------------------------------------------------------------------
+ Рапорт был составлен мною в пребывании адекватного состояния. Все расписанное, готов подтвердить повторно, при необходимости.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-text-completed = Заявление в штаб Центрального Командования
+ ---------------------------------------------------------------------
+ Я, Капитан "имя заявителя" станции "номер станции", с гордостью сообщаю об успешном выполнении экипажем назначенной цели текущей смены.
+
+ Цель: "цель смены".
+
+ Оценка личного состава и состояния станции: "кратко опишите ситуацию на станции".
+ ---------------------------------------------------------------------
+ Запрашиваю начало процедуры смены экипажа и ожидаю дальнейших указаний.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-text-failed = Заявление в штаб Центрального Командования
+ ---------------------------------------------------------------------
+ Я, Капитан "имя заявителя" станции "номер станции", с прискорбием сообщаю о невозможности выполнения экипажем назначенной цели текущей смены.
+
+ Цель: "цель смены".
+
+ Причина: "почему ее нельзя выполнить".
+ ---------------------------------------------------------------------
+ Вследствие провала задания, запрашиваю начало "процедуры смены экипажа / эвакуации" и ожидаю дальнейших указаний.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-text-request-CentComm = Рапорт Офицерскому составу Центрального Командования
+ ---------------------------------------------------------------------
+ Номер станции: "укажите номер станции из ПДА"
+ Я, "имя заявителя", в должности "должность заявителя", представляю доклад о "происшествии/несоответствии" Офицерскому составу Центрального Командования.
+
+ Причина:"описание происшествия/несоответствия".
+
+ Данная ситуация требует вмешательства "сотрудника ЦК", так как не может быть решена силами экипажа и командования станции.
+ ---------------------------------------------------------------------
+ Рапорт был составлен мною в пребывании адекватного состояния. Все расписанное, готов подтвердить повторно, при необходимости.
+
+ Отправляя этот запрос, возлагаю на себя полную ответственность и, в случае сокрытия информации для собственной выгоды, готов понести высшую меру наказания.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-text-request-ERT = Запрос в отдел Аварийно-Восстановительных Формирований NanoTrasen
+ ---------------------------------------------------------------------
+ Я, "имя заявителя", в должности "должность заявителя", отправляю запрос в отдел Аварийно-Восстановительного Формирования для вызова на станцию "номер станции из ПДА" Отряда Быстрого Реагирования.
+
+ Причина: "описание происшествия".
+
+ Данная ситуация требует вмешательства "название типа ОБР" ОБР, так как не может быть решена силами экипажа и командования станции и ставит под угрозу существование самой станции.
+ ---------------------------------------------------------------------
+ Запрос был составлен мною в пребывании адекватного состояния. Все расписанное, готов подтвердить повторно, при необходимости.
+
+ Отправляя этот запрос, возлагаю на себя полную ответственность и, в случае сокрытия информации для собственной выгоды, готов понести высшую меру наказания.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-text-request-RXBZZ = Запрос в отдел Аварийно-Восстановительных Формирований NanoTrasen
+ ---------------------------------------------------------------------
+ Я, "имя заявителя", в должности "должность заявителя", отправляю запрос в отдел Аварийно-Восстановительного Формирования для вызова на станцию "номер станции из ПДА" Отряда Быстрого Реагирования.
+
+ Причина: "описание происшествия".
+
+ Данная ситуация требует вмешательства "название типа ОБР" ОБР, так как не может быть решена силами экипажа и командования станции и ставит под угрозу существование самой станции.
+ ---------------------------------------------------------------------
+ Запрос был составлен мною в пребывании адекватного состояния. Все расписанное, готов подтвердить повторно, при необходимости.
+
+ Отправляя этот запрос, возлагаю на себя полную ответственность и, в случае сокрытия информации для собственной выгоды, готов понести высшую меру наказания.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-text-request-high-order-compaint = Заявление в бюро доносов NanoTrasen
+ ---------------------------------------------------------------------
+ Номер станции: "укажите номер станции из ПДА"
+ Заявитель: "имя заявителя"
+ Должность: "должность заявителя"
+
+ Субъект правонарушения: "имя нарушителя"
+ Должность: "должность нарушителя"
+
+ Нарушенные пункты КЗ: "нарушенные статьи/отсутствует"
+ Нарушенные пункты СОП: "нарушенные пункты/отсутствует"
+ Нарушенные пункты ОПЧК: "нарушенные пункты/отсутствует"
+
+ Свидетели нарушений: "имена свидетелей/отсутствуют"
+ ---------------------------------------------------------------------
+ Описание: "подробное, но лаконичное описание правонарушения".
+
+ Жалоба была составлена мною в пребывании адекватного состояния. Все, расписанное в данной жалобе, готов подтвердить повторно, при необходимости.
+
+ Запрос: "ожидаемый заявителем исход/принять соответствующие меры по пресечению будущих нарушений".
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-text-request-magistrat = Запрос в Верховный суд Nanotrasen
+ ---------------------------------------------------------------------
+ Я, "имя заявителя", в должности "должность заявителя", отправляю запрос в Верховный суд для вызова на станцию "номер станции из ПДА" Магистрата.
+
+ Заявление об инициации судебного процесса: прилагается.
+
+ Данная ситуация требует вмешательства сотрудника Верховного суда, так как не может быть решена компетенцией экипажа и командования станции и ставит под угрозу справедливость вынесенного приговора.
+ ---------------------------------------------------------------------
+ Запрос был составлен мною в пребывании адекватного состояния. Все расписанное, готов подтвердить повторно, при необходимости.
+
+ Отправляя этот запрос, возлагаю на себя полную ответственность и, в случае сокрытия информации для собственной выгоды, готов понести высшую меру наказания.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-comm-text-crew-mem-domotion = Постановление в архив командования станции
+ ---------------------------------------------------------------------
+ Главе персонала станции "номер станции из ПДА".
+
+ Я, "имя заявителя", в должности главы отдела "ваш отдел" приказываю понизить сотрудника "должность сотрудника" "имя сотрудника" до должности "должность после понижения".
+
+ Причина: "кратко опишите причину понижения".
+ ---------------------------------------------------------------------
+ Обязуюсь восполнить отсутствие персонала и поддерживать эффективность отдела на высшем уровне.
+
+ Приказ ввести в исполнение немедленно во избежание необратимого ущерба.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-comm-text-crew-mem-dismissal = Постановление в архив командования станции
+ ---------------------------------------------------------------------
+ Главе персонала станции "номер станции из ПДА".
+
+ Я, "имя заявителя", в должности главы отдела "ваш отдел" приказываю немедленно уволить сотрудника "имя сотрудника" с должности "должность сотрудника".
+
+ Причина: "кратко опишите причину увольнения".
+
+ Сотрудник обязан(-а) немедленно покинуть рабочее место и сдать все выданное снаряжение и имущество отдела. В случае нарушения данного приказа, будут приняты дополнительные меры в соответствии с настоящим законодательством.
+ ---------------------------------------------------------------------
+ Обязуюсь восполнить отсутствие персонала и поддерживать эффективность отдела на высшем уровне.
+
+ Приказ ввести в исполнение немедленно во избежание необратимого ущерба.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-comm-text-request-council = Запрос командному составу станции
+ ---------------------------------------------------------------------
+ Я, "имя заявителя", в должности "ваша должность" запрашиваю провести голосование среди командного состава станции "номер станции".
+
+ Причина: "причина голосования".
+
+ Цель: "ожидаемый итог голосования".
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-comm-text-council-end = Отчет по голосованию
+ ---------------------------------------------------------------------
+ Голосованием глав станции "номер станции", по вопросу "причина голосования", было принято решение "Поддержать / Отклонить" инициативу.
+
+ Количество голосов "За": "кол-во"
+
+ Количество голосов "Против": "кол-во"
+ ---------------------------------------------------------------------
+ Подпись: "подпись"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-sec-text-order = Ордер на обыск
+ ---------------------------------------------------------------------
+ Выдан: "имя заявителя" "Юрист/Капитан".
+ Подозреваемый: "имя подозреваемого" "должность".
+ Характер обыска: "обыск отдела/обыск сотрудника".
+
+ Причина обыска: "причина подозрения"
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-sec-text-complaint = Жалоба
+ ---------------------------------------------------------------------
+ Заявитель: "имя заявителя"
+ Должность: "должность заявителя"
+
+ Субъект правонарушения: "имя нарушителя"
+ Должность: "должность нарушителя"
+
+ Свидетели нарушений: "имена свидетелей/отсутствуют"
+ ---------------------------------------------------------------------
+ Описание: "нарушение".
+ ---------------------------------------------------------------------
+ Жалоба была составлена мною в пребывании адекватного состояния. Все, расписанное в данной жалобе, готов подтвердить повторно, при необходимости.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-sec-text-lic = Разрешение на ношение оружия
+ ---------------------------------------------------------------------
+ Заявитель: "имя заявителя"
+ Должность: "должность заявителя"
+ Разрешение на ношение: "название оружия"
+ ---------------------------------------------------------------------
+ Причина: "причина на запрос оружия".
+ ---------------------------------------------------------------------
+ Обязуюсь, что орудоваемое мною оружие будет использовано в целях описаных выше или в целях вынужденной самообороны.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-sec-text-request-weapon = Временный запрос оружия
+ ---------------------------------------------------------------------
+ Заявитель: "имя заявителя"
+ Должность: "должность заявителя"
+ Запрос оружия: "название оружия"
+ ---------------------------------------------------------------------
+ Причина: "причина на запрос оружия".
+ На период: "через сколько обязан вернуть оружие"
+ ---------------------------------------------------------------------
+ Обязуюсь использовать исключительно в целях указанных выше или при вынужденной самообороне и сдать оружие в арсенал в указанное время или по первому требованию службы безопасности.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-sec-text-request-execution = Запрос на казнь сотрудника
+ ---------------------------------------------------------------------
+ Заявитель: "имя заявителя"
+ Должность: "должность заявителя"
+
+ Нарушитель: "имя и фамилия"
+ ---------------------------------------------------------------------
+ Причина: "что нарушил".
+ ---------------------------------------------------------------------
+ Отправляя этот запрос, возлагаю на себя полную ответственность и, в случае сокрытия информации для собственной выгоды, готов понести высшую меру наказания.
+
+ Данный документ приобретает юридическую силу, если имеет печать Капитана или Центрального Командования.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-sec-text-request-cargo-weapon = Разрешение на заказ оружие отделом Снабжения
+ ---------------------------------------------------------------------
+ Заявитель: "имя заявителя"
+ Должность: "должность заявителя"
+
+ Причина: "по какой причине нужно оружие".
+ ---------------------------------------------------------------------
+ Отправляя этот запрос, возлагаю на себя полную ответственность за заказанное оружие.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-sec-text-request-guard = Заявление под программу защиты свидетелей
+ ---------------------------------------------------------------------
+ Заявитель: "имя заявителя"
+ Должность: "должность заявителя"
+ ---------------------------------------------------------------------
+ Причина: "что угрожает вашей жизни".
+ Запрос: "убежища в бриге / предоставить вам защиту"
+ ---------------------------------------------------------------------
+ Служба безопасности берет ответственность за жизнь данного сотрудника и обязана предоставить ему защиту.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-eng-text-request-build = Заявление о проведении строительных работ
+ ---------------------------------------------------------------------
+ Заявитель: "имя заявителя"
+ Должность: "должность заявителя"
+ ---------------------------------------------------------------------
+ Строительные работы будут проведены в отделе "название отдела".
+
+ Объект: "что будет сделано".
+ ---------------------------------------------------------------------
+ Исполнитель несёт полную ответственность за качество выполненных работ.
+
+ Во время строительства обязаны быть соблюдены все нормы безопасности.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-eng-text-request-material = Запрос материалов
+ ---------------------------------------------------------------------
+ Заявитель: "имя заявителя"
+ Должность: "должность заявителя"
+ ---------------------------------------------------------------------
+ Список: "что вам нужно".
+
+ Причина: "зачем вам материалы".
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-eng-text-report-elect = Отчет об электроснабжении
+ ---------------------------------------------------------------------
+ Заявитель: "имя заявителя"
+ Должность: "должность заявителя"
+ ---------------------------------------------------------------------
+ Производитель электроэнергии: "ДАМ / Сингулярность / альтернативный источник"
+ Коэффициент потраченной / производимой электроэнергии: "указать коэффициент, к примеру: 2/9"
+ Стабильность электропитания: "указать уровень стабильности"
+ ---------------------------------------------------------------------
+ Я - подотчетное лицо, несу полную ответственность своих действий и не пытаюсь скрыть какую-либо информацию.
+ В случае сокрытия информации подотчетное лицо будет подвержено наказанию высшей степени.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-eng-text-report-atmos = Отчет об атмосфере
+ ---------------------------------------------------------------------
+ Заявитель: "имя заявителя"
+ Должность: "должность заявителя"
+ ---------------------------------------------------------------------
+ Производимые газы:"указать производимые газы"
+ Коэффициент газов в атмосфере станции:"указать коэффициент газов, к примеру кислород - 22%, азот - 77%, углерод - 1%"
+ Дополнительно производимые газы:"указать дополнительно производимые газы, к примеру - тритий, фрезон и т.п."
+ ---------------------------------------------------------------------
+ Я - подотчетное лицо, несу полную ответственность своих действий и не пытаюсь скрыть какую-либо информацию.
+ В случае сокрытия информации подотчетное лицо будет подвержено наказанию высшей степени.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-med-text-request-perm-narc = Лекарственный рецепт
+ ---------------------------------------------------------------------
+ Я, "имя и фамилия", в должности "психолога/СМО", выписываю для лечения пациента "имя пациента" следующие препараты: "названия препаратов".
+
+ Причина: "заболевание".
+ ---------------------------------------------------------------------
+ Этот документ подтверждает право пациента на хранение и употребление вышеперечисленных препаратов.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-med-text-request-execution = Запрос на проведение эвтаназии
+ ---------------------------------------------------------------------
+ Я, "имя и фамилия", в должности "должность" в связи "указать причину", прошу провести для себя процедуру эвтаназии.
+ ---------------------------------------------------------------------
+ Претензий к медицинскому отделу, при соблюдении ими протоколов, не имею.
+
+ Данный документ приобретает юридическую силу, если имеет печать Юриста.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-med-text-waiver-claims = Отказ от претензий
+ ---------------------------------------------------------------------
+ Я, "имя и фамилия", в должности "должность" даю разрешение провести на мне ряд научных исследований во благо науки.
+
+ Эксперимент: "что на вас будут проверять".
+ ---------------------------------------------------------------------
+ Претензий к "медицинскому/научному" отделу, при соблюдении ими протоколов, не имею.
+
+ Я полностью осведомлен(а) и информирован(а) об эксперименте и возможных угрозах.
+
+ Настоящая расписка составлена и подписана добровольно, без какого-либо давления, обещаний или угроз.
+
+ Данный документ приобретает юридическую силу, если имеет печать Юриста.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-med-text-durka = Заключение о невменяемости
+ ---------------------------------------------------------------------
+ Я, "имя и фамилия", в должности "СМО/Психолога" признаю сотрудника "имя пациента" невменяемым. В связи с тем, что психические расстройства несут опасность как для самого пациента, так и для остального экипажа, пациент должен быть помещен в перманентную тюрьму.
+ ---------------------------------------------------------------------
+ Служба безопасности обязана соблюдать все права в отношении пациента, защищать и проводить его для эвакуации до Центрального Командования.
+
+ Подписывая данный документ, возлагаю на себя полную ответственность и, в случае неправильного диагноза, понесу высшую меру наказания.
+
+ Данный документ приобретает юридическую силу, если имеет печать ГСБ или Капитана.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-sci-text-reasonable = Признание разумности существа
+ ---------------------------------------------------------------------
+ Я, "имя и фамилия", в должности "Ученого/Научного руководителя", подтверждаю разумность существа.
+
+ Существо: "название"
+ ---------------------------------------------------------------------
+ В процессе проведения экспериментов было подтверждено, что данное существо обладает характеристиками, необходимыми для признания его разумным, такими как: способность к мышлению, обучаемость, понимание моральных норм и способность осознавать последствия своих действий.
+
+ Существо имеет потенциал для работы на корпорацию NanoTrasen, в связи с чем должно пройти процедуру найма.
+ ---------------------------------------------------------------------
+ После того, как глава персонала сделает ПДА данному существу, оно официально войдёт под юрисдикцию ОПЧК на равных основах с остальными членами корпорации.
+
+ Заявитель несет ответственность за правильное признание существа разумным.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-sci-text-request-law = Постановление о изменении законов боргов
+ ---------------------------------------------------------------------
+ Данный документ информирует о изменении законов "всех/название борга" борга/ов.
+
+ Вносимые изменения: "перечень внесённых изменений".
+ ---------------------------------------------------------------------
+ Данный документ приобретает юридическую силу, если имеет печати и подписи двух или более глав.
+
+ Подписи глав: "подписи через запятую"
+
+ Новые законы не нарушают ОПЧК и Космический Закон, направлены на принесение пользы корпорации NanoTrasen.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-sci-text-brain = Постановление о пересадке мозга
+ ---------------------------------------------------------------------
+ Данный документ информирует о пересадке мозга человека в борга по причине невозможности реанимировать прошлого владельца.
+
+ Я, "имя и фамилия", в должности "должность" проведу операцию по пересадки мозга "должность" "имя и фамилия пациента" в тело борга.
+ ---------------------------------------------------------------------
+ Данный документ приобретает юридическую силу, если имеет печать СМО.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-car-text-order = Заказ товара
+ ---------------------------------------------------------------------
+ Заявитель: "имя заявителя"
+ Должность: "должность заявителя"
+ ---------------------------------------------------------------------
+ Товар: "кол-во - название товара"
+
+ Причина: "зачем вам это".
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-ser-text-up-IDcard = Повышение доступа
+ ---------------------------------------------------------------------
+ Я, "имя заявителя" "должность", прошу предоставить мне дополнительно следующие доступы: "название мест".
+
+ Причина: "причина повышения доступов"
+ ---------------------------------------------------------------------
+ Доступ будет использован исключительно в интересах станции и экипажа. Я обязуюсь не заимствовать вещи из других отделов без разрешения главы отдела, а также покину отдел в случае приказа главы.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-ser-text-work = Ускоренный найм
+ ---------------------------------------------------------------------
+ Главе персонала станции "номер станции из ПДА".
+
+ Я, "имя заявителя", желаю пройти процедуру ускоренного найма на космической станции NanoTrasen. Ознакомившись с условиями и положениями ускоренного трудоустройства.
+
+ Желаемая должность: "название должности"
+ Отдел: "название отдела"
+
+ "По желанию - опыт в профессии, причина трудоустройства"
+ ---------------------------------------------------------------------
+ Со стандартными рабочими процедурами, правилами и политикой NanoTrasen ознакомлен. Ответственность, возлагаемую на себя, осознаю.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-ser-text-trash = Свидетельство о заключении брака
+ ---------------------------------------------------------------------
+ Я, "имя и фамилия", в должности священника, заключаю брак между "имя и фамилия" и "имя и фамилия" с согласия обоих сторон.
+ ---------------------------------------------------------------------
+ После заключения брака присвоены фамилии: Мужу "фамилия" Жене "фамилия"
+ Подпись жениха: "имя и фамилия"
+ Подпись невесты: "имя и фамилия"
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-ser-text-trash-end = Свидетельство о расторжении брака
+ ---------------------------------------------------------------------
+ Я, "имя и фамилия", в должности священника, расторгаю брак между "имя и фамилия" и "имя и фамилия" с согласия обоих сторон.
+ ---------------------------------------------------------------------
+ После расторжения брака присвоены фамилии: Мужу "фамилия" Жене "фамилия"
+ Подпись мужа: "имя и фамилия"
+ Подпись жены: "имя и фамилия"
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-ser-text-court = Инициация судебного процесса
+ ---------------------------------------------------------------------
+ Я, "имя и фамилия", в должности "должность", настаиваю на немедленной инициации судебного процесса в отношении "имя обвиняемого" в должности "должность обвиняемого".
+
+ Безотлагательный судебный процесс необходим, поскольку: "почему приговор несправедливый со стороны охранной службы".
+
+ Дополнительная документация: "прилагается / отсутствует".
+
+ Свидетели: "список свидетелей / отсутствуют".
+
+ Исходя из данных, представленных выше, должен пройти публичный судейский процесс, подающий пример остальным сотрудникам станции.
+ ---------------------------------------------------------------------
+ Запрос был составлен мною в пребывании адекватного состояния. Все расписанное, готов подтвердить повторно, при необходимости.
+
+ Данный документ приобретает юридическую силу, если имеет печать Юриста.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-ser-text-dismissal = Увольнение
+ ---------------------------------------------------------------------
+ Я, "имя заявителя", прошу уволить меня с должности "ваша должность" по собственному желанию.
+
+ Причина: "кратко опишите причину увольнения".
+ ---------------------------------------------------------------------
+ Документ составлен в адекватном состоянии, со всеми последствиями ознакомлен.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-ser-text-promotion = Повышение
+ ---------------------------------------------------------------------
+ Я, "имя заявителя", в должности "ваша должность" прошу повысить меня до "желаемая должность" в отделе "название отдела".
+
+ Причина: "кратко опишите свои заслуги".
+ ---------------------------------------------------------------------
+ Я убежден, что повышение позволит мне сделать значительный вклад в работу отдела и обязуюсь с особой старательностью выполнять свои обязанности. Со стандартными рабочими процедурами, правилами и политикой NanoTrasen ознакомлен. Ответственность, возлагаемую на себя, осознаю.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-ser-text-request-botan = Запрос растений
+ ---------------------------------------------------------------------
+ Я, "имя заявителя", в должности "должность" запрашиваю растения в ботанике.
+
+ Растения: "название растения"
+
+ Причина: "причина".
+ ---------------------------------------------------------------------
+ Данное растения будет использовано исключительно в выше описанных целях.
+ ---------------------------------------------------------------------
+ Подпись: "подпись заявителя"
+ Дата: "день"."месяц".2562
+ Печать:
+
+paper-syn-text-ha-ha = .
+ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣾⣿⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣷⣦⣀⡄⠀⠀⣠⣤⣾⡿⢿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⣿⣷⣜⣋⣸⣿⣿⣷⣤⣾⣿⣷⣤⣴⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⠏⠉⠻⣿⣿⣿⣿⣿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢻⣿⣿⡿⠟⠉⠀⠀⠀⠨⠛⠿⠿⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+ ⠀⠀⠀⠀⠀⠀⢰⣦⡀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡆⠀⠀⠀⠀⠀⠀
+ ⠀⠀⠀⢰⣶⣤⠀⠙⣿⣦⡀⠀⠀⠀⠀⠀⠀⠀⣠⡄⠀⣄⡀⠀⠀⠀⠀⠀⠀⠀⣠⣼⡟⠁⠀⢠⠄⠀⠀⠀
+ ⠀⠀⠀⠈⢿⣯⡀⠀⠈⠛⢿⣷⣦⣤⣤⣤⣶⣿⣿⠃⠀⢻⣿⣶⣤⣤⣤⣤⣴⣿⠟⠉⠀⠀⢰⠃⠀⠀⠀⠀
+ ⠀⠀⠀⠀⠘⠿⡀⠀⢀⠀⠀⠈⠙⠛⠛⠛⠋⠉⠀⠀⠀⠀⠈⠛⠛⠛⠛⠋⠁⠀⢀⣤⣴⣶⠃⠀⠀⠀⠀⠀
+ ⠀⠀⠀⠀⠀⠀⠳⢶⣏⡀⣠⣤⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⣠⣴⣾⡿⠿⠛⠁⠀⠀⠀⠀⠀⠀
+ ⠀⠀⠀⠀⠀⠀⠀⠈⠻⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
+ ⣷⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠙⠛⠛⠿⠿⠿⠿⠿⠿⠿⠟⠛⠛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣴
+ ⣿⣿⣿⣿⣶⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣶⣿⣿⣿
+ ⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤⣀⠀⠀⢠⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⣶⡄⠀⠀⣀⣤⣶⣿⣿⣿⣿⣿⣿⣿
+ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⡘⢿⡿⣿⠛⠉⠉⠉⠉⠙⠻⡿⢿⡿⢁⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
+ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣦⣴⣿⣦⠀⠀⠀⠀⢀⣼⣿⣦⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
+ ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣟⠓⠀⠀⠀⠛⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
diff --git a/Resources/Prototypes/Catalog/Fills/Items/belt.yml b/Resources/Prototypes/Catalog/Fills/Items/belt.yml
index 8a27e36f08..74ea42f5ae 100644
--- a/Resources/Prototypes/Catalog/Fills/Items/belt.yml
+++ b/Resources/Prototypes/Catalog/Fills/Items/belt.yml
@@ -26,6 +26,7 @@
- id: Welder
- id: Multitool
+# WD EDIT START
- type: entity
id: ClothingBeltChiefEngineerFilled
parent: ClothingBeltChiefEngineer
@@ -36,10 +37,11 @@
- id: PowerDrill
- id: JawsOfLife
- id: WelderExperimental
- - id: Multitool
+ - id: Tricorder
- id: HolofanProjector
- - id: GasAnalyzer
- - id: trayScanner
+ amount: 2
+ - id: CableApcStack
+# WD EDIT END
- type: entity
id: ClothingBeltSecurityFilled
diff --git a/Resources/Prototypes/White/Catalog/uplink.yml b/Resources/Prototypes/White/Catalog/uplink.yml
index 9e1dc62a02..b3ce4624c5 100644
--- a/Resources/Prototypes/White/Catalog/uplink.yml
+++ b/Resources/Prototypes/White/Catalog/uplink.yml
@@ -84,3 +84,15 @@
Telecrystal: 15
categories:
- UplinkImplants
+
+# Night Vision
+- type: listing
+ id: UplinkNightGoggles
+ name: ПНВ [Хамелеон]
+ description: Теперь ты видишь во тьме!
+ productEntity: ClothingEyesNightVisionGogglesSyndie
+ icon: { sprite: White/Clothing/Head/nightvision.rsi, state: icon }
+ cost:
+ Telecrystal: 3
+ categories:
+ - UplinkArmor
diff --git a/Resources/Prototypes/White/Entities/Clothing/Head/night_vision_goggle.yml b/Resources/Prototypes/White/Entities/Clothing/Head/night_vision_goggle.yml
new file mode 100644
index 0000000000..a484c97e96
--- /dev/null
+++ b/Resources/Prototypes/White/Entities/Clothing/Head/night_vision_goggle.yml
@@ -0,0 +1,27 @@
+# Night Vision Goggles
+- type: entity
+ parent: ClothingEyesBase
+ id: ClothingEyesNightVisionGoggles
+ name: ПНВ
+ description: Теперь ты видишь во тьме!
+ components:
+ - type: Sprite
+ sprite: White/Clothing/Head/nightvision.rsi
+ - type: Clothing
+ sprite: White/Clothing/Head/nightvision.rsi
+ - type: ClothingGrantComponent
+ component:
+ - type: NightVision
+
+# Night Vision Goggles (Chameleon)
+- type: entity
+ parent: ClothingEyesNightVisionGoggles
+ id: ClothingEyesNightVisionGogglesSyndie
+ components:
+ - type: ChameleonClothing
+ slot: [ eyes ]
+ default: ClothingEyesGlassesSunglasses
+ - type: UserInterface
+ interfaces:
+ - key: enum.ChameleonUiKey.Key
+ type: ChameleonBoundUserInterface
diff --git a/Resources/Prototypes/White/Entities/Objects/Tools/tricorder.yml b/Resources/Prototypes/White/Entities/Objects/Tools/tricorder.yml
new file mode 100644
index 0000000000..9a6db54c9f
--- /dev/null
+++ b/Resources/Prototypes/White/Entities/Objects/Tools/tricorder.yml
@@ -0,0 +1,53 @@
+- type: entity
+ parent: BaseItem
+ id: Tricorder
+ name: трикодер
+ description: Многофункциональное устройство, которое может выполнять огромный спектр задач.
+ components:
+ - type: Sprite
+ sprite: White/Items/Tools/tricorder.rsi
+ layers:
+ - state: icon
+ - state: on
+ map: [ "tricorder_power" ]
+ - type: Tricorder
+ - type: StaticPrice
+ price: 300
+ - type: Tool
+ qualities:
+ - Pulsing
+ - type: ActivatableUI
+ key: enum.NetworkConfiguratorUiKey.List
+ inHandsOnly: true
+ - type: UserInterface
+ interfaces:
+ - key: enum.NetworkConfiguratorUiKey.List
+ type: NetworkConfiguratorBoundUserInterface
+ - key: enum.NetworkConfiguratorUiKey.Configure
+ type: NetworkConfiguratorBoundUserInterface
+ - key: enum.NetworkConfiguratorUiKey.Link
+ type: NetworkConfiguratorBoundUserInterface
+ - key: enum.GasAnalyzerUiKey.Key
+ type: GasAnalyzerBoundUserInterface
+ - key: enum.HealthAnalyzerUiKey.Key
+ type: HealthAnalyzerBoundUserInterface
+ - type: NetworkConfigurator
+ - type: Tag
+ tags:
+ - DroneUsable
+ - Multitool
+ - DiscreteHealthAnalyzer
+ - type: Clothing
+ sprite: Objects/Tools/multitool.rsi
+ quickEquip: false
+ slots:
+ - Belt
+ - type: EmitSoundOnPickup
+ sound:
+ path: /Audio/White/Items/handling/multitool_pickup.ogg
+ - type: EmitSoundOnDrop
+ sound:
+ path: /Audio/Items/multitool_drop.ogg
+ - type: EmitSoundOnLand
+ sound:
+ path: /Audio/Items/multitool_drop.ogg
diff --git a/Resources/Prototypes/White/Entities/Structures/Machines/doc_printer.yml b/Resources/Prototypes/White/Entities/Structures/Machines/doc_printer.yml
new file mode 100644
index 0000000000..8d813d12e0
--- /dev/null
+++ b/Resources/Prototypes/White/Entities/Structures/Machines/doc_printer.yml
@@ -0,0 +1,985 @@
+# Base Document Printer
+- type: entity
+ id: BaseDocPrinter
+ parent: BaseMachinePowered
+ abstract: true
+ name: принтер
+ components:
+ - type: Appearance
+ - type: Physics
+ bodyType: Static
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.25,-0.25,0.25,0.25"
+ density: 25
+ mask:
+ - TabletopMachineMask
+ layer:
+ - TabletopMachineLayer
+ - type: Lathe
+ - type: MaterialStorage
+ - type: ActivatableUI
+ key: enum.LatheUiKey.Key
+ - type: ActivatableUIRequiresPower
+ - type: UserInterface
+ interfaces:
+ - key: enum.LatheUiKey.Key
+ type: LatheBoundUserInterface
+ - key: enum.ResearchClientUiKey.Key
+ type: ResearchClientBoundUserInterface
+ - type: Transform
+ anchored: true
+ - type: Pullable
+ - type: StaticPrice
+ price: 800
+ - type: ResearchClient
+ - type: TechnologyDatabase
+
+# Document Printer
+- type: entity
+ parent: BaseDocPrinter
+ id: DocPrinter
+ name: принтер форм документов
+ description: Принтер для распечатки разных форм документов. Блюспейс-технологии на службе бюрократии!
+ components:
+ - type: Physics
+ bodyType: Static
+ - type: Sprite
+ sprite: White/Structures/Machines/doc_printer.rsi
+ drawdepth: SmallObjects
+ layers:
+ - state: icon
+ map: ["enum.LatheVisualLayers.IsRunning"]
+ - state: unlit
+ shader: unshaded
+ map: ["enum.PowerDeviceVisualLayers.Powered"]
+ - state: inserting
+ map: ["enum.MaterialStorageVisualLayers.Inserting"]
+ - type: Lathe
+ producingSound: /Audio/Machines/scanning.ogg
+ idleState: icon
+ runningState: printing
+ staticRecipes:
+ - BoxFolderGreenBAN
+ - PaperRequestTargetStation
+ - PaperReportCC
+ - PaperCompletedStation
+ - PaperFailedStation
+ - PaperRequestCentComm
+ - PaperRequestERT
+ - PaperRequestRXBZZ
+ - PaperRequestExecution
+ - PaperRequestMagistrat
+ - BoxFolderBlueBAN
+ - PaperDomotionComm
+ - PaperDismissalReq
+ - PaperRequestHeadCouncil
+ - PaperHeadCouncilEnd
+ - BoxFolderRedBAN
+ - PaperOrderSec
+ - PaperDonos
+ - PaperLic
+ - PaperTimeRequestWeapon
+ - PaperRequestExecutionSec
+ - PaperOrderWeapon
+ - PaperRequestGuard
+ - BoxFolderRYellowBAN
+ - PaperRequestBuild
+ - PaperRequestMaterial
+ - PaperReportElect
+ - PaperReportAtmos
+ - BoxFolderWhiteBAN
+ - PaperRequestNarco
+ - PaperRequestExecutionMed
+ - PaperWaiverOfClaims
+ - PaperDurka
+ - BoxFolderPurpleBAN
+ - PaperRequestReasonable
+ - PaperRequestLaw
+ - PaperBrain
+ - BoxFolderYellowBAN
+ - PaperCargoOrder
+ - BoxFolderGreyBAN
+ - PaperRequestUpID
+ - PaperRequestWork
+ - PaperRequestTrash
+ - PaperEndTrash
+ - PaperRequestCourt
+ - PaperDismissalSer
+ - PaperPromotion
+ - PaperRequestBotan
+ - type: EmagLatheRecipes
+ emagStaticRecipes:
+ - BoxFolderBlackBAN
+ - PaperSyndicat
+ - type: MaterialStorage
+
+# Recipe Paper
+# Station->CentComm
+- type: latheRecipe
+ id: PaperRequestTargetStation # Tide
+ result: PaperRequestTargetStation
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperReportCC # Tide
+ result: PaperReportCC
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperCompletedStation # Tide
+ result: PaperCompletedStation
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperFailedStation # Tide
+ result: PaperFailedStation
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperRequestCentComm # Tide
+ result: PaperRequestCentComm
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperRequestERT # Tide
+ result: PaperRequestERT
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperRequestRXBZZ # Tide
+ result: PaperRequestRXBZZ
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperRequestExecution # Tide
+ result: PaperRequestExecution
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperRequestMagistrat # Tide
+ result: PaperRequestMagistrat
+ completetime: 1
+ materials:
+ Paper: 0
+
+# PaperCommand
+- type: latheRecipe
+ id: PaperDomotionComm # Tide
+ result: PaperDomotionComm
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperDismissalReq # Tide
+ result: PaperDismissalReq
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperRequestHeadCouncil # Tide
+ result: PaperRequestHeadCouncil
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperHeadCouncilEnd # Tide
+ result: PaperHeadCouncilEnd
+ completetime: 1
+ materials:
+ Paper: 0
+
+# PaperSecurity
+- type: latheRecipe
+ id: PaperOrderSec # Tide
+ result: PaperOrderSec
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperRequestExecutionSec # Tide
+ result: PaperRequestExecutionSec
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperDonos # Tide
+ result: PaperDonos
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperLic # Tide
+ result: PaperLic
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperTimeRequestWeapon # Tide
+ result: PaperTimeRequestWeapon
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperOrderWeapon # Tide
+ result: PaperOrderWeapon
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperRequestGuard # Tide
+ result: PaperRequestGuard
+ completetime: 1
+ materials:
+ Paper: 0
+
+# PaperEng
+- type: latheRecipe
+ id: PaperRequestBuild # Tide
+ result: PaperRequestBuild
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperRequestMaterial # Tide
+ result: PaperRequestMaterial
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperReportElect # Tide
+ result: PaperReportElect
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperReportAtmos # Tide
+ result: PaperReportAtmos
+ completetime: 1
+ materials:
+ Paper: 0
+
+# PaperMed
+- type: latheRecipe
+ id: PaperRequestNarco # Tide
+ result: PaperRequestNarco
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperRequestExecutionMed # Tide
+ result: PaperRequestExecutionMed
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperWaiverOfClaims # Tide
+ result: PaperWaiverOfClaims
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperDurka # Tide
+ result: PaperDurka
+ completetime: 1
+ materials:
+ Paper: 0
+
+# PaperSci
+- type: latheRecipe
+ id: PaperRequestReasonable # Tide
+ result: PaperRequestReasonable
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperRequestLaw # Tide
+ result: PaperRequestLaw
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperBrain # Tide
+ result: PaperBrain
+ completetime: 1
+ materials:
+ Paper: 0
+
+# PaperCargo
+- type: latheRecipe
+ id: PaperCargoOrder # Tide
+ result: PaperCargoOrder
+ completetime: 1
+ materials:
+ Paper: 0
+
+# PaperService
+- type: latheRecipe
+ id: PaperRequestUpID # Tide
+ result: PaperRequestUpID
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperRequestWork # Tide
+ result: PaperRequestWork
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperRequestTrash # Tide
+ result: PaperRequestTrash
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperEndTrash # Tide
+ result: PaperEndTrash
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperRequestCourt # Tide
+ result: PaperRequestCourt
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperDismissalSer # Tide
+ result: PaperDismissalSer
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperPromotion # Tide
+ result: PaperPromotion
+ completetime: 1
+ materials:
+ Paper: 0
+
+- type: latheRecipe
+ id: PaperRequestBotan # Tide
+ result: PaperRequestBotan
+ completetime: 1
+ materials:
+ Paper: 0
+
+# PaperSyndicat
+- type: latheRecipe
+ id: PaperSyndicat # Tide
+ result: PaperSyndicat
+ completetime: 1
+ materials:
+ Paper: 0
+
+# PapersAll
+# Station->CentComm
+- type: entity
+ parent: Paper
+ id: PaperRequestTargetStation
+ noSpawn: true
+ name: запрос цели
+ components:
+ - type: Paper
+ content: paper-text-request
+
+- type: entity
+ parent: Paper
+ id: PaperReportCC
+ noSpawn: true
+ name: отчет о цели
+ components:
+ - type: Paper
+ content: paper-text-report
+
+- type: entity
+ parent: Paper
+ id: PaperCompletedStation
+ noSpawn: true
+ name: цель выполнена
+ components:
+ - type: Paper
+ content: paper-text-completed
+
+- type: entity
+ parent: Paper
+ id: PaperFailedStation
+ noSpawn: true
+ name: цель провалена
+ components:
+ - type: Paper
+ content: paper-text-failed
+
+- type: entity
+ parent: Paper
+ id: PaperRequestCentComm
+ noSpawn: true
+ name: запрос ПЦК
+ components:
+ - type: Paper
+ content: paper-text-request-CentComm
+
+- type: entity
+ parent: Paper
+ id: PaperRequestERT
+ noSpawn: true
+ name: запрос ОБР
+ components:
+ - type: Paper
+ content: paper-text-request-ERT
+
+- type: entity
+ parent: Paper
+ id: PaperRequestRXBZZ
+ noSpawn: true
+ name: запрос РХБЗЗ
+ components:
+ - type: Paper
+ content: paper-text-request-RXBZZ
+
+- type: entity
+ parent: Paper
+ id: PaperRequestExecution
+ noSpawn: true
+ name: жалоба высшей степени
+ components:
+ - type: Paper
+ content: paper-text-request-high-order-compaint
+
+- type: entity
+ parent: Paper
+ id: PaperRequestMagistrat
+ noSpawn: true
+ name: запрос в магистрат
+ components:
+ - type: Paper
+ content: paper-text-request-magistrat
+
+# PaperCommand
+- type: entity
+ parent: Paper
+ id: PaperDomotionComm
+ noSpawn: true
+ name: запрос на понижение
+ components:
+ - type: Paper
+ content: paper-comm-text-crew-mem-domotion
+
+- type: entity
+ parent: Paper
+ id: PaperDismissalReq
+ noSpawn: true
+ name: запрос на увольнение
+ components:
+ - type: Paper
+ content: paper-comm-text-crew-mem-dismissal
+
+- type: entity
+ parent: Paper
+ id: PaperRequestHeadCouncil
+ noSpawn: true
+ name: запрос на голосование глав
+ components:
+ - type: Paper
+ content: paper-comm-text-request-council
+
+- type: entity
+ parent: Paper
+ id: PaperHeadCouncilEnd
+ noSpawn: true
+ name: отчет по голосованию глав
+ components:
+ - type: Paper
+ content: paper-comm-text-council-end
+
+# PaperSecurity
+- type: entity
+ parent: Paper
+ id: PaperOrderSec
+ noSpawn: true
+ name: ордер на арест
+ components:
+ - type: Paper
+ content: paper-sec-text-order
+
+- type: entity
+ parent: Paper
+ id: PaperDonos
+ noSpawn: true
+ name: жалоба
+ components:
+ - type: Paper
+ content: paper-sec-text-complaint
+
+- type: entity
+ parent: Paper
+ id: PaperLic
+ noSpawn: true
+ name: разрешение на ношение оружия
+ components:
+ - type: Paper
+ content: paper-sec-text-lic
+
+- type: entity
+ parent: Paper
+ id: PaperTimeRequestWeapon
+ noSpawn: true
+ name: временный запрос на оружие
+ components:
+ - type: Paper
+ content: paper-sec-text-request-weapon
+
+- type: entity
+ parent: Paper
+ id: PaperRequestExecutionSec
+ noSpawn: true
+ name: запрос на казнь
+ components:
+ - type: Paper
+ content: paper-sec-text-request-execution
+
+- type: entity
+ parent: Paper
+ id: PaperOrderWeapon
+ noSpawn: true
+ name: разрешение на заказ оружия
+ components:
+ - type: Paper
+ content: paper-sec-text-request-cargo-weapon
+
+- type: entity
+ parent: Paper
+ id: PaperRequestGuard
+ noSpawn: true
+ name: программа защиты свидетелей
+ components:
+ - type: Paper
+ content: paper-sec-text-request-guard
+
+# PaperEng
+- type: entity
+ parent: Paper
+ id: PaperRequestBuild
+ noSpawn: true
+ name: разрешение о проведении строительных работ
+ components:
+ - type: Paper
+ content: paper-eng-text-request-build
+
+- type: entity
+ parent: Paper
+ id: PaperRequestMaterial
+ noSpawn: true
+ name: запрос материалов
+ components:
+ - type: Paper
+ content: paper-eng-text-request-material
+
+- type: entity
+ parent: Paper
+ id: PaperReportElect
+ noSpawn: true
+ name: отчет об электроснабжении
+ components:
+ - type: Paper
+ content: paper-eng-text-report-elect
+
+- type: entity
+ parent: Paper
+ id: PaperReportAtmos
+ noSpawn: true
+ name: отчет об атмосфере
+ components:
+ - type: Paper
+ content: paper-eng-text-report-atmos
+
+# PaperMed
+- type: entity
+ parent: Paper
+ id: PaperRequestNarco
+ noSpawn: true
+ name: лекарственный рецепт
+ components:
+ - type: Paper
+ content: paper-med-text-request-perm-narc
+
+- type: entity
+ parent: Paper
+ id: PaperRequestExecutionMed
+ noSpawn: true
+ name: запрос на проведение эвтаназии
+ components:
+ - type: Paper
+ content: paper-med-text-request-execution
+
+- type: entity
+ parent: Paper
+ id: PaperWaiverOfClaims
+ noSpawn: true
+ name: отказ от претензий
+ components:
+ - type: Paper
+ content: paper-med-text-waiver-claims
+
+- type: entity
+ parent: Paper
+ id: PaperDurka
+ noSpawn: true
+ name: заключение о невменяемости
+ components:
+ - type: Paper
+ content: paper-med-text-durka
+
+# PaperSci
+- type: entity
+ parent: Paper
+ id: PaperRequestReasonable
+ noSpawn: true
+ name: признание разумности существа
+ components:
+ - type: Paper
+ content: paper-sci-text-reasonable
+
+- type: entity
+ parent: Paper
+ id: PaperRequestLaw
+ noSpawn: true
+ name: постановление о изменении законов боргов
+ components:
+ - type: Paper
+ content: paper-sci-text-request-law
+
+- type: entity
+ parent: Paper
+ id: PaperBrain
+ noSpawn: true
+ name: постановление о пересадке мозга
+ components:
+ - type: Paper
+ content: paper-sci-text-brain
+
+# PaperCargo
+- type: entity
+ parent: Paper
+ id: PaperCargoOrder
+ noSpawn: true
+ name: заказ товара
+ components:
+ - type: Paper
+ content: paper-car-text-order
+
+# PaperService
+- type: entity
+ parent: Paper
+ id: PaperRequestUpID
+ noSpawn: true
+ name: повышение доступа
+ components:
+ - type: Paper
+ content: paper-ser-text-up-IDcard
+
+- type: entity
+ parent: Paper
+ id: PaperRequestWork
+ noSpawn: true
+ name: ускоренный найм
+ components:
+ - type: Paper
+ content: paper-ser-text-work
+
+- type: entity
+ parent: Paper
+ id: PaperRequestTrash
+ noSpawn: true
+ name: свидетельство о заключении брака
+ components:
+ - type: Paper
+ content: paper-ser-text-trash
+
+- type: entity
+ parent: Paper
+ id: PaperEndTrash
+ noSpawn: true
+ name: свидетельство о расторжении брака
+ components:
+ - type: Paper
+ content: paper-ser-text-trash-end
+
+- type: entity
+ parent: Paper
+ id: PaperRequestCourt
+ noSpawn: true
+ name: инициация судебного процесса
+ components:
+ - type: Paper
+ content: paper-ser-text-court
+
+- type: entity
+ parent: Paper
+ id: PaperDismissalSer
+ noSpawn: true
+ name: увольнение
+ components:
+ - type: Paper
+ content: paper-ser-text-dismissal
+
+- type: entity
+ parent: Paper
+ id: PaperPromotion
+ noSpawn: true
+ name: повышение
+ components:
+ - type: Paper
+ content: paper-ser-text-promotion
+
+- type: entity
+ parent: Paper
+ id: PaperRequestBotan
+ noSpawn: true
+ name: запрос растений
+ components:
+ - type: Paper
+ content: paper-ser-text-request-botan
+
+# PaperSyndicat
+- type: entity
+ parent: Paper
+ id: PaperSyndicat
+ noSpawn: true
+ name: секретные документы
+ components:
+ - type: Paper
+ content: paper-syn-text-ha-ha
+
+# BoxFolder
+- type: entity
+ id: BoxFolderRedBAN
+ parent: BoxFolderBase
+ noSpawn: true
+ name: формы службы безопасноти
+ suffix: Red
+ components:
+ - type: Sprite
+ sprite: White/Structures/Machines/doc_printer.rsi
+ layers:
+ - state: folder-sec
+ - type: TimedDespawn
+ lifetime: 0,1
+
+- type: entity
+ id: BoxFolderBlueBAN
+ parent: BoxFolderBase
+ noSpawn: true
+ name: формы командования
+ suffix: Blue
+ components:
+ - type: Sprite
+ sprite: White/Structures/Machines/doc_printer.rsi
+ layers:
+ - state: folder-com
+ - type: TimedDespawn
+ lifetime: 0,1
+
+- type: entity
+ id: BoxFolderYellowBAN
+ parent: BoxFolderBase
+ noSpawn: true
+ name: формы карго
+ suffix: Yellow
+ components:
+ - type: Sprite
+ sprite: White/Structures/Machines/doc_printer.rsi
+ layers:
+ - state: folder-car
+ - type: TimedDespawn
+ lifetime: 0,1
+
+- type: entity
+ id: BoxFolderWhiteBAN
+ parent: BoxFolderBase
+ noSpawn: true
+ name: формы медиков
+ suffix: White
+ components:
+ - type: Sprite
+ sprite: White/Structures/Machines/doc_printer.rsi
+ layers:
+ - state: folder-med
+ - type: TimedDespawn
+ lifetime: 0,1
+
+- type: entity
+ id: BoxFolderGreyBAN
+ parent: BoxFolderBase
+ noSpawn: true
+ name: формы сервиса
+ suffix: Grey
+ components:
+ - type: Sprite
+ sprite: White/Structures/Machines/doc_printer.rsi
+ layers:
+ - state: folder-ser
+ - type: TimedDespawn
+ lifetime: 0,1
+
+- type: entity
+ id: BoxFolderGreenBAN
+ parent: BoxFolderBase
+ noSpawn: true
+ name: формы для ЦентКома
+ suffix: Green
+ components:
+ - type: Sprite
+ sprite: White/Structures/Machines/doc_printer.rsi
+ layers:
+ - state: folder-CC
+ - type: TimedDespawn
+ lifetime: 0,1
+
+- type: entity
+ id: BoxFolderRYellowBAN
+ parent: BoxFolderBase
+ noSpawn: true
+ name: формы инженеров
+ suffix: RYellow
+ components:
+ - type: Sprite
+ sprite: White/Structures/Machines/doc_printer.rsi
+ layers:
+ - state: folder-eng
+ - type: TimedDespawn
+ lifetime: 0,1
+
+- type: entity
+ id: BoxFolderPurpleBAN
+ parent: BoxFolderBase
+ noSpawn: true
+ name: формы учёных
+ suffix: Purple
+ components:
+ - type: Sprite
+ sprite: White/Structures/Machines/doc_printer.rsi
+ layers:
+ - state: folder-sci
+ - type: TimedDespawn
+ lifetime: 0,1
+
+- type: entity
+ id: BoxFolderBlackBAN
+ parent: BoxFolderBase
+ noSpawn: true
+ name: формы J@4D*S
+ suffix: Black
+ components:
+ - type: Sprite
+ sprite: White/Structures/Machines/doc_printer.rsi
+ layers:
+ - state: folder-syn
+ - type: TimedDespawn
+ lifetime: 0,1
+
+# RecipeBoxFolder
+- type: latheRecipe
+ id: BoxFolderGreenBAN # Tide
+ result: BoxFolderGreenBAN
+ completetime: 1
+ materials:
+ Paper: 1
+
+- type: latheRecipe
+ id: BoxFolderGreyBAN # Tide
+ result: BoxFolderGreyBAN
+ completetime: 1
+ materials:
+ Paper: 1
+
+- type: latheRecipe
+ id: BoxFolderWhiteBAN # Tide
+ result: BoxFolderWhiteBAN
+ completetime: 1
+ materials:
+ Paper: 1
+
+- type: latheRecipe
+ id: BoxFolderYellowBAN # Tide
+ result: BoxFolderYellowBAN
+ completetime: 1
+ materials:
+ Paper: 1
+
+- type: latheRecipe
+ id: BoxFolderBlueBAN # Tide
+ result: BoxFolderBlueBAN
+ completetime: 1
+ materials:
+ Paper: 1
+
+- type: latheRecipe
+ id: BoxFolderRedBAN # Tide
+ result: BoxFolderRedBAN
+ completetime: 1
+ materials:
+ Paper: 1
+
+- type: latheRecipe
+ id: BoxFolderRYellowBAN # Tide
+ result: BoxFolderRYellowBAN
+ completetime: 1
+ materials:
+ Paper: 1
+
+- type: latheRecipe
+ id: BoxFolderPurpleBAN # Tide
+ result: BoxFolderPurpleBAN
+ completetime: 1
+ materials:
+ Paper: 1
+
+- type: latheRecipe
+ id: BoxFolderBlackBAN # Tide
+ result: BoxFolderBlackBAN
+ completetime: 1
+ materials:
+ Paper: 1
diff --git a/Resources/Prototypes/White/Recipes/lathe_recipes.yml b/Resources/Prototypes/White/Recipes/lathe_recipes.yml
index 85f5284bf7..1680f0e9fe 100644
--- a/Resources/Prototypes/White/Recipes/lathe_recipes.yml
+++ b/Resources/Prototypes/White/Recipes/lathe_recipes.yml
@@ -11,3 +11,13 @@
completetime: 5
materials:
Steel: 1500
+- type: latheRecipe
+ id: ClothingEyesNightVisionGoggles
+ result: ClothingEyesNightVisionGoggles
+ completetime: 2
+ materials:
+ Steel: 200
+ Glass: 100
+ Silver: 100
+ Gold: 100
+
diff --git a/Resources/Prototypes/White/Research/experimental.yml b/Resources/Prototypes/White/Research/experimental.yml
new file mode 100644
index 0000000000..5df1e504e2
--- /dev/null
+++ b/Resources/Prototypes/White/Research/experimental.yml
@@ -0,0 +1,43 @@
+- type: technology
+ id: AdvancedRobotics
+ name: research-technology-advanced-robotics
+ icon:
+ sprite: White/Mobs/Player/Borgs/cyborg.rsi
+ state: icon
+ discipline: Experimental
+ tier: 1
+ cost: 5000
+ recipeUnlocks:
+ - CyborgMonitoringComputerCircuitboard
+ - BorgChargerMachineCircuitboard
+ - CyborgMonitoringServerMachineCircuitboard
+ - PositronicBrain
+
+- type: technology
+ id: UpgradeBorgModule
+ name: research-technology-upgrade-borg
+ icon:
+ sprite: White/Objects/Devices/cyborgradiomodule.rsi
+ state: icon
+ discipline: Experimental
+ tier: 2
+ cost: 15000
+ recipeUnlocks:
+ - CyborgHUDModuleSec
+ - CyborgHUDModuleMed
+ - CyborgSpeedModule
+ - CyborgInstrumentModuleFilled
+ - CyborgJetpackModule
+
+# Night Vision Tech
+- type: technology
+ id: NightVisionTech
+ name: night vision technology
+ icon:
+ sprite: White/Clothing/Head/nightvision.rsi
+ state: icon
+ discipline: Experimental
+ tier: 2
+ cost: 10000
+ recipeUnlocks:
+ - ClothingEyesNightVisionGoggles
diff --git a/Resources/Textures/White/Clothing/Head/nightvision.rsi/equipped-EYES.png b/Resources/Textures/White/Clothing/Head/nightvision.rsi/equipped-EYES.png
new file mode 100644
index 0000000000..7d15515f7a
Binary files /dev/null and b/Resources/Textures/White/Clothing/Head/nightvision.rsi/equipped-EYES.png differ
diff --git a/Resources/Textures/White/Clothing/Head/nightvision.rsi/icon.png b/Resources/Textures/White/Clothing/Head/nightvision.rsi/icon.png
new file mode 100644
index 0000000000..bf770f70f8
Binary files /dev/null and b/Resources/Textures/White/Clothing/Head/nightvision.rsi/icon.png differ
diff --git a/Resources/Textures/White/Clothing/Head/nightvision.rsi/inhand-left.png b/Resources/Textures/White/Clothing/Head/nightvision.rsi/inhand-left.png
new file mode 100644
index 0000000000..995b37471b
Binary files /dev/null and b/Resources/Textures/White/Clothing/Head/nightvision.rsi/inhand-left.png differ
diff --git a/Resources/Textures/White/Clothing/Head/nightvision.rsi/inhand-right.png b/Resources/Textures/White/Clothing/Head/nightvision.rsi/inhand-right.png
new file mode 100644
index 0000000000..c3efa67f83
Binary files /dev/null and b/Resources/Textures/White/Clothing/Head/nightvision.rsi/inhand-right.png differ
diff --git a/Resources/Textures/White/Clothing/Head/nightvision.rsi/meta.json b/Resources/Textures/White/Clothing/Head/nightvision.rsi/meta.json
new file mode 100644
index 0000000000..541bdfbedc
--- /dev/null
+++ b/Resources/Textures/White/Clothing/Head/nightvision.rsi/meta.json
@@ -0,0 +1,26 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5a73e8f825ff279e82949b9329783a9e3070e2da",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "equipped-EYES",
+ "directions": 4
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ }
+ ]
+}
diff --git a/Resources/Textures/White/Items/Tools/tricorder.rsi/icon.png b/Resources/Textures/White/Items/Tools/tricorder.rsi/icon.png
new file mode 100644
index 0000000000..3517223cba
Binary files /dev/null and b/Resources/Textures/White/Items/Tools/tricorder.rsi/icon.png differ
diff --git a/Resources/Textures/White/Items/Tools/tricorder.rsi/meta.json b/Resources/Textures/White/Items/Tools/tricorder.rsi/meta.json
new file mode 100644
index 0000000000..9013f6b457
--- /dev/null
+++ b/Resources/Textures/White/Items/Tools/tricorder.rsi/meta.json
@@ -0,0 +1,20 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Taken from tgstation",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "on"
+ },
+ {
+ "name": "off"
+ }
+ ]
+}
diff --git a/Resources/Textures/White/Items/Tools/tricorder.rsi/off.png b/Resources/Textures/White/Items/Tools/tricorder.rsi/off.png
new file mode 100644
index 0000000000..3e0f93f2c3
Binary files /dev/null and b/Resources/Textures/White/Items/Tools/tricorder.rsi/off.png differ
diff --git a/Resources/Textures/White/Items/Tools/tricorder.rsi/on.png b/Resources/Textures/White/Items/Tools/tricorder.rsi/on.png
new file mode 100644
index 0000000000..0c86a50d2e
Binary files /dev/null and b/Resources/Textures/White/Items/Tools/tricorder.rsi/on.png differ
diff --git a/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-CC.png b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-CC.png
new file mode 100644
index 0000000000..f740aa3c9b
Binary files /dev/null and b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-CC.png differ
diff --git a/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-base.png b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-base.png
new file mode 100644
index 0000000000..5fbb47268f
Binary files /dev/null and b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-base.png differ
diff --git a/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-car.png b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-car.png
new file mode 100644
index 0000000000..068d11192e
Binary files /dev/null and b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-car.png differ
diff --git a/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-com.png b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-com.png
new file mode 100644
index 0000000000..3c679a983c
Binary files /dev/null and b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-com.png differ
diff --git a/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-eng.png b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-eng.png
new file mode 100644
index 0000000000..d99478b036
Binary files /dev/null and b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-eng.png differ
diff --git a/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-med.png b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-med.png
new file mode 100644
index 0000000000..e91ba0f29a
Binary files /dev/null and b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-med.png differ
diff --git a/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-overlay-paper.png b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-overlay-paper.png
new file mode 100644
index 0000000000..82f57cdd65
Binary files /dev/null and b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-overlay-paper.png differ
diff --git a/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-sci.png b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-sci.png
new file mode 100644
index 0000000000..e97c6682f6
Binary files /dev/null and b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-sci.png differ
diff --git a/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-sec.png b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-sec.png
new file mode 100644
index 0000000000..ec61feaf9c
Binary files /dev/null and b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-sec.png differ
diff --git a/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-ser.png b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-ser.png
new file mode 100644
index 0000000000..554cb609fe
Binary files /dev/null and b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-ser.png differ
diff --git a/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-syn.png b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-syn.png
new file mode 100644
index 0000000000..6de46fdb0e
Binary files /dev/null and b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-syn.png differ
diff --git a/Resources/Textures/White/Structures/Machines/doc_printer.rsi/icon.png b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/icon.png
new file mode 100644
index 0000000000..e7e0428094
Binary files /dev/null and b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/icon.png differ
diff --git a/Resources/Textures/White/Structures/Machines/doc_printer.rsi/idle.png b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/idle.png
new file mode 100644
index 0000000000..10ac83d757
Binary files /dev/null and b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/idle.png differ
diff --git a/Resources/Textures/White/Structures/Machines/doc_printer.rsi/inserting.png b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/inserting.png
new file mode 100644
index 0000000000..f966089dae
Binary files /dev/null and b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/inserting.png differ
diff --git a/Resources/Textures/White/Structures/Machines/doc_printer.rsi/meta.json b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/meta.json
new file mode 100644
index 0000000000..75d284d44e
--- /dev/null
+++ b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/meta.json
@@ -0,0 +1,96 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Made by Valentyi",
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "states": [
+ {
+ "name": "icon"
+ },
+ {
+ "name": "unlit",
+ "delays": [
+ [
+ 0.6,
+ 0.7,
+ 0.6,
+ 0.7
+ ]
+ ]
+ },
+ {
+ "name": "folder-base"
+ },
+ {
+ "name": "idle"
+ },
+ {
+ "name": "folder-CC"
+ },
+ {
+ "name": "folder-overlay-paper"
+ },
+ {
+ "name": "folder-med"
+ },
+ {
+ "name": "folder-sec"
+ },
+ {
+ "name": "folder-eng"
+ },
+ {
+ "name": "folder-sci"
+ },
+ {
+ "name": "folder-car"
+ },
+ {
+ "name": "folder-syn"
+ },
+ {
+ "name": "folder-com"
+ },
+ {
+ "name": "folder-ser"
+ },
+ {
+ "name": "inserting",
+ "delays": [
+ [
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2,
+ 0.2
+ ]
+ ]
+ },
+ {
+ "name": "printing",
+ "delays": [
+ [
+ 0.4,
+ 0.4,
+ 0.4,
+ 0.4,
+ 0.4,
+ 0.4,
+ 0.4,
+ 0.4,
+ 0.4
+ ]
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Resources/Textures/White/Structures/Machines/doc_printer.rsi/printing.png b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/printing.png
new file mode 100644
index 0000000000..802903c410
Binary files /dev/null and b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/printing.png differ
diff --git a/Resources/Textures/White/Structures/Machines/doc_printer.rsi/unlit.png b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/unlit.png
new file mode 100644
index 0000000000..c7b0bff3ea
Binary files /dev/null and b/Resources/Textures/White/Structures/Machines/doc_printer.rsi/unlit.png differ