From 64903d14036d75097ab06311fec48f6605d23fd4 Mon Sep 17 00:00:00 2001 From: Remuchi <72476615+Remuchi@users.noreply.github.com> Date: Sun, 12 Nov 2023 21:21:53 +0700 Subject: [PATCH] =?UTF-8?q?[FEAT]=20=D0=92=D1=81=D1=8F=D0=BA=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=D0=BA=D0=BE=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5?= =?UTF-8?q?=20=D1=80=D0=B0=D0=B7=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20=D0=B8=20?= =?UTF-8?q?=D0=B2=D0=BA=D1=83=D1=81=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20(#554)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: трикодер * feat: принтер документов * fix: текст фелинидов * feat: возможность менять голос эмоутов * feat: мяукаем при аспекте мяуканья * feat: ПНВ * fix: забирай свои метадаты * fix: oopsies * fix: линтер снова * fix: пожалуйста линтер отстань # Conflicts: # Content.Server/Speech/Components/VocalComponent.cs # Content.Server/White/AspectsSystem/Aspects/CatEarsAspect.cs # Resources/Prototypes/Catalog/Fills/Items/belt.yml # Resources/Prototypes/Reagents/Materials/materials.yml # Resources/Prototypes/White/Catalog/seniors_fills.yml # Resources/Prototypes/White/Catalog/uplink.yml # Resources/Prototypes/White/Recipes/lathe_recipes.yml # Resources/Prototypes/White/Research/experimental.yml --- .../White/Items/Tricorder/TricorderSystem.cs | 73 ++ .../Speech/Components/VocalComponent.cs | 5 +- .../AspectsSystem/Aspects/CatEarsAspect.cs | 38 +- .../White/Items/Tricorder/TricorderSystem.cs | 161 +++ .../Item/Tricorder/SharedTricorderSystem.cs | 30 + .../Item/Tricorder/TricorderComponent.cs | 38 + .../Locale/ru-RU/materials/materials.ftl | 1 + .../Locale/ru-RU/white/items/tricorder.ftl | 1 + .../ru-RU/white/species/felinid/felinid.ftl | 2 +- .../structures/doc-printer/paper-text.ftl | 610 +++++++++++ .../Prototypes/Catalog/Fills/Items/belt.yml | 8 +- Resources/Prototypes/White/Catalog/uplink.yml | 12 + .../Clothing/Head/night_vision_goggle.yml | 27 + .../Entities/Objects/Tools/tricorder.yml | 53 + .../Structures/Machines/doc_printer.yml | 985 ++++++++++++++++++ .../White/Recipes/lathe_recipes.yml | 10 + .../White/Research/experimental.yml | 43 + .../Head/nightvision.rsi/equipped-EYES.png | Bin 0 -> 387 bytes .../Clothing/Head/nightvision.rsi/icon.png | Bin 0 -> 218 bytes .../Head/nightvision.rsi/inhand-left.png | Bin 0 -> 385 bytes .../Head/nightvision.rsi/inhand-right.png | Bin 0 -> 410 bytes .../Clothing/Head/nightvision.rsi/meta.json | 26 + .../White/Items/Tools/tricorder.rsi/icon.png | Bin 0 -> 312 bytes .../White/Items/Tools/tricorder.rsi/meta.json | 20 + .../White/Items/Tools/tricorder.rsi/off.png | Bin 0 -> 151 bytes .../White/Items/Tools/tricorder.rsi/on.png | Bin 0 -> 151 bytes .../Machines/doc_printer.rsi/folder-CC.png | Bin 0 -> 246 bytes .../Machines/doc_printer.rsi/folder-base.png | Bin 0 -> 98 bytes .../Machines/doc_printer.rsi/folder-car.png | Bin 0 -> 256 bytes .../Machines/doc_printer.rsi/folder-com.png | Bin 0 -> 264 bytes .../Machines/doc_printer.rsi/folder-eng.png | Bin 0 -> 261 bytes .../Machines/doc_printer.rsi/folder-med.png | Bin 0 -> 263 bytes .../doc_printer.rsi/folder-overlay-paper.png | Bin 0 -> 113 bytes .../Machines/doc_printer.rsi/folder-sci.png | Bin 0 -> 261 bytes .../Machines/doc_printer.rsi/folder-sec.png | Bin 0 -> 260 bytes .../Machines/doc_printer.rsi/folder-ser.png | Bin 0 -> 255 bytes .../Machines/doc_printer.rsi/folder-syn.png | Bin 0 -> 249 bytes .../Machines/doc_printer.rsi/icon.png | Bin 0 -> 393 bytes .../Machines/doc_printer.rsi/idle.png | Bin 0 -> 735 bytes .../Machines/doc_printer.rsi/inserting.png | Bin 0 -> 1471 bytes .../Machines/doc_printer.rsi/meta.json | 96 ++ .../Machines/doc_printer.rsi/printing.png | Bin 0 -> 1426 bytes .../Machines/doc_printer.rsi/unlit.png | Bin 0 -> 232 bytes 43 files changed, 2228 insertions(+), 11 deletions(-) create mode 100644 Content.Client/White/Items/Tricorder/TricorderSystem.cs create mode 100644 Content.Server/White/Items/Tricorder/TricorderSystem.cs create mode 100644 Content.Shared/White/Item/Tricorder/SharedTricorderSystem.cs create mode 100644 Content.Shared/White/Item/Tricorder/TricorderComponent.cs create mode 100644 Resources/Locale/ru-RU/white/items/tricorder.ftl create mode 100644 Resources/Locale/ru-RU/white/structures/doc-printer/paper-text.ftl create mode 100644 Resources/Prototypes/White/Entities/Clothing/Head/night_vision_goggle.yml create mode 100644 Resources/Prototypes/White/Entities/Objects/Tools/tricorder.yml create mode 100644 Resources/Prototypes/White/Entities/Structures/Machines/doc_printer.yml create mode 100644 Resources/Prototypes/White/Research/experimental.yml create mode 100644 Resources/Textures/White/Clothing/Head/nightvision.rsi/equipped-EYES.png create mode 100644 Resources/Textures/White/Clothing/Head/nightvision.rsi/icon.png create mode 100644 Resources/Textures/White/Clothing/Head/nightvision.rsi/inhand-left.png create mode 100644 Resources/Textures/White/Clothing/Head/nightvision.rsi/inhand-right.png create mode 100644 Resources/Textures/White/Clothing/Head/nightvision.rsi/meta.json create mode 100644 Resources/Textures/White/Items/Tools/tricorder.rsi/icon.png create mode 100644 Resources/Textures/White/Items/Tools/tricorder.rsi/meta.json create mode 100644 Resources/Textures/White/Items/Tools/tricorder.rsi/off.png create mode 100644 Resources/Textures/White/Items/Tools/tricorder.rsi/on.png create mode 100644 Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-CC.png create mode 100644 Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-base.png create mode 100644 Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-car.png create mode 100644 Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-com.png create mode 100644 Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-eng.png create mode 100644 Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-med.png create mode 100644 Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-overlay-paper.png create mode 100644 Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-sci.png create mode 100644 Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-sec.png create mode 100644 Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-ser.png create mode 100644 Resources/Textures/White/Structures/Machines/doc_printer.rsi/folder-syn.png create mode 100644 Resources/Textures/White/Structures/Machines/doc_printer.rsi/icon.png create mode 100644 Resources/Textures/White/Structures/Machines/doc_printer.rsi/idle.png create mode 100644 Resources/Textures/White/Structures/Machines/doc_printer.rsi/inserting.png create mode 100644 Resources/Textures/White/Structures/Machines/doc_printer.rsi/meta.json create mode 100644 Resources/Textures/White/Structures/Machines/doc_printer.rsi/printing.png create mode 100644 Resources/Textures/White/Structures/Machines/doc_printer.rsi/unlit.png 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 0000000000000000000000000000000000000000..7d15515f7ad7d92ea8ecc536d8f5c06b83633aa0 GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEVD$2IaSW+oe0$5@+bK}u_{VsK zmc{=Mln57fwy8aQMS4BMO|5y)xJM&sW{DT+Ur+HP`sGE$7e0hfaN4p#5d)g4}&Km{s$+pREi3_*Uj-+Sk0%FD o-l-)SUA^y^Fg~k(_&$&}IPYm+xyRrwFmM?>UHx3vIVCg!09<{XZ2$lO literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..bf770f70f8969ba008b8e4d2b2687cd602520849 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv=>VS)*8>L**f|I28rn!mD1}BQ zi!9KSsclyt1T!`qZMy~(> literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..995b37471b38d3dbcef1e91888c4ed58239b2d29 GIT binary patch literal 385 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEVD#{GaSW+oe0ytS)}a8AV;?79 zTDrUS+Q#IAP0lZsthSWoxw9WU{v!DYhg1B5>~=oQcTG*fg=?A>V|Tglb68?=^-eYO z#s71CKGf`de*CKH@t#%&CJu!LG~z%Yr^~+Gxjp%tUSD5r^X>EFvzGg-|4-4(F^q^Z znq&F=?YHVp)rX(%y813!_Xwq1POdh~sI^pF2$AHG+EHSOm8{6o=W#kb{d*H*u; zS^a$a*}YN)E5Bwqi(qjds&fl0m=50K3wI1TBe%n+zhXZBibaLCi>F;y-d9lL*MH>| rOUn$om3QkIfC6>yPr#m?k;`yJy1Mbjqo4nPLCfIj>gTe~DWM4fU$Cme literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c3efa67f837fbc9cc5851d2ec09ce705d1bc7652 GIT binary patch literal 410 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEU`+IMaSW+oe0ytS)}a82qaV*- zI(paX^^L%Q0*zQNYmK?LH#R>={vl!4^nkmhv>;%Yc+?A(J}Zr~mvWYk+>A$OyLd19 z_g={GyV~0qbm+$>=7ys&Nlh=Q< zJ!dO^ygOUHQG3Fv|Ldli?To*f`uzN=uk8ZK*JtUR*PLIZwZ3S#ynd*fZk_a9R-vmW zsw=~TEKR3G|E%SZ_IKFwA|qhSyU$x~P2=DG{(Shi#ZG}pxv9aGQ=@<0?f6!7|K*OY zQ`GdIZ7#TX)%Rz{DfjNVPVE`;cFGM5OdJaMh-%K9T5Fl-U7qDhM|P%(6`OryKf<{% z{5<>ZPQmAGm2;F^RICj@-Ef>4WXl*eqeQ*!+LOX1|M&}1Z*)FXu}}gTEi?as)UL{^ V#;mG;OXk;vd$@?2>@%NsSE%B literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3517223cba7f4a55286641c0b60375a35679a381 GIT binary patch literal 312 zcmV-80muG{P)!k7~%I>Htum+08&l@Z{n{2;LUp*M@D-DVS)*8>L*c>Op2|7EY2SIjvn z>1uhk6)QrcR)qflZ#-+2hCNUjV@Z%-FoVOh8)-m}mZytjh{nX^1c`4B9S2n;d{5jI w@paw6Ig2Yeebw&fURmFU=83P$0%RE&Y9yE}bBw(bfVvnwUHx3vIVCg!05PU7%K!iX literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..0c86a50d2eb58229daff08e53ac7b45485e9f63d GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnF3?v&v(vJfv=>VS)*8>L*c>Op2|7EY2SB&hN zL)=H(SF8w)S`qsHzj3t_X9-XlV@Z%-FoVOh8)-m}mZytjh{nX^1c`4B9S2n;d{5jI w@paw6Ig2Yeebw&fURmFU=83P$0%RE&Y9yE}bBw(bfVvnwUHx3vIVCg!0FE0lxc~qF literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f740aa3c9be4c986e3fe6a7efa60e0d519bc7eac GIT binary patch literal 246 zcmV8^M z-V5jmzw$5oCV*cAj|6!Dw_4x(CoaR;y7B<76bd?=Z8@0kUjYHSI{**iaq^?7_aAn& wbsC2N>H%|F9t2nXFbX;_Ob6%y9r&LEAJkMate?r+4gdfE07*qoM6N<$f<`J}^8f$< literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5fbb47268fc20367d8ba35969dae8e1dda8bf9cf GIT binary patch literal 98 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzO-~ockch)?FDNoG81OJ{{Pf>F w*f!dD@(*VNW`_Asg|@ymo^)g?14B4>?>rVJ{`tncfSMRQUHx3vIVCg!0F{&*i2wiq literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..068d11192efbe0051d86587cae338d0b3fa020e4 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ#ArYL(2@@XI7(om88@IQC|K2$PgY7nU z_Drx^B*UO}-;?pkHRdHVELWA8u(&xVn6PAsF)@7cSC6}};Pefkml!-<{an^LB{Ts5 Dclllk literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3c679a983c3d6c0adab2eac7e4e0cad1e268208a GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ^PVn_ArYL(2@<3#}pUdCCi3=CI~Yii5$Z#V<=8iS{+ KpUXO@geCxtI9##- literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d99478b036d3b80a168c0bea92a31746de1bb3d6 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJGoCJvArYL(2@E+?(|Oa#y_IQx3I9 zJxk|mEpldf){<>re|Uz*mT6Yn%pQI&Gp0U#IC;KC(GLq1Ylf5=(KnPujLX+fa(+1Z zkm6~^DG?p-EGEe^aJ>r859n1iYh3iI>4QfZgNL*pcj8Ni*{(Z|u-SFVdQ I&MBb@0LECYe9EEr z$Y<$Xtw+ubuiDOU=SwW*T|Y~f*`v=tYVO0&x6>o8CJ3wCWK?kG+giPNMr!y@(N=%1 zb{+PBB*k5iJ<1p~R!HvO=VJKWe!B(Nd=b8rd<>F(r=2D|wtMKIyhFzH!Ony$jLdRO zN7N5ZpI)$3x$8)05yOfmMOJ}m{s~FXR@}NMAi>*sQD8wN2LrgTe~DWM4f0K8(B literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..82f57cdd65389bfe37dd9288cd8c9dc8f56aa2ac GIT binary patch literal 113 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz3r`ovkch)?FK*;zFyLTzob$K* zV@FzRN#KL^%PMASG0ZqomY0A2^^HnK&rQ{gOe&q?0uBreHA@+FMA+3gm@cgbn!(`d L>gTe~DWM4f>yaXG literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e97c6682f6939f0b8024c448821d3e91eaf3520a GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJGoCJvArYL(2@wsm#zG0u?AW2)`oT~S0A7E?RT zI3=RvoysIx2Ci4%?duoKaL!?Jy~y%(!W)JOb}?dyE-{*Q7j*Jg=t-0wXlQ4+*ePK9 z^s!gSk}lz=3<0dpTngLd6po$=+zNHH!)5^n1|>~($=SCLl>xoQ;OXk;vd$@?2>{M1 BTZsSw literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..554cb609fe7a08f7886f804aef3b0dc4f318cf85 GIT binary patch literal 255 zcmV_>k_s7 z-6YN#O^FiyK$3IPxhZ;=8Pp#h672Xr;l$a$N*}lTeUJCs_Gpe5rv{_y1q;UWXY5Pw z&b{bZ{Q2J8=QBUG*7dUoPftupd1v5zfpJFDjlgx%T`yR;oV`}+tS;}_SW~<8|5`)l z0|w7yezpm$x_9Xh%ZKv^ROd)Oh`n-sU;M92dnFmp&1XycU&@`)@NByS!&%`4{0|Fd wRyMcRH!js+Sp8D?fLo&Cv@nqM8_JmY``cww<;zXlfPP`{boFyt=akR{02Xy<8vp^*^%Ab1W7&tu^^1i{J^*jrg@X=&;5Wb+wjC$97VF0wEI$v7r? zkIc(RbhEwL;^%q3pXD@7V^#CxteE}{;Bg#N6h-={<9!@Q_}zxYWdaO73OgsTQ6J>%CsS6{`Pccf}yWo)6 zh2|_F6BGNt`>@YWY@&*%hrIp|27^OZoyla9yUncj?BB}Pf3gL#t|8v(bg12Kv$rjm zOOzjcLGYpP48Vvl77N;Lw=96oW-FPTGgF`*#%`@v6Jv*|YjVVrQ2JsINIMV1j6)_j#$L+J{nE@K)eogF0)XMu>6H5Y z{;%8^J)h6bS2pi2!2-n3VLA5AqUITG!aY>O=EN8^j=pU}nZ| zQJ)Y9F$AOql-)jpU?}~}9$+HBZD6SD5c(_t%;%Vf%1l}72U{nke&tt!3c&7uRl8Nt4KndJD0r6>2vi#ChV&11dNk=L# zTc3R;mL;y|1N3}=o)3^l$X%9K{-vlG1i5JIV}D-iHlg&{X)xseJO?18zSsjo?ay-n zP!>vG1Q2R}UIGwGUjzWdoc8D6lk)+|d4OX|?a{mL&!1|tnT!5xHv4fd!Pw!dp9#Qe ze?EN>;mSRF*88N;MZece4kp;=66|Y9ASoAvV5t3h&Ne+CaH68;1Gw&SWtnt7q4Fz1 z1#o4L`Zv|sSpeQ~Yw;pp=Y3Q3*ZM_#)w)VR2`B+2pahhF5>Nt4KndJFfiIHcGZ)la R2&Mo4002ovPDHLkV1h!*SF!*A literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..f966089daea1d06e546ce4665de4e907060c71cb GIT binary patch literal 1471 zcmah}|2xwO9RF-467jShHBl~+qfK&H?%6&I7hywnJ-*D$og@yO8OJawl~DPTiZw~+ z%N6teZad^Sg)x!Z2(`rw54fJ^^?tuzujlpt?e#qG>pp}NdOAoQ008tn z++F>)n6Wh>+S|7FNK%pq0BB}+k50nVHJ2A<&^-2mZG0szT6dQ zUua-rEr+s=eD4!TiBR+Jf=hMXb-ip5Gnub6kGxE-sfo$KJiiVfb2KO4acZOGt~--= zN%(T6pK0H~z`!YAd24HHRhivtD+V_4$ze*l><~CLx6$^AU0>#IUgtUpgG5J1AJe}i z7KEm_Vy4NBcPmRvPU~}P^pf1d^Bh2HJvHkf^rwy4+3ML9war9dpJ(q% zJvji#Q%s<3bd4Lh++R1|j$0jr`v?aOywq;c?1*-E#sR*obW@?IPomRLOL8@GV4?$; zhM>FSpIo#iFzSr`&7a*}z5$y_HcVZDUfa&)wUN1i8N)6(I`$q1iqH%Rj*H(!qfk`8 zpgB8Q%H)xB5=(bB)834*{oHhm9FO-)}74GkrBVUUz+ZU@M3;^i(Fd~`3I zC6P!~QfWk?1QW@h*f(DxMn8afN%AuqU6w{^_Zy$~8Et=Fqp#l7$A&(_%r^CVj=r8c zxKRdFih6pkj|v2db+5Y#L}Gj%srKnpJ!J&hPeYKE;Uyq;k`VwVvm`AxwzRpqxjS-< zqFM=BGEAm52aw5Ww(JmL%G-C_OWR#1)ngAKx!zhWV>9Ly5OX)4BUW|+@ z5;sPiZOLdNe*I-*M_=k?hs3ek!EH33Z!>I>Jn5X4tYzT12A%_3)rC@UdTEk9;LWu; zr*;BKun#*{o55zItQlitfo?77W<_eXdWf5`PFL&I4eBCtL0;B49ob&RBca zCqQ1EQu`;3Ph3qjBvzNCHSVKGejWIs9-j(6J}CKwnLfScc%X z$93qNuuwvgqDRHXb*LcP8$#i|-5>Ci3RQPST<)}@QAxqsq}3h;ya`}F!o82j%l>%k z7Cq}oNpUe8hpylYtGu2(&RK4SfgvtLpLgOXDwT?I@l6ok(a{mhou~W9Kn&_E__y#f zr3%LEEh3E`0_7+W`QzpbWjNIK{mZ@heGT}^-3_Y~CIwBkmQ|lQXYhq zZ)pZ{8qSKLmA42yu{cHqYp9bQ?>rpGy|8H+y4j~32uoAd36y>(F`7PBSf&juYos=6 zav|(58A@QJm41y+gtPb&N2k_w2aW9VLeW*)9A!&_nE zTmv%2#b~W|Y^ehjMUJh(<{i^Hoznpcrg9ZUtn}`#q1tRb)&z4Rzo-APgR>rJ ztiDP7GYXv$WelCU+bLVfDgvS#z2WHJEXbvc!llqRE3MA#x#3g_?whn_2iq_@$1wZ% z%yp^~el47FS}y%X+;2Z$agPNe!0J`%u=E^qd6-Asufr(uwZf(%DuNxb<5Ui_<_8wd z?tG`KO#lAh0n?VTI;A`0^5z+y4E2$`7Z#cd@bpXlx+;oKlrS^bSCw#f5u-pZZ61y= zULNizGAz?epw0za5b6tI&{;De_vBTDfD6pxR&3gK78xu;L)wo)$QvVvA6jTLfd2)U buf3*WSm`MN@<+0_9y8$KMsTe;9&+g)2gSew literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..802903c41057ee0b215e17e9e8ae2ac4a79a4bfb GIT binary patch literal 1426 zcmZ{kdpOez7{`BOOgER(Xso%MD8h4GhLzb6M!BVAayXPrF1dGM3w4wfPA;Q5MlQp& z9qP=j$T{wpk)h+V35A2rqA_C}J?G!k^L)SW_wzjOfA9Bs-c%PSy90Y+djSAAfU~!8 z+fCnZmXY3_(|I?{06@wUXM=UW3F7`%?EuFrrf91_mfnBqjFhX2-hSw;)JYrpgvS$! zd4?bN1tET%EpwPTB!h%DVNQb8$1Vj8xjTf~$oE>LMdw$|_44wUm?k&2^`6(iGFl~X zFnLU~0s-u9aWS|ccvuMvj%tUs-Xp$evq(?lDz{!3@P>u?A?;yh35~cv1J)-W(V%E7V>Er&&VJ zMB>HtKCSUjtg)xJPMKV73Jb59I~GtSIqyk~j`nYFZy(bwxPLg^4CFPOl$3Nb#KU1I zy?||DVKF`N^Z1zYF+!wl#MB|>eM4o?i>}ue9d)%U2s)w{k}?x(Ym9s{`A#-IsIjpT z*;8g@WaMcsD2>H@TR%{3@$vC7O-oDT8ap>^lm^?{+O4z&gopE7^BILzXu-2ubq0}> zQX~2aG62W$+1Z74b~A*(^6mt3<3^c{4I{D_$@n4PyAGBE(vb(tx`xor<2DjT#tJM= zdy$m>q~5tdE9T>ufyR|C$%g`SDZ&WoHO0DTKqrGrr4F)7OEMc$YEM?U)O&dv++XYor8I*`thr1g@Eu{)K#`{I3-ln8TjS!1f9yZA%lfx* zgQhp%AY8bc3Z-z2$I%w&4RK;u7cM$JK4fiuy)?vKOtcAxWcpENR)hIqEXwLdR%uho zikze4(g~I4o9r1?T2VJhvEbZ&MTGMllgT_@!7Ybj9uzgx>3u?BojD3+Xb>Mi?j1CB z-a1FJ9IF6S7Vp6piN=Z@0DM@b^X{!ybai!SJ#>YSc;G&DT5`#-bX!L>fW97jr2ztg zR5iuLeq!Ab%S(`zG=OE;OBdX1Ii5@-qMV$Zdinf_+&jY`C?kRJOt%E0t^T^^tgy|_ zMd!Q6?A|hpi1~|vPvwSonI|j z;&(FR;^Ib@mX@xNCvS2%zlxMdXL&~bVP}^iF(~v7kLLuIUlaqR)V}*~$nQ{U0SRwR zIOom}Dj~4d(=*=uaP(oqd(bzW{|~{|aPo3%7wK`vjiR~LYlLxZPkQ=7?NaCV%jQ2i zvTnoWHPIaZai2*q7oix`lrGWVrrd0{XGWZ8Hc9^YR?@GvV^g20_|+5A`Y2;gHS-Dj zMRC2Zn%@ysc?G1l6ePl3Be$BWHb`1awhCkM`YAL-_Yp1z0ROKF^ph+Lw-?smf;T_! P{#pQc#>s|e<(vF3EX}KS literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c7b0bff3ea017516fd2ac5e2931560674cf1c702 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=>pfi@Ln;{G-g4w>HV|OF@X~i# zdk%jf|IMA9y{xKwyE+40;+zyFKJl-K?!CYvpy1HJz{teHAs`_%Be~CAdTshMv$joa zd}~ejo4#z}pwyy7!;|?x_ktve|a#qk^*ezl-<%5&qD1qWayo okgN5t-mi*6*n}{mpsbO9v4^b8j;DH0flg=eboFyt=akR{0JlX;I{*Lx literal 0 HcmV?d00001