diff --git a/.github/workflows/build-test-debug.yml b/.github/workflows/build-test-debug.yml index 67b930e19f85b6..62b7b0df398b53 100644 --- a/.github/workflows/build-test-debug.yml +++ b/.github/workflows/build-test-debug.yml @@ -51,7 +51,7 @@ jobs: shell: pwsh run: | $env:DOTNET_gcServer=1 - dotnet test --no-build --configuration DebugOpt Content.IntegrationTests/Content.IntegrationTests.csproj -- NUnit.ConsoleOut=0 + dotnet test --no-build --configuration DebugOpt Content.IntegrationTests/Content.IntegrationTests.csproj -- NUnit.ConsoleOut=0 NUnit.MapWarningTo=Failed ci-success: name: Build & Test Debug needs: diff --git a/.github/workflows/build-test-release.yml b/.github/workflows/build-test-release.yml index a5aa866077b252..4b357cfe7d6163 100644 --- a/.github/workflows/build-test-release.yml +++ b/.github/workflows/build-test-release.yml @@ -51,7 +51,7 @@ jobs: shell: pwsh run: | $env:DOTNET_gcServer=1 - dotnet test --configuration Tools --no-build Content.IntegrationTests/Content.IntegrationTests.csproj -- NUnit.ConsoleOut=0 + dotnet test --configuration Tools --no-build Content.IntegrationTests/Content.IntegrationTests.csproj -- NUnit.ConsoleOut=0 NUnit.MapWarningTo=Failed ci-success: name: Build & Test Release needs: diff --git a/Content.Client/Audio/AmbientSoundSystem.cs b/Content.Client/Audio/AmbientSoundSystem.cs index 210b92d81563bc..8fe331119a6b30 100644 --- a/Content.Client/Audio/AmbientSoundSystem.cs +++ b/Content.Client/Audio/AmbientSoundSystem.cs @@ -50,7 +50,7 @@ protected override void QueueUpdate(EntityUid uid, AmbientSoundComponent ambienc /// private int MaxSingleSound => (int) (_maxAmbientCount / (16.0f / 6.0f)); - private readonly Dictionary _playingSounds = new(); + private readonly Dictionary _playingSounds = new(); private readonly Dictionary _playingCount = new(); public bool OverlayEnabled @@ -104,9 +104,9 @@ private void OnShutdown(EntityUid uid, AmbientSoundComponent component, Componen return; sound.Stream?.Stop(); - _playingCount[sound.Sound] -= 1; - if (_playingCount[sound.Sound] == 0) - _playingCount.Remove(sound.Sound); + _playingCount[sound.Path] -= 1; + if (_playingCount[sound.Path] == 0) + _playingCount.Remove(sound.Path); } private void SetAmbienceVolume(float value) @@ -141,9 +141,9 @@ private int PlayingCount(string countSound) { var count = 0; - foreach (var (_, (_, sound)) in _playingSounds) + foreach (var (_, (_, sound, path)) in _playingSounds) { - if (sound.Equals(countSound)) + if (path.Equals(countSound)) count++; } @@ -177,7 +177,7 @@ public override void Update(float frameTime) private void ClearSounds() { - foreach (var (stream, _) in _playingSounds.Values) + foreach (var (stream, _, _) in _playingSounds.Values) { stream?.Stop(); } @@ -245,6 +245,8 @@ private void ProcessNearbyAmbience(TransformComponent playerXform) var entity = comp.Owner; if (comp.Enabled && + // Don't keep playing sounds that have changed since. + sound.Sound == comp.Sound && query.TryGetComponent(entity, out var xform) && xform.MapID == playerXform.MapID && !metaQuery.GetComponent(entity).EntityPaused) @@ -259,9 +261,9 @@ private void ProcessNearbyAmbience(TransformComponent playerXform) sound.Stream?.Stop(); _playingSounds.Remove(comp); - _playingCount[sound.Sound] -= 1; - if (_playingCount[sound.Sound] == 0) - _playingCount.Remove(sound.Sound); + _playingCount[sound.Path] -= 1; + if (_playingCount[sound.Path] == 0) + _playingCount.Remove(sound.Path); } if (_playingSounds.Count >= _maxAmbientCount) @@ -301,7 +303,7 @@ private void ProcessNearbyAmbience(TransformComponent playerXform) if (stream == null) continue; - _playingSounds[comp] = (stream, key); + _playingSounds[comp] = (stream, comp.Sound, key); playingCount++; if (_playingSounds.Count >= _maxAmbientCount) diff --git a/Content.Client/Bql/BqlResultsEui.cs b/Content.Client/Bql/ToolshedVisualizeEui.cs similarity index 74% rename from Content.Client/Bql/BqlResultsEui.cs rename to Content.Client/Bql/ToolshedVisualizeEui.cs index 3e9bda57ff3072..ccefc1228d2459 100644 --- a/Content.Client/Bql/BqlResultsEui.cs +++ b/Content.Client/Bql/ToolshedVisualizeEui.cs @@ -7,13 +7,13 @@ namespace Content.Client.Bql; [UsedImplicitly] -public sealed class BqlResultsEui : BaseEui +public sealed class ToolshedVisualizeEui : BaseEui { - private readonly BqlResultsWindow _window; + private readonly ToolshedVisualizeWindow _window; - public BqlResultsEui() + public ToolshedVisualizeEui() { - _window = new BqlResultsWindow( + _window = new ToolshedVisualizeWindow( IoCManager.Resolve(), IoCManager.Resolve() ); @@ -23,7 +23,7 @@ public BqlResultsEui() public override void HandleState(EuiStateBase state) { - if (state is not BqlResultsEuiState castState) + if (state is not ToolshedVisualizeEuiState castState) return; _window.Update(castState.Entities); diff --git a/Content.Client/Bql/BqlResultsWindow.xaml b/Content.Client/Bql/ToolshedVisualizeWindow.xaml similarity index 100% rename from Content.Client/Bql/BqlResultsWindow.xaml rename to Content.Client/Bql/ToolshedVisualizeWindow.xaml diff --git a/Content.Client/Bql/BqlResultsWindow.xaml.cs b/Content.Client/Bql/ToolshedVisualizeWindow.xaml.cs similarity index 91% rename from Content.Client/Bql/BqlResultsWindow.xaml.cs rename to Content.Client/Bql/ToolshedVisualizeWindow.xaml.cs index 4a9fde855a74f6..0265e3343eef7a 100644 --- a/Content.Client/Bql/BqlResultsWindow.xaml.cs +++ b/Content.Client/Bql/ToolshedVisualizeWindow.xaml.cs @@ -8,12 +8,12 @@ namespace Content.Client.Bql; [GenerateTypedNameReferences] -internal sealed partial class BqlResultsWindow : DefaultWindow +internal sealed partial class ToolshedVisualizeWindow : DefaultWindow { private readonly IClientConsoleHost _console; private readonly ILocalizationManager _loc; - public BqlResultsWindow(IClientConsoleHost console, ILocalizationManager loc) + public ToolshedVisualizeWindow(IClientConsoleHost console, ILocalizationManager loc) { _console = console; _loc = loc; diff --git a/Content.Client/Content.Client.csproj b/Content.Client/Content.Client.csproj index 636233395cce21..29488a7ae19f2e 100644 --- a/Content.Client/Content.Client.csproj +++ b/Content.Client/Content.Client.csproj @@ -33,6 +33,9 @@ StrippingWindow.xaml + + ToolshedVisualizeWindow.xaml + diff --git a/Content.Client/PDA/Ringer/RingerBoundUserInterface.cs b/Content.Client/PDA/Ringer/RingerBoundUserInterface.cs index bb8b785287c323..aee8357cdc3b08 100644 --- a/Content.Client/PDA/Ringer/RingerBoundUserInterface.cs +++ b/Content.Client/PDA/Ringer/RingerBoundUserInterface.cs @@ -43,7 +43,7 @@ private bool TryGetRingtone(out Note[] ringtone) return false; } - ringtone = new Note[4]; + ringtone = new Note[_menu.RingerNoteInputs.Length]; for (int i = 0; i < _menu.RingerNoteInputs.Length; i++) { diff --git a/Content.Client/PDA/Ringer/RingtoneMenu.xaml b/Content.Client/PDA/Ringer/RingtoneMenu.xaml index ecf5d3043621a3..a361a58dd29451 100644 --- a/Content.Client/PDA/Ringer/RingtoneMenu.xaml +++ b/Content.Client/PDA/Ringer/RingtoneMenu.xaml @@ -1,7 +1,7 @@ + MinSize="320 128" + SetSize="320 128"> + MinSize="180 0"> diff --git a/Content.Client/PDA/Ringer/RingtoneMenu.xaml.cs b/Content.Client/PDA/Ringer/RingtoneMenu.xaml.cs index 198c34b0953b96..044714b06fe64c 100644 --- a/Content.Client/PDA/Ringer/RingtoneMenu.xaml.cs +++ b/Content.Client/PDA/Ringer/RingtoneMenu.xaml.cs @@ -10,14 +10,14 @@ namespace Content.Client.PDA.Ringer [GenerateTypedNameReferences] public sealed partial class RingtoneMenu : DefaultWindow { - public string[] PreviousNoteInputs = new[] { "A", "A", "A", "A" }; + public string[] PreviousNoteInputs = new[] { "A", "A", "A", "A", "A", "A" }; public LineEdit[] RingerNoteInputs = default!; public RingtoneMenu() { RobustXamlLoader.Load(this); - RingerNoteInputs = new[] { RingerNoteOneInput, RingerNoteTwoInput, RingerNoteThreeInput, RingerNoteFourInput }; + RingerNoteInputs = new[] { RingerNoteOneInput, RingerNoteTwoInput, RingerNoteThreeInput, RingerNoteFourInput, RingerNoteFiveInput, RingerNoteSixInput }; for (var i = 0; i < RingerNoteInputs.Length; ++i) { diff --git a/Content.Client/Stylesheets/StyleNano.cs b/Content.Client/Stylesheets/StyleNano.cs index 5dcbc9b3aef21e..cb90e5c481bbe0 100644 --- a/Content.Client/Stylesheets/StyleNano.cs +++ b/Content.Client/Stylesheets/StyleNano.cs @@ -162,6 +162,7 @@ public StyleNano(IResourceCache resCache) : base(resCache) var notoSansBold16 = resCache.NotoStack(variation: "Bold", size: 16); var notoSansBold18 = resCache.NotoStack(variation: "Bold", size: 18); var notoSansBold20 = resCache.NotoStack(variation: "Bold", size: 20); + var notoSansMono = resCache.GetFont("/EngineFonts/NotoSans/NotoSansMono-Regular.ttf", size: 12); var windowHeaderTex = resCache.GetTexture("/Textures/Interface/Nano/window_header.png"); var windowHeader = new StyleBoxTexture { @@ -512,6 +513,8 @@ public StyleNano(IResourceCache resCache) : base(resCache) Stylesheet = new Stylesheet(BaseRules.Concat(new[] { + Element().Class("monospace") + .Prop("font", notoSansMono), // Window title. new StyleRule( new SelectorElement(typeof(Label), new[] {DefaultWindow.StyleClassWindowTitle}, null, null), diff --git a/Content.Client/Weapons/Ranged/Systems/GunSystem.cs b/Content.Client/Weapons/Ranged/Systems/GunSystem.cs index 2459d1d29ed96a..74ee7bdbbff9f5 100644 --- a/Content.Client/Weapons/Ranged/Systems/GunSystem.cs +++ b/Content.Client/Weapons/Ranged/Systems/GunSystem.cs @@ -2,6 +2,7 @@ using Content.Client.Items; using Content.Client.Weapons.Ranged.Components; using Content.Shared.Camera; +using Content.Shared.CombatMode; using Content.Shared.Spawners.Components; using Content.Shared.Weapons.Ranged; using Content.Shared.Weapons.Ranged.Components; @@ -126,7 +127,7 @@ public override void Update(float frameTime) var entityNull = _player.LocalPlayer?.ControlledEntity; - if (entityNull == null) + if (entityNull == null || !TryComp(entityNull, out var combat) || !combat.IsInCombatMode) { return; } diff --git a/Content.IntegrationTests/PoolManager.cs b/Content.IntegrationTests/PoolManager.cs index c66bc260d3e8cb..397a20950dab16 100644 --- a/Content.IntegrationTests/PoolManager.cs +++ b/Content.IntegrationTests/PoolManager.cs @@ -947,6 +947,10 @@ public PairTracker(TextWriter testOut) _testOut = testOut; } + // Convenience properties. + public RobustIntegrationTest.ServerIntegrationInstance Server => Pair.Server; + public RobustIntegrationTest.ClientIntegrationInstance Client => Pair.Client; + private async Task OnDirtyDispose() { var usageTime = UsageWatch.Elapsed; @@ -957,6 +961,10 @@ private async Task OnDirtyDispose() PoolManager.NoCheckReturn(Pair); var disposeTime = dirtyWatch.Elapsed; await _testOut.WriteLineAsync($"{nameof(DisposeAsync)}: Disposed pair {Pair.PairId} in {disposeTime.TotalMilliseconds} ms"); + + // Test pairs should only dirty dispose if they are failing. If they are not failing, this probably happened + // because someone forgot to clean-return the pair. + Assert.Warn("Test was dirty-disposed."); } private async Task OnCleanDispose() diff --git a/Content.IntegrationTests/Tests/Commands/RejuvenateTest.cs b/Content.IntegrationTests/Tests/Commands/RejuvenateTest.cs index ddd5e97de73cb0..1fbc6c7532df17 100644 --- a/Content.IntegrationTests/Tests/Commands/RejuvenateTest.cs +++ b/Content.IntegrationTests/Tests/Commands/RejuvenateTest.cs @@ -1,4 +1,5 @@ using Content.Server.Administration.Commands; +using Content.Server.Administration.Systems; using Content.Shared.Damage; using Content.Shared.Damage.Prototypes; using Content.Shared.FixedPoint; @@ -11,7 +12,7 @@ namespace Content.IntegrationTests.Tests.Commands { [TestFixture] - [TestOf(typeof(RejuvenateCommand))] + [TestOf(typeof(RejuvenateSystem))] public sealed class RejuvenateTest { private const string Prototypes = @" @@ -42,6 +43,7 @@ public async Task RejuvenateDeadTest() var prototypeManager = server.ResolveDependency(); var mobStateSystem = entManager.EntitySysManager.GetEntitySystem(); var damSystem = entManager.EntitySysManager.GetEntitySystem(); + var rejuvenateSystem = entManager.EntitySysManager.GetEntitySystem(); await server.WaitAssertion(() => { @@ -78,7 +80,7 @@ await server.WaitAssertion(() => }); // Rejuvenate them - RejuvenateCommand.PerformRejuvenate(human); + rejuvenateSystem.PerformRejuvenate(human); // Check that it is alive and with no damage Assert.Multiple(() => diff --git a/Content.IntegrationTests/Tests/Interaction/InteractionTest.cs b/Content.IntegrationTests/Tests/Interaction/InteractionTest.cs index f3c2a835ca0666..1ef8c11e0b3975 100644 --- a/Content.IntegrationTests/Tests/Interaction/InteractionTest.cs +++ b/Content.IntegrationTests/Tests/Interaction/InteractionTest.cs @@ -233,9 +233,14 @@ await Server.WaitPost(() => } [TearDown] - public virtual async Task Cleanup() + public async Task TearDownInternal() { await Server.WaitPost(() => MapMan.DeleteMap(MapId)); await PairTracker.CleanReturnAsync(); + await TearDown(); + } + + protected virtual async Task TearDown() + { } } diff --git a/Content.IntegrationTests/Tests/Toolshed/AdminTest.cs b/Content.IntegrationTests/Tests/Toolshed/AdminTest.cs new file mode 100644 index 00000000000000..2c52d5d5c293a2 --- /dev/null +++ b/Content.IntegrationTests/Tests/Toolshed/AdminTest.cs @@ -0,0 +1,20 @@ +using System.Collections.Generic; +using System.Linq; +using Robust.Shared.Toolshed; + +namespace Content.IntegrationTests.Tests.Toolshed; + +[TestFixture] +public sealed class AdminTest : ToolshedTest +{ + [Test] + public async Task AllCommandsHavePermissions() + { + await Server.WaitAssertion(() => + { + Assert.That(InvokeCommand("cmd:list where { acmd:perms isnull }", out var res)); + var list = ((IEnumerable) res).ToList(); + Assert.That(list, Is.Empty, "All commands must have admin permissions set up."); + }); + } +} diff --git a/Content.IntegrationTests/Tests/Toolshed/CommandParseTest.cs b/Content.IntegrationTests/Tests/Toolshed/CommandParseTest.cs new file mode 100644 index 00000000000000..f997db1c480fe2 --- /dev/null +++ b/Content.IntegrationTests/Tests/Toolshed/CommandParseTest.cs @@ -0,0 +1,84 @@ +using System.Collections.Generic; +using Robust.Shared.GameObjects; +using Robust.Shared.Toolshed; +using Robust.Shared.Toolshed.Syntax; +using Robust.Shared.Toolshed.TypeParsers; + +namespace Content.IntegrationTests.Tests.Toolshed; + +[TestFixture] +public sealed class CommandRunTest : ToolshedTest +{ + [Test] + public async Task SimpleCommandRun() + { + await Server.WaitAssertion(() => + { + ParseCommand("entities"); + ParseCommand("entities select 1"); + ParseCommand("entities with Item select 1"); + + ExpectError(); + ParseCommand("entities with"); + + ExpectError(); + ParseCommand("player:list with MetaData"); + + ExpectError(); + ParseCommand("player:list", expectedType: typeof(IEnumerable)); + + ParseCommand("entities not with MetaData"); + ParseCommand("with MetaData select 2 any", inputType: typeof(List)); + + ParseCommand("entities not with MetaData => $myEntities"); + ParseCommand("=> $fooBar with MetaData", inputType: typeof(List)); + }); + } + + [Test] + public async Task EntityUidTypeParser() + { + await Server.WaitAssertion(() => + { + ParseCommand("ent 1"); + ParseCommand("ent c1"); + + ExpectError(); + ParseCommand("ent foodigity"); + }); + } + + [Test] + public async Task QuantityTypeParser() + { + await Server.WaitAssertion(() => + { + ParseCommand("entities select 100"); + ParseCommand("entities select 50%"); + + ExpectError(); + ParseCommand("entities select -1"); + + ExpectError(); + ParseCommand("entities select 200%"); + + ExpectError(); + ParseCommand("entities select hotdog"); + }); + } + + [Test] + public async Task ComponentTypeParser() + { + await Server.WaitAssertion(() => + { + ParseCommand("entities with MetaData"); + + ExpectError(); + ParseCommand("entities with Foodiddy"); + + ExpectError(); + ParseCommand("entities with MetaDataComponent"); + }); + } +} diff --git a/Content.IntegrationTests/Tests/Toolshed/LocTest.cs b/Content.IntegrationTests/Tests/Toolshed/LocTest.cs new file mode 100644 index 00000000000000..db8d451dbce013 --- /dev/null +++ b/Content.IntegrationTests/Tests/Toolshed/LocTest.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; +using System.Linq; +using Robust.Shared.Toolshed; + +namespace Content.IntegrationTests.Tests.Toolshed; + +[TestFixture] +public sealed class LocTest : ToolshedTest +{ + [Test] + public async Task AllCommandsHaveDescriptions() + { + await Server.WaitAssertion(() => + { + Assert.That(InvokeCommand("cmd:list where { cmd:descloc loc:tryloc isnull }", out var res)); + Assert.That((IEnumerable)res, Is.Empty, "All commands must have localized descriptions."); + }); + } +} diff --git a/Content.IntegrationTests/Tests/Toolshed/ToolshedTest.cs b/Content.IntegrationTests/Tests/Toolshed/ToolshedTest.cs new file mode 100644 index 00000000000000..acec0489066185 --- /dev/null +++ b/Content.IntegrationTests/Tests/Toolshed/ToolshedTest.cs @@ -0,0 +1,159 @@ +#nullable enable +using System.Collections.Generic; +using Content.Server.Administration.Managers; +using Robust.Server.Player; +using Robust.Shared.Players; +using Robust.Shared.Toolshed; +using Robust.Shared.Toolshed.Errors; +using Robust.Shared.Toolshed.Syntax; +using Robust.UnitTesting; + +namespace Content.IntegrationTests.Tests.Toolshed; + +[TestFixture] +[FixtureLifeCycle(LifeCycle.InstancePerTestCase)] +public abstract class ToolshedTest : IInvocationContext +{ + protected PairTracker PairTracker = default!; + + protected virtual bool NoClient => true; + protected virtual bool AssertOnUnexpectedError => true; + + protected RobustIntegrationTest.ServerIntegrationInstance Server = default!; + protected RobustIntegrationTest.ClientIntegrationInstance? Client = null; + protected ToolshedManager Toolshed = default!; + protected IAdminManager AdminManager = default!; + + protected IInvocationContext? Context = null; + + [TearDown] + public async Task TearDownInternal() + { + await PairTracker.CleanReturnAsync(); + await TearDown(); + } + + protected virtual async Task TearDown() + { + Assert.IsEmpty(_expectedErrors); + ClearErrors(); + } + + [SetUp] + public virtual async Task Setup() + { + PairTracker = await PoolManager.GetServerClient(new PoolSettings {NoClient = NoClient}); + Server = PairTracker.Pair.Server; + + if (!NoClient) + { + Client = PairTracker.Pair.Client; + await Client.WaitIdleAsync(); + } + + await Server.WaitIdleAsync(); + + Toolshed = Server.ResolveDependency(); + AdminManager = Server.ResolveDependency(); + } + + protected bool InvokeCommand(string command, out object? result, IPlayerSession? session = null) + { + return Toolshed.InvokeCommand(this, command, null, out result); + } + + protected void ParseCommand(string command, Type? inputType = null, Type? expectedType = null, bool once = false) + { + var parser = new ForwardParser(command, Toolshed); + var success = CommandRun.TryParse(false, false, parser, inputType, expectedType, once, out _, out _, out var error); + + if (error is not null) + ReportError(error); + + if (error is null) + Assert.That(success, $"Parse failed despite no error being reported. Parsed {command}"); + } + + public bool CheckInvokable(CommandSpec command, out IConError? error) + { + if (Context is not null) + { + return Context.CheckInvokable(command, out error); + } + + error = null; + return true; + } + + protected IPlayerSession? InvocationSession { get; set; } + + public ICommonSession? Session + { + get + { + if (Context is not null) + { + return Context.Session; + } + + return InvocationSession; + } + } + + public void WriteLine(string line) + { + return; + } + + private Queue _expectedErrors = new(); + + private List _errors = new(); + + public void ReportError(IConError err) + { + if (_expectedErrors.Count == 0) + { + if (AssertOnUnexpectedError) + { + Assert.Fail($"Got an error, {err.GetType()}, when none was expected.\n{err.Describe()}"); + } + + goto done; + } + + var ty = _expectedErrors.Dequeue(); + + if (AssertOnUnexpectedError) + { + Assert.That( + err.GetType().IsAssignableTo(ty), + $"The error {err.GetType()} wasn't assignable to the expected type {ty}.\n{err.Describe()}" + ); + } + + done: + _errors.Add(err); + } + + public IEnumerable GetErrors() + { + return _errors; + } + + public void ClearErrors() + { + _errors.Clear(); + } + + public Dictionary Variables { get; } = new(); + + protected void ExpectError(Type err) + { + _expectedErrors.Enqueue(err); + } + + protected void ExpectError() + { + _expectedErrors.Enqueue(typeof(T)); + } +} diff --git a/Content.Server/Administration/AdminCommandAttribute.cs b/Content.Server/Administration/AdminCommandAttribute.cs index e115be2ef874ad..409d9fe984dcfe 100644 --- a/Content.Server/Administration/AdminCommandAttribute.cs +++ b/Content.Server/Administration/AdminCommandAttribute.cs @@ -12,7 +12,6 @@ namespace Content.Server.Administration /// /// [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)] - [BaseTypeRequired(typeof(IConsoleCommand))] [MeansImplicitUse] public sealed class AdminCommandAttribute : Attribute { diff --git a/Content.Server/Administration/Commands/DeleteEntitiesWithComponent.cs b/Content.Server/Administration/Commands/DeleteEntitiesWithComponent.cs deleted file mode 100644 index 578ef2e4146555..00000000000000 --- a/Content.Server/Administration/Commands/DeleteEntitiesWithComponent.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System.Linq; -using Content.Shared.Administration; -using Robust.Shared.Console; - -namespace Content.Server.Administration.Commands -{ - [AdminCommand(AdminFlags.Spawn)] - sealed class DeleteEntitiesWithComponent : IConsoleCommand - { - public string Command => "deleteewc"; - - public string Description => Loc.GetString("delete-entities-with-component-command-description"); - - public string Help => Loc.GetString("delete-entities-with-component-command-help-text"); - - public void Execute(IConsoleShell shell, string argStr, string[] args) - { - if (args.Length < 1) - { - shell.WriteLine(Help); - return; - } - - var factory = IoCManager.Resolve(); - - var components = new List(); - foreach (var arg in args) - { - components.Add(factory.GetRegistration(arg).Type); - } - - var entityManager = IoCManager.Resolve(); - - var entitiesWithComponents = components.Select(c => entityManager.GetAllComponents(c).Select(x => x.Uid)); - var entitiesWithAllComponents = entitiesWithComponents.Skip(1).Aggregate(new HashSet(entitiesWithComponents.First()), (h, e) => { h.IntersectWith(e); return h; }); - - var count = 0; - foreach (var entity in entitiesWithAllComponents) - { - entityManager.DeleteEntity(entity); - count += 1; - } - - shell.WriteLine(Loc.GetString("delete-entities-with-component-command-deleted-components",("count", count))); - } - } -} diff --git a/Content.Server/Administration/Commands/DeleteEntitiesWithId.cs b/Content.Server/Administration/Commands/DeleteEntitiesWithId.cs deleted file mode 100644 index 82be56ee3656d9..00000000000000 --- a/Content.Server/Administration/Commands/DeleteEntitiesWithId.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Linq; -using Content.Shared.Administration; -using Robust.Shared.Console; - -namespace Content.Server.Administration.Commands -{ - [AdminCommand(AdminFlags.Spawn)] - public sealed class DeleteEntitiesWithId : IConsoleCommand - { - public string Command => "deleteewi"; - public string Description => "Deletes entities with the specified prototype ID."; - public string Help => $"Usage: {Command} "; - - public void Execute(IConsoleShell shell, string argStr, string[] args) - { - if (args.Length != 1) - { - shell.WriteLine(Help); - return; - } - - var id = args[0].ToLower(); - var entityManager = IoCManager.Resolve(); - var entities = entityManager.GetEntities().Where(e => entityManager.GetComponent(e).EntityPrototype?.ID.ToLower() == id); - var i = 0; - - foreach (var entity in entities) - { - entityManager.DeleteEntity(entity); - i++; - } - - shell.WriteLine($"Deleted all entities with id {id}. Occurrences: {i}"); - } - } -} diff --git a/Content.Server/Administration/Commands/DeleteEntityCommand.cs b/Content.Server/Administration/Commands/DeleteEntityCommand.cs deleted file mode 100644 index 5a7df2ac7f5578..00000000000000 --- a/Content.Server/Administration/Commands/DeleteEntityCommand.cs +++ /dev/null @@ -1,39 +0,0 @@ -using Content.Shared.Administration; -using Robust.Shared.Console; - -namespace Content.Server.Administration.Commands -{ - [AdminCommand(AdminFlags.Spawn)] - public sealed class DeleteEntityCommand : IConsoleCommand - { - public string Command => "deleteentity"; - public string Description => "Deletes an entity with the given id."; - public string Help => $"Usage: {Command} "; - - public void Execute(IConsoleShell shell, string argStr, string[] args) - { - if (args.Length != 1) - { - shell.WriteLine($"Invalid amount of arguments.\n{Help}"); - return; - } - - if (!EntityUid.TryParse(args[0], out var id)) - { - shell.WriteLine($"{args[0]} is not a valid entity id."); - return; - } - - var entityManager = IoCManager.Resolve(); - - if (!entityManager.EntityExists(id)) - { - shell.WriteLine($"No entity found with id {id}."); - return; - } - - entityManager.DeleteEntity(id); - shell.WriteLine($"Deleted entity with id {id}."); - } - } -} diff --git a/Content.Server/Administration/Commands/FindEntitiesWithComponents.cs b/Content.Server/Administration/Commands/FindEntitiesWithComponents.cs deleted file mode 100644 index b583b56db662da..00000000000000 --- a/Content.Server/Administration/Commands/FindEntitiesWithComponents.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System.Linq; -using Content.Shared.Administration; -using Robust.Shared.Console; - -namespace Content.Server.Administration.Commands -{ - [AdminCommand(AdminFlags.Mapping)] - public sealed class FindEntitiesWithComponents : IConsoleCommand - { - public string Command => "findentitieswithcomponents"; - public string Description => "Finds entities with all of the specified components."; - public string Help => $"{Command} ..."; - - public void Execute(IConsoleShell shell, string argStr, string[] args) - { - if (args.Length == 0) - { - shell.WriteLine($"Invalid amount of arguments: {args.Length}.\n{Help}"); - return; - } - - var components = new List(); - var componentFactory = IoCManager.Resolve(); - var invalidArgs = new List(); - - foreach (var arg in args) - { - if (!componentFactory.TryGetRegistration(arg, out var registration)) - { - invalidArgs.Add(arg); - continue; - } - - components.Add(registration.Type); - } - - if (invalidArgs.Count > 0) - { - shell.WriteLine($"No component found for component names: {string.Join(", ", invalidArgs)}"); - return; - } - - var entityManager = IoCManager.Resolve(); - var entityIds = new HashSet(); - - var entitiesWithComponents = components.Select(c => entityManager.GetAllComponents(c).Select(x => x.Uid)).ToArray(); - var entitiesWithAllComponents = entitiesWithComponents.Skip(1).Aggregate(new HashSet(entitiesWithComponents.First()), (h, e) => { h.IntersectWith(e); return h; }); - - foreach (var entity in entitiesWithAllComponents) - { - if (entityManager.GetComponent(entity).EntityPrototype is not { } prototypeId) - { - continue; - } - - entityIds.Add(prototypeId.ID); - } - - if (entityIds.Count == 0) - { - shell.WriteLine($"No entities found with components {string.Join(", ", args)}."); - return; - } - - shell.WriteLine($"{entityIds.Count} entities found:\n{string.Join("\n", entityIds)}"); - } - } -} diff --git a/Content.Server/Administration/Commands/RejuvenateCommand.cs b/Content.Server/Administration/Commands/RejuvenateCommand.cs deleted file mode 100644 index 0e2e39a9ee7510..00000000000000 --- a/Content.Server/Administration/Commands/RejuvenateCommand.cs +++ /dev/null @@ -1,48 +0,0 @@ -using Content.Shared.Administration; -using Content.Shared.Rejuvenate; -using Robust.Server.Player; -using Robust.Shared.Console; - -namespace Content.Server.Administration.Commands -{ - [AdminCommand(AdminFlags.Admin)] - public sealed class RejuvenateCommand : IConsoleCommand - { - public string Command => "rejuvenate"; - - public string Description => Loc.GetString("rejuvenate-command-description"); - - public string Help => Loc.GetString("rejuvenate-command-help-text"); - - public void Execute(IConsoleShell shell, string argStr, string[] args) - { - if (args.Length < 1 && shell.Player is IPlayerSession player) //Try to heal the users mob if applicable - { - shell.WriteLine(Loc.GetString("rejuvenate-command-self-heal-message")); - if (player.AttachedEntity == null) - { - shell.WriteLine(Loc.GetString("rejuvenate-command-no-entity-attached-message")); - return; - } - PerformRejuvenate(player.AttachedEntity.Value); - } - - var entityManager = IoCManager.Resolve(); - foreach (var arg in args) - { - if (!EntityUid.TryParse(arg, out var entity) || !entityManager.EntityExists(entity)) - { - shell.WriteLine(Loc.GetString("shell-could-not-find-entity",("entity", arg))); - continue; - } - PerformRejuvenate(entity); - } - } - - public static void PerformRejuvenate(EntityUid target) - { - var entityManager = IoCManager.Resolve(); - entityManager.EventBus.RaiseLocalEvent(target, new RejuvenateEvent()); - } - } -} diff --git a/Content.Server/Administration/Commands/Station/AdjustStationJobCommand.cs b/Content.Server/Administration/Commands/Station/AdjustStationJobCommand.cs deleted file mode 100644 index 3af9ed6b268ec3..00000000000000 --- a/Content.Server/Administration/Commands/Station/AdjustStationJobCommand.cs +++ /dev/null @@ -1,84 +0,0 @@ -using Content.Server.Commands; -using Content.Server.Station.Components; -using Content.Server.Station.Systems; -using Content.Shared.Administration; -using Content.Shared.Roles; -using Robust.Shared.Console; -using Robust.Shared.Prototypes; - -namespace Content.Server.Administration.Commands.Station; - -[AdminCommand(AdminFlags.Round)] -public sealed class AdjustStationJobCommand : IConsoleCommand -{ - [Dependency] private readonly IEntityManager _entityManager = default!; - [Dependency] private readonly IEntitySystemManager _entSysManager = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - - public string Command => "adjstationjob"; - - public string Description => "Adjust the job manifest on a station."; - - public string Help => "adjstationjob "; - - public void Execute(IConsoleShell shell, string argStr, string[] args) - { - if (args.Length != 3) - { - shell.WriteError(Loc.GetString("shell-wrong-arguments-number")); - return; - } - - var stationJobs = _entSysManager.GetEntitySystem(); - - if (!EntityUid.TryParse(args[0], out var station) || !_entityManager.HasComponent(station)) - { - shell.WriteError(Loc.GetString("shell-argument-station-id-invalid", ("index", 1))); - return; - } - - if (!_prototypeManager.TryIndex(args[1], out var job)) - { - shell.WriteError(Loc.GetString("shell-argument-must-be-prototype", - ("index", 2), ("prototypeName", nameof(JobPrototype)))); - return; - } - - if (!int.TryParse(args[2], out var amount) || amount < -1) - { - shell.WriteError(Loc.GetString("shell-argument-number-must-be-between", - ("index", 3), ("lower", -1), ("upper", int.MaxValue))); - return; - } - - if (amount == -1) - { - stationJobs.MakeJobUnlimited(station, job); - return; - } - - stationJobs.TrySetJobSlot(station, job, amount, true); - } - - public CompletionResult GetCompletion(IConsoleShell shell, string[] args) - { - if (args.Length == 1) - { - var options = ContentCompletionHelper.StationIds(_entityManager); - return CompletionResult.FromHintOptions(options, ""); - } - - if (args.Length == 2) - { - var options = CompletionHelper.PrototypeIDs(); - return CompletionResult.FromHintOptions(options, ""); - } - - if (args.Length == 3) - { - return CompletionResult.FromHint(""); - } - - return CompletionResult.Empty; - } -} diff --git a/Content.Server/Administration/Commands/Station/ListStationJobsCommand.cs b/Content.Server/Administration/Commands/Station/ListStationJobsCommand.cs deleted file mode 100644 index 53a902ec29fe15..00000000000000 --- a/Content.Server/Administration/Commands/Station/ListStationJobsCommand.cs +++ /dev/null @@ -1,55 +0,0 @@ -using Content.Server.Commands; -using Content.Server.Station.Components; -using Content.Server.Station.Systems; -using Content.Shared.Administration; -using Robust.Shared.Console; - -namespace Content.Server.Administration.Commands.Station; - -[AdminCommand(AdminFlags.Admin)] -public sealed class ListStationJobsCommand : IConsoleCommand -{ - [Dependency] private readonly IEntityManager _entityManager = default!; - [Dependency] private readonly IEntitySystemManager _entSysManager = default!; - - public string Command => "lsstationjobs"; - - public string Description => "Lists all jobs on the given station."; - - public string Help => "lsstationjobs "; - - public void Execute(IConsoleShell shell, string argStr, string[] args) - { - if (args.Length != 1) - { - shell.WriteError(Loc.GetString("shell-wrong-arguments-number")); - return; - } - - var stationSystem = _entSysManager.GetEntitySystem(); - var stationJobs = _entSysManager.GetEntitySystem(); - - if (!EntityUid.TryParse(args[0], out var station) || !_entityManager.HasComponent(station)) - { - shell.WriteError(Loc.GetString("shell-argument-station-id-invalid", ("index", 1))); - return; - } - - foreach (var (job, amount) in stationJobs.GetJobs(station)) - { - var amountText = amount is null ? "Infinite" : amount.ToString(); - shell.WriteLine($"{job}: {amountText}"); - } - } - - public CompletionResult GetCompletion(IConsoleShell shell, string[] args) - { - if (args.Length == 1) - { - var options = ContentCompletionHelper.StationIds(_entityManager); - return CompletionResult.FromHintOptions(options, ""); - } - - return CompletionResult.Empty; - } -} diff --git a/Content.Server/Administration/Commands/Station/ListStationsCommand.cs b/Content.Server/Administration/Commands/Station/ListStationsCommand.cs deleted file mode 100644 index 0877febe4d6042..00000000000000 --- a/Content.Server/Administration/Commands/Station/ListStationsCommand.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Content.Server.Station.Components; -using Content.Server.Station.Systems; -using Content.Shared.Administration; -using Robust.Shared.Console; - -namespace Content.Server.Administration.Commands.Station; - -[AdminCommand(AdminFlags.Admin)] -public sealed class ListStationsCommand : IConsoleCommand -{ - [Dependency] private readonly IEntityManager _entityManager = default!; - - public string Command => "lsstations"; - - public string Description => "List all active stations"; - - public string Help => "lsstations"; - - public void Execute(IConsoleShell shell, string argStr, string[] args) - { - var query = _entityManager.EntityQueryEnumerator(); - - while (query.MoveNext(out var station, out _)) - { - var name = _entityManager.GetComponent(station).EntityName; - shell.WriteLine($"{station, -10} | {name}"); - } - } -} diff --git a/Content.Server/Administration/Commands/Station/RenameStationCommand.cs b/Content.Server/Administration/Commands/Station/RenameStationCommand.cs deleted file mode 100644 index 10df9049fda607..00000000000000 --- a/Content.Server/Administration/Commands/Station/RenameStationCommand.cs +++ /dev/null @@ -1,55 +0,0 @@ -using Content.Server.Commands; -using Content.Server.Station.Components; -using Content.Server.Station.Systems; -using Content.Shared.Administration; -using Robust.Shared.Console; - -namespace Content.Server.Administration.Commands.Station; - -[AdminCommand(AdminFlags.Admin)] -public sealed class RenameStationCommand : IConsoleCommand -{ - [Dependency] private readonly IEntityManager _entityManager = default!; - [Dependency] private readonly IEntitySystemManager _entSysManager = default!; - - public string Command => "renamestation"; - - public string Description => "Renames the given station"; - - public string Help => "renamestation "; - - public void Execute(IConsoleShell shell, string argStr, string[] args) - { - if (args.Length != 2) - { - shell.WriteError(Loc.GetString("shell-wrong-arguments-number")); - return; - } - - var stationSystem = _entSysManager.GetEntitySystem(); - - if (!EntityUid.TryParse(args[0], out var station) || !_entityManager.HasComponent(station)) - { - shell.WriteError(Loc.GetString("shell-argument-station-id-invalid", ("index", 1))); - return; - } - - stationSystem.RenameStation(station, args[1]); - } - - public CompletionResult GetCompletion(IConsoleShell shell, string[] args) - { - if (args.Length == 1) - { - var options = ContentCompletionHelper.StationIds(_entityManager); - return CompletionResult.FromHintOptions(options, ""); - } - - if (args.Length == 2) - { - return CompletionResult.FromHint(""); - } - - return CompletionResult.Empty; - } -} diff --git a/Content.Server/Administration/Commands/TagCommands.cs b/Content.Server/Administration/Commands/TagCommands.cs deleted file mode 100644 index 790768be92dd8c..00000000000000 --- a/Content.Server/Administration/Commands/TagCommands.cs +++ /dev/null @@ -1,113 +0,0 @@ -using Content.Shared.Administration; -using Content.Shared.Tag; -using Robust.Shared.Console; - -namespace Content.Server.Administration.Commands -{ - [AdminCommand(AdminFlags.Debug)] - public sealed class AddTagCommand : LocalizedCommands - { - [Dependency] private readonly IEntityManager _entityManager = default!; - - public override string Command => "addtag"; - public override string Description => Loc.GetString("addtag-command-description"); - public override string Help => Loc.GetString("addtag-command-help"); - - public override void Execute(IConsoleShell shell, string argStr, string[] args) - { - if (args.Length != 2) - { - shell.WriteError(Loc.GetString("shell-wrong-arguments-number")); - return; - } - - if (!EntityUid.TryParse(args[0], out var entityUid)) - { - shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number")); - return; - } - - if (!_entityManager.TrySystem(out TagSystem? tagSystem)) - return; - _entityManager.EnsureComponent(entityUid); - - if (tagSystem.TryAddTag(entityUid, args[1])) - { - shell.WriteLine(Loc.GetString("addtag-command-success", ("tag", args[1]), ("target", entityUid))); - } - else - { - shell.WriteError(Loc.GetString("addtag-command-fail", ("tag", args[1]), ("target", entityUid))); - } - } - - public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) - { - if (args.Length == 1) - { - return CompletionResult.FromHint(Loc.GetString("shell-argument-uid")); - } - - if (args.Length == 2) - { - return CompletionResult.FromHintOptions(CompletionHelper.PrototypeIDs(), - Loc.GetString("tag-command-arg-tag")); - } - - return CompletionResult.Empty; - } - } - - [AdminCommand(AdminFlags.Debug)] - public sealed class RemoveTagCommand : LocalizedCommands - { - [Dependency] private readonly IEntityManager _entityManager = default!; - - public override string Command => "removetag"; - public override string Description => Loc.GetString("removetag-command-description"); - public override string Help => Loc.GetString("removetag-command-help"); - - public override void Execute(IConsoleShell shell, string argStr, string[] args) - { - if (args.Length != 2) - { - shell.WriteError(Loc.GetString("shell-wrong-arguments-number")); - return; - } - - if (!EntityUid.TryParse(args[0], out var entityUid)) - { - shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number")); - return; - } - - if (!_entityManager.TrySystem(out TagSystem? tagSystem)) - return; - - if (tagSystem.RemoveTag(entityUid, args[1])) - { - shell.WriteLine(Loc.GetString("removetag-command-success", ("tag", args[1]), ("target", entityUid))); - } - else - { - shell.WriteError(Loc.GetString("removetag-command-fail", ("tag", args[1]), ("target", entityUid))); - } - } - - public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) - { - if (args.Length == 1) - { - return CompletionResult.FromHint(Loc.GetString("shell-argument-uid")); - } - - if (args.Length == 2&& EntityUid.TryParse(args[0], out var entityUid) && _entityManager.TryGetComponent(entityUid, out TagComponent? tagComponent)) - { - return CompletionResult.FromHintOptions(tagComponent.Tags, - Loc.GetString("tag-command-arg-tag")); - } - - return CompletionResult.Empty; - } - } -} diff --git a/Content.Server/Administration/Managers/AdminManager.cs b/Content.Server/Administration/Managers/AdminManager.cs index 950dffd1c8477a..0265e51ae7d0f2 100644 --- a/Content.Server/Administration/Managers/AdminManager.cs +++ b/Content.Server/Administration/Managers/AdminManager.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using System.Linq; using System.Reflection; using System.Threading.Tasks; @@ -12,7 +13,11 @@ using Robust.Shared.Console; using Robust.Shared.ContentPack; using Robust.Shared.Enums; +using Robust.Shared.Map; using Robust.Shared.Network; +using Robust.Shared.Players; +using Robust.Shared.Toolshed; +using Robust.Shared.Toolshed.Errors; using Robust.Shared.Utility; @@ -28,6 +33,7 @@ public sealed class AdminManager : IAdminManager, IPostInjectInit, IConGroupCont [Dependency] private readonly IResourceManager _res = default!; [Dependency] private readonly IServerConsoleHost _consoleHost = default!; [Dependency] private readonly IChatManager _chat = default!; + [Dependency] private readonly ToolshedManager _toolshed = default!; private readonly Dictionary _admins = new(); private readonly HashSet _promotedPlayers = new(); @@ -41,6 +47,7 @@ public sealed class AdminManager : IAdminManager, IPostInjectInit, IConGroupCont public IEnumerable AllAdmins => _admins.Select(p => p.Key); private readonly AdminCommandPermissions _commandPermissions = new(); + private readonly AdminCommandPermissions _toolshedCommandPermissions = new(); public bool IsAdmin(IPlayerSession session, bool includeDeAdmin = false) { @@ -196,11 +203,37 @@ public void Initialize() } } + foreach (var spec in _toolshed.AllCommands()) + { + var (isAvail, flagsReq) = GetRequiredFlag(spec.Cmd); + + if (!isAvail) + { + continue; + } + + if (flagsReq.Length != 0) + { + _toolshedCommandPermissions.AdminCommands.TryAdd(spec.Cmd.Name, flagsReq); + } + else + { + _toolshedCommandPermissions.AnyCommands.Add(spec.Cmd.Name); + } + } + // Load flags for engine commands, since those don't have the attributes. if (_res.TryContentFileRead(new ResPath("/engineCommandPerms.yml"), out var efs)) { _commandPermissions.LoadPermissionsFromStream(efs); } + + if (_res.TryContentFileRead(new ResPath("/toolshedEngineCommandPerms.yml"), out var toolshedPerms)) + { + _toolshedCommandPermissions.LoadPermissionsFromStream(toolshedPerms); + } + + _toolshed.ActivePermissionController = this; } public void PromoteHost(IPlayerSession player) @@ -366,6 +399,26 @@ private static bool IsLocal(IPlayerSession player) return Equals(addr, System.Net.IPAddress.Loopback) || Equals(addr, System.Net.IPAddress.IPv6Loopback); } + public bool TryGetCommandFlags(CommandSpec command, out AdminFlags[]? flags) + { + var cmdName = command.Cmd.Name; + + if (_toolshedCommandPermissions.AnyCommands.Contains(cmdName)) + { + // Anybody can use this command. + flags = null; + return true; + } + + if (_toolshedCommandPermissions.AdminCommands.TryGetValue(cmdName, out flags)) + { + return true; + } + + flags = null; + return false; + } + public bool CanCommand(IPlayerSession session, string cmdName) { if (_commandPermissions.AnyCommands.Contains(cmdName)) @@ -398,7 +451,51 @@ public bool CanCommand(IPlayerSession session, string cmdName) return false; } - private static (bool isAvail, AdminFlags[] flagsReq) GetRequiredFlag(IConsoleCommand cmd) + public bool CheckInvokable(CommandSpec command, ICommonSession? user, out IConError? error) + { + if (user is null) + { + error = null; + return true; // Server console. + } + + var name = command.Cmd.Name; + if (!TryGetCommandFlags(command, out var flags)) + { + // Command is missing permissions. + error = new CommandPermissionsUnassignedError(command); + return false; + } + + if (flags is null) + { + // Anyone can execute this. + error = null; + return true; + } + + var data = GetAdminData((IPlayerSession)user); + if (data == null) + { + // Player isn't an admin. + error = new NoPermissionError(command); + return false; + } + + foreach (var flag in flags) + { + if (data.HasFlag(flag)) + { + error = null; + return true; + } + } + + error = new NoPermissionError(command); + return false; + } + + private static (bool isAvail, AdminFlags[] flagsReq) GetRequiredFlag(object cmd) { MemberInfo type = cmd.GetType(); @@ -472,3 +569,28 @@ public AdminReg(IPlayerSession session, AdminData data) } } } + +public record struct CommandPermissionsUnassignedError(CommandSpec Command) : IConError +{ + public FormattedMessage DescribeInner() + { + return FormattedMessage.FromMarkup($"The command {Command.FullName()} is missing permission flags and cannot be executed."); + } + + public string? Expression { get; set; } + public Vector2i? IssueSpan { get; set; } + public StackTrace? Trace { get; set; } +} + + +public record struct NoPermissionError(CommandSpec Command) : IConError +{ + public FormattedMessage DescribeInner() + { + return FormattedMessage.FromMarkup($"You do not have permission to execute {Command.FullName()}"); + } + + public string? Expression { get; set; } + public Vector2i? IssueSpan { get; set; } + public StackTrace? Trace { get; set; } +} diff --git a/Content.Server/Administration/Managers/IAdminManager.cs b/Content.Server/Administration/Managers/IAdminManager.cs index c5cf126f3392bc..f5aa9da23e8278 100644 --- a/Content.Server/Administration/Managers/IAdminManager.cs +++ b/Content.Server/Administration/Managers/IAdminManager.cs @@ -1,6 +1,7 @@ using Content.Shared.Administration; using Content.Shared.Administration.Managers; using Robust.Server.Player; +using Robust.Shared.Toolshed; namespace Content.Server.Administration.Managers @@ -87,5 +88,7 @@ bool HasAdminFlag(IPlayerSession player, AdminFlags flag) void Initialize(); void PromoteHost(IPlayerSession player); + + bool TryGetCommandFlags(CommandSpec command, out AdminFlags[]? flags); } } diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.Tools.cs b/Content.Server/Administration/Systems/AdminVerbSystem.Tools.cs index 7ce01122269fc9..77cdee3a9eb940 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.Tools.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.Tools.cs @@ -117,7 +117,7 @@ private void AddTricksVerbs(GetVerbsEvent args) Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/rejuvenate.png")), Act = () => { - RejuvenateCommand.PerformRejuvenate(args.Target); + _rejuvenate.PerformRejuvenate(args.Target); }, Impact = LogImpact.Extreme, Message = Loc.GetString("admin-trick-rejuvenate-description"), diff --git a/Content.Server/Administration/Systems/AdminVerbSystem.cs b/Content.Server/Administration/Systems/AdminVerbSystem.cs index ce5d479851ac02..bdcaf0de4d2a72 100644 --- a/Content.Server/Administration/Systems/AdminVerbSystem.cs +++ b/Content.Server/Administration/Systems/AdminVerbSystem.cs @@ -1,3 +1,4 @@ +using System.Linq; using Content.Server.Administration.Commands; using Content.Server.Administration.Logs; using Content.Server.Administration.Managers; @@ -31,6 +32,7 @@ using Robust.Shared.Map.Components; using Robust.Shared.Prototypes; using Robust.Shared.Timing; +using Robust.Shared.Toolshed; using Robust.Shared.Utility; using static Content.Shared.Configurable.ConfigurationComponent; @@ -55,6 +57,8 @@ public sealed partial class AdminVerbSystem : EntitySystem [Dependency] private readonly PrayerSystem _prayerSystem = default!; [Dependency] private readonly EuiManager _eui = default!; [Dependency] private readonly MindSystem _mindSystem = default!; + [Dependency] private readonly ToolshedManager _toolshed = default!; + [Dependency] private readonly RejuvenateSystem _rejuvenate = default!; private readonly Dictionary _openSolutionUis = new(); @@ -78,6 +82,14 @@ private void AddAdminVerbs(GetVerbsEvent args) if (_adminManager.IsAdmin(player)) { + Verb mark = new(); + mark.Text = Loc.GetString("toolshed-verb-mark"); + mark.Message = Loc.GetString("toolshed-verb-mark-description"); + mark.Category = VerbCategory.Admin; + mark.Act = () => _toolshed.InvokeCommand(player, "=> $marked", Enumerable.Repeat(args.Target, 1), out _); + mark.Impact = LogImpact.Low; + args.Verbs.Add(mark); + if (TryComp(args.Target, out ActorComponent? targetActor)) { // AdminHelp @@ -188,8 +200,6 @@ private void AddAdminVerbs(GetVerbsEvent args) Category = VerbCategory.Admin, Act = () => { - if (!TryComp(args.Target, out var actor)) return; - _console.ExecuteCommand(player, $"respawn {actor.PlayerSession.Name}"); }, ConfirmationPopup = true, @@ -207,7 +217,7 @@ private void AddDebugVerbs(GetVerbsEvent args) var player = actor.PlayerSession; // Delete verb - if (_groupController.CanCommand(player, "deleteentity")) + if (_toolshed.ActivePermissionController?.CheckInvokable(new CommandSpec(_toolshed.GetCommand("delete"), null), player, out _) ?? false) { Verb verb = new() { @@ -222,14 +232,14 @@ private void AddDebugVerbs(GetVerbsEvent args) } // Rejuvenate verb - if (_groupController.CanCommand(player, "rejuvenate")) + if (_toolshed.ActivePermissionController?.CheckInvokable(new CommandSpec(_toolshed.GetCommand("rejuvenate"), null), player, out _) ?? false) { Verb verb = new() { Text = Loc.GetString("rejuvenate-verb-get-data-text"), Category = VerbCategory.Debug, Icon = new SpriteSpecifier.Texture(new ("/Textures/Interface/VerbIcons/rejuvenate.svg.192dpi.png")), - Act = () => RejuvenateCommand.PerformRejuvenate(args.Target), + Act = () => _rejuvenate.PerformRejuvenate(args.Target), Impact = LogImpact.Medium }; args.Verbs.Add(verb); @@ -247,11 +257,11 @@ private void AddDebugVerbs(GetVerbsEvent args) Act = () => { MakeSentientCommand.MakeSentient(args.Target, EntityManager); - + var mind = player.ContentData()?.Mind; if (mind == null) return; - + _mindSystem.TransferTo(mind, args.Target, ghostCheckOverride: true); }, Impact = LogImpact.High, diff --git a/Content.Server/Administration/Systems/RejuvenateSystem.cs b/Content.Server/Administration/Systems/RejuvenateSystem.cs new file mode 100644 index 00000000000000..d25db20bd937de --- /dev/null +++ b/Content.Server/Administration/Systems/RejuvenateSystem.cs @@ -0,0 +1,11 @@ +using Content.Shared.Rejuvenate; + +namespace Content.Server.Administration.Systems; + +public sealed class RejuvenateSystem : EntitySystem +{ + public void PerformRejuvenate(EntityUid target) + { + RaiseLocalEvent(target, new RejuvenateEvent()); + } +} diff --git a/Content.Server/Administration/Toolshed/AdminsCommand.cs b/Content.Server/Administration/Toolshed/AdminsCommand.cs new file mode 100644 index 00000000000000..aa82e0f1d93297 --- /dev/null +++ b/Content.Server/Administration/Toolshed/AdminsCommand.cs @@ -0,0 +1,24 @@ +using Content.Server.Administration.Managers; +using Content.Shared.Administration; +using Robust.Server.Player; +using Robust.Shared.Toolshed; + +namespace Content.Server.Administration.Toolshed; + +[ToolshedCommand, AdminCommand(AdminFlags.Admin)] +public sealed class AdminsCommand : ToolshedCommand +{ + [Dependency] private readonly IAdminManager _admin = default!; + + [CommandImplementation("active")] + public IEnumerable Active() + { + return _admin.ActiveAdmins; + } + + [CommandImplementation("all")] + public IEnumerable All() + { + return _admin.AllAdmins; + } +} diff --git a/Content.Server/Administration/Toolshed/MarkedCommand.cs b/Content.Server/Administration/Toolshed/MarkedCommand.cs new file mode 100644 index 00000000000000..b9e39cb82da8af --- /dev/null +++ b/Content.Server/Administration/Toolshed/MarkedCommand.cs @@ -0,0 +1,16 @@ +using Content.Shared.Administration; +using Robust.Shared.Toolshed; + +namespace Content.Server.Administration.Toolshed; + +[ToolshedCommand, AnyCommand] +public sealed class MarkedCommand : ToolshedCommand +{ + [CommandImplementation] + public IEnumerable Marked([CommandInvocationContext] IInvocationContext ctx) + { + var res = (IEnumerable?)ctx.ReadVar("marked"); + res ??= Array.Empty(); + return res; + } +} diff --git a/Content.Server/Administration/Toolshed/RejuvenateCommand.cs b/Content.Server/Administration/Toolshed/RejuvenateCommand.cs new file mode 100644 index 00000000000000..eb1272d3866ca0 --- /dev/null +++ b/Content.Server/Administration/Toolshed/RejuvenateCommand.cs @@ -0,0 +1,22 @@ +using Content.Server.Administration.Systems; +using Content.Shared.Administration; +using Robust.Shared.Toolshed; + +namespace Content.Server.Administration.Toolshed; + +[ToolshedCommand, AdminCommand(AdminFlags.Admin)] +public sealed class RejuvenateCommand : ToolshedCommand +{ + private RejuvenateSystem? _rejuvenate; + [CommandImplementation] + public IEnumerable Rejuvenate([PipedArgument] IEnumerable input) + { + _rejuvenate ??= GetSys(); + + foreach (var i in input) + { + _rejuvenate.PerformRejuvenate(i); + yield return i; + } + } +} diff --git a/Content.Server/Administration/Toolshed/SolutionCommand.cs b/Content.Server/Administration/Toolshed/SolutionCommand.cs new file mode 100644 index 00000000000000..b3f562a264a3c0 --- /dev/null +++ b/Content.Server/Administration/Toolshed/SolutionCommand.cs @@ -0,0 +1,49 @@ +using System.Linq; +using Content.Server.Chemistry.EntitySystems; +using Content.Shared.Administration; +using Content.Shared.Chemistry.Components; +using Robust.Shared.Toolshed; +using Robust.Shared.Toolshed.Syntax; + +namespace Content.Server.Administration.Toolshed; + +[ToolshedCommand, AdminCommand(AdminFlags.Debug)] +public sealed class SolutionCommand : ToolshedCommand +{ + private SolutionContainerSystem? _solutionContainer; + + [CommandImplementation("get")] + public SolutionRef? Get( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] EntityUid input, + [CommandArgument] ValueRef name + ) + { + _solutionContainer ??= GetSys(); + + _solutionContainer.TryGetSolution(input, name.Evaluate(ctx)!, out var solution); + + if (solution is not null) + return new SolutionRef(input, solution); + + return null; + } + + [CommandImplementation("get")] + public IEnumerable Get( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] IEnumerable input, + [CommandArgument] ValueRef name + ) + { + return input.Select(x => Get(ctx, x, name)).Where(x => x is not null).Cast(); + } +} + +public readonly record struct SolutionRef(EntityUid Owner, Solution Solution) +{ + public override string ToString() + { + return $"{Owner} {Solution}"; + } +} diff --git a/Content.Server/Administration/Toolshed/TagCommand.cs b/Content.Server/Administration/Toolshed/TagCommand.cs new file mode 100644 index 00000000000000..1af27797660dad --- /dev/null +++ b/Content.Server/Administration/Toolshed/TagCommand.cs @@ -0,0 +1,106 @@ +using System.Linq; +using Content.Shared.Administration; +using Content.Shared.Tag; +using Robust.Shared.Toolshed; +using Robust.Shared.Toolshed.Syntax; +using Robust.Shared.Toolshed.TypeParsers; + +namespace Content.Server.Administration.Toolshed; + +[ToolshedCommand, AdminCommand(AdminFlags.Debug)] +public sealed class TagCommand : ToolshedCommand +{ + private TagSystem? _tag; + + [CommandImplementation("list")] + public IEnumerable List([PipedArgument] IEnumerable ent) + { + return ent.SelectMany(x => + { + if (TryComp(x, out var tags)) + // Note: Cast is required for C# to figure out the type signature. + return (IEnumerable)tags.Tags; + return Array.Empty(); + }); + } + + [CommandImplementation("add")] + public EntityUid Add( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] EntityUid input, + [CommandArgument] ValueRef> @ref + ) + { + _tag ??= GetSys(); + _tag.AddTag(input, @ref.Evaluate(ctx)!); + return input; + } + + [CommandImplementation("add")] + public IEnumerable Add( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] IEnumerable input, + [CommandArgument] ValueRef> @ref + ) + => input.Select(x => Add(ctx, x, @ref)); + + [CommandImplementation("rm")] + public EntityUid Rm( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] EntityUid input, + [CommandArgument] ValueRef> @ref + ) + { + _tag ??= GetSys(); + _tag.RemoveTag(input, @ref.Evaluate(ctx)!); + return input; + } + + [CommandImplementation("rm")] + public IEnumerable Rm( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] IEnumerable input, + [CommandArgument] ValueRef> @ref + ) + => input.Select(x => Rm(ctx, x, @ref)); + + [CommandImplementation("addmany")] + public EntityUid AddMany( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] EntityUid input, + [CommandArgument] ValueRef, IEnumerable> @ref + ) + { + _tag ??= GetSys(); + _tag.AddTags(input, @ref.Evaluate(ctx)!); + return input; + } + + [CommandImplementation("addmany")] + public IEnumerable AddMany( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] IEnumerable input, + [CommandArgument] ValueRef, IEnumerable> @ref + ) + => input.Select(x => AddMany(ctx, x, @ref)); + + [CommandImplementation("rmmany")] + public EntityUid RmMany( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] EntityUid input, + [CommandArgument] ValueRef, IEnumerable> @ref + ) + { + _tag ??= GetSys(); + _tag.RemoveTags(input, @ref.Evaluate(ctx)!); + return input; + } + + [CommandImplementation("rmmany")] + public IEnumerable RmMany( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] IEnumerable input, + [CommandArgument] ValueRef, IEnumerable> @ref + ) + => input.Select(x => RmMany(ctx, x, @ref)); +} diff --git a/Content.Server/Bql/BqlSelectCommand.cs b/Content.Server/Bql/BqlSelectCommand.cs deleted file mode 100644 index bcb658bfe7d458..00000000000000 --- a/Content.Server/Bql/BqlSelectCommand.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System.Linq; -using Content.Server.Administration; -using Content.Server.EUI; -using Content.Shared.Administration; -using Content.Shared.Bql; -using Content.Shared.Eui; -using Robust.Server.Bql; -using Robust.Server.Player; -using Robust.Shared.Console; - -namespace Content.Server.Bql; - -[AdminCommand(AdminFlags.Query)] -public sealed class BqlSelectCommand : LocalizedCommands -{ - [Dependency] private readonly IBqlQueryManager _bql = default!; - [Dependency] private readonly EuiManager _euiManager = default!; - [Dependency] private readonly IEntityManager _entityManager = default!; - - public override string Command => "bql_select"; - - public override void Execute(IConsoleShell shell, string argStr, string[] args) - { - if (shell.Player == null) - { - shell.WriteError(LocalizationManager.GetString("cmd-bql_select-err-server-shell")); - return; - } - - var (entities, rest) = _bql.SimpleParseAndExecute(argStr["bql_select".Length..]); - - if (!string.IsNullOrWhiteSpace(rest)) - shell.WriteLine(LocalizationManager.GetString("cmd-bql_select-err-rest", ("rest", rest))); - - var ui = new BqlResultsEui( - entities.Select(e => (_entityManager.GetComponent(e).EntityName, e)).ToArray() - ); - _euiManager.OpenEui(ui, (IPlayerSession) shell.Player); - _euiManager.QueueStateUpdate(ui); - } -} - -internal sealed class BqlResultsEui : BaseEui -{ - private readonly (string name, EntityUid entity)[] _entities; - - public BqlResultsEui((string name, EntityUid entity)[] entities) - { - _entities = entities; - } - - public override EuiStateBase GetNewState() - { - return new BqlResultsEuiState(_entities); - } -} diff --git a/Content.Server/Bql/QuerySelectors.cs b/Content.Server/Bql/QuerySelectors.cs deleted file mode 100644 index 829dee7e38c116..00000000000000 --- a/Content.Server/Bql/QuerySelectors.cs +++ /dev/null @@ -1,137 +0,0 @@ -using System.Linq; -using Content.Server.Chemistry.Components.SolutionManager; -using Content.Server.Mind; -using Content.Server.Mind.Components; -using Content.Server.Power.Components; -using Content.Shared.Tag; -using Robust.Server.Bql; - -namespace Content.Server.Bql -{ - public sealed class QuerySelectors - { - [RegisterBqlQuerySelector] - public sealed class MindfulQuerySelector : BqlQuerySelector - { - public override string Token => "mindful"; - - public override QuerySelectorArgument[] Arguments => Array.Empty(); - - public override IEnumerable DoSelection(IEnumerable input, - IReadOnlyList arguments, bool isInverted, IEntityManager entityManager) - { - return input.Where(e => - { - if (entityManager.TryGetComponent(e, out var mind)) - return (mind.Mind?.VisitingEntity == e) ^ isInverted; - - return isInverted; - }); - } - - public override IEnumerable DoInitialSelection(IReadOnlyList arguments, bool isInverted, IEntityManager entityManager) - { - - return DoSelection( - entityManager.EntityQuery().Select(x => x.Owner), - arguments, isInverted, entityManager); - } - } - - [RegisterBqlQuerySelector] - public sealed class TaggedQuerySelector : BqlQuerySelector - { - public override string Token => "tagged"; - - public override QuerySelectorArgument[] Arguments => new [] { QuerySelectorArgument.String }; - - public override IEnumerable DoSelection(IEnumerable input, IReadOnlyList arguments, bool isInverted, IEntityManager entityManager) - { - return input.Where(e => - (entityManager.TryGetComponent(e, out var tag) && - tag.Tags.Contains((string) arguments[0])) ^ isInverted); - } - - public override IEnumerable DoInitialSelection(IReadOnlyList arguments, bool isInverted, IEntityManager entityManager) - { - return DoSelection(entityManager.EntityQuery().Select(x => x.Owner), arguments, - isInverted, entityManager); - - } - } - - [RegisterBqlQuerySelector] - public sealed class AliveQuerySelector : BqlQuerySelector - { - public override string Token => "alive"; - - public override QuerySelectorArgument[] Arguments => Array.Empty(); - - public override IEnumerable DoSelection(IEnumerable input, IReadOnlyList arguments, bool isInverted, IEntityManager entityManager) - { - var mindSystem = entityManager.System(); - return input.Where(e => - entityManager.TryGetComponent(e, out var mind) - && mind.Mind != null - && !mindSystem.IsCharacterDeadPhysically(mind.Mind)); - } - - public override IEnumerable DoInitialSelection(IReadOnlyList arguments, bool isInverted, IEntityManager entityManager) - { - return DoSelection(entityManager.EntityQuery().Select(x => x.Owner), arguments, - isInverted, entityManager); - } - } - - [RegisterBqlQuerySelector] - public sealed class HasReagentQuerySelector : BqlQuerySelector - { - public override string Token => "hasreagent"; - - public override QuerySelectorArgument[] Arguments => new [] { QuerySelectorArgument.String }; - - public override IEnumerable DoSelection(IEnumerable input, IReadOnlyList arguments, bool isInverted, IEntityManager entityManager) - { - var reagent = (string) arguments[0]; - return input.Where(e => - { - if (entityManager.TryGetComponent(e, out var solutionContainerManagerComponent)) - { - return solutionContainerManagerComponent.Solutions - .Any(solution => solution.Value.ContainsReagent(reagent)) ^ isInverted; - } - - return isInverted; - }); - } - - public override IEnumerable DoInitialSelection(IReadOnlyList arguments, bool isInverted, IEntityManager entityManager) - { - return DoSelection(entityManager.EntityQuery().Select(x => x.Owner), arguments, - isInverted, entityManager); - } - } - - [RegisterBqlQuerySelector] - public sealed class ApcPoweredQuerySelector : BqlQuerySelector - { - public override string Token => "apcpowered"; - - public override QuerySelectorArgument[] Arguments => Array.Empty(); - - public override IEnumerable DoSelection(IEnumerable input, IReadOnlyList arguments, bool isInverted, IEntityManager entityManager) - { - return input.Where(e => - entityManager.TryGetComponent(e, out var apcPowerReceiver) - ? apcPowerReceiver.Powered ^ isInverted - : isInverted); - } - - public override IEnumerable DoInitialSelection(IReadOnlyList arguments, bool isInverted, IEntityManager entityManager) - { - return DoSelection(entityManager.EntityQuery().Select(x => x.Owner), arguments, - isInverted, entityManager); - } - } - } -} diff --git a/Content.Server/Construction/ConstructionSystem.Initial.cs b/Content.Server/Construction/ConstructionSystem.Initial.cs index 564e1cd24eca2f..2284ade6bd21f3 100644 --- a/Content.Server/Construction/ConstructionSystem.Initial.cs +++ b/Content.Server/Construction/ConstructionSystem.Initial.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using Content.Server.Construction.Components; using Content.Server.Storage.Components; +using Content.Server.Storage.EntitySystems; using Content.Shared.ActionBlocker; using Content.Shared.Construction; using Content.Shared.Construction.Prototypes; @@ -14,6 +15,7 @@ using Content.Shared.Hands.EntitySystems; using Content.Shared.Interaction; using Content.Shared.Inventory; +using Content.Shared.Storage; using Robust.Shared.Containers; using Robust.Shared.Players; using Robust.Shared.Timing; @@ -28,6 +30,7 @@ public sealed partial class ConstructionSystem [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!; [Dependency] private readonly SharedHandsSystem _handsSystem = default!; [Dependency] private readonly EntityLookupSystem _lookupSystem = default!; + [Dependency] private readonly StorageSystem _storageSystem = default!; // --- WARNING! LEGACY CODE AHEAD! --- // This entire file contains the legacy code for initial construction. @@ -203,6 +206,15 @@ void ShutdownContainers() if (used.Contains(entity)) continue; + // Dump out any stored entities in used entity + if (TryComp(entity, out var storage) && storage.StoredEntities != null) + { + foreach (var storedEntity in storage.StoredEntities.ToList()) + { + _storageSystem.RemoveAndDrop(entity, storedEntity, storage); + } + } + if (string.IsNullOrEmpty(arbitraryStep.Store)) { if (!container.Insert(entity)) diff --git a/Content.Server/Entry/EntryPoint.cs b/Content.Server/Entry/EntryPoint.cs index 46ab3f8bd8fd46..41b6963332f6d3 100644 --- a/Content.Server/Entry/EntryPoint.cs +++ b/Content.Server/Entry/EntryPoint.cs @@ -19,18 +19,15 @@ using Content.Server.ServerInfo; using Content.Server.ServerUpdates; using Content.Server.Voting.Managers; -using Content.Shared.Administration; using Content.Shared.CCVar; using Content.Shared.Kitchen; using Robust.Server; -using Robust.Server.Bql; using Robust.Shared.Configuration; using Robust.Server.ServerStatus; using Robust.Shared.ContentPack; using Robust.Shared.Prototypes; using Robust.Shared.Timing; using Robust.Shared.Utility; -using Content.Server.Station.Systems; using Content.Shared.Localizations; namespace Content.Server.Entry @@ -145,7 +142,6 @@ public override void PostInit() IoCManager.Resolve().Initialize(); IoCManager.Resolve().GetEntitySystem().PostInitialize(); - IoCManager.Resolve().DoAutoRegistrations(); IoCManager.Resolve().Initialize(); } } diff --git a/Content.Server/GameTicking/Rules/SecretRuleSystem.cs b/Content.Server/GameTicking/Rules/SecretRuleSystem.cs index 8cf09595812106..835fddc9f54cc2 100644 --- a/Content.Server/GameTicking/Rules/SecretRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/SecretRuleSystem.cs @@ -38,7 +38,6 @@ private void PickRule(SecretRuleComponent component) var rules = _prototypeManager.Index(preset).Rules; foreach (var rule in rules) { - Logger.Debug($"what the fuck, {rule}"); GameTicker.StartGameRule(rule, out var ruleEnt); component.AdditionalGameRules.Add(ruleEnt); } diff --git a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs index b134bad70312eb..8778e29ec08f94 100644 --- a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs @@ -249,7 +249,7 @@ public bool MakeTraitor(IPlayerSession traitor) traitorRole.Mind.Briefing = string.Format( "{0}\n{1}", Loc.GetString("traitor-role-codewords-short", ("codewords", string.Join(", ", traitorRule.Codewords))), - Loc.GetString("traitor-role-uplink-code-short", ("code", string.Join("", code)))); + Loc.GetString("traitor-role-uplink-code-short", ("code", string.Join("-", code).Replace("sharp","#")))); // Assign traitor roles _mindSystem.AddRole(mind, traitorRole); @@ -295,7 +295,7 @@ private void SendTraitorBriefing(Mind.Mind mind, string[] codewords, Note[] code { _chatManager.DispatchServerMessage(session, Loc.GetString("traitor-role-greeting")); _chatManager.DispatchServerMessage(session, Loc.GetString("traitor-role-codewords", ("codewords", string.Join(", ", codewords)))); - _chatManager.DispatchServerMessage(session, Loc.GetString("traitor-role-uplink-code", ("code", string.Join("", code)))); + _chatManager.DispatchServerMessage(session, Loc.GetString("traitor-role-uplink-code", ("code", string.Join("-", code).Replace("sharp","#")))); } } diff --git a/Content.Server/IoC/ServerContentIoC.cs b/Content.Server/IoC/ServerContentIoC.cs index 4436bd63e063c1..1bb50eaf585a66 100644 --- a/Content.Server/IoC/ServerContentIoC.cs +++ b/Content.Server/IoC/ServerContentIoC.cs @@ -12,6 +12,7 @@ using Content.Server.Info; using Content.Server.Maps; using Content.Server.MoMMI; +using Content.Server.NewCon; using Content.Server.NodeContainer.NodeGroups; using Content.Server.Objectives; using Content.Server.Objectives.Interfaces; @@ -24,6 +25,7 @@ using Content.Shared.Administration.Logs; using Content.Shared.Administration.Managers; using Content.Shared.Kitchen; +using Robust.Shared.Toolshed; namespace Content.Server.IoC { diff --git a/Content.Server/NPC/Components/NPCSteeringComponent.cs b/Content.Server/NPC/Components/NPCSteeringComponent.cs index d1ec137aa97661..521e0688a166f0 100644 --- a/Content.Server/NPC/Components/NPCSteeringComponent.cs +++ b/Content.Server/NPC/Components/NPCSteeringComponent.cs @@ -39,6 +39,12 @@ public sealed class NPCSteeringComponent : Component #endregion + /// + /// Set to true from other systems if you wish to force the NPC to move closer. + /// + [DataField("forceMove")] + public bool ForceMove = false; + /// /// Next time we can change our steering direction. /// diff --git a/Content.Server/NPC/Systems/NPCCombatSystem.Ranged.cs b/Content.Server/NPC/Systems/NPCCombatSystem.Ranged.cs index cbec56aeb3f967..10ec54c895444a 100644 --- a/Content.Server/NPC/Systems/NPCCombatSystem.Ranged.cs +++ b/Content.Server/NPC/Systems/NPCCombatSystem.Ranged.cs @@ -1,6 +1,7 @@ using Content.Server.NPC.Components; using Content.Shared.CombatMode; using Content.Shared.Interaction; +using Content.Shared.Physics; using Content.Shared.Weapons.Ranged.Components; using Content.Shared.Weapons.Ranged.Events; using Robust.Shared.Map; @@ -132,13 +133,20 @@ private void UpdateRanged(float frameTime) if (comp.LOSAccumulator < 0f) { comp.LOSAccumulator += UnoccludedCooldown; - comp.TargetInLOS = _interaction.InRangeUnobstructed(uid, comp.Target, distance + 0.1f); + // For consistency with NPC steering. + comp.TargetInLOS = _interaction.InRangeUnobstructed(uid, Transform(comp.Target).Coordinates, distance + 0.1f); } if (!comp.TargetInLOS) { comp.ShootAccumulator = 0f; comp.Status = CombatStatus.NotInSight; + + if (TryComp(uid, out steering)) + { + steering.ForceMove = true; + } + continue; } @@ -188,8 +196,14 @@ private void UpdateRanged(float frameTime) targetCordinates = new EntityCoordinates(xform.MapUid!.Value, targetSpot); } - _gun.AttemptShoot(uid, gunUid, gun, targetCordinates); comp.Status = CombatStatus.Normal; + + if (gun.NextFire > _timing.CurTime) + { + return; + } + + _gun.AttemptShoot(uid, gunUid, gun, targetCordinates); } } } diff --git a/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs b/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs index 8be04ec1167cb0..920db537dfed0b 100644 --- a/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs +++ b/Content.Server/NPC/Systems/NPCSteeringSystem.Context.cs @@ -81,7 +81,7 @@ private bool TrySeek( // Check if we're in LOS if that's required. // TODO: Need something uhh better not sure on the interaction between these. - if (steering.ArriveOnLineOfSight) + if (!steering.ForceMove && steering.ArriveOnLineOfSight) { // TODO: use vision range inLos = _interaction.InRangeUnobstructed(uid, steering.Coordinates, 10f); @@ -105,6 +105,7 @@ private bool TrySeek( else { steering.LineOfSightTimer = 0f; + steering.ForceMove = false; } // We've arrived, nothing else matters. diff --git a/Content.Server/NewCon/Commands/AdminDebug/ACmdCommand.cs b/Content.Server/NewCon/Commands/AdminDebug/ACmdCommand.cs new file mode 100644 index 00000000000000..a79219671581c9 --- /dev/null +++ b/Content.Server/NewCon/Commands/AdminDebug/ACmdCommand.cs @@ -0,0 +1,34 @@ +using Content.Server.Administration; +using Content.Server.Administration.Managers; +using Content.Shared.Administration; +using Robust.Server.Player; +using Robust.Shared.Toolshed; +using Robust.Shared.Toolshed.Syntax; + +namespace Content.Server.NewCon.Commands.AdminDebug; + +[ToolshedCommand, AdminCommand(AdminFlags.Debug)] +public sealed class ACmdCommand : ToolshedCommand +{ + [Dependency] private readonly IAdminManager _adminManager = default!; + + [CommandImplementation("perms")] + public AdminFlags[]? Perms([PipedArgument] CommandSpec command) + { + var res = _adminManager.TryGetCommandFlags(command, out var flags); + if (res) + flags ??= Array.Empty(); + return flags; + } + + [CommandImplementation("caninvoke")] + public bool CanInvoke( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] CommandSpec command, + [CommandArgument] ValueRef player + ) + { + // Deliberately discard the error. + return ((IPermissionController) _adminManager).CheckInvokable(command, player.Evaluate(ctx), out var err); + } +} diff --git a/Content.Server/NewCon/Commands/Verbs/RunVerbAsCommand.cs b/Content.Server/NewCon/Commands/Verbs/RunVerbAsCommand.cs new file mode 100644 index 00000000000000..21f2119dacf460 --- /dev/null +++ b/Content.Server/NewCon/Commands/Verbs/RunVerbAsCommand.cs @@ -0,0 +1,62 @@ +using System.Linq; +using Content.Server.Administration; +using Content.Shared.Administration; +using Content.Shared.Verbs; +using Robust.Shared.Toolshed; +using Robust.Shared.Toolshed.Syntax; +using Robust.Shared.Toolshed.TypeParsers; + +namespace Content.Server.NewCon.Commands.Verbs; + +[ToolshedCommand, AdminCommand(AdminFlags.Admin)] +public sealed class RunVerbAsCommand : ToolshedCommand +{ + private SharedVerbSystem? _verb; + + [CommandImplementation] + public IEnumerable RunVerbAs( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] IEnumerable input, + [CommandArgument] ValueRef runner, + [CommandArgument] string verb + ) + { + _verb ??= GetSys(); + verb = verb.ToLowerInvariant(); + + foreach (var i in input) + { + var runnerEid = runner.Evaluate(ctx); + + + if (EntityManager.Deleted(runnerEid) && runnerEid != default) + ctx.ReportError(new DeadEntity(runnerEid)); + + if (ctx.GetErrors().Any()) + yield break; + + var verbs = _verb.GetLocalVerbs(i, runnerEid, Verb.VerbTypes, true); + + // if the "verb name" is actually a verb-type, try run any verb of that type. + var verbType = Verb.VerbTypes.FirstOrDefault(x => x.Name == verb); + if (verbType != null) + { + var verbTy = verbs.FirstOrDefault(v => v.GetType() == verbType); + if (verbTy != null) + { + _verb.ExecuteVerb(verbTy, runnerEid, i, forced: true); + yield return i; + } + } + + foreach (var verbTy in verbs) + { + if (verbTy.Text.ToLowerInvariant() == verb) + { + _verb.ExecuteVerb(verbTy, runnerEid, i, forced: true); + yield return i; + } + } + } + } +} diff --git a/Content.Server/NewCon/Commands/VisualizeCommand.cs b/Content.Server/NewCon/Commands/VisualizeCommand.cs new file mode 100644 index 00000000000000..44e4730959a882 --- /dev/null +++ b/Content.Server/NewCon/Commands/VisualizeCommand.cs @@ -0,0 +1,51 @@ +using System.Linq; +using Content.Server.Administration; +using Content.Server.EUI; +using Content.Shared.Administration; +using Content.Shared.Bql; +using Content.Shared.Eui; +using Robust.Server.Player; +using Robust.Shared.Toolshed; +using Robust.Shared.Toolshed.Errors; + +namespace Content.Server.NewCon.Commands; + +[ToolshedCommand, AdminCommand(AdminFlags.Admin)] +public sealed class VisualizeCommand : ToolshedCommand +{ + [Dependency] private readonly EuiManager _euiManager = default!; + + [CommandImplementation] + public void VisualizeEntities( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] IEnumerable input + ) + { + if (ctx.Session is null) + { + ctx.ReportError(new NotForServerConsoleError()); + return; + } + + var ui = new ToolshedVisualizeEui( + input.Select(e => (EntName(e), e)).ToArray() + ); + _euiManager.OpenEui(ui, (IPlayerSession) ctx.Session); + _euiManager.QueueStateUpdate(ui); + } +} +internal sealed class ToolshedVisualizeEui : BaseEui +{ + private readonly (string name, EntityUid entity)[] _entities; + + public ToolshedVisualizeEui((string name, EntityUid entity)[] entities) + { + _entities = entities; + } + + public override EuiStateBase GetNewState() + { + return new ToolshedVisualizeEuiState(_entities); + } +} + diff --git a/Content.Server/PDA/Ringer/RingerSystem.cs b/Content.Server/PDA/Ringer/RingerSystem.cs index 46bcc999b8de45..eba052f9e1be07 100644 --- a/Content.Server/PDA/Ringer/RingerSystem.cs +++ b/Content.Server/PDA/Ringer/RingerSystem.cs @@ -122,7 +122,30 @@ public void RandomizeRingtone(EntityUid uid, RingerComponent ringer, MapInitEven public void RandomizeUplinkCode(EntityUid uid, RingerUplinkComponent uplink, ComponentInit args) { - uplink.Code = GenerateRingtone(); + var notes = new[] + { + Note.A, + Note.Asharp, + Note.B, + Note.C, + Note.Csharp, + Note.D, + Note.Dsharp, + Note.E, + Note.F, + Note.Fsharp, + Note.G, + Note.Gsharp, + }; + + var ringtone = new Note[RingtoneLength]; + + for (var i = 0; i < RingtoneLength; i++) + { + ringtone[i] = _random.Pick(notes); + } + + uplink.Code = ringtone; } //Non Event Functions @@ -141,7 +164,7 @@ private Note[] GenerateRingtone() var ringtone = new Note[RingtoneLength]; - for (var i = 0; i < 4; i++) + for (var i = 0; i < RingtoneLength; i++) { ringtone[i] = _random.Pick(notes); } @@ -196,7 +219,7 @@ public bool ToggleRingerUI(EntityUid uid, IPlayerSession session) ringer.NoteCount++; - if (ringer.NoteCount > 3) + if (ringer.NoteCount > RingtoneLength - 1) { remove.Add(uid); UpdateRingerUserInterface(uid, ringer); diff --git a/Content.Server/Station/Commands/JobsCommand.cs b/Content.Server/Station/Commands/JobsCommand.cs new file mode 100644 index 00000000000000..1d023c4a844fc7 --- /dev/null +++ b/Content.Server/Station/Commands/JobsCommand.cs @@ -0,0 +1,129 @@ +using System.Linq; +using Content.Server.Administration; +using Content.Server.Station.Systems; +using Content.Shared.Administration; +using Content.Shared.Roles; +using Robust.Shared.Toolshed; +using Robust.Shared.Toolshed.Syntax; +using Robust.Shared.Toolshed.TypeParsers; + +namespace Content.Server.Station.Commands; + +[ToolshedCommand, AdminCommand(AdminFlags.VarEdit)] +public sealed class JobsCommand : ToolshedCommand +{ + private StationJobsSystem? _jobs; + + [CommandImplementation("jobs")] + public IEnumerable Jobs([PipedArgument] EntityUid station) + { + _jobs ??= GetSys(); + + foreach (var (job, _) in _jobs.GetJobs(station)) + { + yield return new JobSlotRef(job, station, _jobs, EntityManager); + } + } + + [CommandImplementation("jobs")] + public IEnumerable Jobs([PipedArgument] IEnumerable stations) + => stations.SelectMany(Jobs); + + [CommandImplementation("job")] + public JobSlotRef Job([PipedArgument] EntityUid station, [CommandArgument] Prototype job) + { + _jobs ??= GetSys(); + + return new JobSlotRef(job.Value.ID, station, _jobs, EntityManager); + } + + [CommandImplementation("job")] + public IEnumerable Job([PipedArgument] IEnumerable stations, [CommandArgument] Prototype job) + => stations.Select(x => Job(x, job)); + + [CommandImplementation("isinfinite")] + public bool IsInfinite([PipedArgument] JobSlotRef job, [CommandInverted] bool inverted) + => job.Infinite() ^ inverted; + + [CommandImplementation("isinfinite")] + public IEnumerable IsInfinite([PipedArgument] IEnumerable jobs, [CommandInverted] bool inverted) + => jobs.Select(x => IsInfinite(x, inverted)); + + [CommandImplementation("adjust")] + public JobSlotRef Adjust( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] JobSlotRef @ref, + [CommandArgument] ValueRef by + ) + { + _jobs ??= GetSys(); + _jobs.TryAdjustJobSlot(@ref.Station, @ref.Job, by.Evaluate(ctx), true, true); + return @ref; + } + + [CommandImplementation("adjust")] + public IEnumerable Adjust( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] IEnumerable @ref, + [CommandArgument] ValueRef by + ) + => @ref.Select(x => Adjust(ctx, x, by)); + + + [CommandImplementation("set")] + public JobSlotRef Set( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] JobSlotRef @ref, + [CommandArgument] ValueRef by + ) + { + _jobs ??= GetSys(); + _jobs.TrySetJobSlot(@ref.Station, @ref.Job, by.Evaluate(ctx), true); + return @ref; + } + + [CommandImplementation("set")] + public IEnumerable Set( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] IEnumerable @ref, + [CommandArgument] ValueRef by + ) + => @ref.Select(x => Set(ctx, x, by)); + + [CommandImplementation("amount")] + public int Amount( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] JobSlotRef @ref + ) + { + _jobs ??= GetSys(); + _jobs.TryGetJobSlot(@ref.Station, @ref.Job, out var slots); + return (int)(slots ?? 0); + } + + [CommandImplementation("amount")] + public IEnumerable Amount( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] IEnumerable @ref + ) + => @ref.Select(x => Amount(ctx, x)); +} + +// Used for Toolshed queries. +public readonly record struct JobSlotRef(string Job, EntityUid Station, StationJobsSystem Jobs, IEntityManager EntityManager) +{ + public override string ToString() + { + if (!Jobs.TryGetJobSlot(Station, Job, out var slot)) + { + return $"{EntityManager.ToPrettyString(Station)} job {Job} : (not a slot)"; + } + + return $"{EntityManager.ToPrettyString(Station)} job {Job} : {slot?.ToString() ?? "infinite"}"; + } + + public bool Infinite() + { + return Jobs.TryGetJobSlot(Station, Job, out var slot) && slot is null; + } +} diff --git a/Content.Server/Station/Commands/StationCommand.cs b/Content.Server/Station/Commands/StationCommand.cs new file mode 100644 index 00000000000000..b2381a0322a973 --- /dev/null +++ b/Content.Server/Station/Commands/StationCommand.cs @@ -0,0 +1,126 @@ +using System.Diagnostics; +using System.Linq; +using Content.Server.Administration; +using Content.Server.Station.Components; +using Content.Server.Station.Systems; +using Content.Shared.Administration; +using Robust.Shared.Toolshed; +using Robust.Shared.Toolshed.Errors; +using Robust.Shared.Toolshed.Syntax; +using Robust.Shared.Utility; + +namespace Content.Server.Station.Commands; + +[ToolshedCommand, AdminCommand(AdminFlags.Admin)] +public sealed class StationsCommand : ToolshedCommand +{ + private StationSystem? _station; + + [CommandImplementation("list")] + public IEnumerable List() + { + _station ??= GetSys(); + + return _station.GetStationsSet(); + } + + [CommandImplementation("get")] + public EntityUid Get([CommandInvocationContext] IInvocationContext ctx) + { + _station ??= GetSys(); + + var set = _station.GetStationsSet(); + if (set.Count > 1 || set.Count == 0) + ctx.ReportError(new OnlyOneStationsError()); + + return set.FirstOrDefault(); + } + + [CommandImplementation("getowningstation")] + public IEnumerable GetOwningStation([PipedArgument] IEnumerable input) + => input.Select(GetOwningStation); + + [CommandImplementation("getowningstation")] + public EntityUid? GetOwningStation([PipedArgument] EntityUid input) + { + _station ??= GetSys(); + + return _station.GetOwningStation(input); + } + + [CommandImplementation("largestgrid")] + public EntityUid? LargestGrid([PipedArgument] EntityUid input) + { + _station ??= GetSys(); + + return _station.GetLargestGrid(Comp(input)); + } + + [CommandImplementation("largestgrid")] + public IEnumerable LargestGrid([PipedArgument] IEnumerable input) + => input.Select(LargestGrid); + + + [CommandImplementation("grids")] + public IEnumerable Grids([PipedArgument] EntityUid input) + => Comp(input).Grids; + + [CommandImplementation("grids")] + public IEnumerable Grids([PipedArgument] IEnumerable input) + => input.SelectMany(Grids); + + [CommandImplementation("config")] + public StationConfig? Config([PipedArgument] EntityUid input) + => Comp(input).StationConfig; + + [CommandImplementation("config")] + public IEnumerable Config([PipedArgument] IEnumerable input) + => input.Select(Config); + + [CommandImplementation("addgrid")] + public void AddGrid( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] EntityUid input, + [CommandArgument] ValueRef grid + ) + { + _station ??= GetSys(); + + _station.AddGridToStation(input, grid.Evaluate(ctx)); + } + + [CommandImplementation("rmgrid")] + public void RmGrid( + [CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] EntityUid input, + [CommandArgument] ValueRef grid + ) + { + _station ??= GetSys(); + + _station.RemoveGridFromStation(input, grid.Evaluate(ctx)); + } + + [CommandImplementation("rename")] + public void Rename([CommandInvocationContext] IInvocationContext ctx, + [PipedArgument] EntityUid input, + [CommandArgument] ValueRef name + ) + { + _station ??= GetSys(); + + _station.RenameStation(input, name.Evaluate(ctx)!); + } +} + +public record struct OnlyOneStationsError : IConError +{ + public FormattedMessage DescribeInner() + { + return FormattedMessage.FromMarkup("This command doesn't function if there is more than one or no stations, explicitly specify a station with the ent command or similar."); + } + + public string? Expression { get; set; } + public Vector2i? IssueSpan { get; set; } + public StackTrace? Trace { get; set; } +} diff --git a/Content.Shared/Administration/AnyCommandAttribute.cs b/Content.Shared/Administration/AnyCommandAttribute.cs index 52c895163147fe..66a1bd0badbeab 100644 --- a/Content.Shared/Administration/AnyCommandAttribute.cs +++ b/Content.Shared/Administration/AnyCommandAttribute.cs @@ -1,5 +1,6 @@ using JetBrains.Annotations; using Robust.Shared.Console; +using Robust.Shared.Toolshed; namespace Content.Shared.Administration { @@ -7,7 +8,6 @@ namespace Content.Shared.Administration /// Specifies that a command can be executed by any player. /// [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] - [BaseTypeRequired(typeof(IConsoleCommand))] [MeansImplicitUse] public sealed class AnyCommandAttribute : Attribute { diff --git a/Content.Shared/Audio/AmbientSoundComponent.cs b/Content.Shared/Audio/AmbientSoundComponent.cs index b120510f4afc1b..db13db2e6fac45 100644 --- a/Content.Shared/Audio/AmbientSoundComponent.cs +++ b/Content.Shared/Audio/AmbientSoundComponent.cs @@ -50,4 +50,5 @@ public sealed class AmbientSoundComponentState : ComponentState public bool Enabled { get; init; } public float Range { get; init; } public float Volume { get; init; } + public SoundSpecifier Sound { get; init; } = default!; } diff --git a/Content.Shared/Audio/SharedAmbientSoundSystem.cs b/Content.Shared/Audio/SharedAmbientSoundSystem.cs index 3bda37c634ef9d..30fdc946edd562 100644 --- a/Content.Shared/Audio/SharedAmbientSoundSystem.cs +++ b/Content.Shared/Audio/SharedAmbientSoundSystem.cs @@ -1,3 +1,4 @@ +using Robust.Shared.Audio; using Robust.Shared.GameStates; namespace Content.Shared.Audio; @@ -45,12 +46,23 @@ public virtual void SetVolume(EntityUid uid, float value, AmbientSoundComponent? Dirty(ambience); } + public virtual void SetSound(EntityUid uid, SoundSpecifier sound, AmbientSoundComponent? ambience = null) + { + if (!Resolve(uid, ref ambience, false) || ambience.Sound == sound) + return; + + ambience.Sound = sound; + QueueUpdate(uid, ambience); + Dirty(ambience); + } + private void HandleCompState(EntityUid uid, AmbientSoundComponent component, ref ComponentHandleState args) { if (args.Current is not AmbientSoundComponentState state) return; SetAmbience(uid, state.Enabled, component); SetRange(uid, state.Range, component); SetVolume(uid, state.Volume, component); + SetSound(uid, state.Sound, component); } private void GetCompState(EntityUid uid, AmbientSoundComponent component, ref ComponentGetState args) @@ -60,6 +72,7 @@ private void GetCompState(EntityUid uid, AmbientSoundComponent component, ref Co Enabled = component.Enabled, Range = component.Range, Volume = component.Volume, + Sound = component.Sound, }; } } diff --git a/Content.Shared/Bql/BqlResultsEuiState.cs b/Content.Shared/Bql/ToolshedVisualizeEuiState.cs similarity index 62% rename from Content.Shared/Bql/BqlResultsEuiState.cs rename to Content.Shared/Bql/ToolshedVisualizeEuiState.cs index cd298fa8148548..95058546144a9a 100644 --- a/Content.Shared/Bql/BqlResultsEuiState.cs +++ b/Content.Shared/Bql/ToolshedVisualizeEuiState.cs @@ -4,11 +4,11 @@ namespace Content.Shared.Bql; [Serializable, NetSerializable] -public sealed class BqlResultsEuiState : EuiStateBase +public sealed class ToolshedVisualizeEuiState : EuiStateBase { public readonly (string name, EntityUid entity)[] Entities; - public BqlResultsEuiState((string name, EntityUid entity)[] entities) + public ToolshedVisualizeEuiState((string name, EntityUid entity)[] entities) { Entities = entities; } diff --git a/Content.Shared/PDA/SharedRingerSystem.cs b/Content.Shared/PDA/SharedRingerSystem.cs index 77963517326e4a..5652a60599832a 100644 --- a/Content.Shared/PDA/SharedRingerSystem.cs +++ b/Content.Shared/PDA/SharedRingerSystem.cs @@ -4,7 +4,7 @@ namespace Content.Shared.PDA; public abstract class SharedRingerSystem : EntitySystem { - public const int RingtoneLength = 4; + public const int RingtoneLength = 6; public const int NoteTempo = 300; public const float NoteDelay = 60f / NoteTempo; } diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs index 8866fcf55ad5d3..a24d2bf35856f2 100644 --- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs +++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs @@ -126,8 +126,11 @@ private void OnShootRequest(RequestShootEvent msg, EntitySessionEventArgs args) var user = args.SenderSession.AttachedEntity; if (user == null || + !_combatMode.IsInCombatMode(user) || !TryGetGun(user.Value, out var ent, out var gun)) + { return; + } if (ent != msg.Gun) return; @@ -165,9 +168,6 @@ public bool TryGetGun(EntityUid entity, out EntityUid gunEntity, [NotNullWhen(tr gunEntity = default; gunComp = null; - if (!_combatMode.IsInCombatMode(entity)) - return false; - if (EntityManager.TryGetComponent(entity, out HandsComponent? hands) && hands.ActiveHandEntity is { } held && TryComp(held, out GunComponent? gun)) diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index ee105536a0498c..3e2546267e0883 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,32 +1,4 @@ Entries: -- author: metalgearsloth - changes: - - {message: PKA requires wielding now., type: Tweak} - id: 3916 - time: '2023-06-01T02:27:19.0000000+00:00' -- author: metalgearsloth - changes: - - {message: L6 firerate is 6 again. It requires wielding to have decent accuracy., - type: Tweak} - - {message: SMG accuracy reduced to 3-tiles width at full screen away., type: Tweak} - id: 3917 - time: '2023-06-01T02:40:11.0000000+00:00' -- author: liltenhead - changes: - - {message: Autolathe board economy crashed, type: Tweak} - id: 3918 - time: '2023-06-01T06:49:50.0000000+00:00' -- author: metalgearsloth - changes: - - {message: Fix NPCs getting stuck on corners., type: Fix} - id: 3919 - time: '2023-06-01T13:11:41.0000000+00:00' -- author: EmoGarbage404 - changes: - - {message: Less severe anomalies now have higher baseline point output., type: Tweak} - - {message: Random anomaly stability fluctuation is less extreme., type: Tweak} - id: 3920 - time: '2023-06-01T23:07:20.0000000+00:00' - author: PJB3005 changes: - {message: 'Handcuffs don''t eat all interaction events anymore, so you can put @@ -2990,3 +2962,30 @@ Entries: - {message: The P-Block crate will now have oxygen and nitrogen jugs., type: Fix} id: 4415 time: '2023-08-02T14:32:08.0000000+00:00' +- author: chromiumboy + changes: + - {message: Containers used in recipes now drop their contents when crafted., type: Fix} + id: 4416 + time: '2023-08-02T18:32:51.0000000+00:00' +- author: PuceTint + changes: + - {message: Nitrous oxide now causes laughing, type: Add} + id: 4417 + time: '2023-08-02T21:33:00.0000000+00:00' +- author: metalgearsloth + changes: + - {message: Fix xenos not spittin'., type: Fix} + id: 4418 + time: '2023-08-02T21:34:54.0000000+00:00' +- author: Bhijn and Myr + changes: + - {message: The game now boots in GLES2 again. oops., type: Fix} + id: 4419 + time: '2023-08-02T23:13:07.0000000+00:00' +- author: router + changes: + - {message: Ringtones now have 2 more notes you can play around with., type: Tweak} + - {message: 'The Syndicate has taken advantage of this hardware expansion, making + brute-force attacks on their uplinks unfeasible.', type: Fix} + id: 4420 + time: '2023-08-03T11:13:17.0000000+00:00' diff --git a/Resources/Changelog/ChangelogAruMoon.yml b/Resources/Changelog/ChangelogAruMoon.yml index 4279db90c88118..18d42576b0c58f 100644 --- a/Resources/Changelog/ChangelogAruMoon.yml +++ b/Resources/Changelog/ChangelogAruMoon.yml @@ -807,3 +807,27 @@ Entries: type: Add id: 71 time: '2023-07-31T04:44:40.0000000+00:00' +- author: Quartug + changes: + - message: "\u041D\u043E\u0432\u0430\u044F \u0442\u0435\u0445\u043D\u043E\u043B\u043E\ + \u0433\u0438\u044F \"\u0438\u043E\u043D\u043D\u043E\u0439 \u044D\u043A\u0438\ + \u043F\u0438\u0440\u043E\u0432\u043A\u0438\" \u0432 \u043E\u0440\u0443\u0436\ + \u0435\u0439\u043D\u0443\u044E \u0432\u0435\u0442\u043A\u0443 \u0420\u041D\u0414\ + ." + type: Add + - message: "\u0423\u043B\u0443\u0447\u0448\u0435\u043D\u043D\u044B\u0435 \u0438\u043E\ + \u043D\u043D\u044B\u0435 \u0440\u0435\u0437\u0430\u043A\u0438 \u0438 \u0431\u0435\ + \u0437\u0434\u043E\u043D\u043D\u044B\u0435 \u043C\u0435\u0448\u043A\u0438 \u0434\ + \u043B\u044F \u0440\u0443\u0434\u044B \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\ + \u0435 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B \u0434\u043B\u044F \u043F\ + \u043E\u043A\u0443\u043F\u043A\u0438." + type: Remove + - message: "\u0422\u0435\u043F\u0435\u0440\u044C \u0438\u043E\u043D\u043D\u044B\u0435\ + \ \u0440\u0435\u0437\u0430\u043A\u0438 \u0432\u044B\u043F\u0443\u0441\u043A\u0430\ + \u044E\u0442 \u043E\u0434\u0438\u043D \u0441\u0438\u043B\u044C\u043D\u044B\u0439\ + \ \u0441\u043D\u0430\u0440\u044F\u0434, \u043A\u043E\u0442\u043E\u0440\u044B\ + \u0439 \u043A\u0440\u0443\u0448\u0438\u0442 \u043F\u043E\u0440\u043E\u0434\u0443\ + \ \u043D\u0430 \u0441\u0432\u043E\u0435\u043C \u043F\u0443\u0442\u0438." + type: Tweak + id: 72 + time: '2023-08-03T17:12:24.0000000+00:00' diff --git a/Resources/Locale/en-US/administration/admin-verbs.ftl b/Resources/Locale/en-US/administration/admin-verbs.ftl index dab68eab4d7492..6804171f7d2ffc 100644 --- a/Resources/Locale/en-US/administration/admin-verbs.ftl +++ b/Resources/Locale/en-US/administration/admin-verbs.ftl @@ -7,3 +7,5 @@ admin-verbs-teleport-to = Teleport To admin-verbs-teleport-here = Teleport Here admin-verbs-freeze = Freeze admin-verbs-unfreeze = Unfreeze +toolshed-verb-mark = Mark +toolshed-verb-mark-description = Places this entity into the $marked variable, a list of entities, replacing it's prior value. diff --git a/Resources/Locale/en-US/commands/toolshed-commands.ftl b/Resources/Locale/en-US/commands/toolshed-commands.ftl new file mode 100644 index 00000000000000..3dcf56841cacce --- /dev/null +++ b/Resources/Locale/en-US/commands/toolshed-commands.ftl @@ -0,0 +1,58 @@ +command-description-visualize = + Takes the input list of entities and puts them into a UI window for easy browsing. +command-description-runverbas = + Runs a verb over the input entities with the given user. +command-description-acmd-perms = + Returns the admin permissions of the given command, if any. +command-description-acmd-caninvoke = + Check if the given player can invoke the given command. +command-description-jobs-jobs = + Returns all jobs on a station. +command-description-jobs-job = + Returns a given job on a station. +command-description-jobs-isinfinite = + Returns true if the input job is infinite, otherwise false. +command-description-jobs-adjust = + Adjusts the number of slots for the given job. +command-description-jobs-set = + Sets the number of slots for the given job. +command-description-jobs-amount = + Returns the number of slots for the given job. +command-description-stations-list = + Returns a list of all stations. +command-description-stations-get = + Gets the active station, if and only if there is only one. +command-description-stations-getowningstation = + Gets the station that a given entity is "owned by" (within) +command-description-stations-grids = + Returns all grids associated with the input station. +command-description-stations-config = + Returns the config associated with the input station, if any. +command-description-stations-addgrid = + Adds a grid to the given station. +command-description-stations-rmgrid = + Removes a grid from the given station. +command-description-stations-rename = + Renames the given station. +command-description-stations-largestgrid = + Returns the largest grid the given station has, if any. +command-description-admins-active = + Returns a list of active admins. +command-description-admins-all = + Returns a list of ALL admins, including deadmined ones. +command-description-marked = + Returns the value of $marked as a List. +command-description-rejuvenate = + Rejuvenates the given entities, restoring them to full health, clearing status effects, etc. +command-description-tag-list = + Lists tags on the given entities. +command-description-tag-add = + Adds a tag to the given entities. +command-description-tag-rm = + Removes a tag from the given entities. +command-description-tag-addmany = + Adds a list of tags to the given entities. +command-description-tag-rmmany = + Removes a list of tags from the given entities. +command-description-solution-get = + Returns a solution stored in an entity's solution container. diff --git a/Resources/Locale/en-US/research/technologies.ftl b/Resources/Locale/en-US/research/technologies.ftl index 24a9809199224e..3f692ff153de80 100644 --- a/Resources/Locale/en-US/research/technologies.ftl +++ b/Resources/Locale/en-US/research/technologies.ftl @@ -30,6 +30,7 @@ research-technology-bluespace-chemistry = Bluespace Chemistry research-technology-cloning = Cloning research-technology-salvage-weapons = Salvage Weapons +research-technology-salvage-cutters = Ion weapons research-technology-draconic-munitions = Draconic Munitions research-technology-explosive-technology = Explosive Technology research-technology-advanced-laser-manipulation = Advanced Laser Manipulation diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/catalog/fills/crates/salvage.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/catalog/fills/crates/salvage.ftl index 734b84f8f5aec1..f3444c9f1e5720 100644 --- a/Resources/Locale/en-US/ss14-ru/prototypes/catalog/fills/crates/salvage.ftl +++ b/Resources/Locale/en-US/ss14-ru/prototypes/catalog/fills/crates/salvage.ftl @@ -13,3 +13,6 @@ ent-CratePartsT3T4 = tier 3/4 parts crate ent-CratePartsT4 = tier 4 parts crate .desc = Contains 5 random tier 4 parts for upgrading machines. .suffix = { "" } +ent-CrateAdvSalvageEquipment = advanced salvage equipment crate + .desc = Contains one advanced set of miner's tools. + .suffix = Filled \ No newline at end of file diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/tools/lantern.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/tools/lantern.ftl index 407a62717973a2..5d8372bb75a7d9 100644 --- a/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/tools/lantern.ftl +++ b/Resources/Locale/en-US/ss14-ru/prototypes/entities/objects/tools/lantern.ftl @@ -1,6 +1,6 @@ -ent-lantern = lantern +ent-Lantern = lantern .desc = The holy light guides the way. .suffix = { "" } -ent-lanternextrabright = extra-bright lantern - .desc = Blinding. - .suffix = { "" } +ent-LanternFlash = { ent-Lantern } + .suffix = Flash + .desc = { ent-Lantern.desc } diff --git a/Resources/Locale/en-US/ss14-ru/prototypes/entities/structures/wallmounts/signs/posters.ftl b/Resources/Locale/en-US/ss14-ru/prototypes/entities/structures/wallmounts/signs/posters.ftl index bdb91fc5599e24..cec26e5b096d3d 100644 --- a/Resources/Locale/en-US/ss14-ru/prototypes/entities/structures/wallmounts/signs/posters.ftl +++ b/Resources/Locale/en-US/ss14-ru/prototypes/entities/structures/wallmounts/signs/posters.ftl @@ -166,6 +166,24 @@ ent-PosterContrabandRise = Rise Up ent-PosterContrabandRevolt = Revolt .desc = Revolutionist propaganda, manufactured by the Syndicate. .suffix = { "" } +ent-PosterContrabandMoth = Syndie Moth - Nuclear Operation + .desc = A Syndicate-commissioned poster that uses Syndie Moth™ to tell the viewer to keep the nuclear authentication disk unsecured. "Peace was never an option!" No good employee would listen to this nonsense. + .suffix = { "" } +ent-PosterContrabandCybersun600 = Cybersun: 600 Years Commemorative Poster + .desc = An artistic poster commemorating 600 years of continual business for Cybersun Industries. + .suffix = { "" } +ent-PosterContrabandDonk = DONK CO. BRAND MICROWAVEABLE FOOD + .desc = DONK CO. BRAND MICROWAVABLE FOOD: MADE BY STARVING COLLEGE STUDENTS, FOR STARVING COLLEGE STUDENTS. + .suffix = { "" } +ent-PosterContrabandEnlistGorlex = Enlist + .desc = Enlist with the Gorlex Marauders today! See the galaxy, kill corpos, get paid! + .suffix = { "" } +ent-PosterContrabandInterdyne = Interdyne Pharmaceutics: For the Health of Humankind + .desc = An advertisement for Interdyne Pharmaceutics' GeneClean clinics. 'Become the master of your own body!' + .suffix = { "" } +ent-PosterContrabandWaffleCorp = Make Mine a Waffle Corp: Fine Rifles, Economic Prices + .desc = An old advertisement for Waffle Corp rifles. 'Better weapons, lower prices!' + .suffix = { "" } ent-PosterContrabandSOPIsShit = SOP is shit .desc = A poster encouraging people crew to stop using 'standard operating procedures' because they are inefficient and boring. .suffix = { "" } @@ -295,6 +313,33 @@ ent-PosterLegitMime = Mime Postmodern ent-PosterLegitCarpMount = Wall-mounted Carp .desc = Carpe diem! .suffix = { "" } +ent-PosterLegitSafetyMothDelam = Safety Moth - Delamination Safety Precautions + .desc = This informational poster uses Safety Moth™ to tell the viewer to hide in lockers when the Supermatter Crystal has delaminated, to prevent hallucinations. Evacuating might be a better strategy. + .suffix = { "" } +ent-PosterLegitSafetyMothEpi = Safety Moth - Epinephrine + .desc = This informational poster uses Safety Moth™ to inform the viewer to help injured/deceased crewmen with their epinephrine injectors. "Prevent organ rot with this one simple trick!" + .suffix = { "" } +ent-PosterLegitSafetyMothHardhat = Safety Moth - Hardhats + .desc = This informational poster uses Safety Moth™ to tell the viewer to wear hardhats in cautious areas. "It's like a lamp for your head!" + .suffix = { "" } +ent-PosterLegitSafetyMothMeth = Safety Moth - Methamphetamine + .desc = This informational poster uses Safety Moth™ to tell the viewer to seek CMO approval before cooking methamphetamine. "Stay close to the target temperature, and never go over!" ...You shouldn't ever be making this. + .suffix = { "" } +ent-PosterLegitSafetyMothPiping = Safety Moth - Piping + .desc = This informational poster uses Safety Moth™ to tell atmospheric technicians correct types of piping to be used. "Pipes, not Pumps! Proper pipe placement prevents poor performance!" + .suffix = { "" } +ent-PosterLegitVacation = Nanotrasen Corporate Perks: Vacation + .desc = This informational poster provides information on some of the prizes available via the NT Corporate Perks program, including a two-week vacation for two on the resort world Idyllus. + .suffix = { "" } +ent-PosterLegitPeriodicTable = Periodic Table of the Elements + .desc = A periodic table of the elements, from Hydrogen to Oganesson, and everything inbetween. + .suffix = { "" } +ent-PosterLegitRenault = Renault Poster + .desc = Yap. + .suffix = { "" } +ent-PosterLegitNTTGC = Nanotrasen Tactical Game Cards + .desc = An advertisement for Nanotrasen's TCG cards: BUY MORE CARDS. + .suffix = { "" } ent-PosterMapBagel = Bagel Map .desc = A map of Bagel Station. .suffix = { "" } diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl index 3395ac9a41b4e7..1f0dbe7686397d 100644 --- a/Resources/Locale/en-US/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/store/uplink-catalog.ftl @@ -265,7 +265,7 @@ uplink-soap-name = Soap uplink-soap-desc = An untrustworthy bar of soap. Smells of fear. uplink-ultrabright-lantern-name = Extra-Bright Lantern -uplink-ultrabright-lantern-desc = Blinding. +uplink-ultrabright-lantern-desc = It can be used to blind people like a flash. uplink-nocturine-chemistry-bottle-name = Nocturine Bottle uplink-nocturine-chemistry-bottle-desc = A chemical that makes it very hard for your target to stand up. diff --git a/Resources/Locale/ru-RU/administration/admin-verbs.ftl b/Resources/Locale/ru-RU/administration/admin-verbs.ftl index dab9cd87877f78..309cca92715efd 100644 --- a/Resources/Locale/ru-RU/administration/admin-verbs.ftl +++ b/Resources/Locale/ru-RU/administration/admin-verbs.ftl @@ -7,3 +7,5 @@ admin-verbs-teleport-to = Телепортироваться к admin-verbs-teleport-here = Телепортировать сюда admin-verbs-freeze = Заморозить admin-verbs-unfreeze = Разморозить +toolshed-verb-mark = Отметить +toolshed-verb-mark-description = Помещает данную сущность в переменную $marked, список сущностей, заменяя её предыдущее значение. diff --git a/Resources/Locale/ru-RU/chemistry/components/solution-scanner-component.ftl b/Resources/Locale/ru-RU/chemistry/components/solution-scanner-component.ftl index da4dce311ad283..169aa7cc08db3a 100644 --- a/Resources/Locale/ru-RU/chemistry/components/solution-scanner-component.ftl +++ b/Resources/Locale/ru-RU/chemistry/components/solution-scanner-component.ftl @@ -1,5 +1,5 @@ -scannable-solution-verb-text = Solution -scannable-solution-verb-message = Examine the chemical composition. -scannable-solution-main-text = It contains the following chemicals: -scannable-solution-empty-container = It contains no chemicals. -scannable-solution-chemical = - { $amount }u [color={ $color }]{ $type }[/color] +scannable-solution-verb-text = Раствор +scannable-solution-verb-message = Изучить химический состав. +scannable-solution-main-text = Имеет следующие реагенты: +scannable-solution-empty-container = Не содержит реагентов. +scannable-solution-chemical = - [color={ $color }]{ $type }[/color]: { $amount }ед. diff --git a/Resources/Locale/ru-RU/commands/toolshed-commands.ftl b/Resources/Locale/ru-RU/commands/toolshed-commands.ftl new file mode 100644 index 00000000000000..9e6603e8d1f9a8 --- /dev/null +++ b/Resources/Locale/ru-RU/commands/toolshed-commands.ftl @@ -0,0 +1,29 @@ +command-description-visualize = Takes the input list of entities and puts them into a UI window for easy browsing. +command-description-runverbas = Runs a verb over the input entities with the given user. +command-description-acmd-perms = Returns the admin permissions of the given command, if any. +command-description-acmd-caninvoke = Check if the given player can invoke the given command. +command-description-jobs-jobs = Returns all jobs on a station. +command-description-jobs-job = Returns a given job on a station. +command-description-jobs-isinfinite = Returns true if the input job is infinite, otherwise false. +command-description-jobs-adjust = Adjusts the number of slots for the given job. +command-description-jobs-set = Sets the number of slots for the given job. +command-description-jobs-amount = Returns the number of slots for the given job. +command-description-stations-list = Returns a list of all stations. +command-description-stations-get = Gets the active station, if and only if there is only one. +command-description-stations-getowningstation = Gets the station that a given entity is "owned by" (within) +command-description-stations-grids = Returns all grids associated with the input station. +command-description-stations-config = Returns the config associated with the input station, if any. +command-description-stations-addgrid = Adds a grid to the given station. +command-description-stations-rmgrid = Removes a grid from the given station. +command-description-stations-rename = Renames the given station. +command-description-stations-largestgrid = Returns the largest grid the given station has, if any. +command-description-admins-active = Returns a list of active admins. +command-description-admins-all = Returns a list of ALL admins, including deadmined ones. +command-description-marked = Returns the value of $marked as a List. +command-description-rejuvenate = Rejuvenates the given entities, restoring them to full health, clearing status effects, etc. +command-description-tag-list = Lists tags on the given entities. +command-description-tag-add = Adds a tag to the given entities. +command-description-tag-rm = Removes a tag from the given entities. +command-description-tag-addmany = Adds a list of tags to the given entities. +command-description-tag-rmmany = Removes a list of tags from the given entities. +command-description-solution-get = Returns a solution stored in an entity's solution container. diff --git a/Resources/Locale/ru-RU/components/storage-component.ftl b/Resources/Locale/ru-RU/components/storage-component.ftl index 21e29b0fe6b78f..2562f0dcc022a4 100644 --- a/Resources/Locale/ru-RU/components/storage-component.ftl +++ b/Resources/Locale/ru-RU/components/storage-component.ftl @@ -3,7 +3,7 @@ comp-storage-cant-insert = Невозможно поместить. comp-storage-insufficient-capacity = Недостаточная вместимость. comp-storage-invalid-container = Неправильный контейнер для этого предмета. comp-storage-anchored-failure = Невозможно поместить закрепленный предмет. -comp-storage-cant-drop = Вы не можете отпустить { entity }! +comp-storage-cant-drop = Вы не можете отпустить { $entity }! comp-storage-window-title = Предмет хранилище comp-storage-window-volume = Занято: { $usedVolume }/{ $maxVolume }, предметов: { $itemCount } comp-storage-window-volume-unlimited = Предметов: { $itemCount } diff --git a/Resources/Locale/ru-RU/research/technologies.ftl b/Resources/Locale/ru-RU/research/technologies.ftl index 58c7382605b6fe..4a68b4d50a233a 100644 --- a/Resources/Locale/ru-RU/research/technologies.ftl +++ b/Resources/Locale/ru-RU/research/technologies.ftl @@ -5,6 +5,7 @@ research-discipline-arsenal = Оружейная research-discipline-experimental = Экспериментальная research-discipline-civilian-services = Сервисная research-technology-salvage-weapons = Оружия утилизаторов +research-technology-salvage-cutters = Ионная экипировка research-technology-salvage-equipment = Экипировка для утилизаторов research-technology-advanced-powercells = Продвинутые батареи research-technology-compact-power = Компактное энергопитание diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/catalog/fills/crates/salvage.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/catalog/fills/crates/salvage.ftl index b95736478bacf4..79b58d0b9873b6 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/catalog/fills/crates/salvage.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/catalog/fills/crates/salvage.ftl @@ -13,9 +13,6 @@ ent-CratePartsT3T4 = ящик деталей 3/4 уровня ent-CratePartsT4 = ящик деталей 4 уровня .desc = Содержит 5 случайных деталей 4 уровня для улучшения оборудования. .suffix = { "" } -ent-CrateMinerEquipment = ящик шахтерских инструментов - .desc = Содержит набор инструментов для двух шахтеров - .suffix = Заполненный -ent-CrateMinerAdvancedEquipment = ящик продвинутых шахтерских инструментов - .desc = Содержит набор продвинутых инструментов для двух шахтеров +ent-CrateAdvSalvageEquipment = ящик продвинутых шахтерских инструментов + .desc = Содержит в себе один продвинутый набор шахтёрских инструментов. .suffix = Заполненный \ No newline at end of file diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/tools/lantern.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/tools/lantern.ftl index afaae8f14d4d64..00a7a05faff3b1 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/tools/lantern.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/tools/lantern.ftl @@ -1,6 +1,6 @@ -ent-lantern = светильник +ent-Lantern = светильник .desc = Благословенный свет указывает путь. .suffix = { "" } -ent-lanternextrabright = сверхъяркий светильник - .desc = Ослепительно. - .suffix = { "" } +ent-LanternFlash = { ent-Lantern } + .suffix = Вспышка + .desc = { ent-Lantern.desc } diff --git a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/wallmounts/signs/posters.ftl b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/wallmounts/signs/posters.ftl index 6671bb59b8b480..5c25986809dfd8 100644 --- a/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/wallmounts/signs/posters.ftl +++ b/Resources/Locale/ru-RU/ss14-ru/prototypes/entities/structures/wallmounts/signs/posters.ftl @@ -166,6 +166,24 @@ ent-PosterContrabandRise = Восстань ent-PosterContrabandRevolt = Бунт .desc = Революционная пропаганда, выпущенная Синдикатом. .suffix = { "" } +ent-PosterContrabandMoth = Синди-Моль - Ядерная операция + .desc = Плакат, созданный по заказу Синдиката, на котором Синди-Моль™ призывает читателя оставить диск ядерной аутентификации незащищённым. "Мир никогда не был вариантом!" Ни один хороший сотрудник не станет слушать эту чушь. + .suffix = { "" } +ent-PosterContrabandCybersun600 = Cybersun: 600 лет + .desc = Художественный плакат, посвященный 600-летию непрерывной деятельности компании Cybersun Industries. + .suffix = { "" } +ent-PosterContrabandDonk = DONK CO. ФИРМЕННАЯ РАЗОГРЕВАЕМАЯ ЕДА + .desc = DONK CO. ФИРМЕННАЯ РАЗОГРЕВАЕМАЯ ЕДА: СДЕЛАНО ГОЛОДАЮЩИМИ СТУДЕНТАМИ КОЛЛЕДЖА, ДЛЯ ГОЛОДАЮЩИХ СТУДЕНТОВ КОЛЛЕДЖА. + .suffix = { "" } +ent-PosterContrabandEnlistGorlex = Вступай! + .desc = Вступайте в ряды мародёров Горлекса уже сегодня! Повидайте галактику, убивайте корпорации, получайте деньги! + .suffix = { "" } +ent-PosterContrabandInterdyne = Interdyne Pharmaceutics: Для здоровья человечества + .desc = Реклама клиник GeneClean компании Interdyne Pharmaceutics. 'Станьте хозяином своего тела!' + .suffix = { "" } +ent-PosterContrabandWaffleCorp = Make Mine a Waffle Corp: Отличные винтовки, выгодные цены + .desc = Старая реклама винтовок Waffle Corp. 'Лучшее оружие, низкие цены!' + .suffix = { "" } ent-PosterContrabandSOPIsShit = СРП дерьмо .desc = Постер призывающий перестать пользоваться 'стандартными рабочими процедурами', поскольу это неэффективно и скучно. .suffix = { "" } @@ -295,6 +313,33 @@ ent-PosterLegitMime = Мим Постмодерн ent-PosterLegitCarpMount = Настенный Карп .desc = Карпе диэм! .suffix = { "" } +ent-PosterLegitSafetyMothDelam = Предосторожная Моль - меры предосторожности при расслаивании + .desc = Этот информационный плакат использует Предосторожную Моль™ , чтобы рассказать читателям о необходимости прятаться в шкафах, когда кристалл суперматерии расслаивается, во избежание галлюцинаций. Лучшей стратегией может быть эвакуация. + .suffix = { "" } +ent-PosterLegitSafetyMothEpi = Предосторожная Моль - Эпинефрин + .desc = Этот информационный плакат использует Предосторожную Моль™ для информирования читателей о необходимости помочь раненым/погибшим членам экипажа с помощью инъекторов с эпинефрином. "Предотвратите гниение органов с помощью одного простого приёма!" + .suffix = { "" } +ent-PosterLegitSafetyMothHardhat = Предосторожная Моль - Каски + .desc = Этот информационный плакат использует Предосторожную Моль™, чтобы рассказать читателям о необходимости ношения касок в зонах повышенной опасности. "Это как лампа для головы!" + .suffix = { "" } +ent-PosterLegitSafetyMothMeth = Предосторожная Моль - Метамфетамин + .desc = Этот информационный плакат использует Предосторожную Моль™, чтобы предупредить читателей о необходимости получения разрешения ГВ перед приготовлением метамфетамина. "Держитесь ближе к заданной температуре и никогда не превышайте ее!" ...Вы никогда не должны готовить это. + .suffix = { "" } +ent-PosterLegitSafetyMothPiping = Предосторожная Моль - Трубопровод + .desc = Этот информационный плакат использует Предосторожную Моль™, чтобы рассказать атмосферным техникам о правильных типах используемых трубопроводов. "Трубы, а не насосы! Правильное размещение труб предотвращает низкую производительность!" + .suffix = { "" } +ent-PosterLegitVacation = Корпоративные льготы Nanotrasen: Отпуск + .desc = На этом информационном плакате представлена информация о некоторых призах, которые можно получить в рамках программы Корпоративные льготы NT, включая двухнедельный отпуск на двоих на курорте Идиллус. + .suffix = { "" } +ent-PosterLegitPeriodicTable = Периодическая таблица элементов + .desc = Периодическая таблица элементов, от Водорода до Оганессона и всего, что между ними. + .suffix = { "" } +ent-PosterLegitRenault = Плакат Алисы + .desc = Яп. + .suffix = { "" } +ent-PosterLegitNTTGC = Карты Тактической Игры Nanotrasen + .desc = Реклама карт КТИ от Nanotrasen: ПОКУПАЙТЕ БОЛЬШЕ КАРТ. + .suffix = { "" } ent-PosterMapBagel = карта Bagel .desc = Карта станции Bagel. .suffix = { "" } diff --git a/Resources/Maps/aspid.yml b/Resources/Maps/aspid.yml index 687ab004914cb2..4156a5d40ed60f 100644 --- a/Resources/Maps/aspid.yml +++ b/Resources/Maps/aspid.yml @@ -8577,7 +8577,23 @@ entities: - type: RadiationGridResistance - id: Aspid type: BecomesStation - - joints: {} + - joints: + docking21482: !type:WeldJoint + bodyB: 8756 + bodyA: 1 + id: docking21482 + localAnchorB: -5,-1.5 + localAnchorA: 38,1.5 + damping: 791.6185 + stiffness: 7105.552 + docking21483: !type:WeldJoint + bodyB: 8756 + bodyA: 1 + id: docking21483 + localAnchorB: -5,0.5 + localAnchorA: 38,3.5 + damping: 791.6185 + stiffness: 7105.552 type: Joint - type: SpreaderGrid - type: GridPathfinding @@ -8756,7 +8772,23 @@ entities: type: GridAtmosphere - type: GasTileOverlay - type: RadiationGridResistance - - joints: {} + - joints: + docking21482: !type:WeldJoint + bodyB: 8756 + bodyA: 1 + id: docking21482 + localAnchorB: -5,-1.5 + localAnchorA: 38,1.5 + damping: 791.6185 + stiffness: 7105.552 + docking21483: !type:WeldJoint + bodyB: 8756 + bodyA: 1 + id: docking21483 + localAnchorB: -5,0.5 + localAnchorA: 38,3.5 + damping: 791.6185 + stiffness: 7105.552 type: Joint - type: SpreaderGrid - type: GridPathfinding @@ -14019,7 +14051,7 @@ entities: - pos: -11.5,-26.5 parent: 1 type: Transform - - SecondsUntilStateChange: -60896.523 + - SecondsUntilStateChange: -61044.906 state: Closing type: Door - links: @@ -14030,7 +14062,7 @@ entities: - pos: -11.5,-27.5 parent: 1 type: Transform - - SecondsUntilStateChange: -60896.523 + - SecondsUntilStateChange: -61044.906 state: Closing type: Door - links: @@ -14041,7 +14073,7 @@ entities: - pos: -11.5,-28.5 parent: 1 type: Transform - - SecondsUntilStateChange: -60896.523 + - SecondsUntilStateChange: -61044.906 state: Closing type: Door - links: @@ -14052,7 +14084,7 @@ entities: - pos: -11.5,-29.5 parent: 1 type: Transform - - SecondsUntilStateChange: -60896.523 + - SecondsUntilStateChange: -61044.906 state: Closing type: Door - links: @@ -14095,7 +14127,7 @@ entities: - pos: 19.5,-38.5 parent: 1 type: Transform - - SecondsUntilStateChange: -59889.773 + - SecondsUntilStateChange: -60038.156 state: Closing type: Door - links: @@ -14106,7 +14138,7 @@ entities: - pos: 14.5,-23.5 parent: 1 type: Transform - - SecondsUntilStateChange: -59912.445 + - SecondsUntilStateChange: -60060.83 state: Closing type: Door - links: @@ -91317,7 +91349,7 @@ entities: - pos: 3.5,27.5 parent: 1 type: Transform - - SecondsUntilStateChange: -564121.7 + - SecondsUntilStateChange: -564270.06 state: Closing type: Door - uid: 4073 @@ -91373,7 +91405,7 @@ entities: pos: 11.5,46.5 parent: 1 type: Transform - - SecondsUntilStateChange: -478273.66 + - SecondsUntilStateChange: -478422.03 state: Closing type: Door - uid: 8393 @@ -93635,6 +93667,28 @@ entities: - pos: 32.5,23.5 parent: 1 type: Transform +- proto: MaintenancePlantSpawner + entities: + - uid: 8163 + components: + - pos: -27.5,53.5 + parent: 1 + type: Transform + - uid: 8164 + components: + - pos: 31.5,52.5 + parent: 1 + type: Transform + - uid: 8165 + components: + - pos: 18.5,21.5 + parent: 1 + type: Transform + - uid: 8166 + components: + - pos: -15.5,-31.5 + parent: 1 + type: Transform - proto: MaintenanceToolSpawner entities: - uid: 7659 diff --git a/Resources/Maps/bagel.yml b/Resources/Maps/bagel.yml index 9e324bb127fb28..a48f06b50f8a98 100644 --- a/Resources/Maps/bagel.yml +++ b/Resources/Maps/bagel.yml @@ -370,80 +370,80 @@ entities: color: '#FFFFFFFF' id: Arrows decals: - 913: 54,25 - 914: 52,25 - 915: 46,25 - 916: 44,25 - 1023: -51,14 - 2920: 4,-39 - 3386: 53,14 - 3451: 5,-35 + 894: 54,25 + 895: 52,25 + 896: 46,25 + 897: 44,25 + 1004: -51,14 + 2900: 4,-39 + 3366: 53,14 + 3431: 5,-35 - node: angle: -1.5707963267948966 rad color: '#FFFFFFFF' id: Arrows decals: - 465: -4,13 - 466: -4,14 - 467: -4,15 - 468: -4,16 - 666: 49,-1 - 809: 41,6 - 1156: -3,-64 - 1157: -3,-71 - 3268: -19,29 - 3270: -4,18 - 3271: -4,19 - 3540: -40,32 - 3541: -40,34 - 3542: -40,36 - 3543: -40,38 - 3544: -40,40 - 3545: -40,42 - 3546: -40,44 - 3548: -36,30 + 464: -4,13 + 465: -4,14 + 466: -4,15 + 467: -4,16 + 647: 49,-1 + 790: 41,6 + 1137: -3,-64 + 1138: -3,-71 + 3248: -19,29 + 3250: -4,18 + 3251: -4,19 + 3520: -40,32 + 3521: -40,34 + 3522: -40,36 + 3523: -40,38 + 3524: -40,40 + 3525: -40,42 + 3526: -40,44 + 3528: -36,30 - node: color: '#FFFFFFFF' id: Arrows decals: - 832: -30,36 - 1387: -56,1 - 1823: -9,-21 - 3269: -11,27 + 813: -30,36 + 1368: -56,1 + 1803: -9,-21 + 3249: -11,27 - node: angle: 1.5707963267948966 rad color: '#FFFFFFFF' id: Arrows decals: - 665: 49,3 - 858: -62,40 - 1158: 3,-71 - 1159: 3,-64 - 3547: -36,31 - 3560: -26,38 + 646: 49,3 + 839: -62,40 + 1139: 3,-71 + 1140: 3,-64 + 3527: -36,31 + 3540: -26,38 - node: color: '#FFFFFFFF' id: ArrowsGreyscale decals: - 678: 23,17 + 659: 23,17 - node: cleanable: True color: '#FFFFFFFF' id: ArrowsGreyscale decals: - 2951: 9,-41 + 2931: 9,-41 - node: cleanable: True color: '#8932B8FF' id: Blasto decals: - 2585: -46.09135,-29.907255 + 2565: -46.09135,-29.907255 - node: color: '#DE3A3A96' id: Bot decals: - 3549: -20,41 - 3552: -13,39 + 3529: -20,41 + 3532: -13,39 - node: color: '#FFFFFFFF' id: Bot @@ -453,1484 +453,1484 @@ entities: 165: 6,-26 202: -2,-45 203: 12,11 - 431: -37,1 - 473: -27,35 - 474: -28,35 - 475: -29,35 - 476: -29,36 - 477: -28,36 - 478: -27,36 - 606: -15,-10 - 607: -32,26 - 674: 22,18 - 675: 22,19 - 676: 20,18 - 677: 20,19 - 810: -9,-38 - 838: -31,34 - 839: -31,35 - 840: -105,17 - 841: -119,17 - 842: -98,17 - 910: 54,26 - 911: 52,26 - 912: 46,26 - 1024: 44,26 - 1154: -4,-69 - 1155: -17,-54 - 1180: -28,2 - 1181: -26,2 - 1338: -52,13 - 1339: -50,13 - 1348: -55,16 - 1349: -56,16 - 1381: -58,-4 - 1382: -57,-4 - 1383: -56,-4 - 1452: 54,8 - 1453: 53,8 - 1454: 52,8 - 1455: 54,10 - 1456: 53,10 - 1457: 52,10 - 1460: 54,12 - 1461: 53,12 - 1462: 52,12 - 1509: 6,-20 - 1627: 30,-23 - 1657: -48,16 - 1658: -47,17 - 1851: -25,-6 - 1960: -19,27 - 1978: -26,32 - 1979: -27,32 - 1980: -28,32 - 1981: -23,32 - 1982: -21,32 - 2114: -33,12 - 2115: -33,14 - 2118: -41,14 - 2134: -40,-6 - 2141: -41,-10 - 2159: -42,-8 - 2169: -57,7 - 2170: -57,14 - 2171: -44,-4 - 2231: -40,-20 - 2313: -11,32 - 2314: -13,32 - 2388: 3,11 - 2389: 3,15 - 2416: -5,21 - 2417: -5,20 - 2496: 17,28 - 2497: 47,14 - 2498: 47,-2 - 2499: 45,-9 - 2500: 19,-21 - 2516: 2,-1 - 2522: 3,-8 - 2526: -20,5 - 2527: -19,5 - 2531: -13,11 - 2540: -42,19 - 2541: -42,20 - 2542: 30,9 - 2543: 36,4 - 2698: 20,16 - 2699: 19,16 - 2934: 4,-35 - 2962: -31,-19 - 2963: -6,-27 - 2964: 3,-28 - 3011: 45,-27 - 3012: 37,-25 - 3013: 32,-21 - 3014: 50,-32 - 3062: 19,26 - 3097: 29,-27 - 3105: 45,10 - 3436: -25,32 - 3437: -29,32 - 3438: -30,32 - 3450: 6,-35 - 3460: 4,-38 - 3461: 6,-38 + 430: -37,1 + 472: -27,35 + 473: -28,35 + 474: -29,35 + 475: -29,36 + 476: -28,36 + 477: -27,36 + 587: -15,-10 + 588: -32,26 + 655: 22,18 + 656: 22,19 + 657: 20,18 + 658: 20,19 + 791: -9,-38 + 819: -31,34 + 820: -31,35 + 821: -105,17 + 822: -119,17 + 823: -98,17 + 891: 54,26 + 892: 52,26 + 893: 46,26 + 1005: 44,26 + 1135: -4,-69 + 1136: -17,-54 + 1161: -28,2 + 1162: -26,2 + 1319: -52,13 + 1320: -50,13 + 1329: -55,16 + 1330: -56,16 + 1362: -58,-4 + 1363: -57,-4 + 1364: -56,-4 + 1433: 54,8 + 1434: 53,8 + 1435: 52,8 + 1436: 54,10 + 1437: 53,10 + 1438: 52,10 + 1441: 54,12 + 1442: 53,12 + 1443: 52,12 + 1490: 6,-20 + 1608: 30,-23 + 1638: -48,16 + 1639: -47,17 + 1831: -25,-6 + 1940: -19,27 + 1958: -26,32 + 1959: -27,32 + 1960: -28,32 + 1961: -23,32 + 1962: -21,32 + 2094: -33,12 + 2095: -33,14 + 2098: -41,14 + 2114: -40,-6 + 2121: -41,-10 + 2139: -42,-8 + 2149: -57,7 + 2150: -57,14 + 2151: -44,-4 + 2211: -40,-20 + 2293: -11,32 + 2294: -13,32 + 2368: 3,11 + 2369: 3,15 + 2396: -5,21 + 2397: -5,20 + 2476: 17,28 + 2477: 47,14 + 2478: 47,-2 + 2479: 45,-9 + 2480: 19,-21 + 2496: 2,-1 + 2502: 3,-8 + 2506: -20,5 + 2507: -19,5 + 2511: -13,11 + 2520: -42,19 + 2521: -42,20 + 2522: 30,9 + 2523: 36,4 + 2678: 20,16 + 2679: 19,16 + 2914: 4,-35 + 2942: -31,-19 + 2943: -6,-27 + 2944: 3,-28 + 2991: 45,-27 + 2992: 37,-25 + 2993: 32,-21 + 2994: 50,-32 + 3042: 19,26 + 3077: 29,-27 + 3085: 45,10 + 3416: -25,32 + 3417: -29,32 + 3418: -30,32 + 3430: 6,-35 + 3440: 4,-38 + 3441: 6,-38 - node: color: '#52B4E996' id: BotGreyscale decals: - 3472: 49,-15 - 3550: -21,41 - 3551: -14,39 + 3452: 49,-15 + 3530: -21,41 + 3531: -14,39 - node: color: '#DE3A3AFF' id: BotLeft decals: - 2960: -33,-21 + 2940: -33,-21 - node: color: '#FFFFFFFF' id: BotLeft decals: - 1384: -52,-1 - 1385: -52,-2 - 1386: -52,-3 - 2133: -40,-5 - 2142: -43,-11 - 2185: -32,4 - 2426: 2,28 - 2427: 2,29 - 2428: 6,23 - 2429: 7,23 - 2430: 8,23 - 2932: 4,-37 - 3448: 6,-36 - 3556: -19,46 - 3557: -20,46 + 1365: -52,-1 + 1366: -52,-2 + 1367: -52,-3 + 2113: -40,-5 + 2122: -43,-11 + 2165: -32,4 + 2406: 2,28 + 2407: 2,29 + 2408: 6,23 + 2409: 7,23 + 2410: 8,23 + 2912: 4,-37 + 3428: 6,-36 + 3536: -19,46 + 3537: -20,46 - node: color: '#52B4E996' id: BotLeftGreyscale decals: - 3474: 49,-13 + 3454: 49,-13 - node: color: '#FFFFFFFF' id: BotLeftGreyscale decals: - 2562: 39,-6 + 2542: 39,-6 - node: color: '#DE3A3AFF' id: BotRight decals: - 2957: -35,-17 - 2958: -35,-18 - 2959: -35,-19 - 2961: -35,-20 + 2937: -35,-17 + 2938: -35,-18 + 2939: -35,-19 + 2941: -35,-20 - node: color: '#FFFFFFFF' id: BotRight decals: - 2184: -35,5 - 2412: -5,13 - 2413: -5,14 - 2414: -5,15 - 2415: -5,16 - 2418: -5,19 - 2419: -5,18 - 2420: 5,13 - 2933: 4,-36 - 3449: 6,-37 - 3558: -15,46 - 3559: -14,46 + 2164: -35,5 + 2392: -5,13 + 2393: -5,14 + 2394: -5,15 + 2395: -5,16 + 2398: -5,19 + 2399: -5,18 + 2400: 5,13 + 2913: 4,-36 + 3429: 6,-37 + 3538: -15,46 + 3539: -14,46 - node: color: '#52B4E996' id: BotRightGreyscale decals: - 3473: 47,-13 + 3453: 47,-13 - node: color: '#FF8FC9FF' id: BotRightGreyscale decals: - 2226: -45,7 + 2206: -45,7 - node: color: '#79150096' id: Box decals: - 2050: -24,-12 - 2051: -24,-13 + 2030: -24,-12 + 2031: -24,-13 - node: color: '#9FED5896' id: Box decals: - 2049: -30,-8 + 2029: -30,-8 - node: color: '#EFB341FF' id: Box decals: - 2047: -30,-13 + 2027: -30,-13 - node: color: '#FFFFFFFF' id: Box decals: - 1732: 53,24 - 1733: 45,24 - 1734: 38,6 - 1735: 38,10 - 2186: -26,0 - 2187: -28,0 + 1713: 53,24 + 1714: 45,24 + 1715: 38,6 + 1716: 38,10 + 2166: -26,0 + 2167: -28,0 - node: color: '#52B4E996' id: BoxGreyscale decals: - 2048: -30,-12 + 2028: -30,-12 - node: color: '#DE3A3A96' id: BoxGreyscale decals: - 1821: -9,-21 + 1801: -9,-21 - node: color: '#FFFFFFFF' id: BoxGreyscale decals: - 3554: -24,45 - 3555: -23,46 + 3534: -24,45 + 3535: -23,46 - node: color: '#FFFFFFFF' id: BrickTileDarkBox decals: - 1388: -53,-2 - 1389: -55,-2 - 1390: -57,-2 - 3475: -49,-7 - 3476: -49,-5 - 3477: -49,-3 - 3478: -49,-1 - 3479: -49,3 - 3480: -51,3 - 3481: -53,3 - 3482: -55,3 - 3483: -47,12 - 3484: -49,12 - 3485: -51,12 + 1369: -53,-2 + 1370: -55,-2 + 1371: -57,-2 + 3455: -49,-7 + 3456: -49,-5 + 3457: -49,-3 + 3458: -49,-1 + 3459: -49,3 + 3460: -51,3 + 3461: -53,3 + 3462: -55,3 + 3463: -47,12 + 3464: -49,12 + 3465: -51,12 - node: color: '#FFFFFFFF' id: BrickTileDarkCornerNe decals: - 2528: -13,13 - 2537: -19,18 - 3217: 25,1 + 2508: -13,13 + 2517: -19,18 + 3197: 25,1 - node: color: '#FFFFFFFF' id: BrickTileDarkCornerNw decals: - 2534: -21,18 - 3218: 21,1 + 2514: -21,18 + 3198: 21,1 - node: color: '#FFFFFFFF' id: BrickTileDarkCornerSe decals: - 2529: -13,11 - 2535: -19,17 - 3153: -110,9 - 3164: -115,12 - 3531: 37,17 + 2509: -13,11 + 2515: -19,17 + 3133: -110,9 + 3144: -115,12 + 3511: 37,17 - node: color: '#FFFFFFFF' id: BrickTileDarkCornerSw decals: - 2536: -21,17 - 3150: -114,9 - 3169: -109,12 - 3530: 35,17 + 2516: -21,17 + 3130: -114,9 + 3149: -109,12 + 3510: 35,17 - node: color: '#FFFFFFFF' id: BrickTileDarkEndN decals: - 3221: 23,2 + 3201: 23,2 - node: color: '#FFFFFFFF' id: BrickTileDarkEndS decals: - 3215: 21,0 - 3216: 25,0 - 3222: 23,-1 + 3195: 21,0 + 3196: 25,0 + 3202: 23,-1 - node: color: '#FFFFFFFF' id: BrickTileDarkInnerNe decals: - 2532: -14,13 - 3161: -114,9 - 3232: 23,1 + 2512: -14,13 + 3141: -114,9 + 3212: 23,1 - node: color: '#FFFFFFFF' id: BrickTileDarkInnerNw decals: - 3160: -110,9 - 3233: 23,1 + 3140: -110,9 + 3213: 23,1 - node: color: '#FFFFFFFF' id: BrickTileDarkInnerSe decals: - 2533: -14,11 - 3220: 21,1 - 3231: 23,1 + 2513: -14,11 + 3200: 21,1 + 3211: 23,1 - node: color: '#FFFFFFFF' id: BrickTileDarkInnerSw decals: - 3219: 25,1 - 3230: 23,1 + 3199: 25,1 + 3210: 23,1 - node: color: '#FFFFFFFF' id: BrickTileDarkLineE decals: - 2530: -13,12 - 3156: -110,10 - 3157: -114,10 - 3171: -115,13 - 3223: 23,0 - 3532: 37,18 + 2510: -13,12 + 3136: -110,10 + 3137: -114,10 + 3151: -115,13 + 3203: 23,0 + 3512: 37,18 - node: color: '#FFFFFFFF' id: BrickTileDarkLineN decals: - 2539: -20,18 - 3158: -111,9 - 3159: -113,9 - 3162: -115,10 - 3163: -109,10 - 3165: -111,10 - 3166: -113,10 - 3228: 22,1 - 3229: 24,1 - 3405: 37,15 - 3406: 36,15 - 3407: 35,15 - 3408: 34,15 + 2519: -20,18 + 3138: -111,9 + 3139: -113,9 + 3142: -115,10 + 3143: -109,10 + 3145: -111,10 + 3146: -113,10 + 3208: 22,1 + 3209: 24,1 + 3385: 37,15 + 3386: 36,15 + 3387: 35,15 + 3388: 34,15 - node: color: '#FFFFFFFF' id: BrickTileDarkLineS decals: - 2538: -20,17 - 3151: -113,9 - 3152: -111,9 - 3167: -111,12 - 3168: -113,12 - 3226: 24,1 - 3227: 22,1 - 3529: 36,17 + 2518: -20,17 + 3131: -113,9 + 3132: -111,9 + 3147: -111,12 + 3148: -113,12 + 3206: 24,1 + 3207: 22,1 + 3509: 36,17 - node: color: '#FFFFFFFF' id: BrickTileDarkLineW decals: - 3154: -114,10 - 3155: -110,10 - 3170: -109,13 - 3224: 23,0 + 3134: -114,10 + 3135: -110,10 + 3150: -109,13 + 3204: 23,0 - node: color: '#FFFFFFFF' id: BrickTileSteelBox decals: - 1539: -38,24 - 1540: -36,24 - 1541: -34,24 - 1542: -26,24 - 1543: -28,24 - 1544: -30,24 - 3115: -24,24 - 3116: -22,24 - 3117: -20,24 - 3118: -18,24 - 3119: -16,24 - 3120: -40,24 + 1520: -38,24 + 1521: -36,24 + 1522: -34,24 + 1523: -26,24 + 1524: -28,24 + 1525: -30,24 + 3095: -24,24 + 3096: -22,24 + 3097: -20,24 + 3098: -18,24 + 3099: -16,24 + 3100: -40,24 - node: color: '#52B4E996' id: BrickTileSteelCornerNe decals: - 2040: -34,-10 - 2199: -20,-5 - 2200: -20,-5 - 3465: 49,-13 + 2020: -34,-10 + 2179: -20,-5 + 2180: -20,-5 + 3445: 49,-13 - node: color: '#9FED5896' id: BrickTileSteelCornerNe decals: - 1670: -3,-26 - 2037: -34,-7 + 1651: -3,-26 + 2017: -34,-7 - node: color: '#D381C996' id: BrickTileSteelCornerNe decals: - 1344: -45,14 - 2059: -50,5 - 2069: -45,0 - 2104: -42,-4 - 2151: -40,12 + 1325: -45,14 + 2039: -50,5 + 2049: -45,0 + 2084: -42,-4 + 2131: -40,12 - node: color: '#DE3A3A96' id: BrickTileSteelCornerNe decals: - 1877: -19,-16 - 2027: -19,-10 - 2028: -19,-13 - 2174: -31,5 - 2895: -8,-45 + 1857: -19,-16 + 2007: -19,-10 + 2008: -19,-13 + 2154: -31,5 + 2875: -8,-45 - node: color: '#52B4E996' id: BrickTileSteelCornerNw decals: - 2039: -35,-10 - 2201: -19,-5 - 2202: -19,-5 - 3464: 47,-13 + 2019: -35,-10 + 2181: -19,-5 + 2182: -19,-5 + 3444: 47,-13 - node: color: '#9FED5896' id: BrickTileSteelCornerNw decals: - 1672: -5,-26 - 1673: -8,-27 - 2038: -35,-7 + 1653: -5,-26 + 1654: -8,-27 + 2018: -35,-7 - node: color: '#D381C996' id: BrickTileSteelCornerNw decals: - 1245: -52,5 - 2100: -46,-4 - 2152: -43,12 + 1226: -52,5 + 2080: -46,-4 + 2132: -43,12 - node: color: '#DE3A3A96' id: BrickTileSteelCornerNw decals: - 1878: -21,-16 - 2029: -20,-10 - 2030: -20,-13 - 2175: -35,5 - 2896: -9,-45 + 1858: -21,-16 + 2009: -20,-10 + 2010: -20,-13 + 2155: -35,5 + 2876: -9,-45 - node: color: '#52B4E996' id: BrickTileSteelCornerSe decals: - 2042: -34,-11 - 2205: -20,-4 - 2206: -20,-4 - 3466: 49,-15 + 2022: -34,-11 + 2185: -20,-4 + 2186: -20,-4 + 3446: 49,-15 - node: color: '#9FED5896' id: BrickTileSteelCornerSe decals: - 2035: -34,-8 + 2015: -34,-8 - node: color: '#D381C996' id: BrickTileSteelCornerSe decals: - 1368: -52,-7 - 2070: -45,-2 - 2079: -48,-9 - 2107: -42,-9 - 2154: -40,11 - 2173: -44,-11 + 1349: -52,-7 + 2050: -45,-2 + 2059: -48,-9 + 2087: -42,-9 + 2134: -40,11 + 2153: -44,-11 - node: color: '#DE3A3A96' id: BrickTileSteelCornerSe decals: - 1880: -19,-17 - 2033: -19,-14 - 2034: -19,-11 - 2177: -31,4 + 1860: -19,-17 + 2013: -19,-14 + 2014: -19,-11 + 2157: -31,4 - node: color: '#52B4E996' id: BrickTileSteelCornerSw decals: - 2041: -35,-11 - 2203: -19,-4 - 2204: -19,-4 - 3463: 47,-15 + 2021: -35,-11 + 2183: -19,-4 + 2184: -19,-4 + 3443: 47,-15 - node: color: '#9FED5896' id: BrickTileSteelCornerSw decals: - 2036: -35,-8 + 2016: -35,-8 - node: color: '#D381C996' id: BrickTileSteelCornerSw decals: - 1358: -58,-3 - 1365: -55,-7 - 1394: -60,1 - 2080: -50,-9 - 2094: -46,-11 - 2153: -43,11 + 1339: -58,-3 + 1346: -55,-7 + 1375: -60,1 + 2060: -50,-9 + 2074: -46,-11 + 2133: -43,11 - node: color: '#DE3A3A96' id: BrickTileSteelCornerSw decals: - 1879: -21,-17 - 2031: -20,-14 - 2032: -20,-11 - 2176: -35,4 + 1859: -21,-17 + 2011: -20,-14 + 2012: -20,-11 + 2156: -35,4 - node: color: '#D381C996' id: BrickTileSteelInnerNe decals: - 1020: -51,14 - 2060: -50,4 - 2066: -48,0 + 1001: -51,14 + 2040: -50,4 + 2046: -48,0 - node: color: '#9FED5896' id: BrickTileSteelInnerNw decals: - 1674: -5,-27 + 1655: -5,-27 - node: color: '#D381C996' id: BrickTileSteelInnerNw decals: - 1019: -51,14 - 1246: -52,4 + 1000: -51,14 + 1227: -52,4 - node: color: '#D381C996' id: BrickTileSteelInnerSe decals: - 2065: -48,2 - 2073: -48,-2 - 2109: -44,-9 + 2045: -48,2 + 2053: -48,-2 + 2089: -44,-9 - node: color: '#D381C996' id: BrickTileSteelInnerSw decals: - 1361: -55,-3 + 1342: -55,-3 - node: color: '#52B4E996' id: BrickTileSteelLineE decals: - 3467: 49,-14 + 3447: 49,-14 - node: color: '#9FED5896' id: BrickTileSteelLineE decals: - 1667: -3,-29 - 1668: -3,-28 - 1669: -3,-27 + 1648: -3,-29 + 1649: -3,-28 + 1650: -3,-27 - node: color: '#D381C996' id: BrickTileSteelLineE decals: - 1369: -52,-6 - 1370: -52,-5 - 1371: -52,-4 - 1372: -52,-3 - 1373: -52,-2 - 1380: -52,-1 - 2074: -48,-4 - 2075: -48,-3 - 2076: -48,-5 - 2077: -48,-7 - 2078: -48,-8 - 2105: -42,-7 - 2106: -42,-8 - 2110: -44,-10 + 1350: -52,-6 + 1351: -52,-5 + 1352: -52,-4 + 1353: -52,-3 + 1354: -52,-2 + 1361: -52,-1 + 2054: -48,-4 + 2055: -48,-3 + 2056: -48,-5 + 2057: -48,-7 + 2058: -48,-8 + 2085: -42,-7 + 2086: -42,-8 + 2090: -44,-10 - node: color: '#DE3A3A96' id: BrickTileSteelLineE decals: - 2897: -8,-46 + 2877: -8,-46 - node: color: '#52B4E996' id: BrickTileSteelLineN decals: - 3468: 48,-13 + 3448: 48,-13 - node: color: '#9FED5896' id: BrickTileSteelLineN decals: - 1671: -4,-26 - 1675: -6,-27 - 1676: -7,-27 + 1652: -4,-26 + 1656: -6,-27 + 1657: -7,-27 - node: color: '#D381C996' id: BrickTileSteelLineN decals: - 1017: -50,14 - 1018: -52,14 - 1247: -53,4 - 1340: -49,14 - 1341: -48,14 - 1342: -47,14 - 1374: -55,-1 - 1375: -57,-1 - 2061: -49,4 - 2062: -48,4 - 2063: -47,4 - 2067: -47,0 - 2068: -46,0 - 2101: -45,-4 - 2102: -44,-4 - 2103: -43,-4 + 998: -50,14 + 999: -52,14 + 1228: -53,4 + 1321: -49,14 + 1322: -48,14 + 1323: -47,14 + 1355: -55,-1 + 1356: -57,-1 + 2041: -49,4 + 2042: -48,4 + 2043: -47,4 + 2047: -47,0 + 2048: -46,0 + 2081: -45,-4 + 2082: -44,-4 + 2083: -43,-4 - node: color: '#DE3A3A96' id: BrickTileSteelLineN decals: - 1802: -8,-18 - 1803: -9,-18 - 1810: -6,-18 - 1881: -20,-16 - 2178: -32,5 - 2179: -33,5 - 2180: -34,5 + 1782: -8,-18 + 1783: -9,-18 + 1790: -6,-18 + 1861: -20,-16 + 2158: -32,5 + 2159: -33,5 + 2160: -34,5 - node: color: '#52B4E996' id: BrickTileSteelLineS decals: - 3469: 48,-15 + 3449: 48,-15 - node: color: '#D381C996' id: BrickTileSteelLineS decals: - 1011: -46,11 - 1012: -47,11 - 1013: -48,11 - 1014: -49,11 - 1015: -50,11 - 1016: -52,11 - 1353: -55,2 - 1359: -57,-3 - 1360: -56,-3 - 1366: -54,-7 - 1367: -53,-7 - 1393: -59,1 - 2064: -47,2 - 2071: -46,-2 - 2072: -47,-2 - 2108: -43,-9 - 2155: -41,11 - 2156: -42,11 - 2172: -45,-11 + 992: -46,11 + 993: -47,11 + 994: -48,11 + 995: -49,11 + 996: -50,11 + 997: -52,11 + 1334: -55,2 + 1340: -57,-3 + 1341: -56,-3 + 1347: -54,-7 + 1348: -53,-7 + 1374: -59,1 + 2044: -47,2 + 2051: -46,-2 + 2052: -47,-2 + 2088: -43,-9 + 2135: -41,11 + 2136: -42,11 + 2152: -45,-11 - node: color: '#DE3A3A96' id: BrickTileSteelLineS decals: - 1804: -6,-19 - 1805: -7,-19 - 1806: -8,-19 - 1882: -20,-17 - 2181: -32,4 - 2182: -34,4 + 1784: -6,-19 + 1785: -7,-19 + 1786: -8,-19 + 1862: -20,-17 + 2161: -32,4 + 2162: -34,4 - node: color: '#9FED5896' id: BrickTileSteelLineW decals: - 1665: -8,-29 - 1666: -8,-28 + 1646: -8,-29 + 1647: -8,-28 - node: color: '#D381C996' id: BrickTileSteelLineW decals: - 1362: -55,-4 - 1363: -55,-5 - 1364: -55,-6 - 1391: -58,-2 - 1395: -60,2 - 2081: -50,-8 - 2082: -50,-7 - 2083: -50,-6 - 2084: -50,-5 - 2085: -50,-4 - 2086: -50,-3 - 2087: -50,-2 - 2088: -50,-1 - 2089: -50,0 - 2095: -46,-10 - 2096: -46,-9 - 2097: -46,-8 - 2098: -46,-7 - 2099: -46,-5 - 2223: -45,7 - 2224: -45,8 - 2225: -45,9 + 1343: -55,-4 + 1344: -55,-5 + 1345: -55,-6 + 1372: -58,-2 + 1376: -60,2 + 2061: -50,-8 + 2062: -50,-7 + 2063: -50,-6 + 2064: -50,-5 + 2065: -50,-4 + 2066: -50,-3 + 2067: -50,-2 + 2068: -50,-1 + 2069: -50,0 + 2075: -46,-10 + 2076: -46,-9 + 2077: -46,-8 + 2078: -46,-7 + 2079: -46,-5 + 2203: -45,7 + 2204: -45,8 + 2205: -45,9 - node: color: '#DE3A3A96' id: BrickTileSteelLineW decals: - 2898: -9,-46 + 2878: -9,-46 - node: color: '#FFFFFFFF' id: BrickTileSteelLineW decals: - 922: 18,12 + 903: 18,12 - node: color: '#334E6DC8' id: BrickTileWhiteBox decals: - 3208: 21,-1 + 3188: 21,-1 - node: color: '#52B4E996' id: BrickTileWhiteBox decals: - 3212: 22,2 + 3192: 22,2 - node: color: '#9FED5896' id: BrickTileWhiteBox decals: - 3210: 22,0 + 3190: 22,0 - node: color: '#A4610696' id: BrickTileWhiteBox decals: - 3214: 25,2 + 3194: 25,2 - node: color: '#D381C996' id: BrickTileWhiteBox decals: - 3213: 21,2 + 3193: 21,2 - node: color: '#D4D4D496' id: BrickTileWhiteBox decals: - 3211: 24,0 + 3191: 24,0 - node: color: '#DE3A3A96' id: BrickTileWhiteBox decals: - 3209: 25,-1 + 3189: 25,-1 - node: color: '#EFB34196' id: BrickTileWhiteBox decals: - 3225: 24,2 + 3205: 24,2 - node: color: '#334E6DC8' id: BrickTileWhiteCornerNe decals: - 2904: 8,-28 - 2925: 5,-39 + 2884: 8,-28 + 2905: 5,-39 - node: color: '#79150096' id: BrickTileWhiteCornerNe decals: - 2216: -41,-20 + 2196: -41,-20 - node: color: '#B02E26FF' id: BrickTileWhiteCornerNe decals: - 2888: -4,-45 + 2868: -4,-45 - node: color: '#D381C996' id: BrickTileWhiteCornerNe decals: - 2168: -54,7 + 2148: -54,7 - node: color: '#DE3A3A96' id: BrickTileWhiteCornerNe decals: - 1858: -24,-19 + 1838: -24,-19 - node: color: '#EFB34141' id: BrickTileWhiteCornerNe decals: - 2043: -34,-13 + 2023: -34,-13 - node: color: '#EFD54193' id: BrickTileWhiteCornerNe decals: - 3494: 24,21 + 3474: 24,21 - node: color: '#EFD54196' id: BrickTileWhiteCornerNe decals: - 1950: -21,32 - 1972: -25,32 + 1930: -21,32 + 1952: -25,32 - node: color: '#EFD84196' id: BrickTileWhiteCornerNe decals: - 1989: -15,29 + 1969: -15,29 - node: color: '#FFFFFFFF' id: BrickTileWhiteCornerNe decals: - 869: 40,-28 - 930: 20,14 + 850: 40,-28 + 911: 20,14 - node: color: '#334E6DC8' id: BrickTileWhiteCornerNw decals: - 2905: 3,-28 - 2924: 3,-39 + 2885: 3,-28 + 2904: 3,-39 - node: color: '#79150096' id: BrickTileWhiteCornerNw decals: - 2217: -47,-20 + 2197: -47,-20 - node: color: '#B02E26FF' id: BrickTileWhiteCornerNw decals: - 2891: -6,-45 + 2871: -6,-45 - node: color: '#D381C996' id: BrickTileWhiteCornerNw decals: - 1346: -47,16 - 2167: -56,7 + 1327: -47,16 + 2147: -56,7 - node: color: '#DE3A3A96' id: BrickTileWhiteCornerNw decals: - 1857: -31,-19 + 1837: -31,-19 - node: color: '#EFB34141' id: BrickTileWhiteCornerNw decals: - 2044: -35,-13 + 2024: -35,-13 - node: color: '#EFCC4196' id: BrickTileWhiteCornerNw decals: - 2308: -13,32 + 2288: -13,32 - node: color: '#EFD54193' id: BrickTileWhiteCornerNw decals: - 3493: 19,21 + 3473: 19,21 - node: color: '#EFD54196' id: BrickTileWhiteCornerNw decals: - 1951: -23,32 - 1971: -31,32 + 1931: -23,32 + 1951: -31,32 - node: color: '#FFFFFFFF' id: BrickTileWhiteCornerNw decals: - 867: 38,-28 - 929: 19,14 - 2525: -4,-10 + 848: 38,-28 + 910: 19,14 + 2505: -4,-10 - node: color: '#334E6DC8' id: BrickTileWhiteCornerSe decals: - 2911: 5,-33 - 2917: 8,-30 - 2921: 5,-40 + 2891: 5,-33 + 2897: 8,-30 + 2901: 5,-40 - node: color: '#79150096' id: BrickTileWhiteCornerSe decals: - 2218: -41,-22 + 2198: -41,-22 - node: color: '#DE3A3A96' id: BrickTileWhiteCornerSe decals: - 1859: -24,-21 + 1839: -24,-21 - node: color: '#EFB34141' id: BrickTileWhiteCornerSe decals: - 2045: -34,-14 + 2025: -34,-14 - node: color: '#EFD54193' id: BrickTileWhiteCornerSe decals: - 3495: 24,17 + 3475: 24,17 - node: color: '#EFD54196' id: BrickTileWhiteCornerSe decals: - 1948: -15,27 + 1928: -15,27 - node: color: '#FFFFFFFF' id: BrickTileWhiteCornerSe decals: - 868: 40,-32 - 928: 20,11 + 849: 40,-32 + 909: 20,11 - node: color: '#334E6DC8' id: BrickTileWhiteCornerSw decals: - 2909: 3,-33 - 2923: 3,-40 + 2889: 3,-33 + 2903: 3,-40 - node: color: '#79150096' id: BrickTileWhiteCornerSw decals: - 2219: -47,-22 + 2199: -47,-22 - node: color: '#DE3A3A96' id: BrickTileWhiteCornerSw decals: - 1860: -31,-21 + 1840: -31,-21 - node: color: '#EFB34141' id: BrickTileWhiteCornerSw decals: - 2046: -35,-14 + 2026: -35,-14 - node: color: '#EFCC4196' id: BrickTileWhiteCornerSw decals: - 2304: -13,27 - 2324: -5,23 + 2284: -13,27 + 2304: -5,23 - node: color: '#EFD54193' id: BrickTileWhiteCornerSw decals: - 3496: 19,17 + 3476: 19,17 - node: color: '#EFD54196' id: BrickTileWhiteCornerSw decals: - 1953: -23,28 - 1957: -19,27 + 1933: -23,28 + 1937: -19,27 - node: color: '#FFFFFFFF' id: BrickTileWhiteCornerSw decals: - 866: 38,-32 - 927: 19,11 + 847: 38,-32 + 908: 19,11 - node: color: '#DE3A3A96' id: BrickTileWhiteInnerNe decals: - 1855: -29,-14 - 1898: -22,-23 + 1835: -29,-14 + 1878: -22,-23 - node: color: '#EFCC4196' id: BrickTileWhiteInnerNe decals: - 2302: -3,23 - 2447: -3,21 + 2282: -3,23 + 2427: -3,21 - node: color: '#EFD84196' id: BrickTileWhiteInnerNe decals: - 1995: -21,29 + 1975: -21,29 - node: color: '#52B4E996' id: BrickTileWhiteInnerNw decals: - 3026: 43,-17 + 3006: 43,-17 - node: color: '#DE3A3A96' id: BrickTileWhiteInnerNw decals: - 1846: -31,-6 - 1856: -25,-14 - 1896: -18,-23 - 1897: -17,-22 + 1826: -31,-6 + 1836: -25,-14 + 1876: -18,-23 + 1877: -17,-22 - node: color: '#EFCC4196' id: BrickTileWhiteInnerNw decals: - 2446: -4,21 + 2426: -4,21 - node: color: '#334E6DC8' id: BrickTileWhiteInnerSe decals: - 2914: 5,-30 + 2894: 5,-30 - node: color: '#DE3A3A96' id: BrickTileWhiteInnerSe decals: - 1850: -29,-6 - 2024: -31,-17 + 1830: -29,-6 + 2004: -31,-17 - node: color: '#EFCC4196' id: BrickTileWhiteInnerSe decals: - 2327: -3,23 - 2425: -3,27 + 2307: -3,23 + 2405: -3,27 - node: color: '#52B4E996' id: BrickTileWhiteInnerSw decals: - 3025: 43,-18 + 3005: 43,-18 - node: color: '#DE3A3A96' id: BrickTileWhiteInnerSw decals: - 1849: -25,-6 + 1829: -25,-6 - node: color: '#EFCC4196' id: BrickTileWhiteInnerSw decals: - 2321: -5,27 - 2326: -4,23 + 2301: -5,27 + 2306: -4,23 - node: color: '#EFD54196' id: BrickTileWhiteInnerSw decals: - 1956: -19,28 + 1936: -19,28 - node: color: '#334E6DC8' id: BrickTileWhiteLineE decals: - 2912: 5,-32 - 2913: 5,-31 - 2918: 8,-29 + 2892: 5,-32 + 2893: 5,-31 + 2898: 8,-29 - node: color: '#52B4E996' id: BrickTileWhiteLineE decals: - 3031: 45,-25 - 3032: 45,-24 - 3033: 45,-23 - 3034: 45,-21 - 3035: 45,-20 - 3038: 45,-19 - 3039: 45,-18 - 3040: 45,-17 + 3011: 45,-25 + 3012: 45,-24 + 3013: 45,-23 + 3014: 45,-21 + 3015: 45,-20 + 3018: 45,-19 + 3019: 45,-18 + 3020: 45,-17 - node: color: '#B02E26FF' id: BrickTileWhiteLineE decals: - 2889: -4,-46 + 2869: -4,-46 - node: color: '#DE3A3A96' id: BrickTileWhiteLineE decals: - 963: -33,-21 - 964: -33,-19 - 965: -33,-18 - 966: -33,-16 - 1831: -22,-6 - 1832: -22,-5 - 1871: -24,-20 + 944: -33,-21 + 945: -33,-19 + 946: -33,-18 + 947: -33,-16 + 1811: -22,-6 + 1812: -22,-5 + 1851: -24,-20 - node: color: '#EFCC4196' id: BrickTileWhiteLineE decals: - 2300: -3,24 - 2301: -3,25 + 2280: -3,24 + 2281: -3,25 - node: color: '#EFD54193' id: BrickTileWhiteLineE decals: - 3497: 24,18 - 3498: 24,19 - 3499: 24,20 + 3477: 24,18 + 3478: 24,19 + 3479: 24,20 - node: color: '#EFD54196' id: BrickTileWhiteLineE decals: - 1949: -21,31 + 1929: -21,31 - node: color: '#EFD84196' id: BrickTileWhiteLineE decals: - 1996: -21,30 + 1976: -21,30 - node: color: '#FFFFFFFF' id: BrickTileWhiteLineE decals: - 874: 40,-31 - 875: 40,-30 - 876: 40,-29 - 924: 20,12 - 925: 20,13 - 926: 20,14 + 855: 40,-31 + 856: 40,-30 + 857: 40,-29 + 905: 20,12 + 906: 20,13 + 907: 20,14 - node: color: '#334E6DC8' id: BrickTileWhiteLineN decals: - 2901: 4,-28 - 2902: 5,-28 - 2903: 6,-28 - 3457: 7,-38 - 3458: 5,-38 - 3459: 3,-38 + 2881: 4,-28 + 2882: 5,-28 + 2883: 6,-28 + 3437: 7,-38 + 3438: 5,-38 + 3439: 3,-38 - node: color: '#52B4E996' id: BrickTileWhiteLineN decals: - 3015: 38,-17 - 3016: 39,-17 - 3017: 40,-17 - 3018: 41,-17 - 3024: 37,-17 + 2995: 38,-17 + 2996: 39,-17 + 2997: 40,-17 + 2998: 41,-17 + 3004: 37,-17 - node: color: '#79150096' id: BrickTileWhiteLineN decals: - 2212: -42,-20 - 2213: -43,-20 - 2214: -45,-20 - 2215: -46,-20 + 2192: -42,-20 + 2193: -43,-20 + 2194: -45,-20 + 2195: -46,-20 - node: color: '#B02E26FF' id: BrickTileWhiteLineN decals: - 2892: -5,-45 + 2872: -5,-45 - node: color: '#D381C996' id: BrickTileWhiteLineN decals: - 1347: -46,16 - 2166: -55,7 + 1328: -46,16 + 2146: -55,7 - node: color: '#DE3A3A96' id: BrickTileWhiteLineN decals: - 1835: -23,-3 - 1836: -24,-3 - 1837: -25,-3 - 1838: -26,-3 - 1839: -28,-3 - 1840: -29,-3 - 1841: -30,-3 - 1852: -26,-14 - 1853: -27,-14 - 1854: -28,-14 - 1867: -25,-19 - 1868: -27,-19 - 1869: -29,-19 - 1870: -30,-19 - 1890: -19,-23 - 1891: -20,-23 - 1892: -21,-23 + 1815: -23,-3 + 1816: -24,-3 + 1817: -25,-3 + 1818: -26,-3 + 1819: -28,-3 + 1820: -29,-3 + 1821: -30,-3 + 1832: -26,-14 + 1833: -27,-14 + 1834: -28,-14 + 1847: -25,-19 + 1848: -27,-19 + 1849: -29,-19 + 1850: -30,-19 + 1870: -19,-23 + 1871: -20,-23 + 1872: -21,-23 - node: color: '#EFB3414A' id: BrickTileWhiteLineN decals: - 3247: 22,5 - 3248: 24,5 + 3227: 22,5 + 3228: 24,5 - node: color: '#EFCC4196' id: BrickTileWhiteLineN decals: - 2295: 2,23 - 2296: 1,23 - 2297: 0,23 - 2298: -1,23 - 2299: -2,23 - 2309: -11,32 + 2275: 2,23 + 2276: 1,23 + 2277: 0,23 + 2278: -1,23 + 2279: -2,23 + 2289: -11,32 - node: color: '#EFD54193' id: BrickTileWhiteLineN decals: - 3505: 20,21 - 3506: 21,21 - 3507: 22,21 - 3508: 23,21 + 3485: 20,21 + 3486: 21,21 + 3487: 22,21 + 3488: 23,21 - node: color: '#EFD54196' id: BrickTileWhiteLineN decals: - 1973: -26,32 - 1974: -27,32 - 1975: -28,32 - 1976: -29,32 - 1977: -30,32 + 1953: -26,32 + 1954: -27,32 + 1955: -28,32 + 1956: -29,32 + 1957: -30,32 - node: color: '#EFD5692E' id: BrickTileWhiteLineN decals: - 2730: 39,-35 - 2731: 40,-35 - 2732: 41,-35 + 2710: 39,-35 + 2711: 40,-35 + 2712: 41,-35 - node: color: '#EFD84196' id: BrickTileWhiteLineN decals: - 1990: -16,29 - 1991: -18,29 - 1992: -17,29 - 1993: -19,29 - 1994: -20,29 + 1970: -16,29 + 1971: -18,29 + 1972: -17,29 + 1973: -19,29 + 1974: -20,29 - node: color: '#FFFFFFFF' id: BrickTileWhiteLineN decals: - 877: 39,-28 + 858: 39,-28 - node: color: '#334E6DC8' id: BrickTileWhiteLineS decals: - 2507: 3,-1 - 2508: 2,-1 - 2509: 1,-1 - 2510: -1,-1 - 2511: -2,-1 - 2512: -3,-1 - 2910: 4,-33 - 2915: 6,-30 - 2916: 7,-30 - 2922: 4,-40 - 3454: 7,-35 - 3455: 5,-35 - 3456: 3,-35 + 2487: 3,-1 + 2488: 2,-1 + 2489: 1,-1 + 2490: -1,-1 + 2491: -2,-1 + 2492: -3,-1 + 2890: 4,-33 + 2895: 6,-30 + 2896: 7,-30 + 2902: 4,-40 + 3434: 7,-35 + 3435: 5,-35 + 3436: 3,-35 - node: color: '#52B4E996' id: BrickTileWhiteLineS decals: - 3019: 41,-18 - 3020: 40,-18 - 3021: 39,-18 - 3022: 38,-18 - 3023: 37,-18 + 2999: 41,-18 + 3000: 40,-18 + 3001: 39,-18 + 3002: 38,-18 + 3003: 37,-18 - node: color: '#79150096' id: BrickTileWhiteLineS decals: - 2207: -42,-22 - 2208: -43,-22 - 2209: -44,-22 - 2210: -45,-22 - 2211: -46,-22 + 2187: -42,-22 + 2188: -43,-22 + 2189: -44,-22 + 2190: -45,-22 + 2191: -46,-22 - node: color: '#D381C925' id: BrickTileWhiteLineS decals: - 918: -44,6 + 899: -44,6 - node: color: '#D381C996' id: BrickTileWhiteLineS decals: - 2162: -54,14 - 2163: -55,14 - 2164: -56,14 - 2165: -57,14 + 2142: -54,14 + 2143: -55,14 + 2144: -56,14 + 2145: -57,14 - node: color: '#DE3A3A96' id: BrickTileWhiteLineS decals: - 1847: -26,-6 - 1848: -28,-6 - 1861: -30,-21 - 1862: -29,-21 - 1863: -28,-21 - 1864: -27,-21 - 1865: -26,-21 - 1866: -25,-21 - 2018: -23,-17 - 2019: -24,-17 - 2020: -25,-17 - 2021: -27,-17 - 2022: -29,-17 - 2023: -30,-17 + 1827: -26,-6 + 1828: -28,-6 + 1841: -30,-21 + 1842: -29,-21 + 1843: -28,-21 + 1844: -27,-21 + 1845: -26,-21 + 1846: -25,-21 + 1998: -23,-17 + 1999: -24,-17 + 2000: -25,-17 + 2001: -27,-17 + 2002: -29,-17 + 2003: -30,-17 - node: color: '#EFCC4196' id: BrickTileWhiteLineS decals: - 2290: 2,23 - 2291: 1,23 - 2292: 0,23 - 2293: -1,23 - 2294: -2,23 - 2303: -11,27 - 2315: -10,27 - 2316: -9,27 - 2317: -8,27 - 2318: -7,27 - 2319: -6,27 - 2421: 1,27 - 2422: 0,27 - 2423: -1,27 - 2424: -2,27 + 2270: 2,23 + 2271: 1,23 + 2272: 0,23 + 2273: -1,23 + 2274: -2,23 + 2283: -11,27 + 2295: -10,27 + 2296: -9,27 + 2297: -8,27 + 2298: -7,27 + 2299: -6,27 + 2401: 1,27 + 2402: 0,27 + 2403: -1,27 + 2404: -2,27 - node: color: '#EFD54193' id: BrickTileWhiteLineS decals: - 3500: 22,17 - 3501: 21,17 - 3502: 20,17 + 3480: 22,17 + 3481: 21,17 + 3482: 20,17 - node: color: '#EFD54196' id: BrickTileWhiteLineS decals: - 1954: -21,28 - 1955: -20,28 - 1958: -17,27 - 1959: -16,27 + 1934: -21,28 + 1935: -20,28 + 1938: -17,27 + 1939: -16,27 - node: color: '#FFFFFFFF' id: BrickTileWhiteLineS decals: - 870: 39,-32 - 901: -3,-9 - 2523: -3,-11 - 2524: -4,-11 + 851: 39,-32 + 882: -3,-9 + 2503: -3,-11 + 2504: -4,-11 - node: color: '#334E6DC8' id: BrickTileWhiteLineW decals: - 2906: 3,-29 - 2907: 3,-31 - 2908: 3,-32 + 2886: 3,-29 + 2887: 3,-31 + 2888: 3,-32 - node: color: '#52B4E996' id: BrickTileWhiteLineW decals: - 3027: 43,-19 - 3028: 43,-20 - 3029: 43,-22 - 3030: 43,-23 - 3486: 43,-25 + 3007: 43,-19 + 3008: 43,-20 + 3009: 43,-22 + 3010: 43,-23 + 3466: 43,-25 - node: color: '#B02E26FF' id: BrickTileWhiteLineW decals: - 2890: -6,-46 + 2870: -6,-46 - node: color: '#D381C996' id: BrickTileWhiteLineW decals: - 1345: -47,15 + 1326: -47,15 - node: color: '#DE3A3A96' id: BrickTileWhiteLineW decals: - 957: -35,-21 - 958: -35,-20 - 959: -35,-19 - 960: -35,-18 - 961: -35,-17 - 962: -35,-16 - 1845: -31,-5 - 1893: -17,-21 - 1894: -17,-20 - 1895: -17,-19 - 2015: -21,-20 - 2016: -21,-22 + 938: -35,-21 + 939: -35,-20 + 940: -35,-19 + 941: -35,-18 + 942: -35,-17 + 943: -35,-16 + 1825: -31,-5 + 1873: -17,-21 + 1874: -17,-20 + 1875: -17,-19 + 1995: -21,-20 + 1996: -21,-22 - node: color: '#EFCC4196' id: BrickTileWhiteLineW decals: - 2305: -13,29 - 2306: -13,30 - 2307: -13,31 - 2320: -5,26 - 2322: -5,25 - 2323: -5,24 - 2325: -4,22 + 2285: -13,29 + 2286: -13,30 + 2287: -13,31 + 2300: -5,26 + 2302: -5,25 + 2303: -5,24 + 2305: -4,22 - node: color: '#EFD54193' id: BrickTileWhiteLineW decals: - 3503: 19,19 - 3504: 19,20 + 3483: 19,19 + 3484: 19,20 - node: color: '#EFD54196' id: BrickTileWhiteLineW decals: - 1952: -23,29 + 1932: -23,29 - node: color: '#FFFFFFFF' id: BrickTileWhiteLineW decals: - 871: 38,-31 - 872: 38,-30 - 873: 38,-29 - 923: 19,13 + 852: 38,-31 + 853: 38,-30 + 854: 38,-29 + 904: 19,13 - node: color: '#FFFFFFFF' id: Bushb1 decals: - 1061: -5.0759892,-67.511505 + 1042: -5.0759892,-67.511505 - node: color: '#FFFFFFFF' id: Bushb2 decals: - 588: -6.033051,-6.006569 + 569: -6.033051,-6.006569 - node: color: '#FFFFFFFF' id: Bushb3 decals: - 513: -8.918216,35.06559 - 1062: 5.128752,-67.43338 + 512: -8.918216,35.06559 + 1043: 5.128752,-67.43338 - node: color: '#FFFFFFFF' id: Bushe2 decals: - 1071: -4.964998,-66.74588 - 1687: -48.067986,5.0444627 + 1052: -4.964998,-66.74588 + 1668: -48.067986,5.0444627 - node: color: '#FFFFFFFF' id: Bushe3 decals: - 1037: 49.993763,22.959341 + 1018: 49.993763,22.959341 - node: color: '#FFFFFFFF' id: Bushe4 decals: - 1036: 48.900013,22.974966 - 1070: -5.339998,-66.605255 - 1072: 5.097502,-68.605255 - 1688: -46.83361,5.0444627 + 1017: 48.900013,22.974966 + 1051: -5.339998,-66.605255 + 1053: 5.097502,-68.605255 + 1669: -46.83361,5.0444627 - node: color: '#FFFFFFFF' id: Bushf1 decals: - 1685: -46.89611,5.0132127 + 1666: -46.89611,5.0132127 - node: color: '#FFFFFFFF' id: Bushf3 decals: - 1686: -48.14611,4.9663377 + 1667: -48.14611,4.9663377 - node: color: '#FFFFFFFF' id: Bushh1 decals: - 1475: 11.007317,-66.29063 + 1456: 11.007317,-66.29063 - node: color: '#FFFFFFFF' id: Bushh2 decals: - 1476: 11.022942,-68.72813 + 1457: 11.022942,-68.72813 - node: color: '#FFFFFFFF' id: Bushi1 decals: 237: 32.840233,-26.000742 - 464: 8.857405,4.0894966 - 518: -8.808841,36.12809 - 1033: 48.025013,28.959341 - 3528: 28.940447,-35.765743 + 463: 8.857405,4.0894966 + 517: -8.808841,36.12809 + 1014: 48.025013,28.959341 + 3508: 28.940447,-35.765743 - node: color: '#FFFFFFFF' id: Bushi2 decals: - 520: -9.136966,33.87809 - 1470: 11.038567,-68.5875 + 519: -9.136966,33.87809 + 1451: 11.038567,-68.5875 - node: color: '#FFFFFFFF' id: Bushi3 decals: 236: 34.512108,-25.938242 - 462: 12.107405,4.5426216 - 517: -9.121341,33.831215 - 1034: 49.946888,28.959341 - 1089: -0.82901984,-67.68338 - 1469: 10.976067,-67.41563 + 461: 12.107405,4.5426216 + 516: -9.121341,33.831215 + 1015: 49.946888,28.959341 + 1070: -0.82901984,-67.68338 + 1450: 10.976067,-67.41563 - node: color: '#FFFFFFFF' id: Bushi4 decals: - 463: 11.013655,3.2457466 - 1088: 0.8428552,-67.55838 - 1468: 10.991692,-65.86875 + 462: 11.013655,3.2457466 + 1069: 0.8428552,-67.55838 + 1449: 10.991692,-65.86875 - node: color: '#FFFFFFFF' id: Bushj2 decals: 238: 33.887108,-25.969492 - 1074: -5.121248,-68.96463 - 1684: -47.52111,5.1225877 + 1055: -5.121248,-68.96463 + 1665: -47.52111,5.1225877 - node: color: '#FFFFFFFF' id: Bushj3 decals: - 1073: 5.097502,-65.99588 - 1090: -5,-66 + 1054: 5.097502,-65.99588 + 1071: -5,-66 - node: color: '#FFFFFFFF' id: Bushm2 decals: - 1474: 10.991692,-67.525 + 1455: 10.991692,-67.525 - node: color: '#FFFFFFFF' id: Bushn1 decals: - 589: -6.033051,-6.444069 - 1035: 48.978138,29.037466 + 570: -6.033051,-6.444069 + 1016: 48.978138,29.037466 - node: color: '#FFFFFFFF' id: Caution decals: - 510: -7,31 - 1182: -27,-1 - 1822: -9,-21 - 2696: -55,17 + 509: -7,31 + 1163: -27,-1 + 1802: -9,-21 + 2676: -55,17 - node: color: '#DE3A3A96' id: CautionGreyscale decals: - 1824: -7,-18 + 1804: -7,-18 - node: color: '#52B4E996' id: CheckerNESW decals: - 1477: -20,-8 - 1478: -20,-7 - 1479: -19,-7 - 1480: -19,-8 + 1458: -20,-8 + 1459: -20,-7 + 1460: -19,-7 + 1461: -19,-8 - node: color: '#D4D4D428' id: CheckerNESW @@ -1944,60 +1944,60 @@ entities: color: '#D4D4D453' id: CheckerNESW decals: - 1983: -20,30 - 1984: -17,30 - 1985: -16,30 + 1963: -20,30 + 1964: -17,30 + 1965: -16,30 - node: color: '#D4D4D46C' id: CheckerNESW decals: - 1416: 23,-37 - 1417: 23,-38 - 1418: 24,-38 - 1419: 24,-37 - 1420: 25,-37 - 1421: 25,-38 - 1422: 26,-38 - 1423: 26,-37 - 1424: 27,-38 - 1425: 27,-37 - 1426: 27,-36 - 1427: 26,-36 - 1428: 25,-36 - 1429: 24,-36 - 1430: 23,-36 - 1431: 23,-35 - 1432: 24,-35 - 1433: 25,-35 - 1434: 26,-35 - 1435: 26,-34 - 1436: 24,-34 - 1437: 23,-34 - 1438: 25,-34 - 1439: 26,-33 - 1440: 25,-33 - 1441: 24,-33 - 1442: 23,-33 - 1443: 23,-32 - 1444: 24,-32 - 1445: 25,-32 - 1446: 26,-32 - 1447: 26,-31 - 1448: 25,-31 - 1449: 24,-31 - 1450: 23,-31 + 1397: 23,-37 + 1398: 23,-38 + 1399: 24,-38 + 1400: 24,-37 + 1401: 25,-37 + 1402: 25,-38 + 1403: 26,-38 + 1404: 26,-37 + 1405: 27,-38 + 1406: 27,-37 + 1407: 27,-36 + 1408: 26,-36 + 1409: 25,-36 + 1410: 24,-36 + 1411: 23,-36 + 1412: 23,-35 + 1413: 24,-35 + 1414: 25,-35 + 1415: 26,-35 + 1416: 26,-34 + 1417: 24,-34 + 1418: 23,-34 + 1419: 25,-34 + 1420: 26,-33 + 1421: 25,-33 + 1422: 24,-33 + 1423: 23,-33 + 1424: 23,-32 + 1425: 24,-32 + 1426: 25,-32 + 1427: 26,-32 + 1428: 26,-31 + 1429: 25,-31 + 1430: 24,-31 + 1431: 23,-31 - node: color: '#334E6DC8' id: CheckerNWSE decals: - 723: -63,17 - 724: -64,17 - 725: -65,17 - 726: -66,17 - 727: -67,17 - 728: -68,17 - 729: -69,17 - 730: -62,17 + 704: -63,17 + 705: -64,17 + 706: -65,17 + 707: -66,17 + 708: -67,17 + 709: -68,17 + 710: -69,17 + 711: -62,17 - node: color: '#52B4E996' id: CheckerNWSE @@ -2017,112 +2017,112 @@ entities: 252: 34,-13 253: 35,-13 254: 36,-13 - 1988: -20,30 - 2993: 44,-14 - 2994: 44,-13 - 2995: 44,-12 - 2996: 44,-11 - 2997: 44,-10 - 3249: 47,-11 - 3250: 47,-10 - 3251: 47,-9 - 3252: 48,-9 - 3253: 48,-10 - 3254: 48,-11 - 3255: 49,-11 - 3256: 49,-10 - 3257: 49,-9 - 3258: 50,-9 - 3259: 50,-10 - 3260: 50,-11 + 1968: -20,30 + 2973: 44,-14 + 2974: 44,-13 + 2975: 44,-12 + 2976: 44,-11 + 2977: 44,-10 + 3229: 47,-11 + 3230: 47,-10 + 3231: 47,-9 + 3232: 48,-9 + 3233: 48,-10 + 3234: 48,-11 + 3235: 49,-11 + 3236: 49,-10 + 3237: 49,-9 + 3238: 50,-9 + 3239: 50,-10 + 3240: 50,-11 - node: color: '#79150096' id: CheckerNWSE decals: - 1811: -9,-16 - 1812: -8,-16 - 1813: -7,-16 - 1814: -6,-16 + 1791: -9,-16 + 1792: -8,-16 + 1793: -7,-16 + 1794: -6,-16 - node: color: '#A4610696' id: CheckerNWSE decals: - 623: 48,16 - 624: 47,16 - 625: 47,17 - 626: 47,18 - 627: 48,18 - 628: 48,17 - 629: 49,16 - 630: 49,17 - 631: 49,18 - 632: 50,18 - 633: 50,17 - 634: 51,18 - 635: 51,17 - 819: 50,16 - 820: 51,16 + 604: 48,16 + 605: 47,16 + 606: 47,17 + 607: 47,18 + 608: 48,18 + 609: 48,17 + 610: 49,16 + 611: 49,17 + 612: 49,18 + 613: 50,18 + 614: 50,17 + 615: 51,18 + 616: 51,17 + 800: 50,16 + 801: 51,16 - node: color: '#D381C93E' id: CheckerNWSE decals: - 389: -45,2 - 390: -45,3 - 391: -44,3 - 392: -44,2 - 393: -43,2 - 394: -43,3 - 395: -42,3 - 396: -42,2 - 397: -42,4 - 398: -43,4 - 399: -44,4 - 400: -45,4 - 401: -45,5 - 402: -44,5 - 403: -43,5 - 404: -42,5 + 388: -45,2 + 389: -45,3 + 390: -44,3 + 391: -44,2 + 392: -43,2 + 393: -43,3 + 394: -42,3 + 395: -42,2 + 396: -42,4 + 397: -43,4 + 398: -44,4 + 399: -45,4 + 400: -45,5 + 401: -44,5 + 402: -43,5 + 403: -42,5 - node: color: '#D381C996' id: CheckerNWSE decals: - 407: -54,8 - 408: -55,8 - 409: -56,8 - 410: -57,8 - 411: -57,9 - 412: -56,9 - 413: -55,9 - 414: -54,9 - 415: -54,10 - 416: -55,10 - 417: -56,10 - 418: -57,10 - 419: -57,11 - 420: -56,11 - 421: -55,11 - 422: -54,11 - 423: -54,12 - 424: -55,12 - 425: -56,12 - 426: -57,12 - 427: -57,13 - 428: -56,13 - 429: -55,13 - 430: -54,13 + 406: -54,8 + 407: -55,8 + 408: -56,8 + 409: -57,8 + 410: -57,9 + 411: -56,9 + 412: -55,9 + 413: -54,9 + 414: -54,10 + 415: -55,10 + 416: -56,10 + 417: -57,10 + 418: -57,11 + 419: -56,11 + 420: -55,11 + 421: -54,11 + 422: -54,12 + 423: -55,12 + 424: -56,12 + 425: -57,12 + 426: -57,13 + 427: -56,13 + 428: -55,13 + 429: -54,13 - node: color: '#D4D4D406' id: CheckerNWSE decals: - 2567: -33,-4 - 2568: -33,-3 - 2569: -34,-3 - 2570: -35,-3 - 2571: -35,-4 - 2572: -34,-4 - 2573: -35,-5 - 2574: -34,-5 - 2575: -33,-5 + 2547: -33,-4 + 2548: -33,-3 + 2549: -34,-3 + 2550: -35,-3 + 2551: -35,-4 + 2552: -34,-4 + 2553: -35,-5 + 2554: -34,-5 + 2555: -33,-5 - node: color: '#D4D4D428' id: CheckerNWSE @@ -2137,133 +2137,133 @@ entities: 189: 10,14 190: 11,14 191: 12,14 - 434: 14,-14 - 435: 14,-13 - 436: 14,-12 - 1199: 1,-55 - 1200: 0,-55 - 1201: -1,-55 - 1202: -1,-56 - 1203: 0,-56 - 1204: 1,-56 - 1205: 1,-57 - 1206: 0,-57 - 1207: -1,-57 - 1208: 0,-58 - 1209: 0,-54 + 433: 14,-14 + 434: 14,-13 + 435: 14,-12 + 1180: 1,-55 + 1181: 0,-55 + 1182: -1,-55 + 1183: -1,-56 + 1184: 0,-56 + 1185: 1,-56 + 1186: 1,-57 + 1187: 0,-57 + 1188: -1,-57 + 1189: 0,-58 + 1190: 0,-54 - node: color: '#D4D4D44A' id: CheckerNWSE decals: - 1022: 26,-35 + 1003: 26,-35 - node: color: '#D4D4D496' id: CheckerNWSE decals: - 1336: 26,-35 - 1337: 25,-35 + 1317: 26,-35 + 1318: 25,-35 - node: color: '#DE3A3A96' id: CheckerNWSE decals: - 1986: -16,30 - 1987: -17,30 + 1966: -16,30 + 1967: -17,30 - node: color: '#EFB34196' id: CheckerNWSE decals: - 491: 10,17 - 492: 9,17 - 493: 8,17 - 494: 8,18 - 495: 9,18 - 496: 10,18 - 497: 10,19 - 498: 9,19 - 499: 8,19 - 500: 8,20 - 501: 8,21 - 502: 9,21 - 503: 9,20 - 504: 10,20 - 505: 10,21 + 490: 10,17 + 491: 9,17 + 492: 8,17 + 493: 8,18 + 494: 9,18 + 495: 10,18 + 496: 10,19 + 497: 9,19 + 498: 8,19 + 499: 8,20 + 500: 8,21 + 501: 9,21 + 502: 9,20 + 503: 10,20 + 504: 10,21 - node: color: '#FFEF9292' id: CheckerNWSE decals: - 2979: 44,-28 - 2980: 44,-29 - 2981: 44,-30 - 2982: 44,-31 - 2983: 44,-32 - 2984: 44,-33 - 2985: 44,-34 + 2959: 44,-28 + 2960: 44,-29 + 2961: 44,-30 + 2962: 44,-31 + 2963: 44,-32 + 2964: 44,-33 + 2965: 44,-34 - node: cleanable: True color: '#00000069' id: Damaged decals: - 2946: -58,26 - 2947: -59,26 - 2948: -60,27 + 2926: -58,26 + 2927: -59,26 + 2928: -60,27 - node: angle: 1.5707963267948966 rad color: '#79150096' id: Delivery decals: - 2943: -7,-47 + 2923: -7,-47 - node: color: '#DE3A3A96' id: Delivery decals: - 3114: -32,-20 + 3094: -32,-20 - node: color: '#FFFFFFFF' id: Delivery decals: 166: 7,-26 - 469: -25,35 - 470: -25,36 - 471: -26,36 - 472: -26,35 - 1458: 51,10 - 1459: 51,8 - 1463: 51,12 - 1659: -46,17 - 1729: 41,19 - 1730: 40,19 - 1731: 39,19 - 1944: -21,26 - 1945: -23,26 - 2113: -41,-5 - 2733: 41,-35 - 3112: 42,6 - 3113: -18,26 - 3261: 0,30 - 3272: 23,3 - 3285: 38,1 - 3553: -21,43 - 3562: -17,47 - 3563: -18,48 - 3564: -16,48 + 468: -25,35 + 469: -25,36 + 470: -26,36 + 471: -26,35 + 1439: 51,10 + 1440: 51,8 + 1444: 51,12 + 1640: -46,17 + 1710: 41,19 + 1711: 40,19 + 1712: 39,19 + 1924: -21,26 + 1925: -23,26 + 2093: -41,-5 + 2713: 41,-35 + 3092: 42,6 + 3093: -18,26 + 3241: 0,30 + 3252: 23,3 + 3265: 38,1 + 3533: -21,43 + 3542: -17,47 + 3543: -18,48 + 3544: -16,48 - node: color: '#D381C941' id: DeliveryGreyscale decals: - 3534: -53,0 - 3535: -56,0 + 3514: -53,0 + 3515: -56,0 - node: color: '#D381C996' id: DeliveryGreyscale decals: - 1354: -56,1 + 1335: -56,1 - node: cleanable: True color: '#FFFFFFFF' id: DeliveryGreyscale decals: - 3432: -61,17 - 3433: -70,17 + 3412: -61,17 + 3413: -70,17 - node: cleanable: True color: '#FFFFFFFF' @@ -2279,156 +2279,156 @@ entities: 69: 18,-51 70: 17,-51 71: 17,-51 - 2613: -45,-32 - 2614: -46,-32 - 2615: -46,-33 - 2616: -47,-33 - 2617: -46,-34 - 2618: -48,-32 - 2619: -49,-31 - 2620: -46,-30 - 2621: -49,-33 - 2622: -49,-32 - 2623: -48,-33 - 2624: -50,-32 - 2625: -50,-31 - 2626: -47,-32 - 2627: -48,-31 - 2628: -47,-34 - 2629: -47,-35 - 2630: -46,-35 - 2631: -45,-34 - 2632: -44,-34 - 2633: -44,-32 - 2634: -46,-31 - 2635: -49,-30 - 2636: -52,-30 - 2637: -52,-33 - 2638: -45,-29 - 2639: -31,-31 - 2640: -31,-32 - 2641: -29,-32 - 2642: -32,-32 - 2643: -35,-32 - 2644: -34,-32 - 2645: -39,-32 - 2646: -40,-31 - 2647: -34,-31 - 2648: -20,-35 - 2649: -11,-45 - 2650: -11,-44 - 2651: -13,-45 - 2652: -14,-45 - 2659: 53,-7 - 2660: 53,-9 - 2661: 53,-10 - 2662: 53,-11 - 2663: 54,-11 - 2664: 55,-12 - 2665: 55,-15 - 2666: 50,-6 - 2667: 47,-5 - 2668: 33,-5 - 2669: 33,-6 - 2670: 31,-7 - 2671: 29,-8 - 2672: 33,-3 - 2673: 30,-10 - 2674: 31,-2 - 2675: 30,-1 - 2676: 32,1 - 2677: 31,2 - 2678: 57,-25 - 2679: 59,-42 - 2680: 58,-43 - 2681: 56,-43 - 2682: 47,-43 - 2683: 45,-41 - 2684: 25,-41 - 2685: 28,-40 - 2686: 31,-40 - 2687: 30,-40 - 2688: 25,-40 - 2700: 36,20 - 2701: 37,20 - 2702: 35,21 - 2703: 32,20 - 2704: 30,20 - 2705: 27,21 - 2706: 31,17 - 2707: 32,11 - 2708: 29,12 - 2717: -31,-35 - 2718: -33,-36 - 2719: -30,-35 - 2720: -17,-38 - 2721: -17,-37 - 2722: -18,-35 - 2723: -13,-46 - 2724: -12,-47 - 2725: -8,-50 - 2726: -8,-52 - 2727: -15,-49 - 2790: 13,-46 - 2791: 14,-47 - 2792: 15,-45 - 2793: 17,-44 - 2794: 19,-47 - 2795: 11,-46 - 2796: 10,-47 - 2797: 10,-49 - 2798: 13,-40 - 2799: 12,-40 - 2800: 11,-41 - 2801: 5,-51 - 2935: 5,-43 - 2936: 6,-43 - 2937: -3,-43 - 2938: -6,-41 - 2939: -13,-40 - 2940: -12,-41 - 2941: -12,-42 - 2942: -14,-41 - 2952: 41,-50 - 2953: 42,-52 - 2954: 41,-49 - 2955: 38,-52 - 2956: 22,-49 - 3121: -59,44 - 3122: -59,45 - 3123: -60,46 - 3124: -58,47 - 3125: -57,44 - 3126: -58,43 - 3127: -59,40 - 3128: -60,41 - 3129: -60,42 - 3130: -61,43 - 3131: -61,44 - 3132: -62,45 - 3133: -62,47 - 3134: -63,47 - 3135: -61,48 - 3136: -61,49 - 3137: -62,50 - 3138: -62,51 - 3139: -58,52 - 3140: -58,51 - 3141: -59,51 - 3142: -59,50 - 3143: -58,49 - 3144: -53,46 - 3145: -56,46 - 3146: -58,37 - 3147: -59,37 - 3148: -60,39 - 3149: -59,36 - 3428: 40,-48 - 3429: 41,-45 - 3430: 40,-44 - 3431: 43,-46 - 3434: -23,-33 - 3435: -24,-33 + 2593: -45,-32 + 2594: -46,-32 + 2595: -46,-33 + 2596: -47,-33 + 2597: -46,-34 + 2598: -48,-32 + 2599: -49,-31 + 2600: -46,-30 + 2601: -49,-33 + 2602: -49,-32 + 2603: -48,-33 + 2604: -50,-32 + 2605: -50,-31 + 2606: -47,-32 + 2607: -48,-31 + 2608: -47,-34 + 2609: -47,-35 + 2610: -46,-35 + 2611: -45,-34 + 2612: -44,-34 + 2613: -44,-32 + 2614: -46,-31 + 2615: -49,-30 + 2616: -52,-30 + 2617: -52,-33 + 2618: -45,-29 + 2619: -31,-31 + 2620: -31,-32 + 2621: -29,-32 + 2622: -32,-32 + 2623: -35,-32 + 2624: -34,-32 + 2625: -39,-32 + 2626: -40,-31 + 2627: -34,-31 + 2628: -20,-35 + 2629: -11,-45 + 2630: -11,-44 + 2631: -13,-45 + 2632: -14,-45 + 2639: 53,-7 + 2640: 53,-9 + 2641: 53,-10 + 2642: 53,-11 + 2643: 54,-11 + 2644: 55,-12 + 2645: 55,-15 + 2646: 50,-6 + 2647: 47,-5 + 2648: 33,-5 + 2649: 33,-6 + 2650: 31,-7 + 2651: 29,-8 + 2652: 33,-3 + 2653: 30,-10 + 2654: 31,-2 + 2655: 30,-1 + 2656: 32,1 + 2657: 31,2 + 2658: 57,-25 + 2659: 59,-42 + 2660: 58,-43 + 2661: 56,-43 + 2662: 47,-43 + 2663: 45,-41 + 2664: 25,-41 + 2665: 28,-40 + 2666: 31,-40 + 2667: 30,-40 + 2668: 25,-40 + 2680: 36,20 + 2681: 37,20 + 2682: 35,21 + 2683: 32,20 + 2684: 30,20 + 2685: 27,21 + 2686: 31,17 + 2687: 32,11 + 2688: 29,12 + 2697: -31,-35 + 2698: -33,-36 + 2699: -30,-35 + 2700: -17,-38 + 2701: -17,-37 + 2702: -18,-35 + 2703: -13,-46 + 2704: -12,-47 + 2705: -8,-50 + 2706: -8,-52 + 2707: -15,-49 + 2770: 13,-46 + 2771: 14,-47 + 2772: 15,-45 + 2773: 17,-44 + 2774: 19,-47 + 2775: 11,-46 + 2776: 10,-47 + 2777: 10,-49 + 2778: 13,-40 + 2779: 12,-40 + 2780: 11,-41 + 2781: 5,-51 + 2915: 5,-43 + 2916: 6,-43 + 2917: -3,-43 + 2918: -6,-41 + 2919: -13,-40 + 2920: -12,-41 + 2921: -12,-42 + 2922: -14,-41 + 2932: 41,-50 + 2933: 42,-52 + 2934: 41,-49 + 2935: 38,-52 + 2936: 22,-49 + 3101: -59,44 + 3102: -59,45 + 3103: -60,46 + 3104: -58,47 + 3105: -57,44 + 3106: -58,43 + 3107: -59,40 + 3108: -60,41 + 3109: -60,42 + 3110: -61,43 + 3111: -61,44 + 3112: -62,45 + 3113: -62,47 + 3114: -63,47 + 3115: -61,48 + 3116: -61,49 + 3117: -62,50 + 3118: -62,51 + 3119: -58,52 + 3120: -58,51 + 3121: -59,51 + 3122: -59,50 + 3123: -58,49 + 3124: -53,46 + 3125: -56,46 + 3126: -58,37 + 3127: -59,37 + 3128: -60,39 + 3129: -59,36 + 3408: 40,-48 + 3409: 41,-45 + 3410: 40,-44 + 3411: 43,-46 + 3414: -23,-33 + 3415: -24,-33 - node: angle: 3.141592653589793 rad color: '#FFFFFFFF' @@ -2445,8 +2445,8 @@ entities: color: '#FFFFFFFF' id: DirtHeavy decals: - 3286: 37,-2 - 3287: 37,2 + 3266: 37,-2 + 3267: 37,2 - node: cleanable: True color: '#FFFFFFFF' @@ -2457,46 +2457,46 @@ entities: 104: 13,11 151: -51,-30 167: -39,-14 - 559: -59,19 - 560: -60,22 - 561: -60,23 - 686: 51,0 - 687: 50,0 - 688: 49,-1 - 689: 49,3 - 943: -5,-25 - 944: -4,-25 - 1769: -39,9 - 1789: -10,-15 - 1820: -7,-16 - 2390: -1,13 - 2466: 52,-38 - 2467: 52,-38 - 2579: 53,-22 - 2580: 53,-23 - 2586: -46,-30 - 2587: -45,-30 - 2588: -45,-32 - 2589: -46,-33 - 2590: -46,-33 - 2591: -50,-33 - 2592: -48,-32 - 2709: 30,12 - 2710: 27,11 - 2711: 30,18 - 2712: 29,21 - 2884: -63,-10 - 2949: -59,26 - 2950: -60,26 - 3106: 45,9 - 3332: 43,2 - 3333: 45,0 - 3334: 45,-1 - 3335: 48,4 - 3382: 40,-2 - 3536: -59,20 - 3537: -59,22 - 3538: -59,22 + 540: -59,19 + 541: -60,22 + 542: -60,23 + 667: 51,0 + 668: 50,0 + 669: 49,-1 + 670: 49,3 + 924: -5,-25 + 925: -4,-25 + 1750: -39,9 + 1769: -10,-15 + 1800: -7,-16 + 2370: -1,13 + 2446: 52,-38 + 2447: 52,-38 + 2559: 53,-22 + 2560: 53,-23 + 2566: -46,-30 + 2567: -45,-30 + 2568: -45,-32 + 2569: -46,-33 + 2570: -46,-33 + 2571: -50,-33 + 2572: -48,-32 + 2689: 30,12 + 2690: 27,11 + 2691: 30,18 + 2692: 29,21 + 2864: -63,-10 + 2929: -59,26 + 2930: -60,26 + 3086: 45,9 + 3312: 43,2 + 3313: 45,0 + 3314: 45,-1 + 3315: 48,4 + 3362: 40,-2 + 3516: -59,20 + 3517: -59,22 + 3518: -59,22 - node: angle: 3.141592653589793 rad color: '#FFFFFFFF' @@ -2520,24 +2520,24 @@ entities: 354: -24,-15 355: -23,-12 356: -32,-11 - 616: -38,8 - 617: -38,6 - 618: -38,5 - 619: -37,8 - 620: -34,9 - 621: -33,8 - 622: -39,12 - 968: -30,-20 - 969: -21,-19 - 970: -33,-20 - 971: -33,-17 - 972: -32,-20 - 3293: 37,1 - 3294: 37,-1 - 3295: 38,0 - 3296: 36,0 - 3297: 36,-1 - 3298: 40,0 + 597: -38,8 + 598: -38,6 + 599: -38,5 + 600: -37,8 + 601: -34,9 + 602: -33,8 + 603: -39,12 + 949: -30,-20 + 950: -21,-19 + 951: -33,-20 + 952: -33,-17 + 953: -32,-20 + 3273: 37,1 + 3274: 37,-1 + 3275: 38,0 + 3276: 36,0 + 3277: 36,-1 + 3278: 40,0 - node: cleanable: True color: '#FFFFFFFF' @@ -2590,266 +2590,266 @@ entities: 171: -38,-14 172: -38,-18 173: -39,-19 - 432: 11,-21 - 433: 12,-21 - 443: 15,-14 - 444: 15,-15 - 445: 15,-12 - 446: 15,-11 - 447: 16,-9 - 448: 17,-2 - 449: 17,0 - 450: 17,1 - 451: 16,2 - 452: 16,-5 - 482: -26,31 - 483: -27,30 - 484: -23,31 - 485: -23,29 - 486: -21,29 - 487: -18,29 - 488: -22,27 - 489: -24,30 - 490: -29,31 - 552: -16,12 - 553: -16,23 - 554: -23,24 - 555: -39,24 - 556: -42,22 - 557: -43,21 - 558: -56,16 - 564: -58,20 - 565: -59,18 - 566: -60,17 - 567: -59,25 - 568: -60,24 - 569: -56,24 - 570: -57,20 - 693: 47,-1 - 694: 48,-2 - 695: 49,-2 - 696: 51,1 - 697: 50,1 - 698: 51,2 - 699: 48,2 - 700: 47,0 - 701: 44,4 - 702: 49,4 - 703: 43,5 - 704: 43,6 - 705: 55,12 - 706: 54,11 - 707: 53,11 - 708: 55,13 - 709: 55,9 - 710: 49,14 - 711: 50,13 - 712: 41,6 - 713: 41,5 - 714: 40,5 - 715: 37,4 - 716: 36,5 - 783: -22,25 - 784: -17,18 - 785: -37,4 - 786: -37,-11 - 787: -37,-15 - 788: -19,-20 - 789: -17,-14 - 790: -17,-7 - 791: -16,-5 - 799: -16,7 - 801: -16,4 - 802: -15,9 - 803: -16,0 - 940: -9,-25 - 941: -8,-25 - 942: -8,-25 - 947: -4,-24 - 948: -1,-25 - 949: 7,-21 - 950: 16,-25 - 951: 16,-25 - 952: 13,-25 - 1001: 7,-20 - 1002: 8,-20 - 1003: 9,-20 - 1004: 9,-21 - 1005: 10,-23 - 1006: 12,-23 - 1007: -6,-23 - 1008: -25,-23 - 1009: -34,-23 - 1010: -37,-24 - 1183: -10,-55 - 1184: -14,-56 - 1185: -19,-55 - 1186: -7,-54 - 1187: -2,-54 - 1188: -3,-57 - 1189: 2,-59 - 1190: -3,-64 - 1191: 0,-61 - 1192: -3,-66 - 1193: -3,-71 - 1194: -1,-73 - 1195: 2,-71 - 1196: 1,-55 - 1197: -1,-47 - 1198: 0,-45 - 1267: 20,24 - 1268: 15,25 - 1269: 16,27 - 1270: 34,23 - 1271: 38,24 - 1272: 44,26 - 1273: 45,25 - 1274: 52,25 - 1275: 53,26 - 1276: 52,21 - 1277: 44,21 - 1278: 41,20 - 1279: 52,14 - 1280: 48,18 - 1281: 49,16 - 1282: 45,7 - 1283: 20,8 - 1284: 32,7 - 1285: 34,8 - 1286: 16,8 - 1287: 5,8 - 1288: -7,9 - 1289: -8,8 - 1328: 7,-22 - 1329: 5,-23 - 1330: 4,-23 - 1331: 7,-24 - 1332: 23,-23 - 1333: 18,-28 - 1334: 21,-35 - 1335: 19,-34 - 1770: -38,9 - 1771: -39,8 - 1772: -39,7 - 1773: -35,8 - 1774: -39,-1 - 1791: -10,-16 - 1792: -10,-14 - 1793: -11,-14 - 1794: -10,-13 - 1795: -11,-13 - 1796: -8,-12 - 1797: -8,-14 - 1798: -9,-13 - 1799: -10,-13 - 1800: -11,-17 - 1801: -11,-18 - 1817: -9,-16 - 1818: -8,-16 - 1819: -8,-16 - 2143: -39,-12 - 2144: -39,-8 - 2145: -40,-7 - 2146: -39,-8 - 2148: -39,-9 - 2149: -39,-3 - 2150: -39,3 - 2394: 1,13 - 2395: 0,14 - 2396: 0,15 - 2397: 0,15 - 2398: 1,15 - 2399: 3,14 - 2400: 5,15 - 2401: 7,13 - 2402: 9,14 - 2403: 11,12 - 2404: 11,14 - 2405: 5,17 - 2406: 4,17 - 2407: 4,18 - 2408: -4,17 - 2409: -4,19 - 2410: -3,20 - 2411: -2,17 - 2448: 3,19 - 2449: 4,20 - 2451: -4,21 - 2452: -3,22 - 2453: -3,24 - 2454: -2,21 - 2455: -2,20 - 2456: -3,23 - 2457: -5,28 - 2458: -5,27 - 2459: -11,28 - 2460: -12,29 - 2461: -13,30 - 2462: -13,31 - 2463: -12,32 - 2464: -22,31 - 2465: -30,30 - 2468: 51,-38 - 2469: 51,-38 - 2478: 49,-39 - 2600: -52,-35 - 2601: -52,-35 - 2602: -52,-32 - 2603: -49,-31 - 2604: -49,-31 - 2605: -48,-32 - 2606: -48,-32 - 2607: -45,-33 - 2608: -45,-33 - 2609: -45,-33 - 2610: -46,-32 - 2611: -46,-32 - 2612: -46,-32 - 2713: 28,21 - 2714: 31,18 - 2715: 31,12 - 2716: 27,12 - 3107: 44,9 - 3108: 46,8 - 3109: 44,10 - 3110: 45,12 - 3339: 45,3 - 3340: 46,3 - 3341: 43,3 - 3342: 42,3 - 3343: 44,2 - 3344: 45,1 - 3345: 46,-1 - 3346: 45,-2 - 3347: 46,1 - 3348: 47,2 - 3349: 48,1 - 3350: 51,4 - 3351: 48,3 - 3352: 46,2 - 3353: 40,2 - 3365: 49,6 - 3366: 48,7 - 3367: 53,6 - 3368: 45,5 - 3369: 41,8 - 3370: 40,9 - 3371: 39,8 - 3372: 41,13 - 3373: 41,15 - 3374: 40,16 - 3375: 56,7 - 3376: 41,1 - 3377: 41,0 - 3378: 42,2 - 3385: 40,-1 - 3396: 56,12 - 3397: 54,15 - 3398: 49,17 - 3399: 55,7 - 3400: 49,9 - 3401: 50,11 - 3402: 37,7 + 431: 11,-21 + 432: 12,-21 + 442: 15,-14 + 443: 15,-15 + 444: 15,-12 + 445: 15,-11 + 446: 16,-9 + 447: 17,-2 + 448: 17,0 + 449: 17,1 + 450: 16,2 + 451: 16,-5 + 481: -26,31 + 482: -27,30 + 483: -23,31 + 484: -23,29 + 485: -21,29 + 486: -18,29 + 487: -22,27 + 488: -24,30 + 489: -29,31 + 533: -16,12 + 534: -16,23 + 535: -23,24 + 536: -39,24 + 537: -42,22 + 538: -43,21 + 539: -56,16 + 545: -58,20 + 546: -59,18 + 547: -60,17 + 548: -59,25 + 549: -60,24 + 550: -56,24 + 551: -57,20 + 674: 47,-1 + 675: 48,-2 + 676: 49,-2 + 677: 51,1 + 678: 50,1 + 679: 51,2 + 680: 48,2 + 681: 47,0 + 682: 44,4 + 683: 49,4 + 684: 43,5 + 685: 43,6 + 686: 55,12 + 687: 54,11 + 688: 53,11 + 689: 55,13 + 690: 55,9 + 691: 49,14 + 692: 50,13 + 693: 41,6 + 694: 41,5 + 695: 40,5 + 696: 37,4 + 697: 36,5 + 764: -22,25 + 765: -17,18 + 766: -37,4 + 767: -37,-11 + 768: -37,-15 + 769: -19,-20 + 770: -17,-14 + 771: -17,-7 + 772: -16,-5 + 780: -16,7 + 782: -16,4 + 783: -15,9 + 784: -16,0 + 921: -9,-25 + 922: -8,-25 + 923: -8,-25 + 928: -4,-24 + 929: -1,-25 + 930: 7,-21 + 931: 16,-25 + 932: 16,-25 + 933: 13,-25 + 982: 7,-20 + 983: 8,-20 + 984: 9,-20 + 985: 9,-21 + 986: 10,-23 + 987: 12,-23 + 988: -6,-23 + 989: -25,-23 + 990: -34,-23 + 991: -37,-24 + 1164: -10,-55 + 1165: -14,-56 + 1166: -19,-55 + 1167: -7,-54 + 1168: -2,-54 + 1169: -3,-57 + 1170: 2,-59 + 1171: -3,-64 + 1172: 0,-61 + 1173: -3,-66 + 1174: -3,-71 + 1175: -1,-73 + 1176: 2,-71 + 1177: 1,-55 + 1178: -1,-47 + 1179: 0,-45 + 1248: 20,24 + 1249: 15,25 + 1250: 16,27 + 1251: 34,23 + 1252: 38,24 + 1253: 44,26 + 1254: 45,25 + 1255: 52,25 + 1256: 53,26 + 1257: 52,21 + 1258: 44,21 + 1259: 41,20 + 1260: 52,14 + 1261: 48,18 + 1262: 49,16 + 1263: 45,7 + 1264: 20,8 + 1265: 32,7 + 1266: 34,8 + 1267: 16,8 + 1268: 5,8 + 1269: -7,9 + 1270: -8,8 + 1309: 7,-22 + 1310: 5,-23 + 1311: 4,-23 + 1312: 7,-24 + 1313: 23,-23 + 1314: 18,-28 + 1315: 21,-35 + 1316: 19,-34 + 1751: -38,9 + 1752: -39,8 + 1753: -39,7 + 1754: -35,8 + 1755: -39,-1 + 1771: -10,-16 + 1772: -10,-14 + 1773: -11,-14 + 1774: -10,-13 + 1775: -11,-13 + 1776: -8,-12 + 1777: -8,-14 + 1778: -9,-13 + 1779: -10,-13 + 1780: -11,-17 + 1781: -11,-18 + 1797: -9,-16 + 1798: -8,-16 + 1799: -8,-16 + 2123: -39,-12 + 2124: -39,-8 + 2125: -40,-7 + 2126: -39,-8 + 2128: -39,-9 + 2129: -39,-3 + 2130: -39,3 + 2374: 1,13 + 2375: 0,14 + 2376: 0,15 + 2377: 0,15 + 2378: 1,15 + 2379: 3,14 + 2380: 5,15 + 2381: 7,13 + 2382: 9,14 + 2383: 11,12 + 2384: 11,14 + 2385: 5,17 + 2386: 4,17 + 2387: 4,18 + 2388: -4,17 + 2389: -4,19 + 2390: -3,20 + 2391: -2,17 + 2428: 3,19 + 2429: 4,20 + 2431: -4,21 + 2432: -3,22 + 2433: -3,24 + 2434: -2,21 + 2435: -2,20 + 2436: -3,23 + 2437: -5,28 + 2438: -5,27 + 2439: -11,28 + 2440: -12,29 + 2441: -13,30 + 2442: -13,31 + 2443: -12,32 + 2444: -22,31 + 2445: -30,30 + 2448: 51,-38 + 2449: 51,-38 + 2458: 49,-39 + 2580: -52,-35 + 2581: -52,-35 + 2582: -52,-32 + 2583: -49,-31 + 2584: -49,-31 + 2585: -48,-32 + 2586: -48,-32 + 2587: -45,-33 + 2588: -45,-33 + 2589: -45,-33 + 2590: -46,-32 + 2591: -46,-32 + 2592: -46,-32 + 2693: 28,21 + 2694: 31,18 + 2695: 31,12 + 2696: 27,12 + 3087: 44,9 + 3088: 46,8 + 3089: 44,10 + 3090: 45,12 + 3319: 45,3 + 3320: 46,3 + 3321: 43,3 + 3322: 42,3 + 3323: 44,2 + 3324: 45,1 + 3325: 46,-1 + 3326: 45,-2 + 3327: 46,1 + 3328: 47,2 + 3329: 48,1 + 3330: 51,4 + 3331: 48,3 + 3332: 46,2 + 3333: 40,2 + 3345: 49,6 + 3346: 48,7 + 3347: 53,6 + 3348: 45,5 + 3349: 41,8 + 3350: 40,9 + 3351: 39,8 + 3352: 41,13 + 3353: 41,15 + 3354: 40,16 + 3355: 56,7 + 3356: 41,1 + 3357: 41,0 + 3358: 42,2 + 3365: 40,-1 + 3376: 56,12 + 3377: 54,15 + 3378: 49,17 + 3379: 55,7 + 3380: 49,9 + 3381: 50,11 + 3382: 37,7 - node: angle: 3.141592653589793 rad color: '#FFFFFFFF' @@ -2875,15 +2875,15 @@ entities: 345: -25,-20 346: -28,-19 347: -23,-5 - 613: -38,7 - 614: -39,10 - 615: -39,11 - 967: -31,-20 - 3288: 36,-2 - 3289: 38,-2 - 3290: 36,2 - 3291: 38,2 - 3292: 37,1 + 594: -38,7 + 595: -39,10 + 596: -39,11 + 948: -31,-20 + 3268: 36,-2 + 3269: 38,-2 + 3270: 36,2 + 3271: 38,2 + 3272: 37,1 - node: cleanable: True color: '#FFFFFFFF' @@ -2902,51 +2902,51 @@ entities: 152: -50,-33 168: -39,-15 169: -39,-16 - 442: 14,-14 - 479: -23,30 - 480: -22,29 - 481: -25,31 - 562: -58,21 - 563: -59,25 - 690: 50,2 - 691: 50,4 - 692: 49,0 - 798: -16,6 - 800: -14,7 - 945: -3,-25 - 946: -6,-25 - 1327: 6,-22 - 1790: -11,-16 - 2147: -40,-8 - 2391: 0,13 - 2392: -1,14 - 2393: 1,14 - 2450: -3,21 - 2470: 52,-36 - 2471: 52,-37 - 2472: 56,-37 - 2473: 55,-38 - 2474: 47,-36 - 2475: 48,-36 - 2476: 50,-39 - 2477: 50,-39 - 2581: 53,-21 - 2582: 53,-24 - 2593: -46,-32 - 2594: -46,-34 - 2595: -45,-33 - 2596: -47,-30 - 2597: -49,-31 - 2598: -51,-33 - 2599: -52,-34 - 2885: -64,-10 - 2886: -62,-9 - 2887: -60,-12 - 3336: 49,4 - 3337: 44,3 - 3338: 40,3 - 3383: 41,-2 - 3384: 42,-2 + 441: 14,-14 + 478: -23,30 + 479: -22,29 + 480: -25,31 + 543: -58,21 + 544: -59,25 + 671: 50,2 + 672: 50,4 + 673: 49,0 + 779: -16,6 + 781: -14,7 + 926: -3,-25 + 927: -6,-25 + 1308: 6,-22 + 1770: -11,-16 + 2127: -40,-8 + 2371: 0,13 + 2372: -1,14 + 2373: 1,14 + 2430: -3,21 + 2450: 52,-36 + 2451: 52,-37 + 2452: 56,-37 + 2453: 55,-38 + 2454: 47,-36 + 2455: 48,-36 + 2456: 50,-39 + 2457: 50,-39 + 2561: 53,-21 + 2562: 53,-24 + 2573: -46,-32 + 2574: -46,-34 + 2575: -45,-33 + 2576: -47,-30 + 2577: -49,-31 + 2578: -51,-33 + 2579: -52,-34 + 2865: -64,-10 + 2866: -62,-9 + 2867: -60,-12 + 3316: 49,4 + 3317: 44,3 + 3318: 40,3 + 3363: 41,-2 + 3364: 42,-2 - node: angle: 3.141592653589793 rad color: '#FFFFFFFF' @@ -2959,80 +2959,80 @@ entities: color: '#FED83DFF' id: Donk decals: - 2576: -62.43933,-13.441491 + 2556: -62.43933,-13.441491 - node: color: '#FFFFFFFF' id: Flowersbr1 decals: 235: 34.965233,-25.985117 - 1471: 11.007317,-66.54063 + 1452: 11.007317,-66.54063 - node: color: '#FFFFFFFF' id: Flowersbr3 decals: - 1086: -0.48526984,-68.87088 - 1087: 0.23348016,-66.02713 + 1067: -0.48526984,-68.87088 + 1068: 0.23348016,-66.02713 - node: color: '#FFFFFFFF' id: Flowerspv1 decals: - 1085: 0.7647302,-68.49588 - 1473: 11.007317,-69.05625 + 1066: 0.7647302,-68.49588 + 1454: 11.007317,-69.05625 - node: color: '#FFFFFFFF' id: Flowerspv3 decals: - 514: -8.949466,34.143715 - 1031: 48.118763,22.943716 + 513: -8.949466,34.143715 + 1012: 48.118763,22.943716 - node: color: '#FFFFFFFF' id: Flowersy1 decals: 233: 33.152733,-25.953867 - 1083: 0.6866052,-66.792755 - 3527: 29.018572,-35.56262 + 1064: 0.6866052,-66.792755 + 3507: 29.018572,-35.56262 - node: color: '#FFFFFFFF' id: Flowersy2 decals: 234: 33.933983,-26.047617 - 460: 12.076155,3.7926216 - 516: -9.011966,36.081215 - 1084: -0.76651984,-68.074005 - 1472: 11.038567,-68.22813 + 459: 12.076155,3.7926216 + 515: -9.011966,36.081215 + 1065: -0.76651984,-68.074005 + 1453: 11.038567,-68.22813 - node: color: '#FFFFFFFF' id: Flowersy3 decals: - 1032: 49.540638,22.974966 - 1082: -0.48526984,-65.65213 + 1013: 49.540638,22.974966 + 1063: -0.48526984,-65.65213 - node: color: '#FFFFFFFF' id: Flowersy4 decals: - 461: 11.34178,4.3394966 - 585: -5.970551,-6.928444 - 586: -5.986176,-6.053444 - 821: 9.393604,3.3875775 - 1081: -0.26651984,-69.93338 - 3526: 29.924822,-37.81262 + 460: 11.34178,4.3394966 + 566: -5.970551,-6.928444 + 567: -5.986176,-6.053444 + 802: 9.393604,3.3875775 + 1062: -0.26651984,-69.93338 + 3506: 29.924822,-37.81262 - node: color: '#334E6DC8' id: FullTileOverlayGreyscale decals: - 590: 0,3 - 591: 1,3 - 592: 2,3 - 593: 3,3 - 594: -1,3 - 595: -2,3 - 596: -3,3 - 2928: 5,-36 - 2929: 3,-36 - 2930: 5,-37 - 2931: 3,-37 - 3452: 7,-37 - 3453: 7,-36 + 571: 0,3 + 572: 1,3 + 573: 2,3 + 574: 3,3 + 575: -1,3 + 576: -2,3 + 577: -3,3 + 2908: 5,-36 + 2909: 3,-36 + 2910: 5,-37 + 2911: 3,-37 + 3432: 7,-37 + 3433: 7,-36 - node: color: '#52B4E996' id: FullTileOverlayGreyscale @@ -3049,34 +3049,34 @@ entities: 277: 42,-21 301: 46,-10 302: 42,-24 - 3010: 33,-22 - 3036: 46,-17 - 3037: 46,-19 - 3047: 46,-18 + 2990: 33,-22 + 3016: 46,-17 + 3017: 46,-19 + 3027: 46,-18 - node: color: '#A4610696' id: FullTileOverlayGreyscale decals: - 636: 48,15 - 643: 42,6 - 644: 42,5 - 655: 44,4 - 656: 47,8 - 657: 47,7 - 3273: 37,3 - 3274: 39,-1 - 3275: 39,0 - 3276: 36,-2 - 3277: 37,-2 - 3278: 38,-2 - 3279: 38,2 - 3280: 37,2 - 3281: 36,2 - 3354: 49,5 - 3355: 48,5 - 3379: 40,-2 - 3380: 41,-2 - 3381: 42,-2 + 617: 48,15 + 624: 42,6 + 625: 42,5 + 636: 44,4 + 637: 47,8 + 638: 47,7 + 3253: 37,3 + 3254: 39,-1 + 3255: 39,0 + 3256: 36,-2 + 3257: 37,-2 + 3258: 38,-2 + 3259: 38,2 + 3260: 37,2 + 3261: 36,2 + 3334: 49,5 + 3335: 48,5 + 3359: 40,-2 + 3360: 41,-2 + 3361: 42,-2 - node: color: '#D0BF4AA7' id: FullTileOverlayGreyscale @@ -3087,34 +3087,34 @@ entities: color: '#D381C93E' id: FullTileOverlayGreyscale decals: - 388: -46,3 + 387: -46,3 - node: color: '#D381C996' id: FullTileOverlayGreyscale decals: - 608: -39,10 + 589: -39,10 - node: color: '#D4D4D406' id: FullTileOverlayGreyscale decals: - 2544: 41,-10 - 2545: 40,-10 - 2546: 39,-10 - 2547: 38,-10 - 2548: 37,-10 - 2549: 36,-10 - 2550: 36,-9 - 2551: 36,-8 - 2552: 36,-7 - 2553: 36,-6 - 2554: 38,-9 - 2555: 38,-8 - 2556: 38,-7 - 2557: 38,-6 - 2558: 40,-9 - 2559: 40,-8 - 2560: 40,-7 - 2561: 40,-6 + 2524: 41,-10 + 2525: 40,-10 + 2526: 39,-10 + 2527: 38,-10 + 2528: 37,-10 + 2529: 36,-10 + 2530: 36,-9 + 2531: 36,-8 + 2532: 36,-7 + 2533: 36,-6 + 2534: 38,-9 + 2535: 38,-8 + 2536: 38,-7 + 2537: 38,-6 + 2538: 40,-9 + 2539: 40,-8 + 2540: 40,-7 + 2541: 40,-6 - node: color: '#DE3A3A96' id: FullTileOverlayGreyscale @@ -3134,38 +3134,38 @@ entities: color: '#EFCC4196' id: FullTileOverlayGreyscale decals: - 2368: -2,14 - 2369: 2,14 - 2370: 1,13 - 2371: 0,13 - 2372: -1,13 - 2373: -1,14 - 2374: 0,14 - 2375: 1,14 - 2376: 1,15 - 2377: 0,15 - 2378: -1,15 - 2379: 0,12 + 2348: -2,14 + 2349: 2,14 + 2350: 1,13 + 2351: 0,13 + 2352: -1,13 + 2353: -1,14 + 2354: 0,14 + 2355: 1,14 + 2356: 1,15 + 2357: 0,15 + 2358: -1,15 + 2359: 0,12 - node: color: '#EFD54193' id: FullTileOverlayGreyscale decals: - 3488: 8,14 - 3489: 5,16 - 3509: -14,28 + 3468: 8,14 + 3469: 5,16 + 3489: -14,28 - node: color: '#EFD84196' id: FullTileOverlayGreyscale decals: - 1997: -19,30 - 1998: -18,30 - 1999: -15,30 + 1977: -19,30 + 1978: -18,30 + 1979: -15,30 - node: cleanable: True color: '#169C9CFF' id: Gene decals: - 2578: 53.01786,-22.012398 + 2558: 53.01786,-22.012398 - node: color: '#FFFFFFFF' id: Grassb1 @@ -3176,90 +3176,90 @@ entities: id: Grassb2 decals: 232: 33.699608,-25.985117 - 519: -8.918216,34.34684 - 1064: -5.121248,-69.02713 + 518: -8.918216,34.34684 + 1045: -5.121248,-69.02713 - node: color: '#FFFFFFFF' id: Grassb3 decals: - 1063: 5.175627,-68.99588 + 1044: 5.175627,-68.99588 - node: color: '#FFFFFFFF' id: Grassb4 decals: - 587: -5.939301,-7.022194 - 1066: 5.144377,-65.90213 + 568: -5.939301,-7.022194 + 1047: 5.144377,-65.90213 - node: color: '#FFFFFFFF' id: Grassb5 decals: 231: 32.824608,-26.016367 - 1065: -5.105623,-65.949005 + 1046: -5.105623,-65.949005 - node: color: '#FFFFFFFF' id: Grassd1 decals: - 459: 11.06053,2.6519966 - 1079: -0.84464484,-69.58963 - 3520: 29.893572,-37.234493 - 3523: 29.924822,-35.203243 + 458: 11.06053,2.6519966 + 1060: -0.84464484,-69.58963 + 3500: 29.893572,-37.234493 + 3503: 29.924822,-35.203243 - node: color: '#FFFFFFFF' id: Grassd2 decals: 229: 35.121483,-26.016367 - 458: 10.02928,3.2613716 - 1029: 50,29 - 1030: 48,23 - 1075: 0.9053552,-65.02713 - 1080: 0.8272302,-69.83963 - 1467: 10.976067,-66.05625 - 3521: 29.002947,-37.109493 + 457: 10.02928,3.2613716 + 1010: 50,29 + 1011: 48,23 + 1056: 0.9053552,-65.02713 + 1061: 0.8272302,-69.83963 + 1448: 10.976067,-66.05625 + 3501: 29.002947,-37.109493 - node: color: '#FFFFFFFF' id: Grassd3 decals: - 457: 11.107405,3.8082466 - 1076: -0.92276984,-64.99588 - 3522: 29.018572,-35.15637 + 456: 11.107405,3.8082466 + 1057: -0.92276984,-64.99588 + 3502: 29.018572,-35.15637 - node: color: '#FFFFFFFF' id: Grasse1 decals: 228: 34.449608,-26.000742 - 455: 10.37303,4.2613716 - 456: 11.919905,3.4176216 - 1077: 0.48348016,-65.511505 - 1078: -0.71964484,-67.042755 - 1466: 11.054192,-66.97813 - 1681: -46.974236,5.0132127 + 454: 10.37303,4.2613716 + 455: 11.919905,3.4176216 + 1058: 0.48348016,-65.511505 + 1059: -0.71964484,-67.042755 + 1447: 11.054192,-66.97813 + 1662: -46.974236,5.0132127 - node: color: '#FFFFFFFF' id: Grasse2 decals: 227: 33.683983,-26.016367 - 453: 9.31053,4.0426216 - 454: 11.357405,4.8394966 - 515: -8.980716,36.081215 - 1025: 49,23 - 1026: 49,29 - 1465: 11.007317,-67.97813 - 1680: -47.98986,4.9819627 - 3519: 29.065447,-38.00012 - 3524: 29.049822,-36.15637 + 452: 9.31053,4.0426216 + 453: 11.357405,4.8394966 + 514: -8.980716,36.081215 + 1006: 49,23 + 1007: 49,29 + 1446: 11.007317,-67.97813 + 1661: -47.98986,4.9819627 + 3499: 29.065447,-38.00012 + 3504: 29.049822,-36.15637 - node: color: '#FFFFFFFF' id: Grasse3 decals: 226: 32.949608,-25.985117 - 512: -9.011966,34.12809 - 583: -6.001801,-6.928444 - 584: -6.017426,-6.131569 - 1027: 50,23 - 1028: 48,29 - 1464: 10.976067,-68.97813 - 3518: 29.846697,-37.93762 - 3525: 29.909197,-36.18762 + 511: -9.011966,34.12809 + 564: -6.001801,-6.928444 + 565: -6.017426,-6.131569 + 1008: 50,23 + 1009: 48,29 + 1445: 10.976067,-68.97813 + 3498: 29.846697,-37.93762 + 3505: 29.909197,-36.18762 - node: color: '#52B4E996' id: HalfTileOverlayGreyscale @@ -3270,8 +3270,8 @@ entities: 291: 33,-17 292: 34,-17 293: 35,-17 - 3048: 47,-17 - 3049: 48,-17 + 3028: 47,-17 + 3029: 48,-17 - node: color: '#9FED5896' id: HalfTileOverlayGreyscale @@ -3285,15 +3285,15 @@ entities: color: '#A4610696' id: HalfTileOverlayGreyscale decals: - 682: 47,14 - 683: 48,14 - 684: 49,14 - 3103: 45,9 - 3104: 44,9 - 3387: 56,15 - 3388: 55,15 - 3389: 54,15 - 3390: 53,15 + 663: 47,14 + 664: 48,14 + 665: 49,14 + 3083: 45,9 + 3084: 44,9 + 3367: 56,15 + 3368: 55,15 + 3369: 54,15 + 3370: 53,15 - node: color: '#D0BF4AA7' id: HalfTileOverlayGreyscale @@ -3305,16 +3305,16 @@ entities: color: '#D381C996' id: HalfTileOverlayGreyscale decals: - 376: -42,14 - 377: -41,14 - 378: -40,14 - 379: -39,14 - 380: -38,14 - 609: -34,9 - 610: -33,9 - 611: -32,9 - 1775: -43,0 - 1776: -42,0 + 375: -42,14 + 376: -41,14 + 377: -40,14 + 378: -39,14 + 379: -38,14 + 590: -34,9 + 591: -33,9 + 592: -32,9 + 1756: -43,0 + 1757: -42,0 - node: color: '#DE3A3A96' id: HalfTileOverlayGreyscale @@ -3332,21 +3332,21 @@ entities: color: '#EFCC4196' id: HalfTileOverlayGreyscale decals: - 2274: 8,32 - 2275: 7,32 - 2276: 6,32 - 2277: 5,32 - 2278: 4,32 - 2339: 5,21 - 2340: 4,21 - 2341: 3,21 - 2342: 2,21 - 2343: 1,21 - 2344: 0,21 - 2345: -1,21 - 2346: -2,21 - 2366: 6,15 - 2367: 4,15 + 2254: 8,32 + 2255: 7,32 + 2256: 6,32 + 2257: 5,32 + 2258: 4,32 + 2319: 5,21 + 2320: 4,21 + 2321: 3,21 + 2322: 2,21 + 2323: 1,21 + 2324: 0,21 + 2325: -1,21 + 2326: -2,21 + 2346: 6,15 + 2347: 4,15 - node: color: '#52B4E996' id: HalfTileOverlayGreyscale180 @@ -3354,9 +3354,9 @@ entities: 5: 49,-24 6: 48,-24 7: 47,-24 - 3008: 34,-21 - 3009: 33,-21 - 3462: 50,-24 + 2988: 34,-21 + 2989: 33,-21 + 3442: 50,-24 - node: color: '#9FED5896' id: HalfTileOverlayGreyscale180 @@ -3368,9 +3368,9 @@ entities: color: '#A4610696' id: HalfTileOverlayGreyscale180 decals: - 649: 44,5 - 650: 45,5 - 662: 47,12 + 630: 44,5 + 631: 45,5 + 643: 47,12 - node: color: '#D0BF4AA7' id: HalfTileOverlayGreyscale180 @@ -3382,16 +3382,16 @@ entities: color: '#D381C93E' id: HalfTileOverlayGreyscale180 decals: - 405: -36,2 + 404: -36,2 - node: color: '#D381C996' id: HalfTileOverlayGreyscale180 decals: - 372: -38,11 - 373: -42,13 - 374: -41,13 - 375: -40,13 - 2137: -42,-11 + 371: -38,11 + 372: -42,13 + 373: -41,13 + 374: -40,13 + 2117: -42,-11 - node: color: '#DE3A3A96' id: HalfTileOverlayGreyscale180 @@ -3409,27 +3409,27 @@ entities: color: '#EFCC4196' id: HalfTileOverlayGreyscale180 decals: - 2279: 8,23 - 2280: 7,23 - 2281: 6,23 - 2282: 5,23 - 2283: 4,23 - 2331: 4,17 - 2332: 3,17 - 2333: 1,17 - 2334: 2,17 - 2335: 0,17 - 2336: -1,17 - 2337: -2,17 - 2338: -3,17 - 2363: 5,13 - 2364: 4,13 + 2259: 8,23 + 2260: 7,23 + 2261: 6,23 + 2262: 5,23 + 2263: 4,23 + 2311: 4,17 + 2312: 3,17 + 2313: 1,17 + 2314: 2,17 + 2315: 0,17 + 2316: -1,17 + 2317: -2,17 + 2318: -3,17 + 2343: 5,13 + 2344: 4,13 - node: color: '#334E6DC8' id: HalfTileOverlayGreyscale270 decals: - 598: -4,1 - 599: -3,2 + 579: -4,1 + 580: -3,2 - node: color: '#52B4E996' id: HalfTileOverlayGreyscale270 @@ -3445,8 +3445,8 @@ entities: 288: 43,-13 289: 43,-14 290: 43,-15 - 3004: 32,-18 - 3005: 32,-20 + 2984: 32,-18 + 2985: 32,-20 - node: color: '#9FED5896' id: HalfTileOverlayGreyscale270 @@ -3459,24 +3459,24 @@ entities: 27: 50,-28 28: 47,-27 29: 47,-26 - 2972: 43,-27 - 2973: 43,-29 - 2974: 43,-30 - 2975: 43,-31 - 2976: 43,-33 - 2977: 43,-34 + 2952: 43,-27 + 2953: 43,-29 + 2954: 43,-30 + 2955: 43,-31 + 2956: 43,-33 + 2957: 43,-34 - node: color: '#A4610696' id: HalfTileOverlayGreyscale270 decals: - 646: 43,6 - 647: 43,7 - 648: 43,8 - 658: 48,7 - 659: 48,8 - 660: 48,9 - 661: 48,10 - 3356: 48,6 + 627: 43,6 + 628: 43,7 + 629: 43,8 + 639: 48,7 + 640: 48,8 + 641: 48,9 + 642: 48,10 + 3336: 48,6 - node: color: '#D0BF4AA7' id: HalfTileOverlayGreyscale270 @@ -3496,7 +3496,7 @@ entities: color: '#D381C996' id: HalfTileOverlayGreyscale270 decals: - 381: -39,12 + 380: -39,12 - node: color: '#D4D4D428' id: HalfTileOverlayGreyscale270 @@ -3518,23 +3518,23 @@ entities: 326: -32,-8 335: -35,0 336: -35,1 - 1829: -32,-14 - 1830: -32,-7 + 1809: -32,-14 + 1810: -32,-7 - node: color: '#EFCC4196' id: HalfTileOverlayGreyscale270 decals: - 2328: -5,18 - 2329: -5,19 - 2330: -5,20 - 2353: 9,14 - 2365: 3,14 + 2308: -5,18 + 2309: -5,19 + 2310: -5,20 + 2333: 9,14 + 2345: 3,14 - node: color: '#334E6DC8' id: HalfTileOverlayGreyscale90 decals: - 597: 3,2 - 792: -15,3 + 578: 3,2 + 773: -15,3 - node: color: '#52B4E996' id: HalfTileOverlayGreyscale90 @@ -3552,8 +3552,8 @@ entities: 298: 45,-11 299: 45,-10 300: 45,-9 - 3050: 49,-18 - 3051: 49,-19 + 3030: 49,-18 + 3031: 49,-19 - node: color: '#9FED5896' id: HalfTileOverlayGreyscale90 @@ -3565,26 +3565,26 @@ entities: 45: 52,-31 46: 52,-32 47: 52,-33 - 2965: 45,-34 - 2966: 45,-32 - 2967: 45,-31 - 2968: 45,-30 - 2969: 45,-29 - 2970: 45,-28 - 2971: 45,-27 + 2945: 45,-34 + 2946: 45,-32 + 2947: 45,-31 + 2948: 45,-30 + 2949: 45,-29 + 2950: 45,-28 + 2951: 45,-27 - node: color: '#A4610696' id: HalfTileOverlayGreyscale90 decals: - 637: 41,5 - 638: 41,6 - 639: 41,7 - 640: 41,8 - 641: 41,9 - 642: 41,10 - 652: 46,6 - 653: 46,7 - 654: 46,8 + 618: 41,5 + 619: 41,6 + 620: 41,7 + 621: 41,8 + 622: 41,9 + 623: 41,10 + 633: 46,6 + 634: 46,7 + 635: 46,8 - node: color: '#D0BF4AA7' id: HalfTileOverlayGreyscale90 @@ -3598,8 +3598,8 @@ entities: color: '#D381C996' id: HalfTileOverlayGreyscale90 decals: - 370: -37,12 - 371: -37,13 + 369: -37,12 + 370: -37,13 - node: color: '#D4D4D428' id: HalfTileOverlayGreyscale90 @@ -3619,15 +3619,15 @@ entities: 320: -22,-7 340: -31,0 341: -31,1 - 1828: -22,-14 + 1808: -22,-14 - node: color: '#EFCC4196' id: HalfTileOverlayGreyscale90 decals: - 2351: 6,18 - 2352: 6,20 - 2361: 7,13 - 2362: 7,14 + 2331: 6,18 + 2332: 6,20 + 2341: 7,13 + 2342: 7,14 - node: angle: -3.141592653589793 rad color: '#FFFFFFFF' @@ -3639,286 +3639,286 @@ entities: color: '#FFFFFFFF' id: LoadingArea decals: - 664: 54,11 - 808: 43,6 + 645: 54,11 + 789: 43,6 - node: color: '#FFFFFFFF' id: LoadingArea decals: 161: 3,-26 - 612: -33,9 - 3059: -18,27 + 593: -33,9 + 3039: -18,27 - node: angle: 1.5707963267948966 rad color: '#D381C996' id: LoadingAreaGreyscale decals: - 2112: -42,-5 + 2092: -42,-5 - node: color: '#FFFFFFFF' id: MiniTileDarkCornerNe decals: - 3201: -116,21 - 3202: -116,25 + 3181: -116,21 + 3182: -116,25 - node: color: '#FFFFFFFF' id: MiniTileDarkCornerNw decals: - 3199: -108,21 - 3203: -108,25 + 3179: -108,21 + 3183: -108,25 - node: color: '#FFFFFFFF' id: MiniTileDarkCornerSe decals: - 3198: -116,30 - 3204: -116,27 + 3178: -116,30 + 3184: -116,27 - node: color: '#FFFFFFFF' id: MiniTileDarkCornerSw decals: - 3200: -108,30 - 3205: -108,27 + 3180: -108,30 + 3185: -108,27 - node: color: '#FFFFFFFF' id: MiniTileDarkLineE decals: - 3172: -116,22 - 3173: -116,23 - 3174: -116,24 - 3175: -116,26 - 3176: -116,28 - 3177: -116,29 + 3152: -116,22 + 3153: -116,23 + 3154: -116,24 + 3155: -116,26 + 3156: -116,28 + 3157: -116,29 - node: color: '#FFFFFFFF' id: MiniTileDarkLineN decals: - 3191: -109,21 - 3192: -110,21 - 3193: -111,21 - 3194: -112,21 - 3195: -113,21 - 3196: -114,21 - 3197: -115,21 + 3171: -109,21 + 3172: -110,21 + 3173: -111,21 + 3174: -112,21 + 3175: -113,21 + 3176: -114,21 + 3177: -115,21 - node: color: '#FFFFFFFF' id: MiniTileDarkLineS decals: - 3184: -109,30 - 3185: -110,30 - 3186: -111,30 - 3187: -112,30 - 3188: -113,30 - 3189: -114,30 - 3190: -115,30 + 3164: -109,30 + 3165: -110,30 + 3166: -111,30 + 3167: -112,30 + 3168: -113,30 + 3169: -114,30 + 3170: -115,30 - node: color: '#FFFFFFFF' id: MiniTileDarkLineW decals: - 1653: -41,2 - 1654: -41,3 - 1655: -41,4 - 1656: -41,5 - 3178: -108,22 - 3179: -108,23 - 3180: -108,24 - 3181: -108,26 - 3182: -108,28 - 3183: -108,29 - 3533: 35,18 + 1634: -41,2 + 1635: -41,3 + 1636: -41,4 + 1637: -41,5 + 3158: -108,22 + 3159: -108,23 + 3160: -108,24 + 3161: -108,26 + 3162: -108,28 + 3163: -108,29 + 3513: 35,18 - node: color: '#52B4E996' id: MonoOverlay decals: - 3000: 34,-20 - 3001: 33,-19 - 3002: 34,-18 + 2980: 34,-20 + 2981: 33,-19 + 2982: 34,-18 - node: color: '#80C71F95' id: MonoOverlay decals: - 1660: 47,-30 - 1661: 48,-29 - 1662: 49,-28 - 1663: 49,-30 - 1664: 47,-28 + 1641: 47,-30 + 1642: 48,-29 + 1643: 49,-28 + 1644: 49,-30 + 1645: 47,-28 - node: color: '#D4D4D40C' id: PavementCheckerAOverlay decals: - 3080: 35,-34 - 3081: 32,-33 - 3082: 31,-29 + 3060: 35,-34 + 3061: 32,-33 + 3062: 31,-29 - node: color: '#D4D4D428' id: PavementCheckerAOverlay decals: - 3069: 29,-34 - 3070: 30,-32 - 3071: 28,-34 - 3072: 28,-27 - 3073: 30,-29 - 3074: 32,-27 - 3075: 33,-28 - 3076: 33,-31 - 3077: 33,-30 - 3078: 34,-34 - 3079: 33,-33 + 3049: 29,-34 + 3050: 30,-32 + 3051: 28,-34 + 3052: 28,-27 + 3053: 30,-29 + 3054: 32,-27 + 3055: 33,-28 + 3056: 33,-31 + 3057: 33,-30 + 3058: 34,-34 + 3059: 33,-33 - node: color: '#D4D4D40C' id: PavementCheckerBOverlay decals: - 3093: 33,-34 - 3094: 28,-32 - 3095: 31,-27 - 3096: 32,-28 + 3073: 33,-34 + 3074: 28,-32 + 3075: 31,-27 + 3076: 32,-28 - node: color: '#D4D4D412' id: PavementCheckerBOverlay decals: - 3084: 30,-33 - 3085: 30,-34 - 3086: 29,-32 - 3087: 28,-33 - 3088: 30,-31 - 3089: 28,-28 - 3090: 30,-27 - 3091: 30,-28 - 3092: 31,-29 + 3064: 30,-33 + 3065: 30,-34 + 3066: 29,-32 + 3067: 28,-33 + 3068: 30,-31 + 3069: 28,-28 + 3070: 30,-27 + 3071: 30,-28 + 3072: 31,-29 - node: color: '#D4D4D428' id: PavementCheckerBOverlay decals: - 3063: 35,-30 - 3064: 32,-29 - 3065: 31,-28 - 3066: 29,-28 - 3067: 30,-30 - 3068: 29,-33 - 3083: 31,-33 + 3043: 35,-30 + 3044: 32,-29 + 3045: 31,-28 + 3046: 29,-28 + 3047: 30,-30 + 3048: 29,-33 + 3063: 31,-33 - node: cleanable: True color: '#169C9CFF' id: Prima decals: - 2882: 4.4262443,-52.031498 + 2862: 4.4262443,-52.031498 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale decals: - 571: -1,-8 - 572: -1,-7 - 573: -1,-6 - 574: -1,-5 - 575: -1,-4 - 576: -1,-3 - 603: -3,1 - 604: -4,0 - 721: -74,18 - 722: -73,18 - 989: -1,-21 - 990: -1,-20 - 991: -1,-19 - 992: -1,-18 - 993: -1,-17 - 994: -1,-16 - 995: -1,-15 - 996: -1,-14 - 997: -1,-13 - 998: -1,-12 - 999: -1,-11 - 1000: -1,-10 + 552: -1,-8 + 553: -1,-7 + 554: -1,-6 + 555: -1,-5 + 556: -1,-4 + 557: -1,-3 + 584: -3,1 + 585: -4,0 + 702: -74,18 + 703: -73,18 + 970: -1,-21 + 971: -1,-20 + 972: -1,-19 + 973: -1,-18 + 974: -1,-17 + 975: -1,-16 + 976: -1,-15 + 977: -1,-14 + 978: -1,-13 + 979: -1,-12 + 980: -1,-11 + 981: -1,-10 - node: color: '#52B4E92E' id: QuarterTileOverlayGreyscale decals: - 1122: 4,-66 + 1103: 4,-66 - node: color: '#52B4E944' id: QuarterTileOverlayGreyscale decals: - 1177: -3,-59 - 1178: -3,-58 - 1179: -3,-57 + 1158: -3,-59 + 1159: -3,-58 + 1160: -3,-57 - node: color: '#52B4E996' id: QuarterTileOverlayGreyscale decals: 9: 51,-21 14: 47,-24 - 2999: 44,-15 - 3045: 48,-19 + 2979: 44,-15 + 3025: 48,-19 - node: color: '#79150096' id: QuarterTileOverlayGreyscale decals: - 1048: 45,26 - 1049: 48,27 - 2839: 37,26 - 2840: 36,26 - 2841: 35,26 - 2842: 34,26 - 2843: 33,26 - 2844: 32,26 - 2845: 20,26 - 2846: 21,26 - 2847: 22,26 - 2848: 23,26 - 2849: 24,26 - 2850: 25,26 - 2851: 26,26 - 2852: 27,26 - 2853: 28,26 - 2854: 29,26 - 2855: 30,26 - 2856: 31,26 - 3060: 19,26 + 1029: 45,26 + 1030: 48,27 + 2819: 37,26 + 2820: 36,26 + 2821: 35,26 + 2822: 34,26 + 2823: 33,26 + 2824: 32,26 + 2825: 20,26 + 2826: 21,26 + 2827: 22,26 + 2828: 23,26 + 2829: 24,26 + 2830: 25,26 + 2831: 26,26 + 2832: 27,26 + 2833: 28,26 + 2834: 29,26 + 2835: 30,26 + 2836: 31,26 + 3040: 19,26 - node: color: '#A4610696' id: QuarterTileOverlayGreyscale decals: - 685: 50,14 - 740: 27,9 - 741: 25,9 - 742: 26,9 - 743: 21,9 - 744: 20,9 - 745: 19,9 - 3282: 37,1 - 3283: 37,0 - 3284: 37,-1 - 3299: 51,4 - 3300: 50,4 - 3301: 49,4 - 3302: 48,4 - 3303: 48,3 - 3304: 47,3 - 3305: 46,3 - 3306: 45,3 - 3307: 44,3 - 3308: 43,3 - 3309: 42,3 - 3310: 41,3 - 3311: 40,3 + 666: 50,14 + 721: 27,9 + 722: 25,9 + 723: 26,9 + 724: 21,9 + 725: 20,9 + 726: 19,9 + 3262: 37,1 + 3263: 37,0 + 3264: 37,-1 + 3279: 51,4 + 3280: 50,4 + 3281: 49,4 + 3282: 48,4 + 3283: 48,3 + 3284: 47,3 + 3285: 46,3 + 3286: 45,3 + 3287: 44,3 + 3288: 43,3 + 3289: 42,3 + 3290: 41,3 + 3291: 40,3 - node: color: '#D381C996' id: QuarterTileOverlayGreyscale decals: - 383: -35,11 - 384: -35,12 - 385: -35,13 - 386: -35,14 - 387: -35,15 - 1736: -31,9 - 1738: -37,9 - 1739: -38,9 - 1740: -39,9 - 1741: -39,8 - 1742: -39,7 - 1743: -39,6 - 2119: -40,-4 - 2120: -39,-4 - 2121: -39,-3 - 2564: 48,-22 + 382: -35,11 + 383: -35,12 + 384: -35,13 + 385: -35,14 + 386: -35,15 + 1717: -31,9 + 1719: -37,9 + 1720: -38,9 + 1721: -39,9 + 1722: -39,8 + 1723: -39,7 + 1724: -39,6 + 2099: -40,-4 + 2100: -39,-4 + 2101: -39,-3 + 2544: 48,-22 - node: color: '#D4D4D428' id: QuarterTileOverlayGreyscale @@ -3926,215 +3926,215 @@ entities: 196: 15,-5 197: 15,-6 198: 15,-7 - 437: 15,-14 - 438: 15,-13 - 439: 15,-12 - 440: 15,-11 - 441: 15,-15 - 1231: -3,-54 - 1238: -2,-52 - 1239: -2,-51 - 1240: -2,-50 - 1241: -2,-49 - 1242: -2,-48 - 1243: -2,-47 - 1244: -2,-46 - 1290: -17,11 - 1291: -17,12 - 1292: -17,13 - 1293: -17,14 - 1294: -17,15 - 1295: -17,17 - 1296: -17,16 - 1297: -17,18 - 1298: -17,19 - 1299: -17,20 - 1300: -17,21 - 1499: 6,-22 - 1500: 6,-21 - 1501: 6,-20 - 1502: 7,-20 - 1503: 8,-20 - 1504: 9,-20 - 1505: 6,-23 - 1506: 5,-23 - 1507: 4,-23 - 1508: 3,-23 - 1529: -4,10 - 1530: -5,10 - 1531: -6,10 - 1532: -7,10 - 1533: -7,9 - 1534: -8,9 - 1535: -9,9 - 1536: -10,9 - 1537: -11,9 - 1538: -12,9 - 1564: -31,25 - 1565: -29,25 - 1566: -30,25 - 1567: -28,25 - 1568: -27,25 - 1569: -26,25 - 1570: -25,25 - 1571: -24,25 - 1596: -22,-23 - 1597: -23,-23 - 1598: -24,-23 - 1599: -25,-23 - 1600: -26,-23 - 1604: 10,-23 - 1605: 11,-23 - 1606: 12,-23 - 1607: 13,-23 - 1608: 14,-23 - 1628: 36,10 - 1629: 36,11 - 1630: 37,11 - 1631: 38,11 - 1768: 8,7 - 2232: -39,-19 - 2233: -39,-20 - 2234: -39,-21 - 2235: -39,-22 - 2236: -39,-23 - 2271: -10,-23 - 2272: -11,-23 - 2273: -12,-23 - 2484: -28,9 - 2485: -29,9 - 2486: -30,9 - 2487: -17,5 - 2488: -17,4 - 2489: -17,3 - 2490: -18,9 - 2493: -17,9 - 2752: 15,12 - 2753: 15,11 - 2754: 15,9 - 2756: 15,-22 - 2757: 15,-23 - 2760: -17,-23 - 2785: 15,23 - 2786: 15,24 - 2787: 15,25 - 2788: 15,27 - 2789: 15,28 - 2803: -1,-41 - 2804: -1,-40 - 2805: -1,-39 - 2806: -1,-38 - 2807: -1,-37 - 2808: -1,-36 - 2809: -1,-35 - 2810: -1,-34 - 2811: -1,-33 - 2812: -1,-32 - 2813: -1,-31 - 2814: -1,-30 - 2815: -1,-29 - 2816: -1,-28 + 436: 15,-14 + 437: 15,-13 + 438: 15,-12 + 439: 15,-11 + 440: 15,-15 + 1212: -3,-54 + 1219: -2,-52 + 1220: -2,-51 + 1221: -2,-50 + 1222: -2,-49 + 1223: -2,-48 + 1224: -2,-47 + 1225: -2,-46 + 1271: -17,11 + 1272: -17,12 + 1273: -17,13 + 1274: -17,14 + 1275: -17,15 + 1276: -17,17 + 1277: -17,16 + 1278: -17,18 + 1279: -17,19 + 1280: -17,20 + 1281: -17,21 + 1480: 6,-22 + 1481: 6,-21 + 1482: 6,-20 + 1483: 7,-20 + 1484: 8,-20 + 1485: 9,-20 + 1486: 6,-23 + 1487: 5,-23 + 1488: 4,-23 + 1489: 3,-23 + 1510: -4,10 + 1511: -5,10 + 1512: -6,10 + 1513: -7,10 + 1514: -7,9 + 1515: -8,9 + 1516: -9,9 + 1517: -10,9 + 1518: -11,9 + 1519: -12,9 + 1545: -31,25 + 1546: -29,25 + 1547: -30,25 + 1548: -28,25 + 1549: -27,25 + 1550: -26,25 + 1551: -25,25 + 1552: -24,25 + 1577: -22,-23 + 1578: -23,-23 + 1579: -24,-23 + 1580: -25,-23 + 1581: -26,-23 + 1585: 10,-23 + 1586: 11,-23 + 1587: 12,-23 + 1588: 13,-23 + 1589: 14,-23 + 1609: 36,10 + 1610: 36,11 + 1611: 37,11 + 1612: 38,11 + 1749: 8,7 + 2212: -39,-19 + 2213: -39,-20 + 2214: -39,-21 + 2215: -39,-22 + 2216: -39,-23 + 2251: -10,-23 + 2252: -11,-23 + 2253: -12,-23 + 2464: -28,9 + 2465: -29,9 + 2466: -30,9 + 2467: -17,5 + 2468: -17,4 + 2469: -17,3 + 2470: -18,9 + 2473: -17,9 + 2732: 15,12 + 2733: 15,11 + 2734: 15,9 + 2736: 15,-22 + 2737: 15,-23 + 2740: -17,-23 + 2765: 15,23 + 2766: 15,24 + 2767: 15,25 + 2768: 15,27 + 2769: 15,28 + 2783: -1,-41 + 2784: -1,-40 + 2785: -1,-39 + 2786: -1,-38 + 2787: -1,-37 + 2788: -1,-36 + 2789: -1,-35 + 2790: -1,-34 + 2791: -1,-33 + 2792: -1,-32 + 2793: -1,-31 + 2794: -1,-30 + 2795: -1,-29 + 2796: -1,-28 - node: color: '#D4D4D437' id: QuarterTileOverlayGreyscale decals: - 1123: -3,-61 - 1124: -3,-62 - 1125: -3,-63 - 1126: -3,-64 - 1127: -3,-65 - 1128: -3,-66 - 1129: -4,-66 - 1130: -4,-67 - 1131: -4,-68 - 1132: -4,-69 - 1133: -3,-70 - 1134: -3,-71 - 1135: -3,-72 - 1136: -3,-73 - 1137: -3,-74 + 1104: -3,-61 + 1105: -3,-62 + 1106: -3,-63 + 1107: -3,-64 + 1108: -3,-65 + 1109: -3,-66 + 1110: -4,-66 + 1111: -4,-67 + 1112: -4,-68 + 1113: -4,-69 + 1114: -3,-70 + 1115: -3,-71 + 1116: -3,-72 + 1117: -3,-73 + 1118: -3,-74 - node: color: '#D4D4D441' id: QuarterTileOverlayGreyscale decals: - 1058: 43,26 - 1059: 47,26 + 1039: 43,26 + 1040: 47,26 - node: color: '#D4D4D496' id: QuarterTileOverlayGreyscale decals: - 1689: 51,22 - 1690: 50,22 - 1691: 49,22 - 1692: 48,22 - 1693: 47,22 - 1701: 52,23 - 1702: 52,22 - 1720: 41,18 - 1721: 40,18 - 1722: 39,18 + 1670: 51,22 + 1671: 50,22 + 1672: 49,22 + 1673: 48,22 + 1674: 47,22 + 1682: 52,23 + 1683: 52,22 + 1701: 41,18 + 1702: 40,18 + 1703: 39,18 - node: color: '#DE3A3A96' id: QuarterTileOverlayGreyscale decals: - 759: -17,-17 - 760: -17,-16 - 761: -17,-15 - 762: -17,-14 - 763: -17,-13 - 764: -17,-12 - 765: -17,-11 - 766: -17,-10 - 767: -17,-9 - 768: -17,-8 - 769: -17,-7 - 770: -17,-6 - 806: -18,1 - 807: -18,2 - 1778: -11,-16 - 1779: -11,-15 - 1780: -11,-14 - 1781: -11,-13 - 1782: -11,-12 - 1788: -10,-12 + 740: -17,-17 + 741: -17,-16 + 742: -17,-15 + 743: -17,-14 + 744: -17,-13 + 745: -17,-12 + 746: -17,-11 + 747: -17,-10 + 748: -17,-9 + 749: -17,-8 + 750: -17,-7 + 751: -17,-6 + 787: -18,1 + 788: -18,2 + 1758: -11,-16 + 1759: -11,-15 + 1760: -11,-14 + 1761: -11,-13 + 1762: -11,-12 + 1768: -10,-12 - node: color: '#EFCC4196' id: QuarterTileOverlayGreyscale decals: - 2359: 9,13 - 2380: -1,11 - 2381: -2,11 - 2382: -3,11 - 2383: -4,11 + 2339: 9,13 + 2360: -1,11 + 2361: -2,11 + 2362: -3,11 + 2363: -4,11 - node: color: '#FFEF9292' id: QuarterTileOverlayGreyscale decals: - 2986: 44,-35 + 2966: 44,-35 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale180 decals: - 793: -15,4 + 774: -15,4 - node: color: '#52B4E92E' id: QuarterTileOverlayGreyscale180 decals: - 1107: 3,-61 - 1108: 3,-62 - 1109: 3,-63 - 1110: 3,-64 - 1111: 3,-65 - 1112: 4,-66 - 1113: 4,-67 - 1114: 4,-68 - 1115: 4,-69 - 1116: 3,-70 - 1117: 3,-71 - 1118: 3,-72 - 1119: 3,-73 - 1120: 3,-74 - 1121: 3,-69 + 1088: 3,-61 + 1089: 3,-62 + 1090: 3,-63 + 1091: 3,-64 + 1092: 3,-65 + 1093: 4,-66 + 1094: 4,-67 + 1095: 4,-68 + 1096: 4,-69 + 1097: 3,-70 + 1098: 3,-71 + 1099: 3,-72 + 1100: 3,-73 + 1101: 3,-74 + 1102: 3,-69 - node: color: '#52B4E996' id: QuarterTileOverlayGreyscale180 @@ -4144,16 +4144,16 @@ entities: 305: 39,-25 306: 38,-25 307: 37,-25 - 2998: 44,-9 - 3046: 47,-18 + 2978: 44,-9 + 3026: 47,-18 - node: color: '#79150096' id: QuarterTileOverlayGreyscale180 decals: - 1041: 56,20 - 1042: 54,20 - 1043: 52,20 - 1046: 56,22 + 1022: 56,20 + 1023: 54,20 + 1024: 52,20 + 1027: 56,22 - node: color: '#9FED5896' id: QuarterTileOverlayGreyscale180 @@ -4165,155 +4165,155 @@ entities: color: '#A4610696' id: QuarterTileOverlayGreyscale180 decals: - 733: 41,11 - 746: 34,7 - 747: 33,7 - 748: 32,7 - 749: 31,7 - 750: 30,7 - 751: 29,7 - 752: 28,7 - 754: 38,4 - 755: 41,13 - 756: 41,14 - 757: 41,15 - 758: 41,16 + 714: 41,11 + 727: 34,7 + 728: 33,7 + 729: 32,7 + 730: 31,7 + 731: 30,7 + 732: 29,7 + 733: 28,7 + 735: 38,4 + 736: 41,13 + 737: 41,14 + 738: 41,15 + 739: 41,16 - node: color: '#D381C996' id: QuarterTileOverlayGreyscale180 decals: - 2565: 50,-23 + 2545: 50,-23 - node: color: '#D4D4D428' id: QuarterTileOverlayGreyscale180 decals: - 1579: -28,7 - 1580: -29,7 - 1581: -30,7 - 1582: -31,7 - 1583: -32,7 - 1584: -33,7 - 1585: -34,7 - 1586: -35,7 - 1601: 9,-20 - 1602: 9,-21 - 1603: 9,-22 - 1635: -14,-2 - 1636: -15,-2 - 1637: -15,-3 - 1638: -15,-4 - 1639: -15,-5 - 1640: -15,-6 - 1641: -15,-7 - 1642: -15,-8 - 1643: -15,-9 - 1644: -15,5 - 1645: -15,6 - 1646: -15,7 - 1647: -14,7 - 1648: 10,7 - 1649: 9,7 - 1650: 8,7 - 1744: -12,7 - 1745: -11,7 - 1746: -10,7 - 1747: -9,7 - 1748: -8,7 - 1749: -8,8 - 1750: -7,8 - 1751: -6,8 - 1752: -5,8 - 1753: -5,9 - 1754: -4,9 - 1755: -3,9 - 1756: -2,9 - 1757: -1,9 - 2256: -28,-25 - 2257: -29,-25 - 2781: -28,23 - 2782: -29,23 - 2783: -30,23 - 2784: -31,23 - 2832: 1,-43 - 2833: 2,-78 - 2834: 2,-77 - 2835: 2,-76 + 1560: -28,7 + 1561: -29,7 + 1562: -30,7 + 1563: -31,7 + 1564: -32,7 + 1565: -33,7 + 1566: -34,7 + 1567: -35,7 + 1582: 9,-20 + 1583: 9,-21 + 1584: 9,-22 + 1616: -14,-2 + 1617: -15,-2 + 1618: -15,-3 + 1619: -15,-4 + 1620: -15,-5 + 1621: -15,-6 + 1622: -15,-7 + 1623: -15,-8 + 1624: -15,-9 + 1625: -15,5 + 1626: -15,6 + 1627: -15,7 + 1628: -14,7 + 1629: 10,7 + 1630: 9,7 + 1631: 8,7 + 1725: -12,7 + 1726: -11,7 + 1727: -10,7 + 1728: -9,7 + 1729: -8,7 + 1730: -8,8 + 1731: -7,8 + 1732: -6,8 + 1733: -5,8 + 1734: -5,9 + 1735: -4,9 + 1736: -3,9 + 1737: -2,9 + 1738: -1,9 + 2236: -28,-25 + 2237: -29,-25 + 2761: -28,23 + 2762: -29,23 + 2763: -30,23 + 2764: -31,23 + 2812: 1,-43 + 2813: 2,-78 + 2814: 2,-77 + 2815: 2,-76 - node: color: '#D4D4D437' id: QuarterTileOverlayGreyscale180 decals: - 1138: -4,-69 - 1171: 3,-59 - 1172: 3,-58 - 1173: 3,-57 + 1119: -4,-69 + 1152: 3,-59 + 1153: 3,-58 + 1154: 3,-57 - node: color: '#D4D4D441' id: QuarterTileOverlayGreyscale180 decals: - 1053: 56,21 - 1054: 55,20 - 1055: 53,20 + 1034: 56,21 + 1035: 55,20 + 1036: 53,20 - node: color: '#D4D4D496' id: QuarterTileOverlayGreyscale180 decals: - 1694: 46,23 - 1695: 46,24 - 1696: 47,24 - 1697: 48,24 - 1698: 49,24 - 1699: 50,24 - 1700: 51,24 - 1723: 39,20 - 1724: 40,20 - 1725: 41,20 + 1675: 46,23 + 1676: 46,24 + 1677: 47,24 + 1678: 48,24 + 1679: 49,24 + 1680: 50,24 + 1681: 51,24 + 1704: 39,20 + 1705: 40,20 + 1706: 41,20 - node: color: '#EFB3414A' id: QuarterTileOverlayGreyscale180 decals: - 3239: 19,6 - 3240: 20,6 - 3241: 20,7 - 3242: 21,7 - 3243: 22,7 + 3219: 19,6 + 3220: 20,6 + 3221: 20,7 + 3222: 21,7 + 3223: 22,7 - node: color: '#EFB34160' id: QuarterTileOverlayGreyscale180 decals: - 2734: 17,19 - 2735: 17,20 - 2736: 17,21 + 2714: 17,19 + 2715: 17,20 + 2716: 17,21 - node: color: '#FFEF9292' id: QuarterTileOverlayGreyscale180 decals: - 2987: 44,-27 + 2967: 44,-27 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale270 decals: - 718: -74,16 - 719: -73,16 - 720: -72,16 + 699: -74,16 + 700: -73,16 + 701: -72,16 - node: color: '#52B4E92E' id: QuarterTileOverlayGreyscale270 decals: - 1091: -3,-74 - 1092: -3,-73 - 1093: -3,-72 - 1094: -3,-71 - 1095: -3,-70 - 1096: -3,-69 - 1097: -4,-69 - 1098: -4,-68 - 1099: -4,-67 - 1100: -4,-66 - 1101: -3,-65 - 1102: -3,-64 - 1103: -3,-63 - 1104: -3,-62 - 1105: -3,-61 + 1072: -3,-74 + 1073: -3,-73 + 1074: -3,-72 + 1075: -3,-71 + 1076: -3,-70 + 1077: -3,-69 + 1078: -4,-69 + 1079: -4,-68 + 1080: -4,-67 + 1081: -4,-66 + 1082: -3,-65 + 1083: -3,-64 + 1084: -3,-63 + 1085: -3,-62 + 1086: -3,-61 - node: color: '#52B4E996' id: QuarterTileOverlayGreyscale270 @@ -4323,27 +4323,27 @@ entities: color: '#79150096' id: QuarterTileOverlayGreyscale270 decals: - 1038: 42,20 - 1039: 44,20 - 1040: 46,20 - 1710: 47,24 - 1711: 48,24 - 1712: 49,24 - 1713: 50,24 - 1714: 51,24 - 1715: 52,24 - 1716: 52,23 - 1726: 41,20 - 1727: 40,20 - 1728: 39,20 + 1019: 42,20 + 1020: 44,20 + 1021: 46,20 + 1691: 47,24 + 1692: 48,24 + 1693: 49,24 + 1694: 50,24 + 1695: 51,24 + 1696: 52,24 + 1697: 52,23 + 1707: 41,20 + 1708: 40,20 + 1709: 39,20 - node: color: '#9FED584A' id: QuarterTileOverlayGreyscale270 decals: - 3409: 39,16 - 3410: 39,15 - 3411: 39,14 - 3412: 39,13 + 3389: 39,16 + 3390: 39,15 + 3391: 39,14 + 3392: 39,13 - node: color: '#9FED5896' id: QuarterTileOverlayGreyscale270 @@ -4354,40 +4354,40 @@ entities: color: '#A4610696' id: QuarterTileOverlayGreyscale270 decals: - 663: 48,12 - 753: 36,4 - 3325: 45,-2 - 3326: 45,-1 - 3327: 45,0 - 3328: 45,1 - 3329: 45,2 - 3330: 44,2 - 3331: 43,2 - 3357: 49,6 - 3358: 50,6 - 3359: 54,6 - 3360: 51,6 - 3361: 52,6 - 3362: 53,6 - 3363: 55,6 - 3364: 56,6 + 644: 48,12 + 734: 36,4 + 3305: 45,-2 + 3306: 45,-1 + 3307: 45,0 + 3308: 45,1 + 3309: 45,2 + 3310: 44,2 + 3311: 43,2 + 3337: 49,6 + 3338: 50,6 + 3339: 54,6 + 3340: 51,6 + 3341: 52,6 + 3342: 53,6 + 3343: 55,6 + 3344: 56,6 - node: color: '#D381C996' id: QuarterTileOverlayGreyscale270 decals: - 382: -39,13 - 2122: -39,1 - 2123: -39,2 - 2124: -39,3 - 2125: -39,4 - 2126: -40,-8 - 2127: -39,-8 - 2128: -39,-9 - 2129: -39,-10 - 2130: -39,-11 - 2131: -39,-12 - 2132: -40,-7 - 2563: 48,-23 + 381: -39,13 + 2102: -39,1 + 2103: -39,2 + 2104: -39,3 + 2105: -39,4 + 2106: -40,-8 + 2107: -39,-8 + 2108: -39,-9 + 2109: -39,-10 + 2110: -39,-11 + 2111: -39,-12 + 2112: -40,-7 + 2543: 48,-23 - node: color: '#D4D4D428' id: QuarterTileOverlayGreyscale270 @@ -4395,190 +4395,190 @@ entities: 199: 15,2 200: 15,3 201: 15,4 - 1210: -5,-56 - 1211: -6,-56 - 1212: -7,-56 - 1213: -8,-56 - 1214: -9,-56 - 1215: -10,-56 - 1216: -11,-56 - 1217: -12,-56 - 1218: -13,-56 - 1219: -14,-56 - 1220: -15,-56 - 1221: -16,-56 - 1222: -17,-56 - 1223: -18,-56 - 1224: -19,-56 - 1253: 20,23 - 1254: 21,23 - 1255: 22,23 - 1256: 23,23 - 1257: 24,23 - 1258: 25,23 - 1259: 27,23 - 1260: 28,23 - 1261: 29,23 - 1262: 30,23 - 1263: 34,23 - 1264: 35,23 - 1265: 36,23 - 1266: 37,23 - 1545: -44,19 - 1546: -44,20 - 1547: -44,21 - 1548: -44,22 - 1549: -44,23 - 1550: -44,24 - 1551: -44,25 - 1572: -20,7 - 1573: -21,7 - 1574: -22,7 - 1575: -23,7 - 1576: -24,7 - 1577: -25,7 - 1578: -26,7 - 1587: -39,-25 - 1588: -38,-25 - 1589: -37,-25 - 1590: -36,-25 - 1591: -35,-25 - 1592: -34,-25 - 1593: -33,-25 - 1594: -32,-25 - 1595: -31,-25 - 1651: 12,7 - 1652: 13,7 - 1758: 1,9 - 1759: 2,9 - 1760: 3,9 - 1761: 4,9 - 1762: 5,9 - 1763: 5,8 - 1764: 6,8 - 1765: 7,8 - 1766: 8,8 - 1767: 8,7 - 2252: -39,-17 - 2253: -39,-16 - 2254: -39,-15 - 2255: -39,-14 - 2258: -26,-25 - 2259: -25,-25 - 2260: -24,-25 - 2261: -23,-25 - 2262: -22,-25 - 2263: -21,-25 - 2264: -20,-25 - 2265: -19,-25 - 2266: -18,-25 - 2267: -17,-25 - 2268: -16,-25 - 2269: -15,-25 - 2270: -14,-25 - 2494: -17,7 - 2495: -18,7 - 2744: 15,14 - 2745: 15,15 - 2746: 15,16 - 2747: 15,17 - 2748: 15,18 - 2749: 15,19 - 2750: 15,20 - 2751: 15,21 - 2761: -17,-22 - 2775: -24,23 - 2776: -23,23 - 2777: -22,23 - 2778: -21,23 - 2779: -20,23 - 2780: -19,23 - 2831: -1,-43 - 2836: -2,-78 - 2837: -2,-77 - 2838: -2,-76 + 1191: -5,-56 + 1192: -6,-56 + 1193: -7,-56 + 1194: -8,-56 + 1195: -9,-56 + 1196: -10,-56 + 1197: -11,-56 + 1198: -12,-56 + 1199: -13,-56 + 1200: -14,-56 + 1201: -15,-56 + 1202: -16,-56 + 1203: -17,-56 + 1204: -18,-56 + 1205: -19,-56 + 1234: 20,23 + 1235: 21,23 + 1236: 22,23 + 1237: 23,23 + 1238: 24,23 + 1239: 25,23 + 1240: 27,23 + 1241: 28,23 + 1242: 29,23 + 1243: 30,23 + 1244: 34,23 + 1245: 35,23 + 1246: 36,23 + 1247: 37,23 + 1526: -44,19 + 1527: -44,20 + 1528: -44,21 + 1529: -44,22 + 1530: -44,23 + 1531: -44,24 + 1532: -44,25 + 1553: -20,7 + 1554: -21,7 + 1555: -22,7 + 1556: -23,7 + 1557: -24,7 + 1558: -25,7 + 1559: -26,7 + 1568: -39,-25 + 1569: -38,-25 + 1570: -37,-25 + 1571: -36,-25 + 1572: -35,-25 + 1573: -34,-25 + 1574: -33,-25 + 1575: -32,-25 + 1576: -31,-25 + 1632: 12,7 + 1633: 13,7 + 1739: 1,9 + 1740: 2,9 + 1741: 3,9 + 1742: 4,9 + 1743: 5,9 + 1744: 5,8 + 1745: 6,8 + 1746: 7,8 + 1747: 8,8 + 1748: 8,7 + 2232: -39,-17 + 2233: -39,-16 + 2234: -39,-15 + 2235: -39,-14 + 2238: -26,-25 + 2239: -25,-25 + 2240: -24,-25 + 2241: -23,-25 + 2242: -22,-25 + 2243: -21,-25 + 2244: -20,-25 + 2245: -19,-25 + 2246: -18,-25 + 2247: -17,-25 + 2248: -16,-25 + 2249: -15,-25 + 2250: -14,-25 + 2474: -17,7 + 2475: -18,7 + 2724: 15,14 + 2725: 15,15 + 2726: 15,16 + 2727: 15,17 + 2728: 15,18 + 2729: 15,19 + 2730: 15,20 + 2731: 15,21 + 2741: -17,-22 + 2755: -24,23 + 2756: -23,23 + 2757: -22,23 + 2758: -21,23 + 2759: -20,23 + 2760: -19,23 + 2811: -1,-43 + 2816: -2,-78 + 2817: -2,-77 + 2818: -2,-76 - node: color: '#D4D4D437' id: QuarterTileOverlayGreyscale270 decals: - 1153: 4,-69 - 1168: -3,-59 - 1169: -3,-58 - 1170: -3,-57 + 1134: 4,-69 + 1149: -3,-59 + 1150: -3,-58 + 1151: -3,-57 - node: color: '#D4D4D441' id: QuarterTileOverlayGreyscale270 decals: - 1056: 45,20 - 1057: 43,20 + 1037: 45,20 + 1038: 43,20 - node: color: '#DE3A3A96' id: QuarterTileOverlayGreyscale270 decals: - 804: -18,-1 - 805: -18,0 + 785: -18,-1 + 786: -18,0 - node: color: '#DF81C96C' id: QuarterTileOverlayGreyscale270 decals: - 3324: 48,4 + 3304: 48,4 - node: color: '#EFB3414A' id: QuarterTileOverlayGreyscale270 decals: - 3234: 27,6 - 3235: 26,6 - 3236: 26,7 - 3237: 25,7 - 3238: 24,7 + 3214: 27,6 + 3215: 26,6 + 3216: 26,7 + 3217: 25,7 + 3218: 24,7 - node: color: '#EFCC4196' id: QuarterTileOverlayGreyscale270 decals: - 2360: 9,15 + 2340: 9,15 - node: color: '#EFD54193' id: QuarterTileOverlayGreyscale270 decals: - 3487: 6,13 + 3467: 6,13 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale90 decals: - 577: 1,-8 - 578: 1,-7 - 579: 1,-6 - 580: 1,-5 - 581: 1,-4 - 582: 1,-3 - 601: 3,1 - 602: -4,1 - 605: 4,0 - 796: -15,2 - 977: 1,-10 - 978: 1,-11 - 979: 1,-12 - 980: 1,-13 - 981: 1,-14 - 982: 1,-15 - 983: 1,-16 - 984: 1,-17 - 985: 1,-18 - 986: 1,-19 - 987: 1,-20 - 988: 1,-21 + 558: 1,-8 + 559: 1,-7 + 560: 1,-6 + 561: 1,-5 + 562: 1,-4 + 563: 1,-3 + 582: 3,1 + 583: -4,1 + 586: 4,0 + 777: -15,2 + 958: 1,-10 + 959: 1,-11 + 960: 1,-12 + 961: 1,-13 + 962: 1,-14 + 963: 1,-15 + 964: 1,-16 + 965: 1,-17 + 966: 1,-18 + 967: 1,-19 + 968: 1,-20 + 969: 1,-21 - node: color: '#52B4E92E' id: QuarterTileOverlayGreyscale90 decals: - 1106: -4,-66 + 1087: -4,-66 - node: color: '#52B4E944' id: QuarterTileOverlayGreyscale90 decals: - 1174: 3,-59 - 1175: 3,-58 - 1176: 3,-57 + 1155: 3,-59 + 1156: 3,-58 + 1157: 3,-57 - node: color: '#52B4E996' id: QuarterTileOverlayGreyscale90 @@ -4593,20 +4593,20 @@ entities: color: '#79150096' id: QuarterTileOverlayGreyscale90 decals: - 1044: 56,26 - 1045: 56,24 - 1047: 53,26 - 1050: 50,27 - 1703: 51,22 - 1704: 50,22 - 1705: 49,22 - 1706: 48,22 - 1707: 47,22 - 1708: 46,22 - 1709: 46,23 - 1717: 41,18 - 1718: 40,18 - 1719: 39,18 + 1025: 56,26 + 1026: 56,24 + 1028: 53,26 + 1031: 50,27 + 1684: 51,22 + 1685: 50,22 + 1686: 49,22 + 1687: 48,22 + 1688: 47,22 + 1689: 46,22 + 1690: 46,23 + 1698: 41,18 + 1699: 40,18 + 1700: 39,18 - node: color: '#9FED5896' id: QuarterTileOverlayGreyscale90 @@ -4616,286 +4616,286 @@ entities: color: '#A4610696' id: QuarterTileOverlayGreyscale90 decals: - 734: 34,9 - 735: 33,9 - 736: 32,9 - 737: 31,9 - 738: 30,9 - 739: 29,9 + 715: 34,9 + 716: 33,9 + 717: 32,9 + 718: 31,9 + 719: 30,9 + 720: 29,9 - node: color: '#D381C996' id: QuarterTileOverlayGreyscale90 decals: - 1737: -35,9 - 2566: 50,-22 - 2691: -55,17 - 2692: -56,17 - 2693: -57,17 - 2694: -54,17 + 1718: -35,9 + 2546: 50,-22 + 2671: -55,17 + 2672: -56,17 + 2673: -57,17 + 2674: -54,17 - node: color: '#D4D4D428' id: QuarterTileOverlayGreyscale90 decals: - 1225: 10,-54 - 1226: 9,-54 - 1227: 7,-54 - 1228: 8,-54 - 1229: 5,-54 - 1230: 3,-54 - 1232: 2,-47 - 1233: 2,-48 - 1234: 2,-49 - 1235: 2,-50 - 1236: 2,-51 - 1237: 2,-52 - 1510: -3,-23 - 1511: -4,-23 - 1512: -5,-23 - 1513: -6,-23 - 1514: -7,-23 - 1515: -8,-23 - 1516: -13,-23 - 1517: -14,-23 - 1518: 5,10 - 1519: 6,10 - 1520: 7,10 - 1521: 4,10 - 1522: 7,9 - 1523: 8,9 - 1524: 9,9 - 1525: 10,9 - 1526: 11,9 - 1527: 12,9 - 1528: 13,9 - 1552: -44,25 - 1553: -43,25 - 1554: -42,25 - 1555: -41,25 - 1556: -40,25 - 1557: -39,25 - 1558: -38,25 - 1559: -37,25 - 1560: -36,25 - 1561: -35,25 - 1562: -34,25 - 1563: -33,25 - 1609: 35,-23 - 1610: 34,-23 - 1611: 32,-23 - 1612: 31,-23 - 1613: 33,-23 - 1614: 30,-23 - 1615: 29,-23 - 1616: 28,-23 - 1617: 27,-23 - 1618: 26,-23 - 1619: 25,-23 - 1620: 24,-23 - 1621: 23,-23 - 1622: 22,-23 - 1623: 21,-23 - 1624: 20,-23 - 1625: 19,-23 - 1626: 18,-23 - 1632: -15,1 - 1633: -15,0 - 1634: -14,0 - 2000: -15,21 - 2001: -15,20 - 2002: -15,19 - 2003: -15,18 - 2004: -15,17 - 2005: -15,16 - 2006: -15,15 - 2007: -15,14 - 2008: -15,13 - 2009: -15,12 - 2010: -15,11 - 2238: -28,-23 - 2239: -29,-23 - 2240: -30,-23 - 2241: -31,-23 - 2242: -32,-23 - 2243: -33,-23 - 2244: -34,-23 - 2245: -35,-23 - 2246: -36,-23 - 2247: -37,-23 - 2248: -37,-22 - 2249: -37,-21 - 2250: -37,-20 - 2251: -37,-19 - 2479: -20,9 - 2480: -21,9 - 2481: -22,9 - 2482: -23,9 - 2483: -24,9 - 2491: -14,9 - 2492: -15,9 - 2740: 17,14 - 2741: 17,13 - 2742: 17,12 - 2743: 17,11 - 2755: 17,9 - 2758: 17,-22 - 2759: 17,-23 - 2762: -18,-23 - 2763: -15,-23 - 2764: -15,-22 - 2765: -15,-21 - 2766: -15,-20 - 2767: -15,-19 - 2768: -15,-17 - 2769: -15,-16 - 2770: -15,-15 - 2771: -15,-14 - 2772: -15,-13 - 2773: -15,-12 - 2774: -15,-11 - 2817: 1,-28 - 2818: 1,-29 - 2819: 1,-30 - 2820: 1,-31 - 2821: 1,-32 - 2822: 1,-33 - 2823: 1,-34 - 2824: 1,-35 - 2825: 1,-36 - 2826: 1,-37 - 2827: 1,-38 - 2828: 1,-39 - 2829: 1,-40 - 2830: 1,-41 + 1206: 10,-54 + 1207: 9,-54 + 1208: 7,-54 + 1209: 8,-54 + 1210: 5,-54 + 1211: 3,-54 + 1213: 2,-47 + 1214: 2,-48 + 1215: 2,-49 + 1216: 2,-50 + 1217: 2,-51 + 1218: 2,-52 + 1491: -3,-23 + 1492: -4,-23 + 1493: -5,-23 + 1494: -6,-23 + 1495: -7,-23 + 1496: -8,-23 + 1497: -13,-23 + 1498: -14,-23 + 1499: 5,10 + 1500: 6,10 + 1501: 7,10 + 1502: 4,10 + 1503: 7,9 + 1504: 8,9 + 1505: 9,9 + 1506: 10,9 + 1507: 11,9 + 1508: 12,9 + 1509: 13,9 + 1533: -44,25 + 1534: -43,25 + 1535: -42,25 + 1536: -41,25 + 1537: -40,25 + 1538: -39,25 + 1539: -38,25 + 1540: -37,25 + 1541: -36,25 + 1542: -35,25 + 1543: -34,25 + 1544: -33,25 + 1590: 35,-23 + 1591: 34,-23 + 1592: 32,-23 + 1593: 31,-23 + 1594: 33,-23 + 1595: 30,-23 + 1596: 29,-23 + 1597: 28,-23 + 1598: 27,-23 + 1599: 26,-23 + 1600: 25,-23 + 1601: 24,-23 + 1602: 23,-23 + 1603: 22,-23 + 1604: 21,-23 + 1605: 20,-23 + 1606: 19,-23 + 1607: 18,-23 + 1613: -15,1 + 1614: -15,0 + 1615: -14,0 + 1980: -15,21 + 1981: -15,20 + 1982: -15,19 + 1983: -15,18 + 1984: -15,17 + 1985: -15,16 + 1986: -15,15 + 1987: -15,14 + 1988: -15,13 + 1989: -15,12 + 1990: -15,11 + 2218: -28,-23 + 2219: -29,-23 + 2220: -30,-23 + 2221: -31,-23 + 2222: -32,-23 + 2223: -33,-23 + 2224: -34,-23 + 2225: -35,-23 + 2226: -36,-23 + 2227: -37,-23 + 2228: -37,-22 + 2229: -37,-21 + 2230: -37,-20 + 2231: -37,-19 + 2459: -20,9 + 2460: -21,9 + 2461: -22,9 + 2462: -23,9 + 2463: -24,9 + 2471: -14,9 + 2472: -15,9 + 2720: 17,14 + 2721: 17,13 + 2722: 17,12 + 2723: 17,11 + 2735: 17,9 + 2738: 17,-22 + 2739: 17,-23 + 2742: -18,-23 + 2743: -15,-23 + 2744: -15,-22 + 2745: -15,-21 + 2746: -15,-20 + 2747: -15,-19 + 2748: -15,-17 + 2749: -15,-16 + 2750: -15,-15 + 2751: -15,-14 + 2752: -15,-13 + 2753: -15,-12 + 2754: -15,-11 + 2797: 1,-28 + 2798: 1,-29 + 2799: 1,-30 + 2800: 1,-31 + 2801: 1,-32 + 2802: 1,-33 + 2803: 1,-34 + 2804: 1,-35 + 2805: 1,-36 + 2806: 1,-37 + 2807: 1,-38 + 2808: 1,-39 + 2809: 1,-40 + 2810: 1,-41 - node: color: '#D4D4D437' id: QuarterTileOverlayGreyscale90 decals: - 1139: 3,-61 - 1140: 3,-62 - 1141: 3,-63 - 1142: 3,-64 - 1143: 3,-65 - 1144: 4,-66 - 1145: 4,-67 - 1146: 4,-68 - 1147: 4,-69 - 1148: 3,-70 - 1149: 3,-71 - 1150: 3,-72 - 1151: 3,-73 - 1152: 3,-74 + 1120: 3,-61 + 1121: 3,-62 + 1122: 3,-63 + 1123: 3,-64 + 1124: 3,-65 + 1125: 4,-66 + 1126: 4,-67 + 1127: 4,-68 + 1128: 4,-69 + 1129: 3,-70 + 1130: 3,-71 + 1131: 3,-72 + 1132: 3,-73 + 1133: 3,-74 - node: color: '#D4D4D441' id: QuarterTileOverlayGreyscale90 decals: - 1051: 55,26 - 1052: 56,25 - 1060: 51,26 + 1032: 55,26 + 1033: 56,25 + 1041: 51,26 - node: color: '#D4D4D496' id: QuarterTileOverlayGreyscale90 decals: - 2857: 20,26 - 2858: 21,26 - 2859: 22,26 - 2860: 23,26 - 2861: 24,26 - 2862: 25,26 - 2863: 26,26 - 2864: 27,26 - 2865: 28,26 - 2866: 29,26 - 2867: 37,26 - 2868: 36,26 - 2869: 35,26 - 2870: 34,26 - 2871: 33,26 - 2872: 32,26 - 2873: 31,26 - 2874: 30,26 - 3061: 19,26 + 2837: 20,26 + 2838: 21,26 + 2839: 22,26 + 2840: 23,26 + 2841: 24,26 + 2842: 25,26 + 2843: 26,26 + 2844: 27,26 + 2845: 28,26 + 2846: 29,26 + 2847: 37,26 + 2848: 36,26 + 2849: 35,26 + 2850: 34,26 + 2851: 33,26 + 2852: 32,26 + 2853: 31,26 + 2854: 30,26 + 3041: 19,26 - node: color: '#DE3A3A96' id: QuarterTileOverlayGreyscale90 decals: - 771: -37,-17 - 772: -37,-16 - 773: -37,-15 - 774: -37,-14 - 775: -37,-13 - 776: -37,-12 - 777: -37,-11 - 778: -37,-10 - 779: -37,-9 - 780: -37,-8 - 781: -37,-7 - 782: -37,-6 - 1783: -8,-15 - 1784: -8,-14 - 1785: -8,-13 - 1786: -8,-12 - 1787: -9,-12 + 752: -37,-17 + 753: -37,-16 + 754: -37,-15 + 755: -37,-14 + 756: -37,-13 + 757: -37,-12 + 758: -37,-11 + 759: -37,-10 + 760: -37,-9 + 761: -37,-8 + 762: -37,-7 + 763: -37,-6 + 1763: -8,-15 + 1764: -8,-14 + 1765: -8,-13 + 1766: -8,-12 + 1767: -9,-12 - node: color: '#DF81C96C' id: QuarterTileOverlayGreyscale90 decals: - 3312: 40,3 - 3313: 41,3 - 3314: 42,3 - 3315: 43,3 - 3316: 44,3 - 3317: 45,3 - 3318: 46,3 - 3319: 47,3 - 3320: 48,4 - 3321: 49,4 - 3322: 50,4 - 3323: 51,4 + 3292: 40,3 + 3293: 41,3 + 3294: 42,3 + 3295: 43,3 + 3296: 44,3 + 3297: 45,3 + 3298: 46,3 + 3299: 47,3 + 3300: 48,4 + 3301: 49,4 + 3302: 50,4 + 3303: 51,4 - node: color: '#EFB34160' id: QuarterTileOverlayGreyscale90 decals: - 2737: 17,17 - 2738: 17,16 - 2739: 17,15 + 2717: 17,17 + 2718: 17,16 + 2719: 17,15 - node: color: '#EFCC4196' id: QuarterTileOverlayGreyscale90 decals: - 2384: 1,11 - 2385: 2,11 - 2386: 3,11 - 2387: 4,11 - 2431: -15,23 - 2432: -15,24 - 2433: -15,25 - 2434: -16,25 - 2435: -17,25 - 2436: -18,25 - 2437: -19,25 - 2438: -20,25 + 2364: 1,11 + 2365: 2,11 + 2366: 3,11 + 2367: 4,11 + 2411: -15,23 + 2412: -15,24 + 2413: -15,25 + 2414: -16,25 + 2415: -17,25 + 2416: -18,25 + 2417: -19,25 + 2418: -20,25 - node: color: '#FFFFFFFF' id: Remains decals: - 2875: -63.989975,-10.123885 + 2855: -63.989975,-10.123885 - node: color: '#FFFFFFFF' id: Rock01 decals: - 1067: -5.089998,-68.511505 - 1069: 5.097502,-68.08963 + 1048: -5.089998,-68.511505 + 1050: 5.097502,-68.08963 - node: color: '#FFFFFFFF' id: Rock03 decals: - 1682: -47.98986,4.9975877 + 1663: -47.98986,4.9975877 - node: color: '#FFFFFFFF' id: Rock04 decals: - 1068: 5.097502,-66.74588 - 1683: -47.02111,4.9975877 + 1049: 5.097502,-66.74588 + 1664: -47.02111,4.9975877 - node: cleanable: True color: '#FFFFFFFF' @@ -4918,56 +4918,56 @@ entities: color: '#80C71FFF' id: Sirius decals: - 2881: -9.970831,-51.964848 + 2861: -9.970831,-51.964848 - node: color: '#FFFFFFFF' id: SpaceStationSign1 decals: - 859: -3,10 + 840: -3,10 - node: color: '#FFFFFFFF' id: SpaceStationSign2 decals: - 860: -2,10 + 841: -2,10 - node: color: '#FFFFFFFF' id: SpaceStationSign3 decals: - 861: -1,10 + 842: -1,10 - node: color: '#FFFFFFFF' id: SpaceStationSign4 decals: - 862: 0,10 + 843: 0,10 - node: color: '#FFFFFFFF' id: SpaceStationSign5 decals: - 863: 1,10 + 844: 1,10 - node: color: '#FFFFFFFF' id: SpaceStationSign6 decals: - 864: 2,10 + 845: 2,10 - node: color: '#FFFFFFFF' id: SpaceStationSign7 decals: - 865: 3,10 + 846: 3,10 - node: color: '#FFFFFFFF' id: StandClear decals: - 406: -40,-1 - 511: -6,31 - 1889: -23,-20 - 1943: -22,26 + 405: -40,-1 + 510: -6,31 + 1869: -23,-20 + 1923: -22,26 - node: color: '#D381C996' id: StandClearGreyscale decals: - 1357: -53,1 - 2090: -49,1 + 1338: -53,1 + 2070: -49,1 - node: color: '#52B4E996' id: ThreeQuarterTileOverlayGreyscale @@ -4975,12 +4975,12 @@ entities: 261: 29,-20 266: 29,-17 279: 38,-20 - 3003: 32,-17 + 2983: 32,-17 - node: color: '#A4610696' id: ThreeQuarterTileOverlayGreyscale decals: - 3101: 43,9 + 3081: 43,9 - node: color: '#D0BF4AA7' id: ThreeQuarterTileOverlayGreyscale @@ -4990,8 +4990,8 @@ entities: color: '#D381C996' id: ThreeQuarterTileOverlayGreyscale decals: - 369: -43,14 - 2136: -43,-10 + 368: -43,14 + 2116: -43,-10 - node: color: '#DE3A3A96' id: ThreeQuarterTileOverlayGreyscale @@ -5001,8 +5001,8 @@ entities: color: '#EFCC4196' id: ThreeQuarterTileOverlayGreyscale decals: - 2347: -5,21 - 2357: 3,15 + 2327: -5,21 + 2337: 3,15 - node: color: '#52B4E996' id: ThreeQuarterTileOverlayGreyscale180 @@ -5010,17 +5010,17 @@ entities: 263: 30,-21 268: 30,-18 281: 40,-21 - 3007: 35,-21 + 2987: 35,-21 - node: color: '#9FED5896' id: ThreeQuarterTileOverlayGreyscale180 decals: - 2991: 45,-35 + 2971: 45,-35 - node: color: '#A4610696' id: ThreeQuarterTileOverlayGreyscale180 decals: - 651: 46,5 + 632: 46,5 - node: color: '#D0BF4AA7' id: ThreeQuarterTileOverlayGreyscale180 @@ -5030,8 +5030,8 @@ entities: color: '#D381C996' id: ThreeQuarterTileOverlayGreyscale180 decals: - 2117: -37,11 - 2135: -41,-11 + 2097: -37,11 + 2115: -41,-11 - node: color: '#DE3A3A96' id: ThreeQuarterTileOverlayGreyscale180 @@ -5041,8 +5041,8 @@ entities: color: '#EFCC4196' id: ThreeQuarterTileOverlayGreyscale180 decals: - 2348: 6,17 - 2358: 7,12 + 2328: 6,17 + 2338: 7,12 - node: color: '#52B4E996' id: ThreeQuarterTileOverlayGreyscale270 @@ -5050,18 +5050,18 @@ entities: 264: 29,-21 265: 29,-18 278: 38,-21 - 3006: 32,-21 - 3044: 48,-18 + 2986: 32,-21 + 3024: 48,-18 - node: color: '#9FED5896' id: ThreeQuarterTileOverlayGreyscale270 decals: - 2990: 43,-35 + 2970: 43,-35 - node: color: '#A4610696' id: ThreeQuarterTileOverlayGreyscale270 decals: - 645: 43,5 + 626: 43,5 - node: color: '#D0BF4AA7' id: ThreeQuarterTileOverlayGreyscale270 @@ -5071,9 +5071,9 @@ entities: color: '#D381C996' id: ThreeQuarterTileOverlayGreyscale270 decals: - 367: -39,11 - 368: -43,13 - 2140: -43,-11 + 366: -39,11 + 367: -43,13 + 2120: -43,-11 - node: color: '#DE3A3A96' id: ThreeQuarterTileOverlayGreyscale270 @@ -5083,14 +5083,14 @@ entities: color: '#EFCC4196' id: ThreeQuarterTileOverlayGreyscale270 decals: - 2350: -5,17 - 2354: 6,12 - 2355: 3,13 + 2330: -5,17 + 2334: 6,12 + 2335: 3,13 - node: color: '#334E6DC8' id: ThreeQuarterTileOverlayGreyscale90 decals: - 600: 4,1 + 581: 4,1 - node: color: '#52B4E996' id: ThreeQuarterTileOverlayGreyscale90 @@ -5098,12 +5098,12 @@ entities: 262: 30,-20 267: 30,-17 280: 40,-20 - 3052: 49,-17 + 3032: 49,-17 - node: color: '#A4610696' id: ThreeQuarterTileOverlayGreyscale90 decals: - 3102: 46,9 + 3082: 46,9 - node: color: '#D0BF4AA7' id: ThreeQuarterTileOverlayGreyscale90 @@ -5113,8 +5113,8 @@ entities: color: '#D381C996' id: ThreeQuarterTileOverlayGreyscale90 decals: - 2116: -37,14 - 2139: -41,-10 + 2096: -37,14 + 2119: -41,-10 - node: color: '#DE3A3A96' id: ThreeQuarterTileOverlayGreyscale90 @@ -5124,40 +5124,40 @@ entities: color: '#EFCC4196' id: ThreeQuarterTileOverlayGreyscale90 decals: - 2349: 6,21 - 2356: 7,15 + 2329: 6,21 + 2336: 7,15 - node: cleanable: True color: '#B02E26FF' id: Tunnel decals: - 2584: 32.016933,17.019823 + 2564: 32.016933,17.019823 - node: color: '#FFFFFFFF' id: VentSmall decals: - 902: -3,-9 + 883: -3,-9 - node: cleanable: True color: '#835432FF' id: Waffle decals: - 2876: -15.97007,-46.029713 + 2856: -15.97007,-46.029713 - node: color: '#FFFFFFFF' id: WarnBox decals: - 2188: -25,2 - 3413: 12,-55 - 3414: -25,-36 - 3415: 23,-47 - 3416: 20,28 - 3417: 5,-71 - 3418: -5,-71 - 3419: -5,-64 - 3420: 5,-64 - 3421: 39,-47 - 3561: -17,48 + 2168: -25,2 + 3393: 12,-55 + 3394: -25,-36 + 3395: 23,-47 + 3396: 20,28 + 3397: 5,-71 + 3398: -5,-71 + 3399: -5,-64 + 3400: 5,-64 + 3401: 39,-47 + 3541: -17,48 - node: color: '#FFFFFFFF' id: WarnCorner @@ -5184,485 +5184,485 @@ entities: color: '#DE3A3A96' id: WarnCornerGreyscaleNE decals: - 1834: -22,-3 + 1814: -22,-3 - node: color: '#D381C996' id: WarnCornerGreyscaleNW decals: - 1392: -58,-1 + 1373: -58,-1 - node: color: '#DE3A3A96' id: WarnCornerGreyscaleNW decals: - 1842: -31,-3 + 1822: -31,-3 - node: color: '#FFFFFFFF' id: WarnCornerSmallNE decals: - 828: -30,34 - 973: -12,2 - 1498: -2,31 - 3539: -2,24 - 3601: -19,40 + 809: -30,34 + 954: -12,2 + 1479: -2,31 + 3519: -2,24 + 3581: -19,40 - node: color: '#FFFFFFFF' id: WarnCornerSmallNW decals: - 953: -8,2 - 1497: 2,31 - 2289: 2,24 - 3589: -27,38 - 3600: -15,40 + 934: -8,2 + 1478: 2,31 + 2269: 2,24 + 3569: -27,38 + 3580: -15,40 - node: color: '#FFFFFFFF' id: WarnCornerSmallSE decals: - 1164: -2,-78 - 1496: -2,36 - 3599: -19,42 + 1145: -2,-78 + 1477: -2,36 + 3579: -19,42 - node: color: '#FFFFFFFF' id: WarnCornerSmallSW decals: - 837: -30,36 - 1163: 2,-78 - 1495: 2,36 - 2729: 40,-35 - 3588: -27,40 - 3598: -15,42 + 818: -30,36 + 1144: 2,-78 + 1476: 2,36 + 2709: 40,-35 + 3568: -27,40 + 3578: -15,42 - node: color: '#52B4E996' id: WarnFullGreyscale decals: - 3471: 46,-14 + 3451: 46,-14 - node: color: '#D381C996' id: WarnFullGreyscale decals: - 2161: -58,0 + 2141: -58,0 - node: color: '#FFFFFFFF' id: WarnFullGreyscale decals: - 3245: 23,6 - 3490: 5,16 - 3492: 18,18 - 3510: -14,28 - 3511: -24,30 - 3512: -24,31 - 3513: -22,27 - 3514: -32,30 - 3515: -32,31 - 3516: -22,33 - 3517: -12,33 + 3225: 23,6 + 3470: 5,16 + 3472: 18,18 + 3490: -14,28 + 3491: -24,30 + 3492: -24,31 + 3493: -22,27 + 3494: -32,30 + 3495: -32,31 + 3496: -22,33 + 3497: -12,33 - node: color: '#FFFFFFFF' id: WarnLineE decals: - 827: -30,36 - 833: -30,35 - 853: -100,20 - 854: -100,21 - 974: -12,3 - 975: -12,4 - 976: -12,5 - 1021: -54,16 - 1488: -2,32 - 1489: -2,33 - 1490: -2,34 - 1491: -2,35 - 1904: -15,-18 - 1908: -37,-18 - 1912: -37,5 - 1917: -15,6 - 1918: -15,10 - 1919: -15,22 - 1923: 17,6 - 1924: 17,10 - 1925: 41,12 - 1933: 17,22 - 1934: 17,26 - 1935: 17,-9 - 1947: -21,26 - 2012: -15,-3 - 2053: -54,6 - 2056: -52,1 - 2057: -48,1 - 2287: -2,25 - 2444: -3,26 - 2445: -3,22 - 2695: -54,17 - 3053: 45,-16 - 3265: 3,34 - 3266: 3,35 - 3267: 3,36 - 3391: 56,15 - 3392: 56,14 - 3393: 56,13 - 3394: 56,12 - 3395: 56,11 - 3597: -19,41 + 808: -30,36 + 814: -30,35 + 834: -100,20 + 835: -100,21 + 955: -12,3 + 956: -12,4 + 957: -12,5 + 1002: -54,16 + 1469: -2,32 + 1470: -2,33 + 1471: -2,34 + 1472: -2,35 + 1884: -15,-18 + 1888: -37,-18 + 1892: -37,5 + 1897: -15,6 + 1898: -15,10 + 1899: -15,22 + 1903: 17,6 + 1904: 17,10 + 1905: 41,12 + 1913: 17,22 + 1914: 17,26 + 1915: 17,-9 + 1927: -21,26 + 1992: -15,-3 + 2033: -54,6 + 2036: -52,1 + 2037: -48,1 + 2267: -2,25 + 2424: -3,26 + 2425: -3,22 + 2675: -54,17 + 3033: 45,-16 + 3245: 3,34 + 3246: 3,35 + 3247: 3,36 + 3371: 56,15 + 3372: 56,14 + 3373: 56,13 + 3374: 56,12 + 3375: 56,11 + 3577: -19,41 - node: color: '#52B4E996' id: WarnLineGreyscaleE decals: - 3043: 45,-22 + 3023: 45,-22 - node: color: '#9FED5896' id: WarnLineGreyscaleE decals: - 2978: 45,-33 + 2958: 45,-33 - node: color: '#B02E26FF' id: WarnLineGreyscaleE decals: - 2894: -4,-47 + 2874: -4,-47 - node: color: '#D381C996' id: WarnLineGreyscaleE decals: - 2091: -48,-6 - 2093: -45,-1 - 2111: -42,-6 + 2071: -48,-6 + 2073: -45,-1 + 2091: -42,-6 - node: color: '#DE3A3A96' id: WarnLineGreyscaleE decals: - 1833: -22,-4 - 1875: -33,-20 - 1876: -33,-17 - 2899: -8,-47 + 1813: -22,-4 + 1855: -33,-20 + 1856: -33,-17 + 2879: -8,-47 - node: color: '#FFFFFFFF' id: WarnLineGreyscaleE decals: - 1886: -23,-21 - 1887: -23,-20 - 1888: -23,-19 - 1899: -18,-21 - 1900: -18,-20 - 1901: -18,-19 - 1962: -15,28 - 1967: -25,30 - 1968: -25,31 - 2440: 6,19 - 2521: 3,-6 - 3491: 17,18 + 1866: -23,-21 + 1867: -23,-20 + 1868: -23,-19 + 1879: -18,-21 + 1880: -18,-20 + 1881: -18,-19 + 1942: -15,28 + 1947: -25,30 + 1948: -25,31 + 2420: 6,19 + 2501: 3,-6 + 3471: 17,18 - node: color: '#D381C996' id: WarnLineGreyscaleN decals: - 1248: -54,4 - 1249: -55,4 - 1250: -51,5 - 1343: -46,14 - 1356: -56,4 - 1376: -56,-1 - 1377: -54,-1 - 1378: -53,-1 - 1379: -52,-1 - 2157: -41,12 - 2158: -42,12 + 1229: -54,4 + 1230: -55,4 + 1231: -51,5 + 1324: -46,14 + 1337: -56,4 + 1357: -56,-1 + 1358: -54,-1 + 1359: -53,-1 + 1360: -52,-1 + 2137: -41,12 + 2138: -42,12 - node: color: '#DE3A3A96' id: WarnLineGreyscaleN decals: - 1844: -27,-3 - 1872: -26,-19 - 1873: -28,-19 + 1824: -27,-3 + 1852: -26,-19 + 1853: -28,-19 - node: color: '#FFFFFFFF' id: WarnLineGreyscaleN decals: - 1964: -22,32 - 2138: -42,-10 - 2312: -12,32 - 2441: 5,15 - 3246: 23,5 + 1944: -22,32 + 2118: -42,-10 + 2292: -12,32 + 2421: 5,15 + 3226: 23,5 - node: color: '#334E6DC8' id: WarnLineGreyscaleS decals: - 2513: 4,-1 - 2514: -4,-1 - 2515: 0,-1 + 2493: 4,-1 + 2494: -4,-1 + 2495: 0,-1 - node: color: '#9FED5896' id: WarnLineGreyscaleS decals: - 2992: 44,-35 + 2972: 44,-35 - node: color: '#D381C996' id: WarnLineGreyscaleS decals: - 1251: -51,11 - 1252: -45,11 - 1350: -52,2 - 1351: -53,2 - 1352: -54,2 - 1355: -56,2 - 2160: -58,1 + 1232: -51,11 + 1233: -45,11 + 1331: -52,2 + 1332: -53,2 + 1333: -54,2 + 1336: -56,2 + 2140: -58,1 - node: color: '#DE3A3A96' id: WarnLineGreyscaleS decals: - 1827: -27,-6 - 2025: -26,-17 - 2026: -28,-17 - 2183: -33,4 + 1807: -27,-6 + 2005: -26,-17 + 2006: -28,-17 + 2163: -33,4 - node: color: '#FFFFFFFF' id: WarnLineGreyscaleS decals: - 1902: -19,-22 - 1903: -20,-22 - 1961: -18,27 - 1963: -22,28 - 2017: -21,-22 - 2310: -12,27 - 2439: 5,17 - 3244: 23,7 + 1882: -19,-22 + 1883: -20,-22 + 1941: -18,27 + 1943: -22,28 + 1997: -21,-22 + 2290: -12,27 + 2419: 5,17 + 3224: 23,7 - node: color: '#52B4E996' id: WarnLineGreyscaleW decals: - 3041: 43,-24 - 3042: 43,-21 - 3470: 47,-14 + 3021: 43,-24 + 3022: 43,-21 + 3450: 47,-14 - node: color: '#9FED5896' id: WarnLineGreyscaleW decals: - 2988: 43,-28 - 2989: 43,-32 + 2968: 43,-28 + 2969: 43,-32 - node: color: '#B02E26FF' id: WarnLineGreyscaleW decals: - 2893: -6,-47 + 2873: -6,-47 - node: color: '#D381C996' id: WarnLineGreyscaleW decals: - 2092: -46,-6 + 2072: -46,-6 - node: color: '#DE3A3A96' id: WarnLineGreyscaleW decals: - 1843: -31,-4 - 1874: -31,-20 - 2013: -21,-21 - 2014: -21,-19 - 2900: -9,-47 + 1823: -31,-4 + 1854: -31,-20 + 1993: -21,-21 + 1994: -21,-19 + 2880: -9,-47 - node: color: '#FFFFFFFF' id: WarnLineGreyscaleW decals: - 1883: -23,-21 - 1884: -23,-20 - 1885: -23,-19 - 1965: -23,30 - 1966: -23,31 - 1969: -31,30 - 1970: -31,31 - 2311: -13,28 - 2520: 5,-6 - 2697: 19,18 + 1863: -23,-21 + 1864: -23,-20 + 1865: -23,-19 + 1945: -23,30 + 1946: -23,31 + 1949: -31,30 + 1950: -31,31 + 2291: -13,28 + 2500: 5,-6 + 2677: 19,18 - node: color: '#DE3A3A96' id: WarnLineN decals: - 1807: -9,-19 + 1787: -9,-19 - node: color: '#FFFFFFFF' id: WarnLineN decals: - 814: -25,-1 - 815: -26,-1 - 816: -27,-1 - 817: -28,-1 - 818: -29,-1 - 836: -31,36 - 848: -117,18 - 849: -118,18 - 850: -119,18 - 851: -120,18 - 852: -121,18 - 1160: 0,-78 - 1161: 1,-78 - 1162: -1,-78 - 1492: -1,36 - 1493: 0,36 - 1494: 1,36 - 1906: -27,-25 - 1909: -40,-2 - 1913: -36,7 - 1928: 35,7 - 1929: 38,23 - 1939: 2,-25 - 1940: -2,-25 - 1941: 18,-25 - 2728: 39,-35 - 3055: 42,-18 - 3056: 36,-18 - 3206: -41,23 - 3403: 43,2 - 3565: -15,48 - 3566: -14,48 - 3567: -13,48 - 3568: -12,48 - 3569: -11,48 - 3570: -19,48 - 3571: -20,48 - 3572: -21,48 - 3573: -22,48 - 3574: -23,48 - 3590: -18,42 - 3591: -17,42 - 3592: -16,42 + 795: -25,-1 + 796: -26,-1 + 797: -27,-1 + 798: -28,-1 + 799: -29,-1 + 817: -31,36 + 829: -117,18 + 830: -118,18 + 831: -119,18 + 832: -120,18 + 833: -121,18 + 1141: 0,-78 + 1142: 1,-78 + 1143: -1,-78 + 1473: -1,36 + 1474: 0,36 + 1475: 1,36 + 1886: -27,-25 + 1889: -40,-2 + 1893: -36,7 + 1908: 35,7 + 1909: 38,23 + 1919: 2,-25 + 1920: -2,-25 + 1921: 18,-25 + 2708: 39,-35 + 3035: 42,-18 + 3036: 36,-18 + 3186: -41,23 + 3383: 43,2 + 3545: -15,48 + 3546: -14,48 + 3547: -13,48 + 3548: -12,48 + 3549: -11,48 + 3550: -19,48 + 3551: -20,48 + 3552: -21,48 + 3553: -22,48 + 3554: -23,48 + 3570: -18,42 + 3571: -17,42 + 3572: -16,42 - node: color: '#DE3A3A96' id: WarnLineS decals: - 1815: -9,-16 + 1795: -9,-16 - node: color: '#FFFFFFFF' id: WarnLineS decals: - 829: -24,34 - 830: -24,35 - 831: -24,36 - 834: -30,34 - 835: -30,35 - 954: -8,3 - 955: -8,4 - 956: -8,5 - 1165: -20,-56 - 1166: -20,-55 - 1167: -20,-54 - 1484: 2,32 - 1485: 2,33 - 1486: 2,34 - 1487: 2,35 - 1905: -17,-18 - 1907: -39,-18 - 1911: -39,5 - 1915: -17,6 - 1916: -17,10 - 1920: -17,22 - 1921: 15,10 - 1922: 15,6 - 1926: 39,12 - 1931: 15,22 - 1932: 15,26 - 1936: 15,-9 - 1946: -23,26 - 2011: -17,-3 - 2054: -56,6 - 2055: -54,1 - 2058: -50,1 - 2288: 2,25 - 2442: -4,22 - 2443: -5,26 - 2517: 3,-8 - 2518: 3,-7 - 2519: 3,-6 - 3054: 43,-16 - 3587: -27,39 - 3593: -15,41 + 810: -24,34 + 811: -24,35 + 812: -24,36 + 815: -30,34 + 816: -30,35 + 935: -8,3 + 936: -8,4 + 937: -8,5 + 1146: -20,-56 + 1147: -20,-55 + 1148: -20,-54 + 1465: 2,32 + 1466: 2,33 + 1467: 2,34 + 1468: 2,35 + 1885: -17,-18 + 1887: -39,-18 + 1891: -39,5 + 1895: -17,6 + 1896: -17,10 + 1900: -17,22 + 1901: 15,10 + 1902: 15,6 + 1906: 39,12 + 1911: 15,22 + 1912: 15,26 + 1916: 15,-9 + 1926: -23,26 + 1991: -17,-3 + 2034: -56,6 + 2035: -54,1 + 2038: -50,1 + 2268: 2,25 + 2422: -4,22 + 2423: -5,26 + 2497: 3,-8 + 2498: 3,-7 + 2499: 3,-6 + 3034: 43,-16 + 3567: -27,39 + 3573: -15,41 - node: color: '#DE3A3A96' id: WarnLineW decals: - 1809: -7,-18 + 1789: -7,-18 - node: color: '#FFFFFFFF' id: WarnLineW decals: - 811: -9,2 - 812: -10,2 - 813: -11,2 - 822: -25,34 - 823: -26,34 - 824: -27,34 - 825: -28,34 - 826: -29,34 - 843: -117,15 - 844: -118,15 - 845: -119,15 - 846: -120,15 - 847: -121,15 - 855: -62,40 - 856: -63,40 - 857: -64,40 - 1481: -1,31 - 1482: 0,31 - 1483: 1,31 - 1677: -58,2 - 1678: -59,2 - 1679: -60,2 - 1910: -40,0 - 1914: -36,9 - 1927: 35,9 - 1930: 38,25 - 1937: 2,-23 - 1938: -2,-23 - 1942: 18,-23 - 2052: -42,-2 - 2237: -27,-23 - 2284: 0,24 - 2285: 1,24 - 2286: -1,24 - 2919: 4,-39 - 2926: 5,-39 - 2927: 3,-39 - 3057: 42,-17 - 3058: 36,-17 - 3207: -41,25 - 3262: 0,29 - 3263: 1,29 - 3264: -1,29 - 3404: 43,3 - 3575: -16,51 - 3576: -15,51 - 3577: -14,51 - 3578: -13,51 - 3579: -12,51 - 3580: -11,51 - 3581: -18,51 - 3582: -19,51 - 3583: -20,51 - 3584: -21,51 - 3585: -22,51 - 3586: -23,51 - 3594: -16,40 - 3595: -17,40 - 3596: -18,40 - 3602: -43,-2 + 792: -9,2 + 793: -10,2 + 794: -11,2 + 803: -25,34 + 804: -26,34 + 805: -27,34 + 806: -28,34 + 807: -29,34 + 824: -117,15 + 825: -118,15 + 826: -119,15 + 827: -120,15 + 828: -121,15 + 836: -62,40 + 837: -63,40 + 838: -64,40 + 1462: -1,31 + 1463: 0,31 + 1464: 1,31 + 1658: -58,2 + 1659: -59,2 + 1660: -60,2 + 1890: -40,0 + 1894: -36,9 + 1907: 35,9 + 1910: 38,25 + 1917: 2,-23 + 1918: -2,-23 + 1922: 18,-23 + 2032: -42,-2 + 2217: -27,-23 + 2264: 0,24 + 2265: 1,24 + 2266: -1,24 + 2899: 4,-39 + 2906: 5,-39 + 2907: 3,-39 + 3037: 42,-17 + 3038: 36,-17 + 3187: -41,25 + 3242: 0,29 + 3243: 1,29 + 3244: -1,29 + 3384: 43,3 + 3555: -16,51 + 3556: -15,51 + 3557: -14,51 + 3558: -13,51 + 3559: -12,51 + 3560: -11,51 + 3561: -18,51 + 3562: -19,51 + 3563: -20,51 + 3564: -21,51 + 3565: -22,51 + 3566: -23,51 + 3574: -16,40 + 3575: -17,40 + 3576: -18,40 + 3582: -43,-2 - node: angle: -3.141592653589793 rad color: '#FFFFFFFF' id: WarningLine decals: - 539: -11,36 - 540: -12,36 - 541: -13,36 - 542: -14,36 - 543: -15,36 - 544: -16,36 - 545: -17,36 - 546: -18,36 - 547: -19,36 - 548: -20,36 - 549: -21,36 - 550: -22,36 - 551: -23,36 + 520: -11,36 + 521: -12,36 + 522: -13,36 + 523: -14,36 + 524: -15,36 + 525: -16,36 + 526: -17,36 + 527: -18,36 + 528: -19,36 + 529: -20,36 + 530: -21,36 + 531: -22,36 + 532: -23,36 - node: angle: -1.5707963267948966 rad color: '#FFFFFFFF' id: WarningLine decals: - 731: -72,20 + 712: -72,20 - node: color: '#FFFFFFFF' id: WarningLine @@ -5672,338 +5672,338 @@ entities: 361: -34,11 364: -43,0 365: -42,0 - 506: -6,31 - 507: -7,31 - 679: 24,15 - 680: 23,15 - 681: 22,15 + 505: -6,31 + 506: -7,31 + 660: 24,15 + 661: 23,15 + 662: 22,15 - node: angle: 1.5707963267948966 rad color: '#FFFFFFFF' id: WarningLine decals: - 667: 51,0 - 668: 51,1 - 669: 51,2 - 670: 51,3 - 671: 51,-1 - 672: 51,-2 - 794: -15,3 + 648: 51,0 + 649: 51,1 + 650: 51,2 + 651: 51,3 + 652: 51,-1 + 653: 51,-2 + 775: -15,3 - node: color: '#FFFFFFFF' id: WarningLineCorner decals: 363: -35,11 - 508: -8,31 + 507: -8,31 - node: angle: 1.5707963267948966 rad color: '#FFFFFFFF' id: WarningLineCorner decals: - 673: 56,10 - 797: -15,2 + 654: 56,10 + 778: -15,2 - node: angle: -1.5707963267948966 rad color: '#FFFFFFFF' id: WarningLineCornerFlipped decals: - 732: -72,19 + 713: -72,19 - node: color: '#FFFFFFFF' id: WarningLineCornerFlipped decals: 362: -31,11 - 509: -5,31 + 508: -5,31 - node: angle: 1.5707963267948966 rad color: '#FFFFFFFF' id: WarningLineCornerFlipped decals: - 795: -15,4 + 776: -15,4 - node: color: '#FFFFFFFF' id: WoodTrimThinBox decals: - 1451: 12,-30 + 1432: 12,-30 - node: color: '#FFFFFFFF' id: WoodTrimThinInnerNw decals: - 1322: -7,14 + 1303: -7,14 - node: color: '#FFFFFFFF' id: WoodTrimThinInnerSe decals: - 1312: -12,19 - 1409: 10,-27 + 1293: -12,19 + 1390: 10,-27 - node: color: '#FFFFFFFF' id: WoodTrimThinInnerSw decals: - 939: -23,-27 - 1317: -7,19 + 920: -23,-27 + 1298: -7,19 - node: color: '#FFFFFFFF' id: WoodTrimThinLineE decals: - 889: -29,11 - 890: -29,12 - 891: -29,13 - 892: -29,14 - 893: -29,15 - 894: -29,16 - 895: -29,17 - 896: -29,18 - 897: -29,19 - 898: -29,20 - 899: -29,21 - 903: -6,-5 - 917: 11,19 - 920: -42,8 - 931: -24,-31 - 932: -24,-30 - 933: -24,-29 - 934: -24,-28 - 1308: -12,15 - 1309: -12,16 - 1310: -12,17 - 1311: -12,18 - 1407: 10,-29 - 1408: 10,-28 - 2197: -24,-27 - 2222: -46,-16 - 2501: 24,-21 - 2502: 24,-20 - 2503: 24,-19 - 2504: 24,-18 - 2505: 24,-17 - 2506: 24,-16 + 870: -29,11 + 871: -29,12 + 872: -29,13 + 873: -29,14 + 874: -29,15 + 875: -29,16 + 876: -29,17 + 877: -29,18 + 878: -29,19 + 879: -29,20 + 880: -29,21 + 884: -6,-5 + 898: 11,19 + 901: -42,8 + 912: -24,-31 + 913: -24,-30 + 914: -24,-29 + 915: -24,-28 + 1289: -12,15 + 1290: -12,16 + 1291: -12,17 + 1292: -12,18 + 1388: 10,-29 + 1389: 10,-28 + 2177: -24,-27 + 2202: -46,-16 + 2481: 24,-21 + 2482: 24,-20 + 2483: 24,-19 + 2484: 24,-18 + 2485: 24,-17 + 2486: 24,-16 - node: color: '#FFFFFFFF' id: WoodTrimThinLineN decals: - 900: -3,-9 - 919: -44,6 - 935: -24,-28 - 936: -25,-28 - 937: -26,-28 - 938: -27,-28 - 1301: -7,19 - 1302: -8,19 - 1303: -9,19 - 1304: -10,19 - 1305: -11,19 - 1306: -12,19 - 1307: -13,19 - 1323: -8,14 - 1324: -9,14 - 1325: -10,14 - 1326: -11,14 - 1410: 17,-38 - 1411: 16,-38 - 1412: 18,-38 - 1413: 19,-38 - 1414: 20,-38 - 1415: 21,-38 - 2193: -20,-1 - 2194: -21,-1 - 2195: -22,-1 - 2196: -23,-1 - 2198: -23,-28 - 2228: -41,9 - 2229: -44,9 - 2230: -43,9 - 3098: 43,12 - 3099: 44,12 - 3100: 45,12 - 3439: 11,-38 - 3440: 10,-38 - 3441: 9,-38 - 3442: -25,10 - 3443: -26,10 - 3444: -27,10 + 881: -3,-9 + 900: -44,6 + 916: -24,-28 + 917: -25,-28 + 918: -26,-28 + 919: -27,-28 + 1282: -7,19 + 1283: -8,19 + 1284: -9,19 + 1285: -10,19 + 1286: -11,19 + 1287: -12,19 + 1288: -13,19 + 1304: -8,14 + 1305: -9,14 + 1306: -10,14 + 1307: -11,14 + 1391: 17,-38 + 1392: 16,-38 + 1393: 18,-38 + 1394: 19,-38 + 1395: 20,-38 + 1396: 21,-38 + 2173: -20,-1 + 2174: -21,-1 + 2175: -22,-1 + 2176: -23,-1 + 2178: -23,-28 + 2208: -41,9 + 2209: -44,9 + 2210: -43,9 + 3078: 43,12 + 3079: 44,12 + 3080: 45,12 + 3419: 11,-38 + 3420: 10,-38 + 3421: 9,-38 + 3422: -25,10 + 3423: -26,10 + 3424: -27,10 - node: color: '#FFFFFFFF' id: WoodTrimThinLineS decals: - 905: -3,-3 - 906: -4,-3 - 907: -5,-3 - 908: -7,-3 - 909: -8,-3 - 1313: -11,19 - 1314: -10,19 - 1315: -9,19 - 1316: -8,19 - 1396: 21,-27 - 1397: 20,-27 - 1398: 19,-27 - 1399: 18,-27 - 1400: 17,-27 - 1401: 16,-27 - 1402: 14,-27 - 1403: 15,-27 - 1404: 13,-27 - 1405: 12,-27 - 1406: 11,-27 - 2189: -20,2 - 2190: -21,2 - 2191: -22,2 - 2192: -23,2 - 2220: -47,-16 - 2221: -46,-16 - 2227: -41,7 - 3445: -25,22 - 3446: -26,22 - 3447: -27,22 + 886: -3,-3 + 887: -4,-3 + 888: -5,-3 + 889: -7,-3 + 890: -8,-3 + 1294: -11,19 + 1295: -10,19 + 1296: -9,19 + 1297: -8,19 + 1377: 21,-27 + 1378: 20,-27 + 1379: 19,-27 + 1380: 18,-27 + 1381: 17,-27 + 1382: 16,-27 + 1383: 14,-27 + 1384: 15,-27 + 1385: 13,-27 + 1386: 12,-27 + 1387: 11,-27 + 2169: -20,2 + 2170: -21,2 + 2171: -22,2 + 2172: -23,2 + 2200: -47,-16 + 2201: -46,-16 + 2207: -41,7 + 3425: -25,22 + 3426: -26,22 + 3427: -27,22 - node: color: '#FFFFFFFF' id: WoodTrimThinLineW decals: - 878: -23,11 - 879: -23,12 - 880: -23,13 - 881: -23,14 - 882: -23,15 - 883: -23,16 - 884: -23,17 - 885: -23,18 - 886: -23,19 - 887: -23,20 - 888: -23,21 - 904: -6,-5 - 921: -42,8 - 1318: -7,18 - 1319: -7,17 - 1320: -7,16 - 1321: -7,15 + 859: -23,11 + 860: -23,12 + 861: -23,13 + 862: -23,14 + 863: -23,15 + 864: -23,16 + 865: -23,17 + 866: -23,18 + 867: -23,19 + 868: -23,20 + 869: -23,21 + 885: -6,-5 + 902: -42,8 + 1299: -7,18 + 1300: -7,17 + 1301: -7,16 + 1302: -7,15 - node: cleanable: True color: '#474F52FF' id: amyjon decals: - 2878: -59.733913,26.110247 + 2858: -59.733913,26.110247 - node: cleanable: True color: '#FFFFFFFF' id: b decals: - 2945: -64,51 + 2925: -64,51 - node: cleanable: True color: '#B02E26FF' id: beepsky decals: - 2689: -51.97618,-34.20235 + 2669: -51.97618,-34.20235 - node: cleanable: True color: '#FFFFFFFF' id: body decals: - 2690: -45.397133,-31.934364 + 2670: -45.397133,-31.934364 - node: cleanable: True color: '#1D1D21FF' id: clawprint decals: - 2654: 51.849873,-10.273688 - 2655: 52.068623,-9.992438 - 2656: 51.849873,-9.726813 - 2657: 52.084248,-9.383063 - 2658: 51.849873,-9.070563 + 2634: 51.849873,-10.273688 + 2635: 52.068623,-9.992438 + 2636: 51.849873,-9.726813 + 2637: 52.084248,-9.383063 + 2638: 51.849873,-9.070563 - node: color: '#DE3A3A96' id: clown decals: - 1808: -9,-13 + 1788: -9,-13 - node: cleanable: True color: '#F38BAAFF' id: clown decals: - 2880: 29.974606,-11.088503 + 2860: 29.974606,-11.088503 - node: cleanable: True color: '#79150096' id: electricdanger decals: - 2802: -10.991777,-32.08159 + 2782: -10.991777,-32.08159 - node: cleanable: True color: '#79150096' id: end decals: - 1826: -60,-9 + 1806: -60,-9 - node: cleanable: True color: '#B02E26FF' id: end decals: - 2583: 32.02958,-5.0098457 + 2563: 32.02958,-5.0098457 - node: cleanable: True color: '#A4610696' id: engie decals: - 1825: 32,-54 + 1805: 32,-54 - node: cleanable: True color: '#F38BAAFF' id: evac decals: - 2653: 36.93115,20.930944 + 2633: 36.93115,20.930944 - node: cleanable: True color: '#F9801DFF' id: food decals: - 2577: 25.008858,-39.996895 + 2557: 25.008858,-39.996895 - node: color: '#D4D4D428' id: footprint decals: - 3422: 39.8631,-46.230442 - 3423: 40.128723,-45.902317 - 3424: 39.8631,-45.636692 - 3425: 40.159973,-45.371067 - 3426: 39.909973,-44.996067 - 3427: 40.191223,-44.621067 + 3402: 39.8631,-46.230442 + 3403: 40.128723,-45.902317 + 3404: 39.8631,-45.636692 + 3405: 40.159973,-45.371067 + 3406: 39.909973,-44.996067 + 3407: 40.191223,-44.621067 - node: cleanable: True color: '#FFFFFFFF' id: guy decals: - 2879: -67.988,9.536162 - 3111: 35,-29 + 2859: -67.988,9.536162 + 3091: 35,-29 - node: cleanable: True color: '#DE3A3AFF' id: largebrush decals: - 2944: -64,51 + 2924: -64,51 - node: color: '#D4D4D428' id: matt decals: - 1816: -30,-36 + 1796: -30,-36 - node: cleanable: True color: '#FED83DFF' id: shop decals: - 2877: -66.02228,7.9843655 + 2857: -66.02228,7.9843655 - node: cleanable: True color: '#DE3A3A18' id: splatter decals: - 717: 19,-8 + 698: 19,-8 - node: cleanable: True color: '#B02E26FF' id: stickman decals: - 2883: 9.979055,-45.00161 + 2863: 9.979055,-45.00161 type: DecalGrid - version: 2 data: @@ -6296,7 +6296,8 @@ entities: 0: 36863 1: 28672 6,-7: - 1: 119 + 1: 115 + 2: 4 0: 65416 6,-6: 0: 65535 @@ -7218,7 +7219,7 @@ entities: 0: 65535 -8,11: 0: 64719 - 2: 816 + 3: 816 -7,8: 0: 65535 -7,9: @@ -7251,15 +7252,15 @@ entities: 0: 65535 -12,10: 0: 62451 - 2: 3072 - 3: 12 + 3: 3072 + 4: 12 -11,10: - 2: 256 + 3: 256 0: 65278 - 3: 1 + 4: 1 -11,11: 0: 52478 - 2: 1 + 3: 1 -10,10: 0: 65535 -10,8: @@ -7276,7 +7277,7 @@ entities: 0: 65535 -9,11: 0: 63359 - 2: 2176 + 3: 2176 -8,12: 0: 48063 -7,12: @@ -7478,7 +7479,7 @@ entities: -1,11: 0: 65535 -5,12: - 2: 30515 + 3: 30515 0: 35020 -5,13: 0: 65535 @@ -7496,7 +7497,7 @@ entities: 0: 65535 -4,12: 0: 17 - 2: 65518 + 3: 65518 -4,13: 0: 65535 -4,14: @@ -7504,7 +7505,7 @@ entities: -4,15: 0: 61951 -3,12: - 2: 13107 + 3: 13107 0: 52428 -3,13: 0: 65535 @@ -7536,13 +7537,13 @@ entities: 0: 65535 -7,14: 0: 8191 - 2: 57344 + 3: 57344 -7,15: - 2: 238 + 3: 238 0: 65297 -6,12: 0: 4369 - 2: 61166 + 3: 61166 -6,13: 0: 65535 -6,14: @@ -7854,7 +7855,7 @@ entities: 17,-8: 0: 29457 17,-7: - 3: 1 + 4: 1 0: 4990 17,-6: 0: 4593 @@ -7982,14 +7983,14 @@ entities: 0: 35771 -12,8: 0: 62451 - 4: 12 - 5: 3072 + 5: 12 + 6: 3072 -12,9: 0: 62451 - 2: 3084 + 3: 3084 -12,11: 0: 8947 - 2: 12 + 3: 12 -12,12: 0: 8751 -12,13: @@ -8183,11 +8184,11 @@ entities: -13,7: 0: 39327 -11,8: - 4: 1 + 5: 1 0: 65278 - 5: 256 + 6: 256 -11,9: - 2: 257 + 3: 257 0: 65278 1,12: 0: 63897 @@ -8209,8 +8210,8 @@ entities: 0: 65497 -13,12: 0: 53199 - 5: 48 - 4: 12288 + 6: 48 + 5: 12288 -13,13: 0: 61727 -18,4: @@ -8703,8 +8704,8 @@ entities: 0: 255 -14,12: 0: 32639 - 5: 128 - 4: 32768 + 6: 128 + 5: 32768 -14,13: 0: 31 -17,12: @@ -8750,6 +8751,21 @@ entities: - 0 - 0 - 0 + - volume: 2500 + temperature: 235 + moles: + - 21.596506 + - 81.243996 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 temperature: 293.15 moles: @@ -15205,6 +15221,13 @@ entities: - pos: -30.487093,19.620901 parent: 60 type: Transform +- proto: BookChefGaming + entities: + - uid: 18647 + components: + - pos: 24.502895,-35.332874 + parent: 60 + type: Transform - proto: BookEscalation entities: - uid: 23696 @@ -75793,21 +75816,33 @@ entities: type: Transform - proto: FoodMeat entities: - - uid: 2617 + - uid: 2619 components: - - pos: 24.931736,-26.971676 - parent: 60 + - flags: InContainer + type: MetaData + - parent: 2623 type: Transform - - uid: 2618 + - canCollide: False + type: Physics + - type: InsideEntityStorage + - uid: 19882 components: - - pos: 24.712986,-27.159176 - parent: 60 + - flags: InContainer + type: MetaData + - parent: 2623 type: Transform - - uid: 2619 + - canCollide: False + type: Physics + - type: InsideEntityStorage + - uid: 21020 components: - - pos: 25.103611,-27.846676 - parent: 60 + - flags: InContainer + type: MetaData + - parent: 2623 type: Transform + - canCollide: False + type: Physics + - type: InsideEntityStorage - proto: FoodMeatRatdoubleKebab entities: - uid: 6784 @@ -112728,7 +112763,7 @@ entities: - pos: -34.433372,-3.1512034 parent: 60 type: Transform -- proto: lantern +- proto: Lantern entities: - uid: 24223 components: @@ -113391,8 +113426,8 @@ entities: immutable: False temperature: 234.99966 moles: - - 1.6495836 - - 6.2055764 + - 1.877957 + - 7.0646954 - 0 - 0 - 0 @@ -113404,6 +113439,19 @@ entities: - 0 - 0 type: EntityStorage + - containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 2619 + - 19882 + - 21020 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null + type: ContainerContainer - uid: 17736 components: - pos: -61.5,27.5 @@ -114182,6 +114230,33 @@ entities: - pos: 12.5,-69.5 parent: 60 type: Transform +- proto: MaintenancePlantSpawner + entities: + - uid: 16997 + components: + - pos: -57.5,26.5 + parent: 60 + type: Transform + - uid: 16998 + components: + - pos: -56.5,-24.5 + parent: 60 + type: Transform + - uid: 16999 + components: + - pos: -6.5,-48.5 + parent: 60 + type: Transform + - uid: 17000 + components: + - pos: 59.5,-42.5 + parent: 60 + type: Transform + - uid: 17001 + components: + - pos: 30.5,18.5 + parent: 60 + type: Transform - proto: MaintenanceToolSpawner entities: - uid: 4328 @@ -114965,6 +115040,13 @@ entities: - pos: -2.512361,3.5139241 parent: 60 type: Transform +- proto: MysteryFigureBox + entities: + - uid: 2618 + components: + - pos: -8.327919,25.771437 + parent: 60 + type: Transform - proto: NanoManipulatorStockPart entities: - uid: 9474 @@ -116218,6 +116300,18 @@ entities: - pos: 22.5,-14.5 parent: 60 type: Transform +- proto: PosterContrabandDonk + entities: + - uid: 18473 + components: + - pos: -46.5,-28.5 + parent: 60 + type: Transform + - uid: 18641 + components: + - pos: 24.5,-38.5 + parent: 60 + type: Transform - proto: PosterContrabandDonutCorp entities: - uid: 9152 @@ -116232,6 +116326,11 @@ entities: - pos: -8.5,-39.5 parent: 60 type: Transform + - uid: 18642 + components: + - pos: 27.5,-30.5 + parent: 60 + type: Transform - proto: PosterContrabandEnergySwords entities: - uid: 3978 @@ -116291,6 +116390,13 @@ entities: - pos: 0.5,16.5 parent: 60 type: Transform +- proto: PosterContrabandInterdyne + entities: + - uid: 17253 + components: + - pos: 41.5,-33.5 + parent: 60 + type: Transform - proto: PosterContrabandKosmicheskayaStantsiya entities: - uid: 7465 @@ -116384,6 +116490,13 @@ entities: - pos: 25.5,-10.5 parent: 60 type: Transform +- proto: PosterContrabandSmoke + entities: + - uid: 18640 + components: + - pos: 27.5,-28.5 + parent: 60 + type: Transform - proto: PosterContrabandSpaceCola entities: - uid: 16098 @@ -116438,6 +116551,13 @@ entities: - pos: 56.5,-9.5 parent: 60 type: Transform +- proto: PosterContrabandWaffleCorp + entities: + - uid: 17467 + components: + - pos: -23.5,2.5 + parent: 60 + type: Transform - proto: PosterContrabandWehWatches entities: - uid: 154 @@ -116692,6 +116812,13 @@ entities: - pos: 21.5,11.5 parent: 60 type: Transform +- proto: PosterLegitNTTGC + entities: + - uid: 17250 + components: + - pos: -11.5,13.5 + parent: 60 + type: Transform - proto: PosterLegitPDAAd entities: - uid: 6776 @@ -116699,6 +116826,20 @@ entities: - pos: 2.5,-28.5 parent: 60 type: Transform +- proto: PosterLegitPeriodicTable + entities: + - uid: 17002 + components: + - pos: 36.5,-26.5 + parent: 60 + type: Transform +- proto: PosterLegitRenault + entities: + - uid: 17249 + components: + - pos: -6.5,-7.5 + parent: 60 + type: Transform - proto: PosterLegitReportCrimes entities: - uid: 1635 @@ -116760,6 +116901,41 @@ entities: - pos: -42.5,-2.5 parent: 60 type: Transform +- proto: PosterLegitSafetyMothDelam + entities: + - uid: 17245 + components: + - pos: -8.5,30.5 + parent: 60 + type: Transform +- proto: PosterLegitSafetyMothEpi + entities: + - uid: 17003 + components: + - pos: 36.5,-27.5 + parent: 60 + type: Transform +- proto: PosterLegitSafetyMothHardhat + entities: + - uid: 17005 + components: + - pos: 9.5,16.5 + parent: 60 + type: Transform +- proto: PosterLegitSafetyMothMeth + entities: + - uid: 17004 + components: + - pos: 37.5,-33.5 + parent: 60 + type: Transform +- proto: PosterLegitSafetyMothPiping + entities: + - uid: 17244 + components: + - pos: -14.5,31.5 + parent: 60 + type: Transform - proto: PosterLegitSafetyReport entities: - uid: 1698 @@ -116815,6 +116991,28 @@ entities: - pos: 47.5,23.5 parent: 60 type: Transform +- proto: PosterLegitVacation + entities: + - uid: 2617 + components: + - pos: -13.5,19.5 + parent: 60 + type: Transform + - uid: 17251 + components: + - pos: -22.5,6.5 + parent: 60 + type: Transform + - uid: 17252 + components: + - pos: -2.5,-48.5 + parent: 60 + type: Transform + - uid: 18639 + components: + - pos: 31.5,-34.5 + parent: 60 + type: Transform - proto: PosterLegitWorkForAFuture entities: - uid: 923 @@ -132951,6 +133149,13 @@ entities: pos: 9.5,-71.5 parent: 60 type: Transform +- proto: SpawnMobAlexander + entities: + - uid: 18691 + components: + - pos: 25.5,-31.5 + parent: 60 + type: Transform - proto: SpawnMobBandito entities: - uid: 10857 @@ -133010,6 +133215,13 @@ entities: - pos: -8.5,-3.5 parent: 60 type: Transform +- proto: SpawnMobGoat + entities: + - uid: 18710 + components: + - pos: 25.5,-28.5 + parent: 60 + type: Transform - proto: SpawnMobMcGriff entities: - uid: 4710 diff --git a/Resources/Maps/box.yml b/Resources/Maps/box.yml index 78f4e0ab67badd..e1a354f08db7b7 100644 --- a/Resources/Maps/box.yml +++ b/Resources/Maps/box.yml @@ -11269,7 +11269,7 @@ entities: - dockJointId: docking46345 dockedWith: 21828 type: Docking - - SecondsUntilStateChange: -50852.926 + - SecondsUntilStateChange: -50920.91 changeAirtight: False state: Opening type: Door @@ -11317,7 +11317,7 @@ entities: - dockJointId: docking46345 dockedWith: 562 type: Docking - - SecondsUntilStateChange: -50852.926 + - SecondsUntilStateChange: -50920.91 changeAirtight: False state: Opening type: Door @@ -133764,6 +133764,28 @@ entities: - pos: -4.5,-48.5 parent: 8364 type: Transform +- proto: MaintenancePlantSpawner + entities: + - uid: 27525 + components: + - pos: -53.5,9.5 + parent: 8364 + type: Transform + - uid: 27526 + components: + - pos: -35.5,-15.5 + parent: 8364 + type: Transform + - uid: 27527 + components: + - pos: 41.5,-66.5 + parent: 8364 + type: Transform + - uid: 27528 + components: + - pos: 82.5,-37.5 + parent: 8364 + type: Transform - proto: MaintenanceToolSpawner entities: - uid: 14239 diff --git a/Resources/Maps/cluster.yml b/Resources/Maps/cluster.yml index 47ff0afa1a3d4c..42424846b2748e 100644 --- a/Resources/Maps/cluster.yml +++ b/Resources/Maps/cluster.yml @@ -59028,6 +59028,23 @@ entities: - pos: -31.5,21.5 parent: 1 type: Transform +- proto: MaintenancePlantSpawner + entities: + - uid: 10641 + components: + - pos: -28.5,24.5 + parent: 1 + type: Transform + - uid: 10642 + components: + - pos: 28.5,-18.5 + parent: 1 + type: Transform + - uid: 10643 + components: + - pos: 20.5,35.5 + parent: 1 + type: Transform - proto: MaintenanceToolSpawner entities: - uid: 8832 diff --git a/Resources/Maps/core.yml b/Resources/Maps/core.yml index 1d67f25003cd1b..ac7ec2522e5031 100644 --- a/Resources/Maps/core.yml +++ b/Resources/Maps/core.yml @@ -25961,7 +25961,7 @@ entities: type: Transform - uid: 3008 components: - - pos: 55.5,-23.5 + - pos: 36.5,-4.5 parent: 2 type: Transform - enabled: True @@ -29915,6 +29915,13 @@ entities: type: Transform - enabled: True type: AmbientSound + - uid: 18989 + components: + - pos: 61.5,-9.5 + parent: 2 + type: Transform + - enabled: True + type: AmbientSound - proto: CableApcStack entities: - uid: 3207 @@ -39451,6 +39458,13 @@ entities: - pos: -14.5,29.5 parent: 2 type: Transform + - uid: 18990 + components: + - pos: 36.5,-4.5 + parent: 2 + type: Transform + - enabled: True + type: AmbientSound - proto: CableMVStack entities: - uid: 4724 @@ -88631,7 +88645,7 @@ entities: - pos: 44.5,7.5 parent: 2 type: Transform - - SecondsUntilStateChange: -15037.545 + - SecondsUntilStateChange: -15489.894 state: Opening type: Door - uid: 11091 @@ -88639,7 +88653,7 @@ entities: - pos: 62.5,21.5 parent: 2 type: Transform - - SecondsUntilStateChange: -154788.11 + - SecondsUntilStateChange: -155240.47 state: Opening type: Door - uid: 11092 @@ -90273,6 +90287,23 @@ entities: - pos: 2.5,33.5 parent: 2 type: Transform +- proto: MaintenancePlantSpawner + entities: + - uid: 18991 + components: + - pos: -35.5,13.5 + parent: 2 + type: Transform + - uid: 18992 + components: + - pos: 50.5,-31.5 + parent: 2 + type: Transform + - uid: 18993 + components: + - pos: 59.5,27.5 + parent: 2 + type: Transform - proto: MaintenanceToolSpawner entities: - uid: 11271 diff --git a/Resources/Maps/fland.yml b/Resources/Maps/fland.yml index 8e533ee8ac8ca5..86266b6076b341 100644 --- a/Resources/Maps/fland.yml +++ b/Resources/Maps/fland.yml @@ -173312,6 +173312,38 @@ entities: - pos: 58.5,-18.5 parent: 13329 type: Transform +- proto: MaintenancePlantSpawner + entities: + - uid: 19940 + components: + - pos: -23.5,19.5 + parent: 13329 + type: Transform + - uid: 20989 + components: + - pos: -25.5,74.5 + parent: 13329 + type: Transform + - uid: 20990 + components: + - pos: 51.5,48.5 + parent: 13329 + type: Transform + - uid: 20995 + components: + - pos: 100.5,24.5 + parent: 13329 + type: Transform + - uid: 20996 + components: + - pos: 66.5,-44.5 + parent: 13329 + type: Transform + - uid: 25466 + components: + - pos: 23.5,-25.5 + parent: 13329 + type: Transform - proto: MaintenanceToolSpawner entities: - uid: 31817 diff --git a/Resources/Maps/kettle.yml b/Resources/Maps/kettle.yml index 6126e69e96a89b..3706dcf1fa52cd 100644 --- a/Resources/Maps/kettle.yml +++ b/Resources/Maps/kettle.yml @@ -18724,7 +18724,7 @@ entities: - pos: 34.5,12.5 parent: 82 type: Transform - - SecondsUntilStateChange: -493679.12 + - SecondsUntilStateChange: -493809.1 state: Opening type: Door - links: @@ -18735,7 +18735,7 @@ entities: - pos: 34.5,14.5 parent: 82 type: Transform - - SecondsUntilStateChange: -493679.12 + - SecondsUntilStateChange: -493809.1 state: Opening type: Door - links: @@ -18762,7 +18762,7 @@ entities: - pos: 34.5,13.5 parent: 82 type: Transform - - SecondsUntilStateChange: -493679.12 + - SecondsUntilStateChange: -493809.1 state: Opening type: Door - links: @@ -18789,7 +18789,7 @@ entities: - pos: 53.5,-25.5 parent: 82 type: Transform - - SecondsUntilStateChange: -491944.06 + - SecondsUntilStateChange: -492074.03 state: Opening type: Door - links: @@ -18800,7 +18800,7 @@ entities: - pos: 53.5,-26.5 parent: 82 type: Transform - - SecondsUntilStateChange: -491944.06 + - SecondsUntilStateChange: -492074.03 state: Opening type: Door - links: @@ -18811,7 +18811,7 @@ entities: - pos: 53.5,-27.5 parent: 82 type: Transform - - SecondsUntilStateChange: -491944.06 + - SecondsUntilStateChange: -492074.03 state: Opening type: Door - links: @@ -18822,7 +18822,7 @@ entities: - pos: 53.5,-28.5 parent: 82 type: Transform - - SecondsUntilStateChange: -491944.06 + - SecondsUntilStateChange: -492074.03 state: Opening type: Door - links: @@ -18833,7 +18833,7 @@ entities: - pos: 53.5,-29.5 parent: 82 type: Transform - - SecondsUntilStateChange: -491944.06 + - SecondsUntilStateChange: -492074.03 state: Opening type: Door - links: @@ -18844,7 +18844,7 @@ entities: - pos: 53.5,-30.5 parent: 82 type: Transform - - SecondsUntilStateChange: -491944.06 + - SecondsUntilStateChange: -492074.03 state: Opening type: Door - links: @@ -18855,7 +18855,7 @@ entities: - pos: 56.5,-25.5 parent: 82 type: Transform - - SecondsUntilStateChange: -491944.06 + - SecondsUntilStateChange: -492074.03 state: Opening type: Door - links: @@ -18866,7 +18866,7 @@ entities: - pos: 56.5,-26.5 parent: 82 type: Transform - - SecondsUntilStateChange: -491944.06 + - SecondsUntilStateChange: -492074.03 state: Opening type: Door - links: @@ -18877,7 +18877,7 @@ entities: - pos: 56.5,-27.5 parent: 82 type: Transform - - SecondsUntilStateChange: -491944.06 + - SecondsUntilStateChange: -492074.03 state: Opening type: Door - links: @@ -18888,7 +18888,7 @@ entities: - pos: 56.5,-28.5 parent: 82 type: Transform - - SecondsUntilStateChange: -491944.06 + - SecondsUntilStateChange: -492074.03 state: Opening type: Door - links: @@ -18899,7 +18899,7 @@ entities: - pos: 56.5,-29.5 parent: 82 type: Transform - - SecondsUntilStateChange: -491944.06 + - SecondsUntilStateChange: -492074.03 state: Opening type: Door - links: @@ -18910,7 +18910,7 @@ entities: - pos: 56.5,-30.5 parent: 82 type: Transform - - SecondsUntilStateChange: -491944.06 + - SecondsUntilStateChange: -492074.03 state: Opening type: Door - links: @@ -18921,7 +18921,7 @@ entities: - pos: -21.5,50.5 parent: 82 type: Transform - - SecondsUntilStateChange: -432599 + - SecondsUntilStateChange: -432728.97 state: Opening type: Door - links: @@ -18932,7 +18932,7 @@ entities: - pos: -21.5,48.5 parent: 82 type: Transform - - SecondsUntilStateChange: -432599 + - SecondsUntilStateChange: -432728.97 state: Opening type: Door - links: @@ -18943,7 +18943,7 @@ entities: - pos: -21.5,49.5 parent: 82 type: Transform - - SecondsUntilStateChange: -432599 + - SecondsUntilStateChange: -432728.97 state: Opening type: Door - links: @@ -18954,7 +18954,7 @@ entities: - pos: -21.5,47.5 parent: 82 type: Transform - - SecondsUntilStateChange: -432599 + - SecondsUntilStateChange: -432728.97 state: Opening type: Door - links: @@ -19019,7 +19019,7 @@ entities: - pos: 23.5,14.5 parent: 82 type: Transform - - SecondsUntilStateChange: -493740.38 + - SecondsUntilStateChange: -493870.34 state: Closing type: Door - links: @@ -19030,7 +19030,7 @@ entities: - pos: 23.5,13.5 parent: 82 type: Transform - - SecondsUntilStateChange: -493740.38 + - SecondsUntilStateChange: -493870.34 state: Closing type: Door - links: @@ -19041,7 +19041,7 @@ entities: - pos: 23.5,12.5 parent: 82 type: Transform - - SecondsUntilStateChange: -493740.38 + - SecondsUntilStateChange: -493870.34 state: Closing type: Door - links: @@ -67196,6 +67196,11 @@ entities: type: EntityStorage - proto: ClosetBombFilled entities: + - uid: 7213 + components: + - pos: 23.5,56.5 + parent: 82 + type: Transform - uid: 7929 components: - pos: 38.5,51.5 @@ -68781,29 +68786,6 @@ entities: - 0 - 0 type: EntityStorage - - uid: 7213 - components: - - pos: 23.5,56.5 - parent: 82 - type: Transform - - air: - volume: 200 - immutable: False - temperature: 293.1496 - moles: - - 1.6971024 - - 6.3843384 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - type: EntityStorage - proto: ClosetL3VirologyFilled entities: - uid: 3013 @@ -122417,7 +122399,7 @@ entities: - pos: -41.5,-42.5 parent: 82 type: Transform - - SecondsUntilStateChange: -380707.8 + - SecondsUntilStateChange: -380837.78 state: Opening type: Door - uid: 2822 @@ -122425,7 +122407,7 @@ entities: - pos: -41.5,-44.5 parent: 82 type: Transform - - SecondsUntilStateChange: -380705.6 + - SecondsUntilStateChange: -380835.56 state: Opening type: Door - uid: 8896 @@ -122434,7 +122416,7 @@ entities: pos: -39.5,-42.5 parent: 82 type: Transform - - SecondsUntilStateChange: -380879.84 + - SecondsUntilStateChange: -381009.8 state: Opening type: Door - uid: 15911 @@ -122443,7 +122425,7 @@ entities: pos: -39.5,-44.5 parent: 82 type: Transform - - SecondsUntilStateChange: -380704.88 + - SecondsUntilStateChange: -380834.84 state: Opening type: Door - uid: 16963 @@ -122471,7 +122453,7 @@ entities: - pos: -41.5,-40.5 parent: 82 type: Transform - - SecondsUntilStateChange: -380706.78 + - SecondsUntilStateChange: -380836.75 state: Opening type: Door - proto: HospitalCurtainsOpen @@ -123457,7 +123439,7 @@ entities: - pos: 38.44111,-13.189944 parent: 82 type: Transform -- proto: lantern +- proto: Lantern entities: - uid: 20173 components: @@ -125240,6 +125222,28 @@ entities: - pos: 7.5,-1.5 parent: 82 type: Transform +- proto: MaintenancePlantSpawner + entities: + - uid: 21987 + components: + - pos: -42.5,46.5 + parent: 82 + type: Transform + - uid: 22029 + components: + - pos: -12.5,-18.5 + parent: 82 + type: Transform + - uid: 22031 + components: + - pos: 41.5,54.5 + parent: 82 + type: Transform + - uid: 22043 + components: + - pos: -54.5,-4.5 + parent: 82 + type: Transform - proto: MaintenanceToolSpawner entities: - uid: 1209 @@ -140984,7 +140988,7 @@ entities: - pos: 58.5,-6.5 parent: 82 type: Transform - - SecondsUntilStateChange: -376776.3 + - SecondsUntilStateChange: -376906.28 state: Opening type: Door - links: @@ -140995,7 +140999,7 @@ entities: - pos: 59.5,-6.5 parent: 82 type: Transform - - SecondsUntilStateChange: -376776.3 + - SecondsUntilStateChange: -376906.28 state: Opening type: Door - links: @@ -141007,7 +141011,7 @@ entities: pos: 3.5,-19.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141019,7 +141023,7 @@ entities: pos: 2.5,-19.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141030,7 +141034,7 @@ entities: - pos: 1.5,-8.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141041,7 +141045,7 @@ entities: - pos: 2.5,-8.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141052,7 +141056,7 @@ entities: - pos: 3.5,-8.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141063,7 +141067,7 @@ entities: - pos: 5.5,-8.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141074,7 +141078,7 @@ entities: - pos: 6.5,-8.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141085,7 +141089,7 @@ entities: - pos: 7.5,-8.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141096,7 +141100,7 @@ entities: - pos: 8.5,-8.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141107,7 +141111,7 @@ entities: - pos: 9.5,-8.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141118,7 +141122,7 @@ entities: - pos: 11.5,-8.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141129,7 +141133,7 @@ entities: - pos: 12.5,-8.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141140,7 +141144,7 @@ entities: - pos: 13.5,-8.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141151,7 +141155,7 @@ entities: - pos: 14.5,-8.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141163,7 +141167,7 @@ entities: pos: 16.5,-11.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141175,7 +141179,7 @@ entities: pos: 16.5,-10.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141187,7 +141191,7 @@ entities: pos: -1.5,-11.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141199,7 +141203,7 @@ entities: pos: -1.5,-10.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141211,7 +141215,7 @@ entities: pos: 25.5,64.5 parent: 82 type: Transform - - SecondsUntilStateChange: -387928.56 + - SecondsUntilStateChange: -388058.53 state: Opening type: Door - links: @@ -141246,7 +141250,7 @@ entities: - pos: 62.5,-6.5 parent: 82 type: Transform - - SecondsUntilStateChange: -376776.3 + - SecondsUntilStateChange: -376906.28 state: Opening type: Door - links: @@ -141257,7 +141261,7 @@ entities: - pos: -8.5,32.5 parent: 82 type: Transform - - SecondsUntilStateChange: -386620.47 + - SecondsUntilStateChange: -386750.44 state: Opening type: Door - links: @@ -141268,7 +141272,7 @@ entities: - pos: -9.5,32.5 parent: 82 type: Transform - - SecondsUntilStateChange: -386620.47 + - SecondsUntilStateChange: -386750.44 state: Opening type: Door - links: @@ -141279,7 +141283,7 @@ entities: - pos: -7.5,32.5 parent: 82 type: Transform - - SecondsUntilStateChange: -386620.47 + - SecondsUntilStateChange: -386750.44 state: Opening type: Door - links: @@ -141291,7 +141295,7 @@ entities: pos: -6.5,34.5 parent: 82 type: Transform - - SecondsUntilStateChange: -386620.47 + - SecondsUntilStateChange: -386750.44 state: Opening type: Door - links: @@ -141303,7 +141307,7 @@ entities: pos: -6.5,35.5 parent: 82 type: Transform - - SecondsUntilStateChange: -386620.47 + - SecondsUntilStateChange: -386750.44 state: Opening type: Door - links: @@ -141314,7 +141318,7 @@ entities: - pos: 60.5,-6.5 parent: 82 type: Transform - - SecondsUntilStateChange: -376776.3 + - SecondsUntilStateChange: -376906.28 state: Opening type: Door - links: @@ -141326,7 +141330,7 @@ entities: pos: 44.5,12.5 parent: 82 type: Transform - - SecondsUntilStateChange: -76117.7 + - SecondsUntilStateChange: -76247.664 state: Opening type: Door - links: @@ -141338,7 +141342,7 @@ entities: pos: 44.5,13.5 parent: 82 type: Transform - - SecondsUntilStateChange: -76117.7 + - SecondsUntilStateChange: -76247.664 state: Opening type: Door - links: @@ -141350,7 +141354,7 @@ entities: pos: -46.5,-34.5 parent: 82 type: Transform - - SecondsUntilStateChange: -379561.62 + - SecondsUntilStateChange: -379691.6 state: Opening type: Door - links: @@ -141362,7 +141366,7 @@ entities: pos: 12.5,-19.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141374,7 +141378,7 @@ entities: pos: 11.5,-19.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141386,7 +141390,7 @@ entities: pos: 10.5,-19.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141398,7 +141402,7 @@ entities: pos: 4.5,-19.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141409,7 +141413,7 @@ entities: - pos: 0.5,-8.5 parent: 82 type: Transform - - SecondsUntilStateChange: -487811.75 + - SecondsUntilStateChange: -487941.72 state: Opening type: Door - links: @@ -141421,7 +141425,7 @@ entities: pos: 44.5,14.5 parent: 82 type: Transform - - SecondsUntilStateChange: -76117.7 + - SecondsUntilStateChange: -76247.664 state: Opening type: Door - links: @@ -141433,7 +141437,7 @@ entities: pos: -6.5,33.5 parent: 82 type: Transform - - SecondsUntilStateChange: -386620.47 + - SecondsUntilStateChange: -386750.44 state: Opening type: Door - links: @@ -141444,7 +141448,7 @@ entities: - pos: -10.5,32.5 parent: 82 type: Transform - - SecondsUntilStateChange: -386620.47 + - SecondsUntilStateChange: -386750.44 state: Opening type: Door - links: @@ -141456,7 +141460,7 @@ entities: pos: 25.5,65.5 parent: 82 type: Transform - - SecondsUntilStateChange: -387928.56 + - SecondsUntilStateChange: -388058.53 state: Opening type: Door - links: @@ -141467,7 +141471,7 @@ entities: - pos: 28.5,67.5 parent: 82 type: Transform - - SecondsUntilStateChange: -387928.56 + - SecondsUntilStateChange: -388058.53 state: Opening type: Door - links: @@ -141478,7 +141482,7 @@ entities: - pos: 27.5,67.5 parent: 82 type: Transform - - SecondsUntilStateChange: -387928.56 + - SecondsUntilStateChange: -388058.53 state: Opening type: Door - links: @@ -141489,7 +141493,7 @@ entities: - pos: 28.5,62.5 parent: 82 type: Transform - - SecondsUntilStateChange: -387928.56 + - SecondsUntilStateChange: -388058.53 state: Opening type: Door - links: @@ -141500,7 +141504,7 @@ entities: - pos: 26.5,62.5 parent: 82 type: Transform - - SecondsUntilStateChange: -387928.56 + - SecondsUntilStateChange: -388058.53 state: Opening type: Door - links: @@ -141511,7 +141515,7 @@ entities: - pos: 27.5,62.5 parent: 82 type: Transform - - SecondsUntilStateChange: -387928.56 + - SecondsUntilStateChange: -388058.53 state: Opening type: Door - links: @@ -141523,7 +141527,7 @@ entities: pos: -6.5,36.5 parent: 82 type: Transform - - SecondsUntilStateChange: -386620.47 + - SecondsUntilStateChange: -386750.44 state: Opening type: Door - links: @@ -141535,7 +141539,7 @@ entities: pos: -46.5,-35.5 parent: 82 type: Transform - - SecondsUntilStateChange: -379561.62 + - SecondsUntilStateChange: -379691.6 state: Opening type: Door - links: @@ -141546,7 +141550,7 @@ entities: - pos: -45.5,-33.5 parent: 82 type: Transform - - SecondsUntilStateChange: -379561.62 + - SecondsUntilStateChange: -379691.6 state: Opening type: Door - links: @@ -141557,7 +141561,7 @@ entities: - pos: -44.5,-33.5 parent: 82 type: Transform - - SecondsUntilStateChange: -379561.62 + - SecondsUntilStateChange: -379691.6 state: Opening type: Door - links: @@ -141568,7 +141572,7 @@ entities: - pos: -42.5,-33.5 parent: 82 type: Transform - - SecondsUntilStateChange: -379561.62 + - SecondsUntilStateChange: -379691.6 state: Opening type: Door - links: @@ -141579,7 +141583,7 @@ entities: - pos: -41.5,-33.5 parent: 82 type: Transform - - SecondsUntilStateChange: -379561.62 + - SecondsUntilStateChange: -379691.6 state: Opening type: Door - links: @@ -141590,7 +141594,7 @@ entities: - pos: 61.5,-6.5 parent: 82 type: Transform - - SecondsUntilStateChange: -376776.3 + - SecondsUntilStateChange: -376906.28 state: Opening type: Door - links: @@ -141602,7 +141606,7 @@ entities: pos: 57.5,-7.5 parent: 82 type: Transform - - SecondsUntilStateChange: -376776.3 + - SecondsUntilStateChange: -376906.28 state: Opening type: Door - links: @@ -141614,7 +141618,7 @@ entities: pos: 57.5,-8.5 parent: 82 type: Transform - - SecondsUntilStateChange: -376776.3 + - SecondsUntilStateChange: -376906.28 state: Opening type: Door - links: @@ -141626,7 +141630,7 @@ entities: pos: 57.5,-10.5 parent: 82 type: Transform - - SecondsUntilStateChange: -376776.3 + - SecondsUntilStateChange: -376906.28 state: Opening type: Door - links: @@ -141638,7 +141642,7 @@ entities: pos: 57.5,-11.5 parent: 82 type: Transform - - SecondsUntilStateChange: -376776.3 + - SecondsUntilStateChange: -376906.28 state: Opening type: Door - links: @@ -141650,7 +141654,7 @@ entities: pos: 57.5,-9.5 parent: 82 type: Transform - - SecondsUntilStateChange: -376776.3 + - SecondsUntilStateChange: -376906.28 state: Opening type: Door - links: @@ -141662,7 +141666,7 @@ entities: pos: 59.5,-14.5 parent: 82 type: Transform - - SecondsUntilStateChange: -376776.3 + - SecondsUntilStateChange: -376906.28 state: Opening type: Door - links: @@ -141674,7 +141678,7 @@ entities: pos: 59.5,-15.5 parent: 82 type: Transform - - SecondsUntilStateChange: -376776.3 + - SecondsUntilStateChange: -376906.28 state: Opening type: Door - links: @@ -141853,7 +141857,7 @@ entities: - pos: -26.5,60.5 parent: 82 type: Transform - - SecondsUntilStateChange: -432612.34 + - SecondsUntilStateChange: -432742.3 state: Closing type: Door - links: @@ -141864,7 +141868,7 @@ entities: - pos: -24.5,60.5 parent: 82 type: Transform - - SecondsUntilStateChange: -432612.34 + - SecondsUntilStateChange: -432742.3 state: Closing type: Door - links: @@ -141875,7 +141879,7 @@ entities: - pos: -25.5,60.5 parent: 82 type: Transform - - SecondsUntilStateChange: -432612.34 + - SecondsUntilStateChange: -432742.3 state: Closing type: Door - links: @@ -141886,7 +141890,7 @@ entities: - pos: -23.5,60.5 parent: 82 type: Transform - - SecondsUntilStateChange: -432612.34 + - SecondsUntilStateChange: -432742.3 state: Closing type: Door - links: @@ -141897,7 +141901,7 @@ entities: - pos: -27.5,60.5 parent: 82 type: Transform - - SecondsUntilStateChange: -432612.34 + - SecondsUntilStateChange: -432742.3 state: Closing type: Door - links: @@ -172140,7 +172144,7 @@ entities: - pos: -11.5,17.5 parent: 82 type: Transform - - SecondsUntilStateChange: -557719.7 + - SecondsUntilStateChange: -557849.7 state: Opening type: Door - uid: 4246 @@ -172148,7 +172152,7 @@ entities: - pos: -11.5,19.5 parent: 82 type: Transform - - SecondsUntilStateChange: -557717.94 + - SecondsUntilStateChange: -557847.94 state: Opening type: Door - uid: 8013 diff --git a/Resources/Maps/marathon.yml b/Resources/Maps/marathon.yml index 8ec944a6491379..2c6d1ca2d633fc 100644 --- a/Resources/Maps/marathon.yml +++ b/Resources/Maps/marathon.yml @@ -106750,6 +106750,28 @@ entities: - pos: -41.5,-26.5 parent: 30 type: Transform +- proto: MaintenancePlantSpawner + entities: + - uid: 20805 + components: + - pos: -47.5,26.5 + parent: 30 + type: Transform + - uid: 20806 + components: + - pos: 20.5,52.5 + parent: 30 + type: Transform + - uid: 20807 + components: + - pos: 2.5,-13.5 + parent: 30 + type: Transform + - uid: 20808 + components: + - pos: -63.5,-64.5 + parent: 30 + type: Transform - proto: MaintenanceToolSpawner entities: - uid: 9197 diff --git a/Resources/Maps/omega.yml b/Resources/Maps/omega.yml index af8f4124dfb4db..b79b10ae9afad2 100644 --- a/Resources/Maps/omega.yml +++ b/Resources/Maps/omega.yml @@ -60827,6 +60827,23 @@ entities: - pos: 7.5,12.5 parent: 4812 type: Transform +- proto: MaintenancePlantSpawner + entities: + - uid: 10549 + components: + - pos: -13.5,13.5 + parent: 4812 + type: Transform + - uid: 10585 + components: + - pos: -29.5,-31.5 + parent: 4812 + type: Transform + - uid: 10586 + components: + - pos: 22.5,-34.5 + parent: 4812 + type: Transform - proto: MaintenanceToolSpawner entities: - uid: 4608 diff --git a/Resources/Maps/origin.yml b/Resources/Maps/origin.yml index 972424d4fd9d5e..e48a10209a559f 100644 --- a/Resources/Maps/origin.yml +++ b/Resources/Maps/origin.yml @@ -22312,7 +22312,7 @@ entities: - pos: 10.5,47.5 parent: 2 type: Transform - - SecondsUntilStateChange: -236008.25 + - SecondsUntilStateChange: -236068.19 state: Closing type: Door - enabled: False @@ -22329,7 +22329,7 @@ entities: - pos: 10.5,49.5 parent: 2 type: Transform - - SecondsUntilStateChange: -236008.25 + - SecondsUntilStateChange: -236068.19 state: Closing type: Door - enabled: False @@ -22346,7 +22346,7 @@ entities: - pos: 10.5,48.5 parent: 2 type: Transform - - SecondsUntilStateChange: -236008.25 + - SecondsUntilStateChange: -236068.19 state: Closing type: Door - enabled: False @@ -22365,7 +22365,7 @@ entities: - pos: 18.5,-56.5 parent: 2 type: Transform - - SecondsUntilStateChange: -301437.7 + - SecondsUntilStateChange: -301497.62 state: Closing type: Door - enabled: False @@ -22382,7 +22382,7 @@ entities: - pos: 47.5,-51.5 parent: 2 type: Transform - - SecondsUntilStateChange: -170818.45 + - SecondsUntilStateChange: -170878.39 state: Closing type: Door - enabled: False @@ -22399,7 +22399,7 @@ entities: - pos: 47.5,-52.5 parent: 2 type: Transform - - SecondsUntilStateChange: -170818.45 + - SecondsUntilStateChange: -170878.39 state: Closing type: Door - enabled: False @@ -22416,7 +22416,7 @@ entities: - pos: 47.5,-53.5 parent: 2 type: Transform - - SecondsUntilStateChange: -170818.45 + - SecondsUntilStateChange: -170878.39 state: Closing type: Door - enabled: False @@ -22433,7 +22433,7 @@ entities: - pos: 47.5,-54.5 parent: 2 type: Transform - - SecondsUntilStateChange: -170818.45 + - SecondsUntilStateChange: -170878.39 state: Closing type: Door - enabled: False @@ -22450,7 +22450,7 @@ entities: - pos: 52.5,-58.5 parent: 2 type: Transform - - SecondsUntilStateChange: -170806.12 + - SecondsUntilStateChange: -170866.06 state: Closing type: Door - enabled: False @@ -22467,7 +22467,7 @@ entities: - pos: 50.5,-62.5 parent: 2 type: Transform - - SecondsUntilStateChange: -170808.66 + - SecondsUntilStateChange: -170868.6 state: Closing type: Door - enabled: False @@ -22485,7 +22485,7 @@ entities: pos: 55.5,-56.5 parent: 2 type: Transform - - SecondsUntilStateChange: -170756.94 + - SecondsUntilStateChange: -170816.88 state: Closing type: Door - enabled: False @@ -22503,7 +22503,7 @@ entities: pos: 54.5,-56.5 parent: 2 type: Transform - - SecondsUntilStateChange: -170756.94 + - SecondsUntilStateChange: -170816.88 state: Closing type: Door - enabled: False @@ -22520,7 +22520,7 @@ entities: - pos: -45.5,-34.5 parent: 2 type: Transform - - SecondsUntilStateChange: -426286.12 + - SecondsUntilStateChange: -426346.06 state: Closing type: Door - enabled: False @@ -22538,7 +22538,7 @@ entities: pos: -40.5,-40.5 parent: 2 type: Transform - - SecondsUntilStateChange: -424636.47 + - SecondsUntilStateChange: -424696.4 state: Closing type: Door - enabled: False @@ -22556,7 +22556,7 @@ entities: pos: -39.5,-40.5 parent: 2 type: Transform - - SecondsUntilStateChange: -424636.47 + - SecondsUntilStateChange: -424696.4 state: Closing type: Door - enabled: False @@ -22574,7 +22574,7 @@ entities: pos: -38.5,-40.5 parent: 2 type: Transform - - SecondsUntilStateChange: -424636.47 + - SecondsUntilStateChange: -424696.4 state: Closing type: Door - enabled: False @@ -22592,7 +22592,7 @@ entities: pos: -37.5,-40.5 parent: 2 type: Transform - - SecondsUntilStateChange: -424636.47 + - SecondsUntilStateChange: -424696.4 state: Closing type: Door - enabled: False @@ -22609,7 +22609,7 @@ entities: - pos: -49.5,19.5 parent: 2 type: Transform - - SecondsUntilStateChange: -304600.84 + - SecondsUntilStateChange: -304660.78 state: Closing type: Door - enabled: False @@ -22626,7 +22626,7 @@ entities: - pos: -49.5,23.5 parent: 2 type: Transform - - SecondsUntilStateChange: -304600.84 + - SecondsUntilStateChange: -304660.78 state: Closing type: Door - enabled: False @@ -22643,7 +22643,7 @@ entities: - pos: 51.5,44.5 parent: 2 type: Transform - - SecondsUntilStateChange: -266759.16 + - SecondsUntilStateChange: -266819.1 state: Closing type: Door - enabled: False @@ -22662,7 +22662,7 @@ entities: - pos: 54.5,45.5 parent: 2 type: Transform - - SecondsUntilStateChange: -266759.16 + - SecondsUntilStateChange: -266819.1 state: Closing type: Door - enabled: False @@ -22680,7 +22680,7 @@ entities: - pos: -52.5,34.5 parent: 2 type: Transform - - SecondsUntilStateChange: -98727.94 + - SecondsUntilStateChange: -98787.87 state: Closing type: Door - enabled: False @@ -22697,7 +22697,7 @@ entities: - pos: -52.5,30.5 parent: 2 type: Transform - - SecondsUntilStateChange: -98700.23 + - SecondsUntilStateChange: -98760.16 state: Closing type: Door - enabled: False @@ -22714,7 +22714,7 @@ entities: - pos: -53.5,23.5 parent: 2 type: Transform - - SecondsUntilStateChange: -98768.875 + - SecondsUntilStateChange: -98828.805 state: Closing type: Door - enabled: False @@ -22731,7 +22731,7 @@ entities: - pos: -53.5,19.5 parent: 2 type: Transform - - SecondsUntilStateChange: -98768.875 + - SecondsUntilStateChange: -98828.805 state: Closing type: Door - enabled: False @@ -22748,7 +22748,7 @@ entities: - pos: 53.5,46.5 parent: 2 type: Transform - - SecondsUntilStateChange: -265017.03 + - SecondsUntilStateChange: -265076.97 state: Closing type: Door - enabled: False @@ -22767,7 +22767,7 @@ entities: - pos: 55.5,46.5 parent: 2 type: Transform - - SecondsUntilStateChange: -267019.4 + - SecondsUntilStateChange: -267079.34 state: Closing type: Door - enabled: False @@ -22785,7 +22785,7 @@ entities: - pos: 50.5,47.5 parent: 2 type: Transform - - SecondsUntilStateChange: -266759.16 + - SecondsUntilStateChange: -266819.1 state: Closing type: Door - enabled: False @@ -22802,7 +22802,7 @@ entities: - pos: 57.5,44.5 parent: 2 type: Transform - - SecondsUntilStateChange: -266759.16 + - SecondsUntilStateChange: -266819.1 state: Closing type: Door - enabled: False @@ -22819,7 +22819,7 @@ entities: - pos: 56.5,47.5 parent: 2 type: Transform - - SecondsUntilStateChange: -266759.16 + - SecondsUntilStateChange: -266819.1 state: Closing type: Door - enabled: False @@ -22841,7 +22841,7 @@ entities: - pos: 53.5,48.5 parent: 2 type: Transform - - SecondsUntilStateChange: -265017.03 + - SecondsUntilStateChange: -265076.97 state: Closing type: Door - enabled: False @@ -22868,7 +22868,7 @@ entities: - pos: 58.5,47.5 parent: 2 type: Transform - - SecondsUntilStateChange: -266759.16 + - SecondsUntilStateChange: -266819.1 state: Closing type: Door - enabled: False @@ -22885,7 +22885,7 @@ entities: - pos: 52.5,45.5 parent: 2 type: Transform - - SecondsUntilStateChange: -267254.8 + - SecondsUntilStateChange: -267314.75 state: Closing type: Door - enabled: False @@ -22903,7 +22903,7 @@ entities: - pos: 53.5,44.5 parent: 2 type: Transform - - SecondsUntilStateChange: -265017.03 + - SecondsUntilStateChange: -265076.97 state: Closing type: Door - enabled: False @@ -22921,7 +22921,7 @@ entities: - pos: 55.5,44.5 parent: 2 type: Transform - - SecondsUntilStateChange: -266759.16 + - SecondsUntilStateChange: -266819.1 state: Closing type: Door - enabled: False @@ -22939,7 +22939,7 @@ entities: - pos: 58.5,45.5 parent: 2 type: Transform - - SecondsUntilStateChange: -266759.16 + - SecondsUntilStateChange: -266819.1 state: Closing type: Door - enabled: False @@ -22956,7 +22956,7 @@ entities: - pos: 57.5,46.5 parent: 2 type: Transform - - SecondsUntilStateChange: -266759.16 + - SecondsUntilStateChange: -266819.1 state: Closing type: Door - enabled: False @@ -22980,7 +22980,7 @@ entities: - pos: 54.5,47.5 parent: 2 type: Transform - - SecondsUntilStateChange: -266759.16 + - SecondsUntilStateChange: -266819.1 state: Closing type: Door - enabled: False @@ -22997,7 +22997,7 @@ entities: - pos: 52.5,47.5 parent: 2 type: Transform - - SecondsUntilStateChange: -266759.16 + - SecondsUntilStateChange: -266819.1 state: Closing type: Door - enabled: False @@ -23014,7 +23014,7 @@ entities: - pos: 51.5,46.5 parent: 2 type: Transform - - SecondsUntilStateChange: -266759.16 + - SecondsUntilStateChange: -266819.1 state: Closing type: Door - enabled: False @@ -23032,7 +23032,7 @@ entities: - pos: 56.5,45.5 parent: 2 type: Transform - - SecondsUntilStateChange: -267113.5 + - SecondsUntilStateChange: -267173.44 state: Closing type: Door - enabled: False @@ -23050,7 +23050,7 @@ entities: - pos: 50.5,45.5 parent: 2 type: Transform - - SecondsUntilStateChange: -266759.16 + - SecondsUntilStateChange: -266819.1 state: Closing type: Door - enabled: False @@ -23068,7 +23068,7 @@ entities: - pos: -18.5,-96.5 parent: 2 type: Transform - - SecondsUntilStateChange: -213133.38 + - SecondsUntilStateChange: -213193.31 state: Closing type: Door - enabled: False @@ -23085,7 +23085,7 @@ entities: - pos: -18.5,-98.5 parent: 2 type: Transform - - SecondsUntilStateChange: -213133.38 + - SecondsUntilStateChange: -213193.31 state: Closing type: Door - enabled: False @@ -23102,7 +23102,7 @@ entities: - pos: -26.5,-96.5 parent: 2 type: Transform - - SecondsUntilStateChange: -213141.7 + - SecondsUntilStateChange: -213201.64 state: Closing type: Door - enabled: False @@ -23119,7 +23119,7 @@ entities: - pos: -26.5,-98.5 parent: 2 type: Transform - - SecondsUntilStateChange: -213141.7 + - SecondsUntilStateChange: -213201.64 state: Closing type: Door - enabled: False @@ -23136,7 +23136,7 @@ entities: - pos: 67.5,-39.5 parent: 2 type: Transform - - SecondsUntilStateChange: -168915.25 + - SecondsUntilStateChange: -168975.19 state: Closing type: Door - enabled: False @@ -23165,7 +23165,7 @@ entities: pos: 24.5,46.5 parent: 2 type: Transform - - SecondsUntilStateChange: -230996.28 + - SecondsUntilStateChange: -231056.22 state: Opening type: Door - enabled: True @@ -23183,7 +23183,7 @@ entities: pos: 23.5,46.5 parent: 2 type: Transform - - SecondsUntilStateChange: -230996.28 + - SecondsUntilStateChange: -231056.22 state: Opening type: Door - enabled: True @@ -23201,7 +23201,7 @@ entities: pos: 25.5,46.5 parent: 2 type: Transform - - SecondsUntilStateChange: -230996.28 + - SecondsUntilStateChange: -231056.22 state: Opening type: Door - enabled: True @@ -23219,7 +23219,7 @@ entities: pos: 26.5,44.5 parent: 2 type: Transform - - SecondsUntilStateChange: -230996.28 + - SecondsUntilStateChange: -231056.22 state: Opening type: Door - enabled: True @@ -23237,7 +23237,7 @@ entities: pos: 24.5,44.5 parent: 2 type: Transform - - SecondsUntilStateChange: -230996.28 + - SecondsUntilStateChange: -231056.22 state: Opening type: Door - enabled: True @@ -23255,7 +23255,7 @@ entities: pos: 23.5,44.5 parent: 2 type: Transform - - SecondsUntilStateChange: -230996.28 + - SecondsUntilStateChange: -231056.22 state: Opening type: Door - enabled: True @@ -23273,7 +23273,7 @@ entities: pos: 25.5,44.5 parent: 2 type: Transform - - SecondsUntilStateChange: -230996.28 + - SecondsUntilStateChange: -231056.22 state: Opening type: Door - enabled: True @@ -23291,7 +23291,7 @@ entities: pos: 26.5,46.5 parent: 2 type: Transform - - SecondsUntilStateChange: -230996.28 + - SecondsUntilStateChange: -231056.22 state: Opening type: Door - enabled: True @@ -23309,7 +23309,7 @@ entities: pos: 22.5,44.5 parent: 2 type: Transform - - SecondsUntilStateChange: -230996.28 + - SecondsUntilStateChange: -231056.22 state: Opening type: Door - enabled: True @@ -23327,7 +23327,7 @@ entities: pos: 22.5,46.5 parent: 2 type: Transform - - SecondsUntilStateChange: -230996.28 + - SecondsUntilStateChange: -231056.22 state: Opening type: Door - enabled: True @@ -23344,7 +23344,7 @@ entities: - pos: -8.5,-91.5 parent: 2 type: Transform - - SecondsUntilStateChange: -214890.36 + - SecondsUntilStateChange: -214950.3 state: Opening type: Door - enabled: True @@ -23362,7 +23362,7 @@ entities: - pos: -8.5,-92.5 parent: 2 type: Transform - - SecondsUntilStateChange: -214890.36 + - SecondsUntilStateChange: -214950.3 state: Opening type: Door - enabled: True @@ -23380,7 +23380,7 @@ entities: - pos: -8.5,-93.5 parent: 2 type: Transform - - SecondsUntilStateChange: -214890.36 + - SecondsUntilStateChange: -214950.3 state: Opening type: Door - enabled: True @@ -23398,7 +23398,7 @@ entities: - pos: -6.5,-91.5 parent: 2 type: Transform - - SecondsUntilStateChange: -214890.36 + - SecondsUntilStateChange: -214950.3 state: Opening type: Door - enabled: True @@ -23416,7 +23416,7 @@ entities: - pos: -6.5,-90.5 parent: 2 type: Transform - - SecondsUntilStateChange: -214890.36 + - SecondsUntilStateChange: -214950.3 state: Opening type: Door - enabled: True @@ -23434,7 +23434,7 @@ entities: - pos: -6.5,-92.5 parent: 2 type: Transform - - SecondsUntilStateChange: -214890.36 + - SecondsUntilStateChange: -214950.3 state: Opening type: Door - enabled: True @@ -23452,7 +23452,7 @@ entities: - pos: -6.5,-93.5 parent: 2 type: Transform - - SecondsUntilStateChange: -214890.36 + - SecondsUntilStateChange: -214950.3 state: Opening type: Door - enabled: True @@ -23470,7 +23470,7 @@ entities: - pos: -8.5,-90.5 parent: 2 type: Transform - - SecondsUntilStateChange: -214890.36 + - SecondsUntilStateChange: -214950.3 state: Opening type: Door - enabled: True @@ -23490,7 +23490,7 @@ entities: - pos: -11.5,-11.5 parent: 2 type: Transform - - SecondsUntilStateChange: -59840.848 + - SecondsUntilStateChange: -59900.78 state: Closing type: Door - enabled: False @@ -23509,7 +23509,7 @@ entities: - pos: -56.5,-11.5 parent: 2 type: Transform - - SecondsUntilStateChange: -342566.3 + - SecondsUntilStateChange: -342626.25 state: Opening type: Door - enabled: True @@ -23526,7 +23526,7 @@ entities: - pos: -56.5,-12.5 parent: 2 type: Transform - - SecondsUntilStateChange: -342566.3 + - SecondsUntilStateChange: -342626.25 state: Opening type: Door - enabled: True @@ -23543,7 +23543,7 @@ entities: - pos: -56.5,-13.5 parent: 2 type: Transform - - SecondsUntilStateChange: -342566.3 + - SecondsUntilStateChange: -342626.25 state: Opening type: Door - enabled: True @@ -23560,7 +23560,7 @@ entities: - pos: -56.5,-14.5 parent: 2 type: Transform - - SecondsUntilStateChange: -342566.3 + - SecondsUntilStateChange: -342626.25 state: Opening type: Door - enabled: True @@ -23577,7 +23577,7 @@ entities: - pos: -56.5,-15.5 parent: 2 type: Transform - - SecondsUntilStateChange: -342566.3 + - SecondsUntilStateChange: -342626.25 state: Opening type: Door - enabled: True @@ -23595,7 +23595,7 @@ entities: pos: -64.5,-22.5 parent: 2 type: Transform - - SecondsUntilStateChange: -111763.92 + - SecondsUntilStateChange: -111823.85 state: Opening type: Door - enabled: True @@ -23613,7 +23613,7 @@ entities: pos: -65.5,-22.5 parent: 2 type: Transform - - SecondsUntilStateChange: -111763.92 + - SecondsUntilStateChange: -111823.85 state: Opening type: Door - enabled: True @@ -23631,7 +23631,7 @@ entities: pos: -66.5,-22.5 parent: 2 type: Transform - - SecondsUntilStateChange: -111763.92 + - SecondsUntilStateChange: -111823.85 state: Opening type: Door - enabled: True @@ -23649,7 +23649,7 @@ entities: pos: -67.5,-22.5 parent: 2 type: Transform - - SecondsUntilStateChange: -111763.92 + - SecondsUntilStateChange: -111823.85 state: Opening type: Door - enabled: True @@ -23667,7 +23667,7 @@ entities: pos: -68.5,-22.5 parent: 2 type: Transform - - SecondsUntilStateChange: -111763.92 + - SecondsUntilStateChange: -111823.85 state: Opening type: Door - enabled: True @@ -141846,7 +141846,7 @@ entities: - pos: 60.5,21.5 parent: 2 type: Transform - - SecondsUntilStateChange: -503956.84 + - SecondsUntilStateChange: -504016.78 state: Opening type: Door - uid: 20663 @@ -141877,7 +141877,7 @@ entities: - pos: 3.5,-62.5 parent: 2 type: Transform - - SecondsUntilStateChange: -578518.5 + - SecondsUntilStateChange: -578578.44 state: Closing type: Door - uid: 20668 @@ -144722,6 +144722,33 @@ entities: - pos: -32.5,-7.5 parent: 2 type: Transform +- proto: MaintenancePlantSpawner + entities: + - uid: 30926 + components: + - pos: -26.5,31.5 + parent: 2 + type: Transform + - uid: 30927 + components: + - pos: 52.5,39.5 + parent: 2 + type: Transform + - uid: 30928 + components: + - pos: 17.5,-50.5 + parent: 2 + type: Transform + - uid: 30929 + components: + - pos: -28.5,-98.5 + parent: 2 + type: Transform + - uid: 30930 + components: + - pos: -56.5,-68.5 + parent: 2 + type: Transform - proto: MaintenanceToolSpawner entities: - uid: 20976 @@ -160415,7 +160442,7 @@ entities: type: Occluder - canCollide: False type: Physics - - SecondsUntilStateChange: -114041.08 + - SecondsUntilStateChange: -114101.01 state: Closing type: Door - airBlocked: False @@ -160433,7 +160460,7 @@ entities: type: Occluder - canCollide: False type: Physics - - SecondsUntilStateChange: -114041.08 + - SecondsUntilStateChange: -114101.01 state: Closing type: Door - airBlocked: False @@ -160467,7 +160494,7 @@ entities: pos: 15.5,13.5 parent: 2 type: Transform - - SecondsUntilStateChange: -95096.164 + - SecondsUntilStateChange: -95156.09 state: Opening type: Door - canCollide: True @@ -160490,7 +160517,7 @@ entities: - pos: -32.5,32.5 parent: 2 type: Transform - - SecondsUntilStateChange: -124654.555 + - SecondsUntilStateChange: -124714.484 state: Opening type: Door - canCollide: True @@ -160507,7 +160534,7 @@ entities: - pos: 37.5,-0.5 parent: 2 type: Transform - - SecondsUntilStateChange: -32744.418 + - SecondsUntilStateChange: -32804.35 state: Opening type: Door - canCollide: True @@ -160533,7 +160560,7 @@ entities: pos: 15.5,11.5 parent: 2 type: Transform - - SecondsUntilStateChange: -95096.164 + - SecondsUntilStateChange: -95156.09 state: Opening type: Door - canCollide: True @@ -160551,7 +160578,7 @@ entities: pos: 15.5,10.5 parent: 2 type: Transform - - SecondsUntilStateChange: -95096.164 + - SecondsUntilStateChange: -95156.09 state: Opening type: Door - canCollide: True @@ -160569,7 +160596,7 @@ entities: pos: -2.5,-5.5 parent: 2 type: Transform - - SecondsUntilStateChange: -74765.33 + - SecondsUntilStateChange: -74825.26 state: Opening type: Door - canCollide: True @@ -160586,7 +160613,7 @@ entities: - pos: -0.5,-2.5 parent: 2 type: Transform - - SecondsUntilStateChange: -74765.33 + - SecondsUntilStateChange: -74825.26 state: Opening type: Door - canCollide: True @@ -160603,7 +160630,7 @@ entities: - pos: 18.5,15.5 parent: 2 type: Transform - - SecondsUntilStateChange: -95096.164 + - SecondsUntilStateChange: -95156.09 state: Opening type: Door - canCollide: True @@ -160620,7 +160647,7 @@ entities: - pos: 17.5,15.5 parent: 2 type: Transform - - SecondsUntilStateChange: -95096.164 + - SecondsUntilStateChange: -95156.09 state: Opening type: Door - canCollide: True @@ -160646,7 +160673,7 @@ entities: pos: 48.5,6.5 parent: 2 type: Transform - - SecondsUntilStateChange: -30290.246 + - SecondsUntilStateChange: -30350.18 state: Opening type: Door - canCollide: True @@ -160664,7 +160691,7 @@ entities: pos: 35.5,4.5 parent: 2 type: Transform - - SecondsUntilStateChange: -94183.44 + - SecondsUntilStateChange: -94243.37 state: Opening type: Door - canCollide: True @@ -160682,7 +160709,7 @@ entities: pos: 15.5,12.5 parent: 2 type: Transform - - SecondsUntilStateChange: -95096.164 + - SecondsUntilStateChange: -95156.09 state: Opening type: Door - canCollide: True @@ -160699,7 +160726,7 @@ entities: - pos: 61.5,-56.5 parent: 2 type: Transform - - SecondsUntilStateChange: -124568.82 + - SecondsUntilStateChange: -124628.75 state: Opening type: Door - canCollide: True @@ -160717,7 +160744,7 @@ entities: pos: 15.5,14.5 parent: 2 type: Transform - - SecondsUntilStateChange: -95096.164 + - SecondsUntilStateChange: -95156.09 state: Opening type: Door - canCollide: True @@ -160734,7 +160761,7 @@ entities: - pos: 45.5,9.5 parent: 2 type: Transform - - SecondsUntilStateChange: -30290.246 + - SecondsUntilStateChange: -30350.18 state: Opening type: Door - canCollide: True @@ -160751,7 +160778,7 @@ entities: - pos: 43.5,7.5 parent: 2 type: Transform - - SecondsUntilStateChange: -30290.246 + - SecondsUntilStateChange: -30350.18 state: Opening type: Door - canCollide: True @@ -160768,7 +160795,7 @@ entities: - pos: 62.5,-56.5 parent: 2 type: Transform - - SecondsUntilStateChange: -124568.82 + - SecondsUntilStateChange: -124628.75 state: Opening type: Door - canCollide: True @@ -160785,7 +160812,7 @@ entities: - pos: 63.5,-56.5 parent: 2 type: Transform - - SecondsUntilStateChange: -124568.82 + - SecondsUntilStateChange: -124628.75 state: Opening type: Door - canCollide: True @@ -160802,7 +160829,7 @@ entities: - pos: 22.5,-40.5 parent: 2 type: Transform - - SecondsUntilStateChange: -119660.23 + - SecondsUntilStateChange: -119720.16 state: Opening type: Door - canCollide: True @@ -160819,7 +160846,7 @@ entities: - pos: -30.5,27.5 parent: 2 type: Transform - - SecondsUntilStateChange: -124654.555 + - SecondsUntilStateChange: -124714.484 state: Opening type: Door - canCollide: True @@ -160836,7 +160863,7 @@ entities: - pos: 29.5,9.5 parent: 2 type: Transform - - SecondsUntilStateChange: -94183.44 + - SecondsUntilStateChange: -94243.37 state: Opening type: Door - canCollide: True @@ -160853,7 +160880,7 @@ entities: - pos: 34.5,9.5 parent: 2 type: Transform - - SecondsUntilStateChange: -94183.44 + - SecondsUntilStateChange: -94243.37 state: Opening type: Door - canCollide: True @@ -160870,7 +160897,7 @@ entities: - pos: -31.5,27.5 parent: 2 type: Transform - - SecondsUntilStateChange: -124654.555 + - SecondsUntilStateChange: -124714.484 state: Opening type: Door - canCollide: True @@ -160888,7 +160915,7 @@ entities: pos: 35.5,7.5 parent: 2 type: Transform - - SecondsUntilStateChange: -94183.44 + - SecondsUntilStateChange: -94243.37 state: Opening type: Door - canCollide: True @@ -160905,7 +160932,7 @@ entities: - pos: -33.5,27.5 parent: 2 type: Transform - - SecondsUntilStateChange: -124654.555 + - SecondsUntilStateChange: -124714.484 state: Opening type: Door - canCollide: True @@ -160922,7 +160949,7 @@ entities: - pos: -49.5,13.5 parent: 2 type: Transform - - SecondsUntilStateChange: -84833.375 + - SecondsUntilStateChange: -84893.305 state: Opening type: Door - canCollide: True @@ -160939,7 +160966,7 @@ entities: - pos: -48.5,13.5 parent: 2 type: Transform - - SecondsUntilStateChange: -84833.375 + - SecondsUntilStateChange: -84893.305 state: Opening type: Door - canCollide: True @@ -160956,7 +160983,7 @@ entities: - pos: -31.5,32.5 parent: 2 type: Transform - - SecondsUntilStateChange: -124654.555 + - SecondsUntilStateChange: -124714.484 state: Opening type: Door - canCollide: True @@ -160973,7 +161000,7 @@ entities: - pos: 32.5,9.5 parent: 2 type: Transform - - SecondsUntilStateChange: -94183.44 + - SecondsUntilStateChange: -94243.37 state: Opening type: Door - canCollide: True @@ -160990,7 +161017,7 @@ entities: - pos: 39.5,-0.5 parent: 2 type: Transform - - SecondsUntilStateChange: -32744.418 + - SecondsUntilStateChange: -32804.35 state: Opening type: Door - canCollide: True @@ -161007,7 +161034,7 @@ entities: - pos: -33.5,32.5 parent: 2 type: Transform - - SecondsUntilStateChange: -124654.555 + - SecondsUntilStateChange: -124714.484 state: Opening type: Door - canCollide: True @@ -161024,7 +161051,7 @@ entities: - pos: -46.5,13.5 parent: 2 type: Transform - - SecondsUntilStateChange: -84833.375 + - SecondsUntilStateChange: -84893.305 state: Opening type: Door - canCollide: True @@ -161041,7 +161068,7 @@ entities: - pos: -47.5,13.5 parent: 2 type: Transform - - SecondsUntilStateChange: -84833.375 + - SecondsUntilStateChange: -84893.305 state: Opening type: Door - canCollide: True @@ -161058,7 +161085,7 @@ entities: - pos: 43.5,5.5 parent: 2 type: Transform - - SecondsUntilStateChange: -30290.246 + - SecondsUntilStateChange: -30350.18 state: Opening type: Door - canCollide: True @@ -161075,7 +161102,7 @@ entities: - pos: 59.5,-54.5 parent: 2 type: Transform - - SecondsUntilStateChange: -124568.82 + - SecondsUntilStateChange: -124628.75 state: Opening type: Door - canCollide: True @@ -161092,7 +161119,7 @@ entities: - pos: 65.5,-54.5 parent: 2 type: Transform - - SecondsUntilStateChange: -124568.82 + - SecondsUntilStateChange: -124628.75 state: Opening type: Door - canCollide: True @@ -161110,7 +161137,7 @@ entities: pos: 66.5,-51.5 parent: 2 type: Transform - - SecondsUntilStateChange: -124568.82 + - SecondsUntilStateChange: -124628.75 state: Opening type: Door - canCollide: True @@ -161128,7 +161155,7 @@ entities: pos: 66.5,-52.5 parent: 2 type: Transform - - SecondsUntilStateChange: -124568.82 + - SecondsUntilStateChange: -124628.75 state: Opening type: Door - canCollide: True @@ -161146,7 +161173,7 @@ entities: pos: 58.5,-51.5 parent: 2 type: Transform - - SecondsUntilStateChange: -124568.82 + - SecondsUntilStateChange: -124628.75 state: Opening type: Door - canCollide: True @@ -161164,7 +161191,7 @@ entities: pos: 58.5,-52.5 parent: 2 type: Transform - - SecondsUntilStateChange: -124568.82 + - SecondsUntilStateChange: -124628.75 state: Opening type: Door - canCollide: True @@ -161181,7 +161208,7 @@ entities: - pos: 61.5,-50.5 parent: 2 type: Transform - - SecondsUntilStateChange: -124568.82 + - SecondsUntilStateChange: -124628.75 state: Opening type: Door - canCollide: True @@ -161198,7 +161225,7 @@ entities: - pos: 63.5,-50.5 parent: 2 type: Transform - - SecondsUntilStateChange: -124568.82 + - SecondsUntilStateChange: -124628.75 state: Opening type: Door - canCollide: True @@ -161215,7 +161242,7 @@ entities: - pos: -20.5,-58.5 parent: 2 type: Transform - - SecondsUntilStateChange: -124509.625 + - SecondsUntilStateChange: -124569.555 state: Opening type: Door - canCollide: True @@ -161232,7 +161259,7 @@ entities: - pos: -18.5,-58.5 parent: 2 type: Transform - - SecondsUntilStateChange: -124509.625 + - SecondsUntilStateChange: -124569.555 state: Opening type: Door - canCollide: True @@ -161249,7 +161276,7 @@ entities: - pos: -37.5,-14.5 parent: 2 type: Transform - - SecondsUntilStateChange: -74722.48 + - SecondsUntilStateChange: -74782.41 state: Opening type: Door - canCollide: True @@ -161267,7 +161294,7 @@ entities: pos: -33.5,-15.5 parent: 2 type: Transform - - SecondsUntilStateChange: -74722.48 + - SecondsUntilStateChange: -74782.41 state: Opening type: Door - canCollide: True @@ -161285,7 +161312,7 @@ entities: pos: -33.5,-17.5 parent: 2 type: Transform - - SecondsUntilStateChange: -74722.48 + - SecondsUntilStateChange: -74782.41 state: Opening type: Door - canCollide: True @@ -161302,7 +161329,7 @@ entities: - pos: 0.5,-2.5 parent: 2 type: Transform - - SecondsUntilStateChange: -74765.33 + - SecondsUntilStateChange: -74825.26 state: Opening type: Door - canCollide: True @@ -161319,7 +161346,7 @@ entities: - pos: 1.5,-2.5 parent: 2 type: Transform - - SecondsUntilStateChange: -74765.33 + - SecondsUntilStateChange: -74825.26 state: Opening type: Door - canCollide: True @@ -161337,7 +161364,7 @@ entities: pos: 7.5,9.5 parent: 2 type: Transform - - SecondsUntilStateChange: -63918.418 + - SecondsUntilStateChange: -63978.35 state: Opening type: Door - canCollide: True @@ -161355,7 +161382,7 @@ entities: pos: 7.5,8.5 parent: 2 type: Transform - - SecondsUntilStateChange: -63918.418 + - SecondsUntilStateChange: -63978.35 state: Opening type: Door - canCollide: True @@ -161373,7 +161400,7 @@ entities: pos: 7.5,7.5 parent: 2 type: Transform - - SecondsUntilStateChange: -63918.418 + - SecondsUntilStateChange: -63978.35 state: Opening type: Door - canCollide: True @@ -161390,7 +161417,7 @@ entities: - pos: 2.5,4.5 parent: 2 type: Transform - - SecondsUntilStateChange: -63918.418 + - SecondsUntilStateChange: -63978.35 state: Opening type: Door - canCollide: True @@ -161415,7 +161442,7 @@ entities: - pos: 0.5,4.5 parent: 2 type: Transform - - SecondsUntilStateChange: -63918.418 + - SecondsUntilStateChange: -63978.35 state: Opening type: Door - canCollide: True @@ -161432,7 +161459,7 @@ entities: - pos: 5.5,11.5 parent: 2 type: Transform - - SecondsUntilStateChange: -63918.418 + - SecondsUntilStateChange: -63978.35 state: Opening type: Door - canCollide: True @@ -161449,7 +161476,7 @@ entities: - pos: 4.5,11.5 parent: 2 type: Transform - - SecondsUntilStateChange: -63918.418 + - SecondsUntilStateChange: -63978.35 state: Opening type: Door - canCollide: True @@ -161466,7 +161493,7 @@ entities: - pos: 23.5,-40.5 parent: 2 type: Transform - - SecondsUntilStateChange: -119660.23 + - SecondsUntilStateChange: -119720.16 state: Opening type: Door - canCollide: True @@ -161483,7 +161510,7 @@ entities: - pos: 24.5,-40.5 parent: 2 type: Transform - - SecondsUntilStateChange: -119660.23 + - SecondsUntilStateChange: -119720.16 state: Opening type: Door - canCollide: True @@ -161500,7 +161527,7 @@ entities: - pos: 25.5,-40.5 parent: 2 type: Transform - - SecondsUntilStateChange: -119660.23 + - SecondsUntilStateChange: -119720.16 state: Opening type: Door - canCollide: True @@ -161517,7 +161544,7 @@ entities: - pos: 26.5,-40.5 parent: 2 type: Transform - - SecondsUntilStateChange: -119660.23 + - SecondsUntilStateChange: -119720.16 state: Opening type: Door - canCollide: True @@ -161534,7 +161561,7 @@ entities: - pos: 27.5,-40.5 parent: 2 type: Transform - - SecondsUntilStateChange: -119660.23 + - SecondsUntilStateChange: -119720.16 state: Opening type: Door - canCollide: True @@ -161551,7 +161578,7 @@ entities: - pos: 28.5,-40.5 parent: 2 type: Transform - - SecondsUntilStateChange: -119660.23 + - SecondsUntilStateChange: -119720.16 state: Opening type: Door - canCollide: True @@ -161569,7 +161596,7 @@ entities: pos: -2.5,-4.5 parent: 2 type: Transform - - SecondsUntilStateChange: -74765.33 + - SecondsUntilStateChange: -74825.26 state: Opening type: Door - canCollide: True @@ -161587,7 +161614,7 @@ entities: pos: 1.5,-46.5 parent: 2 type: Transform - - SecondsUntilStateChange: -30160.002 + - SecondsUntilStateChange: -30219.936 state: Opening type: Door - canCollide: True @@ -161604,7 +161631,7 @@ entities: - pos: 34.5,18.5 parent: 2 type: Transform - - SecondsUntilStateChange: -92679.03 + - SecondsUntilStateChange: -92738.96 state: Opening type: Door - canCollide: True @@ -161621,7 +161648,7 @@ entities: - pos: 35.5,18.5 parent: 2 type: Transform - - SecondsUntilStateChange: -92679.03 + - SecondsUntilStateChange: -92738.96 state: Opening type: Door - canCollide: True @@ -161638,7 +161665,7 @@ entities: - pos: 36.5,18.5 parent: 2 type: Transform - - SecondsUntilStateChange: -92679.03 + - SecondsUntilStateChange: -92738.96 state: Opening type: Door - canCollide: True @@ -161664,7 +161691,7 @@ entities: pos: 48.5,7.5 parent: 2 type: Transform - - SecondsUntilStateChange: -30290.246 + - SecondsUntilStateChange: -30350.18 state: Opening type: Door - canCollide: True @@ -161681,7 +161708,7 @@ entities: - pos: 46.5,9.5 parent: 2 type: Transform - - SecondsUntilStateChange: -30290.246 + - SecondsUntilStateChange: -30350.18 state: Opening type: Door - canCollide: True @@ -161699,7 +161726,7 @@ entities: pos: 35.5,-1.5 parent: 2 type: Transform - - SecondsUntilStateChange: -32744.418 + - SecondsUntilStateChange: -32804.35 state: Opening type: Door - canCollide: True @@ -161717,7 +161744,7 @@ entities: pos: 35.5,-2.5 parent: 2 type: Transform - - SecondsUntilStateChange: -32744.418 + - SecondsUntilStateChange: -32804.35 state: Opening type: Door - canCollide: True @@ -161735,7 +161762,7 @@ entities: pos: 35.5,-4.5 parent: 2 type: Transform - - SecondsUntilStateChange: -32744.418 + - SecondsUntilStateChange: -32804.35 state: Opening type: Door - canCollide: True @@ -161753,7 +161780,7 @@ entities: pos: 35.5,-5.5 parent: 2 type: Transform - - SecondsUntilStateChange: -32744.418 + - SecondsUntilStateChange: -32804.35 state: Opening type: Door - canCollide: True @@ -161770,7 +161797,7 @@ entities: - pos: 41.5,-0.5 parent: 2 type: Transform - - SecondsUntilStateChange: -32739.918 + - SecondsUntilStateChange: -32799.85 state: Opening type: Door - canCollide: True @@ -161787,7 +161814,7 @@ entities: - pos: 42.5,-0.5 parent: 2 type: Transform - - SecondsUntilStateChange: -32739.918 + - SecondsUntilStateChange: -32799.85 state: Opening type: Door - canCollide: True @@ -161804,7 +161831,7 @@ entities: - pos: 43.5,-0.5 parent: 2 type: Transform - - SecondsUntilStateChange: -32739.918 + - SecondsUntilStateChange: -32799.85 state: Opening type: Door - canCollide: True @@ -161821,7 +161848,7 @@ entities: - pos: 46.5,3.5 parent: 2 type: Transform - - SecondsUntilStateChange: -30290.246 + - SecondsUntilStateChange: -30350.18 state: Opening type: Door - canCollide: True @@ -161839,7 +161866,7 @@ entities: pos: 1.5,-47.5 parent: 2 type: Transform - - SecondsUntilStateChange: -30160.002 + - SecondsUntilStateChange: -30219.936 state: Opening type: Door - canCollide: True @@ -161857,7 +161884,7 @@ entities: pos: 1.5,-48.5 parent: 2 type: Transform - - SecondsUntilStateChange: -30160.002 + - SecondsUntilStateChange: -30219.936 state: Opening type: Door - canCollide: True @@ -161874,7 +161901,7 @@ entities: - pos: 3.5,-44.5 parent: 2 type: Transform - - SecondsUntilStateChange: -30160.002 + - SecondsUntilStateChange: -30219.936 state: Opening type: Door - canCollide: True @@ -161891,7 +161918,7 @@ entities: - pos: 4.5,-44.5 parent: 2 type: Transform - - SecondsUntilStateChange: -30160.002 + - SecondsUntilStateChange: -30219.936 state: Opening type: Door - canCollide: True @@ -161908,7 +161935,7 @@ entities: - pos: 5.5,-44.5 parent: 2 type: Transform - - SecondsUntilStateChange: -30160.002 + - SecondsUntilStateChange: -30219.936 state: Opening type: Door - canCollide: True @@ -161925,7 +161952,7 @@ entities: - pos: 3.5,-51.5 parent: 2 type: Transform - - SecondsUntilStateChange: -30160.002 + - SecondsUntilStateChange: -30219.936 state: Opening type: Door - canCollide: True diff --git a/Resources/Maps/packed.yml b/Resources/Maps/packed.yml index aaf77866094090..24b64c90e0ec8e 100644 --- a/Resources/Maps/packed.yml +++ b/Resources/Maps/packed.yml @@ -61917,6 +61917,23 @@ entities: - pos: 23.5,4.5 parent: 2 type: Transform +- proto: MaintenancePlantSpawner + entities: + - uid: 12855 + components: + - pos: 2.5,-8.5 + parent: 2 + type: Transform + - uid: 12856 + components: + - pos: 54.5,-20.5 + parent: 2 + type: Transform + - uid: 12857 + components: + - pos: 71.5,34.5 + parent: 2 + type: Transform - proto: MaintenanceToolSpawner entities: - uid: 12284 diff --git a/Resources/Maps/saltern.yml b/Resources/Maps/saltern.yml index 2ef8ac5eeadf19..c5966ca740b8fa 100644 --- a/Resources/Maps/saltern.yml +++ b/Resources/Maps/saltern.yml @@ -45793,6 +45793,28 @@ entities: - pos: -20.5,-23.5 parent: 31 type: Transform +- proto: MaintenancePlantSpawner + entities: + - uid: 982 + components: + - pos: -26.5,18.5 + parent: 31 + type: Transform + - uid: 1018 + components: + - pos: -22.5,-19.5 + parent: 31 + type: Transform + - uid: 1019 + components: + - pos: 27.5,-6.5 + parent: 31 + type: Transform + - uid: 1020 + components: + - pos: -0.5,21.5 + parent: 31 + type: Transform - proto: MaintenanceToolSpawner entities: - uid: 976 diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_cargo.yml b/Resources/Prototypes/Catalog/Cargo/cargo_cargo.yml index 71e188d8a00f45..d1694a9924e528 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_cargo.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_cargo.yml @@ -7,24 +7,3 @@ cost: 250 category: Cargo group: market - -- type: cargoProduct - id: CargoCrateMinerEquipment - icon: - sprite: Objects/Weapons/Guns/Battery/cutter.rsi - state: icon - product: CrateMinerEquipment - cost: 7500 - category: Cargo - group: market - -- type: cargoProduct - id: CargoCrateMinerAdvancedEquipment - icon: - sprite: Objects/Weapons/Guns/Battery/cutteradv.rsi - state: icon - product: CrateMinerAdvancedEquipment - cost: 12500 - category: Cargo - group: market - \ No newline at end of file diff --git a/Resources/Prototypes/Catalog/Fills/Crates/salvage.yml b/Resources/Prototypes/Catalog/Fills/Crates/salvage.yml index a5e9486ba311f5..b4730466047eb7 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/salvage.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/salvage.yml @@ -148,30 +148,13 @@ amount: 5 - type: entity - id: CrateMinerEquipment - name: "mining" - description: For the daring. - suffix: Filled parent: CrateGenericSteel - components: - - type: StorageFill - contents: - - id: WeaponCutter - amount: 2 - - id: OreBagBluespace - amount: 2 - -- type: entity - id: CrateMinerAdvancedEquipment - name: "mining advanced" - description: For the daring. + id: CrateAdvSalvageEquipment + name: advanced salvage equipment suffix: Filled - parent: CrateGenericSteel + description: Contains one advanced plasma cutter and bluespace ore bag. components: - type: StorageFill contents: - - id: WeaponCutterAdv - amount: 2 - - id: OreBagBluespace - amount: 2 - + - id: WeaponCutterAdv + - id: OreBagBluespace diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml b/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml index 1da5a389128b93..d519f238183ae2 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/misc.yml @@ -93,7 +93,7 @@ components: - type: StorageFill contents: - - id: lantern + - id: Lantern prob: 0.50 - id: Wirecutter prob: 0.33 @@ -178,7 +178,7 @@ components: - type: StorageFill contents: - - id: lantern + - id: Lantern prob: 0.50 - id: Wirecutter prob: 0.33 diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml index 544c2e72f40f76..1958ce10d525d4 100644 --- a/Resources/Prototypes/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Catalog/uplink_catalog.yml @@ -1135,7 +1135,7 @@ id: UplinkUltrabrightLantern name: uplink-ultrabright-lantern-name description: uplink-ultrabright-lantern-desc - productEntity: lanternextrabright #why is this item id not capitalized??? + productEntity: LanternFlash cost: Telecrystal: 2 categories: diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml index b3eadf4a00b338..d6edd9b4cc4d01 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml @@ -78,7 +78,7 @@ state: high - type: RandomSpawner rarePrototypes: - - lanternextrabright + - LanternFlash - PowerCellHigh - NetProbeCartridge rareChance: 0.08 diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/posters.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/posters.yml index 0d942bcdfb2ad9..970fbe9aa9f61a 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/posters.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/posters.yml @@ -85,6 +85,12 @@ - PosterContrabandNuclearDeviceInformational - PosterContrabandRevolt - PosterContrabandRise + - PosterContrabandMoth + - PosterContrabandCybersun600 + - PosterContrabandDonk + - PosterContrabandEnlistGorlex + - PosterContrabandInterdyne + - PosterContrabandWaffleCorp - PosterContrabandSOPIsShit chance: 1 @@ -140,4 +146,8 @@ - PosterLegitThereIsNoGasGiant - PosterLegitJustAWeekAway - PosterLegitSecWatch + - PosterLegitVacation + - PosterLegitPeriodicTable + - PosterLegitRenault + - PosterLegitNTTGC chance: 1 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag.yml b/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag.yml index d700dcde54a063..6f75fbd66b54d2 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag.yml @@ -32,6 +32,10 @@ - type: Sprite sprite: Objects/Specific/Mining/ore_bag_bluespace.rsi state: icon + layers: + - state: icon + - state: icon-unlit + shader: unshaded - type: Clothing sprite: Objects/Specific/Mining/ore_bag_bluespace.rsi quickEquip: false diff --git a/Resources/Prototypes/Entities/Objects/Tools/lantern.yml b/Resources/Prototypes/Entities/Objects/Tools/lantern.yml index 883bb3ef402e3a..e7e3a1ad029e10 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/lantern.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/lantern.yml @@ -1,7 +1,7 @@ - type: entity name: lantern parent: BaseItem - id: lantern + id: Lantern description: The holy light guides the way. components: - type: HandheldLight @@ -60,10 +60,9 @@ cell_slot: !type:ContainerSlot {} - type: entity - name: extra-bright lantern - parent: lantern - id: lanternextrabright - description: Blinding. + parent: Lantern + id: LanternFlash + suffix: Flash components: - type: Sprite sprite: Objects/Tools/lantern.rsi @@ -78,10 +77,8 @@ map: [ "enum.FlashVisuals.LightLayer" ] visible: false - type: PointLight - enabled: false radius: 5 energy: 10 - color: "#FFC458" - type: Flash - type: LimitedCharges maxCharges: 15 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml index 28d6137fd58d97..58956862a54034 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -496,17 +496,22 @@ sprite: Objects/Weapons/Guns/Battery/cutter.rsi state: icon - type: Gun - fireRate: 6 + fireRate: 0.6 soundGunshot: path: /Audio/Weapons/Guns/Gunshots/plasma_cutter.ogg + - type: Item + size: 25 - type: ProjectileBatteryAmmoProvider proto: BulletCutter - fireCost: 10 + fireCost: 200 + - type: Battery + maxCharge: 5000 + startingCharge: 5000 - type: Appearance - type: entity name: Advanced Cutter - parent: BaseWeaponBatterySmall + parent: WeaponCutter id: WeaponCutterAdv description: A self-defense weapon that exhausts organic targets, weakening them until they collapse. components: @@ -514,10 +519,10 @@ sprite: Objects/Weapons/Guns/Battery/cutteradv.rsi state: icon - type: Gun - fireRate: 8 + fireRate: 1 soundGunshot: path: /Audio/Weapons/Guns/Gunshots/plasma_cutter.ogg - type: ProjectileBatteryAmmoProvider - proto: BulletCutter - fireCost: 5 + proto: BulletCutterAdv + fireCost: 100 - type: Appearance diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml index 2f4c36f68bbf26..943b4b8bd6f9d1 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml @@ -292,6 +292,49 @@ path: "/Audio/Weapons/tap.ogg" soundForce: true +- type: entity + id: BulletCutter + name: cutter bolt + parent: BaseBullet + noSpawn: true + description: Not too bad, but you still don't want to get hit by it. + components: + - type: Reflective + reflective: + - NonEnergy + - type: Sprite + noRot: false + sprite: Objects/Weapons/Guns/Projectiles/bullet_cutter.rsi + layers: + - state: icon + shader: unshaded + - type: GatheringProjectile + amount: 30 + - type: Projectile + deleteOnCollide: false + damage: + types: + Heat: 10 + - type: TimedDespawn + lifetime: 0.2 + - type: PointLight + radius: 2 + color: purple + energy: 1 + +- type: entity + id: BulletCutterAdv + name: cutter bolt advanced + parent: BulletCutter + noSpawn: true + components: + - type: Projectile + damage: + types: + Heat: 15 + - type: TimedDespawn + lifetime: 0.25 + - type: entity name: emitter bolt id: EmitterBolt @@ -766,27 +809,3 @@ lifetime: 0.4 - type: StaminaDamageOnCollide damage: 65 - -- type: entity - id: BulletCutter - name: Cutter bolt - parent: BaseBullet - noSpawn: true - description: Not too bad, but you still don't want to get hit by it. - components: - - type: Reflective - reflective: - - NonEnergy - - type: Sprite - noRot: false - sprite: Objects/Weapons/Guns/Projectiles/projectiles.rsi - layers: - - state: scatterlaser - - type: GatheringProjectile - - type: Projectile - damage: - types: - Heat: 0.5 - # Short lifespan - - type: TimedDespawn - lifetime: 0.4 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml index 8936f786b2bb98..d3c674341bbe39 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml @@ -79,239 +79,59 @@ - type: entity name: reinforced spear - parent: BaseItem + parent: Spear id: SpearReinforced description: A spear with a reinforced glass shard as a tip. components: - - type: Tag - tags: - - Spear - - type: Sharp - type: Sprite sprite: Objects/Weapons/Melee/reinforced_spear.rsi - state: spear - type: MeleeWeapon damage: types: Piercing: 15 - angle: 0 - animation: WeaponArcThrust - type: DamageOtherOnHit damage: types: Piercing: 18 - - type: Item - size: 95 - - type: Clothing - quickEquip: false - slots: - - back - type: Construction graph: SpearReinforced - node: spear - - type: ItemCooldown - - type: SolutionContainerManager - solutions: - melee: - maxVol: 5 - - type: MeleeChemicalInjector - solution: melee - - type: RefillableSolution - solution: melee - - type: InjectableSolution - solution: melee - - type: SolutionTransfer - maxTransferAmount: 5 - - type: Wieldable - - type: IncreaseDamageOnWield - damage: - types: - Piercing: 4 - - type: Damageable - damageContainer: Inorganic - - type: Destructible - thresholds: - - trigger: - !type:DamageTrigger - damage: 30 #excess damage avoids cost of spawning entities. - behaviors: - - !type:DoActsBehavior - acts: [ "Destruction" ] - - trigger: - !type:DamageTrigger - damage: 20 - behaviors: - - !type:PlaySoundBehavior - sound: - collection: GlassBreak - - !type:SpawnEntitiesBehavior - spawn: - PartRodMetal1: - min: 1 - max: 1 - - !type:DoActsBehavior - acts: [ "Destruction" ] - - type: DamageOnLand - damage: - types: - Blunt: 5 - type: entity name: plasma spear - parent: BaseItem + parent: Spear id: SpearPlasma description: A spear with a plasma shard as a tip. components: - - type: Tag - tags: - - Spear - - type: Sharp - type: Sprite sprite: Objects/Weapons/Melee/plasma_spear.rsi - state: spear - type: MeleeWeapon damage: types: Piercing: 18 - angle: 0 - animation: WeaponArcThrust - type: DamageOtherOnHit damage: types: Piercing: 21 - - type: Item - size: 95 - - type: Clothing - quickEquip: false - slots: - - back - type: Construction graph: SpearPlasma - node: spear - - type: ItemCooldown - - type: SolutionContainerManager - solutions: - melee: - maxVol: 5 - - type: MeleeChemicalInjector - solution: melee - - type: RefillableSolution - solution: melee - - type: InjectableSolution - solution: melee - - type: SolutionTransfer - maxTransferAmount: 5 - - type: Wieldable - - type: IncreaseDamageOnWield - damage: - types: - Piercing: 4 - - type: Damageable - damageContainer: Inorganic - - type: Destructible - thresholds: - - trigger: - !type:DamageTrigger - damage: 30 #excess damage avoids cost of spawning entities. - behaviors: - - !type:DoActsBehavior - acts: [ "Destruction" ] - - trigger: - !type:DamageTrigger - damage: 20 - behaviors: - - !type:PlaySoundBehavior - sound: - collection: GlassBreak - - !type:SpawnEntitiesBehavior - spawn: - PartRodMetal1: - min: 1 - max: 1 - - !type:DoActsBehavior - acts: [ "Destruction" ] - - type: DamageOnLand - damage: - types: - Blunt: 5 - type: entity name: uranium spear - parent: BaseItem + parent: Spear id: SpearUranium description: A spear with a uranium shard as a tip. components: - - type: Tag - tags: - - Spear - - type: Sharp - type: Sprite sprite: Objects/Weapons/Melee/uranium_spear.rsi - state: spear - type: MeleeWeapon damage: types: Piercing: 10 Radiation: 8 - angle: 0 - animation: WeaponArcThrust - type: DamageOtherOnHit damage: types: Piercing: 12 Radiation: 9 - - type: Item - size: 95 - - type: Clothing - quickEquip: false - slots: - - back - type: Construction graph: SpearUranium - node: spear - - type: ItemCooldown - - type: SolutionContainerManager - solutions: - melee: - maxVol: 5 - - type: MeleeChemicalInjector - solution: melee - - type: RefillableSolution - solution: melee - - type: InjectableSolution - solution: melee - - type: SolutionTransfer - maxTransferAmount: 5 - - type: Wieldable - - type: IncreaseDamageOnWield - damage: - types: - Piercing: 4 - - type: Damageable - damageContainer: Inorganic - - type: Destructible - thresholds: - - trigger: - !type:DamageTrigger - damage: 30 #excess damage avoids cost of spawning entities. - behaviors: - - !type:DoActsBehavior - acts: [ "Destruction" ] - - trigger: - !type:DamageTrigger - damage: 20 - behaviors: - - !type:PlaySoundBehavior - sound: - collection: GlassBreak - - !type:SpawnEntitiesBehavior - spawn: - PartRodMetal1: - min: 1 - max: 1 - - !type:DoActsBehavior - acts: [ "Destruction" ] - - type: DamageOnLand - damage: - types: - Blunt: 5 diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 30a3f391d61717..fa0587e6b77339 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -223,6 +223,7 @@ - WeaponCrusherDagger - WeaponForceGun - WeaponProtoKineticAccelerator + - WeaponCutter - WeaponTetherGun - WeaponGrapplingGun - ClothingBackpackHolding diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml index 56f2471f6fcd99..a59798972afe60 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml @@ -537,6 +537,60 @@ - type: Sprite state: poster56_contraband +- type: entity + parent: PosterBase + id: PosterContrabandMoth + name: "Syndie Moth - Nuclear Operation" + description: "A Syndicate-commissioned poster that uses Syndie Moth™ to tell the viewer to keep the nuclear authentication disk unsecured. \"Peace was never an option!\" No good employee would listen to this nonsense." + components: + - type: Sprite + state: poster57_contraband + +- type: entity + parent: PosterBase + id: PosterContrabandCybersun600 + name: "Cybersun: 600 Years Commemorative Poster" + description: "An artistic poster commemorating 600 years of continual business for Cybersun Industries." + components: + - type: Sprite + state: poster58_contraband + +- type: entity + parent: PosterBase + id: PosterContrabandDonk + name: "DONK CO. BRAND MICROWAVEABLE FOOD" + description: "DONK CO. BRAND MICROWAVABLE FOOD: MADE BY STARVING COLLEGE STUDENTS, FOR STARVING COLLEGE STUDENTS." + components: + - type: Sprite + state: poster59_contraband + +- type: entity + parent: PosterBase + id: PosterContrabandEnlistGorlex + name: "Enlist" + description: "Enlist with the Gorlex Marauders today! See the galaxy, kill corpos, get paid!" + components: + - type: Sprite + state: poster60_contraband + +- type: entity + parent: PosterBase + id: PosterContrabandInterdyne + name: "Interdyne Pharmaceutics: For the Health of Humankind" + description: "An advertisement for Interdyne Pharmaceutics' GeneClean clinics. 'Become the master of your own body!'" + components: + - type: Sprite + state: poster61_contraband + +- type: entity + parent: PosterBase + id: PosterContrabandWaffleCorp + name: "Make Mine a Waffle Corp: Fine Rifles, Economic Prices" + description: "An old advertisement for Waffle Corp rifles. 'Better weapons, lower prices!'" + components: + - type: Sprite + state: poster62_contraband + - type: entity parent: PosterBase id: PosterContrabandSOPIsShit @@ -544,7 +598,7 @@ description: "A poster encouraging people crew to stop using 'standard operating procedures' because they are inefficient and boring." components: - type: Sprite - state: poster57_contraband + state: poster63_contraband # Legit - type: entity @@ -906,7 +960,7 @@ components: - type: Sprite state: poster40_legit - + - type: entity parent: PosterBase id: PosterLegitMime @@ -924,7 +978,88 @@ components: - type: Sprite state: poster42_legit - + +- type: entity + parent: PosterBase + id: PosterLegitSafetyMothDelam + name: "Safety Moth - Delamination Safety Precautions" + description: "This informational poster uses Safety Moth™ to tell the viewer to hide in lockers when the Supermatter Crystal has delaminated, to prevent hallucinations. Evacuating might be a better strategy." + components: + - type: Sprite + state: poster43_legit + +- type: entity + parent: PosterBase + id: PosterLegitSafetyMothEpi + name: "Safety Moth - Epinephrine" + description: "This informational poster uses Safety Moth™ to inform the viewer to help injured/deceased crewmen with their epinephrine injectors. \"Prevent organ rot with this one simple trick!\"" + components: + - type: Sprite + state: poster44_legit + +- type: entity + parent: PosterBase + id: PosterLegitSafetyMothHardhat + name: "Safety Moth - Hardhats" + description: "This informational poster uses Safety Moth™ to tell the viewer to wear hardhats in cautious areas. \"It's like a lamp for your head!\"" + components: + - type: Sprite + state: poster45_legit + +- type: entity + parent: PosterBase + id: PosterLegitSafetyMothMeth + name: "Safety Moth - Methamphetamine" + description: "This informational poster uses Safety Moth™ to tell the viewer to seek CMO approval before cooking methamphetamine. \"Stay close to the target temperature, and never go over!\" ...You shouldn't ever be making this." + components: + - type: Sprite + state: poster46_legit + +- type: entity + parent: PosterBase + id: PosterLegitSafetyMothPiping + name: "Safety Moth - Piping" + description: "This informational poster uses Safety Moth™ to tell atmospheric technicians correct types of piping to be used. \"Pipes, not Pumps! Proper pipe placement prevents poor performance!\"" + components: + - type: Sprite + state: poster47_legit + +- type: entity + parent: PosterBase + id: PosterLegitVacation + name: "Nanotrasen Corporate Perks: Vacation" + description: "This informational poster provides information on some of the prizes available via the NT Corporate Perks program, including a two-week vacation for two on the resort world Idyllus." + components: + - type: Sprite + state: poster48_legit + +- type: entity + parent: PosterBase + id: PosterLegitPeriodicTable + name: "Periodic Table of the Elements" + description: "A periodic table of the elements, from Hydrogen to Oganesson, and everything inbetween." + components: + - type: Sprite + state: poster49_legit + +- type: entity + parent: PosterBase + id: PosterLegitRenault + name: "Renault Poster" + description: "Yap." + components: + - type: Sprite + state: poster50_legit + +- type: entity + parent: PosterBase + id: PosterLegitNTTGC + name: "Nanotrasen Tactical Game Cards" + description: "An advertisement for Nanotrasen's TCG cards: BUY MORE CARDS." + components: + - type: Sprite + state: poster51_legit + #maps - type: entity diff --git a/Resources/Prototypes/NPCs/Combat/gun.yml b/Resources/Prototypes/NPCs/Combat/gun.yml index 21066440b8c211..2b5ccd9fa5586d 100644 --- a/Resources/Prototypes/NPCs/Combat/gun.yml +++ b/Resources/Prototypes/NPCs/Combat/gun.yml @@ -71,6 +71,7 @@ - !type:HTNPrimitiveTask preconditions: + - !type:ActiveHandFreePrecondition - !type:TargetInRangePrecondition targetKey: Target rangeKey: InteractRange diff --git a/Resources/Prototypes/NPCs/Combat/melee.yml b/Resources/Prototypes/NPCs/Combat/melee.yml index aab6e4d1488921..e35dc820502b89 100644 --- a/Resources/Prototypes/NPCs/Combat/melee.yml +++ b/Resources/Prototypes/NPCs/Combat/melee.yml @@ -38,6 +38,7 @@ - !type:HTNPrimitiveTask preconditions: + - !type:ActiveHandFreePrecondition - !type:TargetInRangePrecondition targetKey: Target rangeKey: InteractRange diff --git a/Resources/Prototypes/Procedural/salvage_rewards.yml b/Resources/Prototypes/Procedural/salvage_rewards.yml index 304d3363c3a818..8253bda6e5f0ce 100644 --- a/Resources/Prototypes/Procedural/salvage_rewards.yml +++ b/Resources/Prototypes/Procedural/salvage_rewards.yml @@ -65,6 +65,8 @@ CrateArmoryLaser: 1.0 CrateArmoryShotgun: 1.0 BoxCursedKatana: 1.0 + # rare equipment + CrateAdvSalvageEquipment: 1.0 # rare armor ClothingOuterArmorRiot: 1.0 # rare chemicals diff --git a/Resources/Prototypes/Reagents/gases.yml b/Resources/Prototypes/Reagents/gases.yml index 1e613a5c7fe360..3a8679267a7a44 100644 --- a/Resources/Prototypes/Reagents/gases.yml +++ b/Resources/Prototypes/Reagents/gases.yml @@ -245,6 +245,22 @@ metabolisms: Gas: effects: + - !type:Emote + conditions: + - !type:ReagentThreshold + reagent: NitrousOxide + min: 0.2 + emote: Laugh + showInChat: true + probability: 0.1 + - !type:Emote + conditions: + - !type:ReagentThreshold + reagent: NitrousOxide + min: 0.2 + emote: Scream + showInChat: true + probability: 0.01 - !type:PopupMessage conditions: - !type:ReagentThreshold diff --git a/Resources/Prototypes/Recipes/Lathes/security.yml b/Resources/Prototypes/Recipes/Lathes/security.yml index 73e2e494173b5b..c901c629951f6d 100644 --- a/Resources/Prototypes/Recipes/Lathes/security.yml +++ b/Resources/Prototypes/Recipes/Lathes/security.yml @@ -37,6 +37,16 @@ Glass: 800 Plastic: 500 +- type: latheRecipe + id: WeaponCutter + result: WeaponCutter + completetime: 10 + materials: + Steel: 1100 + Glass: 200 + Gold: 300 + Plasma: 800 + - type: latheRecipe id: WeaponAdvancedLaser result: WeaponAdvancedLaser diff --git a/Resources/Prototypes/Research/arsenal.yml b/Resources/Prototypes/Research/arsenal.yml index 1b5d739213a300..cc494e57fe8191 100644 --- a/Resources/Prototypes/Research/arsenal.yml +++ b/Resources/Prototypes/Research/arsenal.yml @@ -87,6 +87,18 @@ # Tier 2 +- type: technology + id: SalvageCutters + name: research-technology-salvage-cutters + icon: + sprite: Objects/Weapons/Guns/Battery/cutter.rsi + state: icon + discipline: Arsenal + tier: 2 + cost: 8500 + recipeUnlocks: + - WeaponCutter + - type: technology id: OptimizedBallistics name: research-technology-optimized-ballistics diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/aphid.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/aphid.png index a5565696dcb1a0..c2a0025a380970 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/aphid.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/aphid.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/blackstriped.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/blackstriped.png index 99b1960289c4c8..7f6f48881aa041 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/blackstriped.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/blackstriped.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/bushyblack.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/bushyblack.png index 459bbe228931b4..967be267d9b0a5 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/bushyblack.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/bushyblack.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/charred.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/charred.png index 0f32d8ece285ed..c2da6f6d1e9ac4 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/charred.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/charred.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/fan.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/fan.png index 25d46b8942705d..08bb0672fb2d19 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/fan.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/fan.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/fanpink.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/fanpink.png index 9934b965a1395e..871509a924ef25 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/fanpink.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/fanpink.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/feather.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/feather.png index 86476a0e5c557c..90f6c3b72bff0f 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/feather.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/feather.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/holoblue.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/holoblue.png index 2fb50641abc282..fbd388012de338 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/holoblue.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/holoblue.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/holored.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/holored.png index bb3fcbcc7dfd75..9513d784f6f937 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/holored.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/holored.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/ladybug.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/ladybug.png index 346fa53ed88c5b..1af6c2f99c776f 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/ladybug.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/ladybug.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/meta.json b/Resources/Textures/Mobs/Customization/moth_wings.rsi/meta.json index 440d6ad9c41f75..e436d3c9c6c321 100644 --- a/Resources/Textures/Mobs/Customization/moth_wings.rsi/meta.json +++ b/Resources/Textures/Mobs/Customization/moth_wings.rsi/meta.json @@ -3,8 +3,8 @@ "license": "CC-BY-SA-3.0", "copyright": "https://github.com/tgstation/tgstation/blob/master/icons/mob/species/moth/", "size": { - "x": 64, - "y": 64 + "x": 32, + "y": 32 }, "states": [ { diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/normal.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/normal.png index 511d5c18b70399..0f7537ed48e034 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/normal.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/normal.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/pieidk.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/pieidk.png index 8879f093644d27..3f26f2f65db03a 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/pieidk.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/pieidk.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/pinkstriped.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/pinkstriped.png index 60e78e861114b7..a13df0472f85a7 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/pinkstriped.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/pinkstriped.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/piratecape.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/piratecape.png index 191ec9cef6a2b9..fa5c5a894eb40f 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/piratecape.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/piratecape.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/pirategold.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/pirategold.png index 7251a5902ab676..eea41c2e531eda 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/pirategold.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/pirategold.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/pointy.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/pointy.png index a716944239f1ee..370b36709d1498 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/pointy.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/pointy.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/psyho.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/psyho.png index 0d885bc69d4b13..f958b22645883d 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/psyho.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/psyho.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/royalpurple.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/royalpurple.png index c4733a95abc8b4..cc8182b4363e7c 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/royalpurple.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/royalpurple.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/shulker.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/shulker.png index a4ace6d149fdc4..17dc3120e309a2 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/shulker.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/shulker.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/squigly.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/squigly.png index e071e3666d3e31..086d3e7369c139 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/squigly.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/squigly.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/squiglygreen.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/squiglygreen.png index 63825f3705cbf6..d4c26db03ba189 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/squiglygreen.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/squiglygreen.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/stared.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/stared.png index 8ff98021011c60..fc09c940425581 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/stared.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/stared.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/termalstripes.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/termalstripes.png index f6c360866600ac..0001dba41cf013 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/termalstripes.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/termalstripes.png differ diff --git a/Resources/Textures/Mobs/Customization/moth_wings.rsi/woodland.png b/Resources/Textures/Mobs/Customization/moth_wings.rsi/woodland.png index 176c6d6cbe28c5..08a30055d838af 100644 Binary files a/Resources/Textures/Mobs/Customization/moth_wings.rsi/woodland.png and b/Resources/Textures/Mobs/Customization/moth_wings.rsi/woodland.png differ diff --git a/Resources/Textures/Objects/Specific/Mining/ore_bag_bluespace.rsi/equipped-BELT.png b/Resources/Textures/Objects/Specific/Mining/ore_bag_bluespace.rsi/equipped-BELT.png index 1c69c8195b2826..510c3e3110eed0 100644 Binary files a/Resources/Textures/Objects/Specific/Mining/ore_bag_bluespace.rsi/equipped-BELT.png and b/Resources/Textures/Objects/Specific/Mining/ore_bag_bluespace.rsi/equipped-BELT.png differ diff --git a/Resources/Textures/Objects/Specific/Mining/ore_bag_bluespace.rsi/icon-unlit.png b/Resources/Textures/Objects/Specific/Mining/ore_bag_bluespace.rsi/icon-unlit.png new file mode 100644 index 00000000000000..c84ad70e1c0eb3 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Mining/ore_bag_bluespace.rsi/icon-unlit.png differ diff --git a/Resources/Textures/Objects/Specific/Mining/ore_bag_bluespace.rsi/inhand-left.png b/Resources/Textures/Objects/Specific/Mining/ore_bag_bluespace.rsi/inhand-left.png index c7c78e8a2dfd81..528f00a37da392 100644 Binary files a/Resources/Textures/Objects/Specific/Mining/ore_bag_bluespace.rsi/inhand-left.png and b/Resources/Textures/Objects/Specific/Mining/ore_bag_bluespace.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Specific/Mining/ore_bag_bluespace.rsi/inhand-right.png b/Resources/Textures/Objects/Specific/Mining/ore_bag_bluespace.rsi/inhand-right.png index da85765a9e600a..fa4c242111976e 100644 Binary files a/Resources/Textures/Objects/Specific/Mining/ore_bag_bluespace.rsi/inhand-right.png and b/Resources/Textures/Objects/Specific/Mining/ore_bag_bluespace.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Specific/Mining/ore_bag_bluespace.rsi/meta.json b/Resources/Textures/Objects/Specific/Mining/ore_bag_bluespace.rsi/meta.json index 12b34cad4a2156..b58a2f28539802 100644 --- a/Resources/Textures/Objects/Specific/Mining/ore_bag_bluespace.rsi/meta.json +++ b/Resources/Textures/Objects/Specific/Mining/ore_bag_bluespace.rsi/meta.json @@ -30,6 +30,18 @@ { "name": "inhand-right", "directions": 4 + }, + { + "name": "icon-unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] } ] } diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/bullet_cutter.rsi/icon.png b/Resources/Textures/Objects/Weapons/Guns/Projectiles/bullet_cutter.rsi/icon.png new file mode 100644 index 00000000000000..3e17ff28fbe773 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Projectiles/bullet_cutter.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/bullet_cutter.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Projectiles/bullet_cutter.rsi/meta.json new file mode 100644 index 00000000000000..2a7a7a869dd96b --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Guns/Projectiles/bullet_cutter.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken and modified from tgstation commit: https://github.com/tgstation/tgstation/commit/2b8b045d5a237147d736e3ba3c77c8cc5fb66cb5#diff-db041845cfd01e0f883d2bf4f74cd897b7f63ea5e856e64109d7dd3b6543d1ab", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Shaders/outline.swsl b/Resources/Textures/Shaders/outline.swsl index 5f90df22bfdaa2..7fce6809f69cb4 100644 --- a/Resources/Textures/Shaders/outline.swsl +++ b/Resources/Textures/Shaders/outline.swsl @@ -72,7 +72,7 @@ void fragment() { maxa = max(a, maxa); mina = min(a, mina); - float sampledLight = outline_fullbright ? 1.0 : sqrt(mix(0.0, 1.0, (lightSample.r * 0.34) + (lightSample.g * 0.5) + (lightSample.b * 0.16)) * light_boost); + lowp float sampledLight = outline_fullbright ? 1.0 : sqrt(mix(0.0, 1.0, (lightSample.r * 0.34) + (lightSample.g * 0.5) + (lightSample.b * 0.16)) * light_boost); COLOR = mix(col, outline_color * sampledLight, maxa - col.a); lightSample = vec3(1.0); } diff --git a/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/broken.png b/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/broken.png index d3b9cc148a3940..4a62baccbcdafd 100644 Binary files a/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/broken.png and b/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/broken.png differ diff --git a/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/deny-unshaded.png b/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/deny-unshaded.png new file mode 100644 index 00000000000000..609c524fa57003 Binary files /dev/null and b/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/deny-unshaded.png differ diff --git a/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/eject-unshaded.png b/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/eject-unshaded.png new file mode 100644 index 00000000000000..ca98be38dc3ffa Binary files /dev/null and b/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/eject-unshaded.png differ diff --git a/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/meta.json b/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/meta.json index 035a490dbc612f..c0419a1195e435 100644 --- a/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/meta.json +++ b/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/meta.json @@ -1,27 +1,52 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from vgstation at https://github.com/vgstation-coders/vgstation13/commit/7c41613c521b6fab647ae98e1283f86b3cef382a", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "broken" + "version": 1, + "license": "CC-BY-SA-4.0", + "copyright": "Created by Hyenh#6078 (313846233099927552)", + "size": { + "x": 32, + "y": 32 }, - { - "name": "normal-unshaded", - "delays": [ - [ - 4, - 0.1, - 0.6 - ] - ] - }, - { - "name": "off" - } - ] + "states": [ + { + "name": "broken" + }, + { + "name": "deny-unshaded", + "delays": [ + [ + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "eject-unshaded", + "delays": [ + [ + 0.1, + 0.1, + 0.8, + 0.1, + 0.1 + ] + ] + }, + { + "name": "normal-unshaded", + "delays": [ + [ + 4, + 0.1, + 0.6 + ] + ] + }, + { + "name": "off" + }, + { + "name": "panel" + } + ] } diff --git a/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/normal-unshaded.png b/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/normal-unshaded.png index 4de940667a8289..58acab76a9ce2b 100644 Binary files a/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/normal-unshaded.png and b/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/normal-unshaded.png differ diff --git a/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/off.png b/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/off.png index e940491a3c04fc..029cfb18b89c20 100644 Binary files a/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/off.png and b/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/off.png differ diff --git a/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/panel.png b/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/panel.png new file mode 100644 index 00000000000000..e8babedfe58dad Binary files /dev/null and b/Resources/Textures/Structures/Machines/VendingMachines/discount.rsi/panel.png differ diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/posters.rsi/meta.json index a9c1101cc3b444..6d40a2c084a9b0 100644 --- a/Resources/Textures/Structures/Wallmounts/posters.rsi/meta.json +++ b/Resources/Textures/Structures/Wallmounts/posters.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from at commit https://github.com/tgstation/tgstation/commit/f01de25493e2bd2706ef9b0303cb0d7b5e3e471b. poster52_contraband, poster53_contraband and poster54_contraband taken from https://github.com/vgstation-coders/vgstation13/blob/435ed5f2a7926e91cc31abac3a0d47d7e9ad7ed4/icons/obj/posters.dmi. originmap, poster55_contraband, poster56_contraband, poster57_contraband and poster39_legit by discord brainfood#7460. poster59_contraband by discord csqrb#7132 (704678264186077264)", + "copyright": "Taken from at commit https://github.com/tgstation/tgstation/commit/f01de25493e2bd2706ef9b0303cb0d7b5e3e471b. poster52_contraband, poster53_contraband and poster54_contraband taken from https://github.com/vgstation-coders/vgstation13/blob/435ed5f2a7926e91cc31abac3a0d47d7e9ad7ed4/icons/obj/posters.dmi. originmap, poster55_contraband, poster56_contraband, poster57_contraband and poster39_legit by discord brainfood#7460. poster63_contraband by discord csqrb#7132 (704678264186077264)", "size":{ "x": 32, @@ -205,6 +205,24 @@ { "name": "poster56_contraband" }, + { + "name": "poster57_contraband" + }, + { + "name": "poster58_contraband" + }, + { + "name": "poster59_contraband" + }, + { + "name": "poster60_contraband" + }, + { + "name": "poster61_contraband" + }, + { + "name": "poster62_contraband" + }, { "name": "poster51_contraband" }, @@ -334,6 +352,33 @@ { "name": "poster42_legit" }, + { + "name": "poster43_legit" + }, + { + "name": "poster44_legit" + }, + { + "name": "poster45_legit" + }, + { + "name": "poster46_legit" + }, + { + "name": "poster47_legit" + }, + { + "name": "poster48_legit" + }, + { + "name": "poster49_legit" + }, + { + "name": "poster50_legit" + }, + { + "name": "poster51_legit" + }, { "name": "random_legit" }, @@ -469,7 +514,7 @@ ] }, { - "name": "poster57_contraband" + "name": "poster63_contraband" } ] } diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/poster43_legit.png b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster43_legit.png new file mode 100644 index 00000000000000..2aa4745dda1b1a Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster43_legit.png differ diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/poster44_legit.png b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster44_legit.png new file mode 100644 index 00000000000000..66c7d3f79e94c5 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster44_legit.png differ diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/poster45_contraband.png b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster45_contraband.png index a9f6a06fdcb25e..b1c034bd2a4337 100644 Binary files a/Resources/Textures/Structures/Wallmounts/posters.rsi/poster45_contraband.png and b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster45_contraband.png differ diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/poster45_legit.png b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster45_legit.png new file mode 100644 index 00000000000000..5954cec86201cd Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster45_legit.png differ diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/poster46_legit.png b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster46_legit.png new file mode 100644 index 00000000000000..ae6d745b3f80e3 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster46_legit.png differ diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/poster47_legit.png b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster47_legit.png new file mode 100644 index 00000000000000..cc2435142466d1 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster47_legit.png differ diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/poster48_legit.png b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster48_legit.png new file mode 100644 index 00000000000000..8d2d6dea98e43f Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster48_legit.png differ diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/poster49_legit.png b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster49_legit.png new file mode 100644 index 00000000000000..f68a2802a22ca0 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster49_legit.png differ diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/poster50_legit.png b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster50_legit.png new file mode 100644 index 00000000000000..902ca4ff1fe041 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster50_legit.png differ diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/poster51_legit.png b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster51_legit.png new file mode 100644 index 00000000000000..2c37cc4415b501 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster51_legit.png differ diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/poster57_contraband.png b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster57_contraband.png index 0f084af1fb4b82..9c3e7bc9ffc286 100644 Binary files a/Resources/Textures/Structures/Wallmounts/posters.rsi/poster57_contraband.png and b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster57_contraband.png differ diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/poster58_contraband.png b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster58_contraband.png new file mode 100644 index 00000000000000..3a6542aaefb8d7 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster58_contraband.png differ diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/poster59_contraband.png b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster59_contraband.png new file mode 100644 index 00000000000000..307ca195dcb472 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster59_contraband.png differ diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/poster60_contraband.png b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster60_contraband.png new file mode 100644 index 00000000000000..e597b62d6a3642 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster60_contraband.png differ diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/poster61_contraband.png b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster61_contraband.png new file mode 100644 index 00000000000000..3eb0d49718410d Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster61_contraband.png differ diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/poster62_contraband.png b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster62_contraband.png new file mode 100644 index 00000000000000..0c170461072e66 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster62_contraband.png differ diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/poster63_contraband.png b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster63_contraband.png new file mode 100644 index 00000000000000..0f084af1fb4b82 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster63_contraband.png differ diff --git a/Resources/engineCommandPerms.yml b/Resources/engineCommandPerms.yml index ec3663095d98bc..a10d6a658c88eb 100644 --- a/Resources/engineCommandPerms.yml +++ b/Resources/engineCommandPerms.yml @@ -126,11 +126,14 @@ - Flags: QUERY Commands: - - forall - uploadfile - loadprototype - uploadfolder +- Commands: + - "|" + - oldhelp + - Flags: FUN Commands: - clippy diff --git a/Resources/migration.yml b/Resources/migration.yml index bb8b3241f23d7f..40436c9637dd1f 100644 --- a/Resources/migration.yml +++ b/Resources/migration.yml @@ -114,3 +114,7 @@ ForensicGloves: ClothingHandsGlovesForensic # 2023-07-24 ClothingEyesGlassesBeer: ClothingEyesHudBeer + +# 2023-08-01 +lantern: Lantern +lanternextrabright: LanternFlash diff --git a/Resources/toolshedEngineCommandPerms.yml b/Resources/toolshedEngineCommandPerms.yml new file mode 100644 index 00000000000000..f090ac4baab4ef --- /dev/null +++ b/Resources/toolshedEngineCommandPerms.yml @@ -0,0 +1,70 @@ +- Flags: QUERY + Commands: + - entities + - nearby + - map + - physics + - player + - splat + - emplace + +- Flags: DEBUG + Commands: + - comp + - delete + - do + - named + - paused + - with + - count + - select + - where + - prototyped + - types + - ecscomp + - actor + +- Flags: HOST + Commands: + - methods + - ioc + +- Commands: + - fuck + - ent + - as + - buildinfo + - help + - explain + - cmd + - stopwatch + - self + - search + - isnull + - help + - isempty + - any + - unique + - cd + - ls + - loc + - vars + - '=>' + - first + - val + - '+' + - '-' + - '*' + - '/' + - 'min' + - 'max' + - '&' + - '|' + - '^' + - 'neg' + - '<' + - '>' + - '<=' + - '>=' + - '==' + - '!=' diff --git a/RobustToolbox b/RobustToolbox index a7315b1c95e335..cf91369d27f565 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit a7315b1c95e335ec24f77732021fdedc0bd0cf74 +Subproject commit cf91369d27f5653fc5c597b3a9fca04a29172674 diff --git a/SpaceStation14.sln.DotSettings b/SpaceStation14.sln.DotSettings index 37e81819724629..dbb20970b1dae7 100644 --- a/SpaceStation14.sln.DotSettings +++ b/SpaceStation14.sln.DotSettings @@ -604,6 +604,8 @@ public sealed class $CLASS$ : Shared$CLASS$ { True True True + True + True True True True