diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 4029b093ccb..b85b383ee3a 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,4 +1,4 @@ - + ## About the PR @@ -10,23 +10,22 @@ ## Media - + ## Requirements -- [ ] I have read and am following the [Pull Request and Changelog Guidelines](https://docs.spacestation14.com/en/general-development/codebase-info/pull-request-guidelines.html). +- [ ] I have tested all added content and changes. - [ ] I have added media to this PR or it does not require an ingame showcase. ## Breaking changes - + **Changelog** +Changelogs must have a :cl: symbol, so the bot recognizes the changes and adds them to the game's changelog. --> + + + + + + + + + + diff --git a/Content.Client/DeltaV/CartridgeLoader/Cartridges/PriceHistoryTable.xaml.cs b/Content.Client/DeltaV/CartridgeLoader/Cartridges/PriceHistoryTable.xaml.cs new file mode 100644 index 00000000000..f5798f44c42 --- /dev/null +++ b/Content.Client/DeltaV/CartridgeLoader/Cartridges/PriceHistoryTable.xaml.cs @@ -0,0 +1,75 @@ +using System.Linq; +using Robust.Client.AutoGenerated; +using Robust.Client.Graphics; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; + +namespace Content.Client.DeltaV.CartridgeLoader.Cartridges; + +[GenerateTypedNameReferences] +public sealed partial class PriceHistoryTable : BoxContainer +{ + public PriceHistoryTable() + { + RobustXamlLoader.Load(this); + + // Create the stylebox here so we can use the colors from StockTradingUi + var styleBox = new StyleBoxFlat + { + BackgroundColor = StockTradingUiFragment.PriceBackgroundColor, + ContentMarginLeftOverride = 6, + ContentMarginRightOverride = 6, + ContentMarginTopOverride = 4, + ContentMarginBottomOverride = 4, + BorderColor = StockTradingUiFragment.BorderColor, + BorderThickness = new Thickness(1), + }; + + HistoryPanel.PanelOverride = styleBox; + } + + public void Update(List priceHistory) + { + PriceGrid.RemoveAllChildren(); + + // Take last 5 prices + var lastFivePrices = priceHistory.TakeLast(5).ToList(); + + for (var i = 0; i < lastFivePrices.Count; i++) + { + var price = lastFivePrices[i]; + var previousPrice = i > 0 ? lastFivePrices[i - 1] : price; + var priceChange = ((price - previousPrice) / previousPrice) * 100; + + var entryContainer = new BoxContainer + { + Orientation = LayoutOrientation.Vertical, + MinWidth = 80, + HorizontalAlignment = HAlignment.Center, + }; + + var priceLabel = new Label + { + Text = $"${price:F2}", + HorizontalAlignment = HAlignment.Center, + }; + + var changeLabel = new Label + { + Text = $"{(priceChange >= 0 ? "+" : "")}{priceChange:F2}%", + HorizontalAlignment = HAlignment.Center, + StyleClasses = { "LabelSubText" }, + Modulate = priceChange switch + { + > 0 => StockTradingUiFragment.PositiveColor, + < 0 => StockTradingUiFragment.NegativeColor, + _ => StockTradingUiFragment.NeutralColor, + } + }; + + entryContainer.AddChild(priceLabel); + entryContainer.AddChild(changeLabel); + PriceGrid.AddChild(entryContainer); + } + } +} diff --git a/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUi.cs b/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUi.cs new file mode 100644 index 00000000000..45704ee2349 --- /dev/null +++ b/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUi.cs @@ -0,0 +1,45 @@ +using Robust.Client.UserInterface; +using Content.Client.UserInterface.Fragments; +using Content.Shared.CartridgeLoader; +using Content.Shared.CartridgeLoader.Cartridges; + +namespace Content.Client.DeltaV.CartridgeLoader.Cartridges; + +public sealed partial class StockTradingUi : UIFragment +{ + private StockTradingUiFragment? _fragment; + + public override Control GetUIFragmentRoot() + { + return _fragment!; + } + + public override void Setup(BoundUserInterface userInterface, EntityUid? fragmentOwner) + { + _fragment = new StockTradingUiFragment(); + + _fragment.OnBuyButtonPressed += (company, amount) => + { + SendStockTradingUiMessage(StockTradingUiAction.Buy, company, amount, userInterface); + }; + _fragment.OnSellButtonPressed += (company, amount) => + { + SendStockTradingUiMessage(StockTradingUiAction.Sell, company, amount, userInterface); + }; + } + + public override void UpdateState(BoundUserInterfaceState state) + { + if (state is StockTradingUiState cast) + { + _fragment?.UpdateState(cast); + } + } + + private static void SendStockTradingUiMessage(StockTradingUiAction action, int company, float amount, BoundUserInterface userInterface) + { + var newsMessage = new StockTradingUiMessageEvent(action, company, amount); + var message = new CartridgeUiMessage(newsMessage); + userInterface.SendMessage(message); + } +} diff --git a/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUiFragment.xaml b/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUiFragment.xaml new file mode 100644 index 00000000000..00b45584cc4 --- /dev/null +++ b/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUiFragment.xaml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUiFragment.xaml.cs b/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUiFragment.xaml.cs new file mode 100644 index 00000000000..b44e8f44c70 --- /dev/null +++ b/Content.Client/DeltaV/CartridgeLoader/Cartridges/StockTradingUiFragment.xaml.cs @@ -0,0 +1,269 @@ +using System.Linq; +using Content.Client.Administration.UI.CustomControls; +using Content.Shared.CartridgeLoader.Cartridges; +using Robust.Client.AutoGenerated; +using Robust.Client.Graphics; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; + +namespace Content.Client.DeltaV.CartridgeLoader.Cartridges; + +[GenerateTypedNameReferences] +public sealed partial class StockTradingUiFragment : BoxContainer +{ + private readonly Dictionary _companyEntries = new(); + + // Event handlers for the parent UI + public event Action? OnBuyButtonPressed; + public event Action? OnSellButtonPressed; + + // Define colors + public static readonly Color PositiveColor = Color.FromHex("#00ff00"); // Green + public static readonly Color NegativeColor = Color.FromHex("#ff0000"); // Red + public static readonly Color NeutralColor = Color.FromHex("#ffffff"); // White + public static readonly Color BackgroundColor = Color.FromHex("#25252a"); // Dark grey + public static readonly Color PriceBackgroundColor = Color.FromHex("#1a1a1a"); // Darker grey + public static readonly Color BorderColor = Color.FromHex("#404040"); // Light grey + + public StockTradingUiFragment() + { + RobustXamlLoader.Load(this); + } + + public void UpdateState(StockTradingUiState state) + { + NoEntries.Visible = state.Entries.Count == 0; + Balance.Text = Loc.GetString("stock-trading-balance", ("balance", state.Balance)); + + // Clear all existing entries + foreach (var entry in _companyEntries.Values) + { + entry.Container.RemoveAllChildren(); + } + _companyEntries.Clear(); + Entries.RemoveAllChildren(); + + // Add new entries + for (var i = 0; i < state.Entries.Count; i++) + { + var company = state.Entries[i]; + var entry = new CompanyEntry(i, company.LocalizedDisplayName, OnBuyButtonPressed, OnSellButtonPressed); + _companyEntries[i] = entry; + Entries.AddChild(entry.Container); + + var ownedStocks = state.OwnedStocks.GetValueOrDefault(i, 0); + entry.Update(company, ownedStocks); + } + } + + private sealed class CompanyEntry + { + public readonly BoxContainer Container; + private readonly Label _nameLabel; + private readonly Label _priceLabel; + private readonly Label _changeLabel; + private readonly Button _sellButton; + private readonly Button _buyButton; + private readonly Label _sharesLabel; + private readonly LineEdit _amountEdit; + private readonly PriceHistoryTable _priceHistory; + + public CompanyEntry(int companyIndex, + string displayName, + Action? onBuyPressed, + Action? onSellPressed) + { + Container = new BoxContainer + { + Orientation = LayoutOrientation.Vertical, + HorizontalExpand = true, + Margin = new Thickness(0, 0, 0, 2), + }; + + // Company info panel + var companyPanel = new PanelContainer(); + + var mainContent = new BoxContainer + { + Orientation = LayoutOrientation.Vertical, + HorizontalExpand = true, + Margin = new Thickness(8), + }; + + // Top row with company name and price info + var topRow = new BoxContainer + { + Orientation = LayoutOrientation.Horizontal, + HorizontalExpand = true, + }; + + _nameLabel = new Label + { + HorizontalExpand = true, + Text = displayName, + }; + + // Create a panel for price and change + var pricePanel = new PanelContainer + { + HorizontalAlignment = HAlignment.Right, + }; + + // Style the price panel + var priceStyleBox = new StyleBoxFlat + { + BackgroundColor = BackgroundColor, + ContentMarginLeftOverride = 8, + ContentMarginRightOverride = 8, + ContentMarginTopOverride = 4, + ContentMarginBottomOverride = 4, + BorderColor = BorderColor, + BorderThickness = new Thickness(1), + }; + + pricePanel.PanelOverride = priceStyleBox; + + // Container for price and change labels + var priceContainer = new BoxContainer + { + Orientation = LayoutOrientation.Horizontal, + }; + + _priceLabel = new Label(); + + _changeLabel = new Label + { + HorizontalAlignment = HAlignment.Right, + Modulate = NeutralColor, + Margin = new Thickness(15, 0, 0, 0), + }; + + priceContainer.AddChild(_priceLabel); + priceContainer.AddChild(_changeLabel); + pricePanel.AddChild(priceContainer); + + topRow.AddChild(_nameLabel); + topRow.AddChild(pricePanel); + + // Add the top row + mainContent.AddChild(topRow); + + // Add the price history table between top and bottom rows + _priceHistory = new PriceHistoryTable(); + mainContent.AddChild(_priceHistory); + + // Trading controls (bottom row) + var bottomRow = new BoxContainer + { + Orientation = LayoutOrientation.Horizontal, + HorizontalExpand = true, + Margin = new Thickness(0, 5, 0, 0), + }; + + _sharesLabel = new Label + { + Text = Loc.GetString("stock-trading-owned-shares"), + MinWidth = 100, + }; + + _amountEdit = new LineEdit + { + PlaceHolder = Loc.GetString("stock-trading-amount-placeholder"), + HorizontalExpand = true, + MinWidth = 80, + }; + + var buttonContainer = new BoxContainer + { + Orientation = LayoutOrientation.Horizontal, + HorizontalAlignment = HAlignment.Right, + MinWidth = 140, + }; + + _buyButton = new Button + { + Text = Loc.GetString("stock-trading-buy-button"), + MinWidth = 65, + Margin = new Thickness(3, 0, 3, 0), + }; + + _sellButton = new Button + { + Text = Loc.GetString("stock-trading-sell-button"), + MinWidth = 65, + }; + + buttonContainer.AddChild(_buyButton); + buttonContainer.AddChild(_sellButton); + + bottomRow.AddChild(_sharesLabel); + bottomRow.AddChild(_amountEdit); + bottomRow.AddChild(buttonContainer); + + // Add the bottom row last + mainContent.AddChild(bottomRow); + + companyPanel.AddChild(mainContent); + Container.AddChild(companyPanel); + + // Add horizontal separator after the panel + var separator = new HSeparator + { + Margin = new Thickness(5, 3, 5, 5), + }; + Container.AddChild(separator); + + // Button click events + _buyButton.OnPressed += _ => + { + if (float.TryParse(_amountEdit.Text, out var amount) && amount > 0) + onBuyPressed?.Invoke(companyIndex, amount); + }; + + _sellButton.OnPressed += _ => + { + if (float.TryParse(_amountEdit.Text, out var amount) && amount > 0) + onSellPressed?.Invoke(companyIndex, amount); + }; + + // There has to be a better way of doing this + _amountEdit.OnTextChanged += args => + { + var newText = string.Concat(args.Text.Where(char.IsDigit)); + if (newText != args.Text) + _amountEdit.Text = newText; + }; + } + + public void Update(StockCompanyStruct company, int ownedStocks) + { + _nameLabel.Text = company.LocalizedDisplayName; + _priceLabel.Text = $"${company.CurrentPrice:F2}"; + _sharesLabel.Text = Loc.GetString("stock-trading-owned-shares", ("shares", ownedStocks)); + + var priceChange = 0f; + if (company.PriceHistory is { Count: > 0 }) + { + var previousPrice = company.PriceHistory[^1]; + priceChange = (company.CurrentPrice - previousPrice) / previousPrice * 100; + } + + _changeLabel.Text = $"{(priceChange >= 0 ? "+" : "")}{priceChange:F2}%"; + + // Update color based on price change + _changeLabel.Modulate = priceChange switch + { + > 0 => PositiveColor, + < 0 => NegativeColor, + _ => NeutralColor, + }; + + // Update the price history table if not null + if (company.PriceHistory != null) + _priceHistory.Update(company.PriceHistory); + + // Disable sell button if no shares owned + _sellButton.Disabled = ownedStocks <= 0; + } + } +} diff --git a/Content.Client/DeltaV/Chapel/SacrificialAltarSystem.cs b/Content.Client/DeltaV/Chapel/SacrificialAltarSystem.cs new file mode 100644 index 00000000000..7b9b3757e32 --- /dev/null +++ b/Content.Client/DeltaV/Chapel/SacrificialAltarSystem.cs @@ -0,0 +1,5 @@ +using Content.Shared.DeltaV.Chapel; + +namespace Content.Client.DeltaV.Chapel; + +public sealed class SacrificialAltarSystem : SharedSacrificialAltarSystem; diff --git a/Content.Client/Nyanotrasen/Mail/MailComponent.cs b/Content.Client/DeltaV/Mail/MailComponent.cs similarity index 53% rename from Content.Client/Nyanotrasen/Mail/MailComponent.cs rename to Content.Client/DeltaV/Mail/MailComponent.cs index 4f9b6e36892..1603cf7d663 100644 --- a/Content.Client/Nyanotrasen/Mail/MailComponent.cs +++ b/Content.Client/DeltaV/Mail/MailComponent.cs @@ -1,8 +1,9 @@ -using Content.Shared.Mail; +using Content.Shared.DeltaV.Mail; -namespace Content.Client.Mail +namespace Content.Client.DeltaV.Mail { [RegisterComponent] public sealed partial class MailComponent : SharedMailComponent - {} + { + } } diff --git a/Content.Client/Nyanotrasen/Mail/MailSystem.cs b/Content.Client/DeltaV/Mail/MailSystem.cs similarity index 93% rename from Content.Client/Nyanotrasen/Mail/MailSystem.cs rename to Content.Client/DeltaV/Mail/MailSystem.cs index 38e575b4150..b215192140f 100644 --- a/Content.Client/Nyanotrasen/Mail/MailSystem.cs +++ b/Content.Client/DeltaV/Mail/MailSystem.cs @@ -1,9 +1,9 @@ -using Content.Shared.Mail; +using Content.Shared.DeltaV.Mail; using Content.Shared.StatusIcon; using Robust.Client.GameObjects; using Robust.Shared.Prototypes; -namespace Content.Client.Mail; +namespace Content.Client.DeltaV.Mail; /// /// Display a cool stamp on the parcel based on the job of the recipient. @@ -27,7 +27,6 @@ public sealed class MailJobVisualizerSystem : VisualizerSystem { [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly SpriteSystem _stateManager = default!; [Dependency] private readonly SpriteSystem _spriteSystem = default!; protected override void OnAppearanceChange(EntityUid uid, MailComponent component, ref AppearanceChangeEvent args) diff --git a/Content.Client/DeltaV/RoundEnd/NoEorgPopup.xaml b/Content.Client/DeltaV/RoundEnd/NoEorgPopup.xaml new file mode 100644 index 00000000000..31c3b74ea0b --- /dev/null +++ b/Content.Client/DeltaV/RoundEnd/NoEorgPopup.xaml @@ -0,0 +1,29 @@ + + + + /// The antagonist rule entity + /// The players to choose from + /// The antagonist selection parameters and criteria /// Disable picking players for pre-spawn antags in the middle of a round - public void ChooseAntags(Entity ent, IList pool, AntagSelectionDefinition def, bool midround = false) + public void ChooseAntags(Entity ent, + IList pool, + AntagSelectionDefinition def, + bool midround = false) { var playerPool = GetPlayerPool(ent, pool, def); var count = GetTargetAntagCount(ent, GetTotalPlayerCount(pool), def); @@ -331,7 +338,7 @@ public void MakeAntag(Entity ent, ICommonSession? sessi EntityManager.AddComponents(player, def.Components); // Equip the entity's RoleLoadout and LoadoutGroup - List>? gear = new(); + List> gear = new(); if (def.StartingGear is not null) gear.Add(def.StartingGear.Value); @@ -340,8 +347,8 @@ public void MakeAntag(Entity ent, ICommonSession? sessi if (session != null) { var curMind = session.GetMind(); - - if (curMind == null || + + if (curMind == null || !TryComp(curMind.Value, out var mindComp) || mindComp.OwnedEntity != antagEnt) { @@ -350,7 +357,7 @@ public void MakeAntag(Entity ent, ICommonSession? sessi } _mind.TransferTo(curMind.Value, antagEnt, ghostCheckOverride: true); - _role.MindAddRoles(curMind.Value, def.MindComponents, null, true); + _role.MindAddRoles(curMind.Value, def.MindRoles, null, true); ent.Comp.SelectedMinds.Add((curMind.Value, Name(player))); SendBriefing(session, def.Briefing); } diff --git a/Content.Server/Antag/Components/AntagSelectionComponent.cs b/Content.Server/Antag/Components/AntagSelectionComponent.cs index 0e5a0afc9bc..502fb8eda2c 100644 --- a/Content.Server/Antag/Components/AntagSelectionComponent.cs +++ b/Content.Server/Antag/Components/AntagSelectionComponent.cs @@ -3,7 +3,6 @@ using Content.Shared.Destructible.Thresholds; using Content.Shared.Preferences.Loadouts; using Content.Shared.Roles; -using Content.Shared.Storage; using Content.Shared.Whitelist; using Robust.Shared.Audio; using Robust.Shared.Player; @@ -145,10 +144,17 @@ public partial struct AntagSelectionDefinition() /// /// Components added to the player's mind. + /// Do NOT use this to add role-type components. Add those as MindRoles instead /// [DataField] public ComponentRegistry MindComponents = new(); + /// + /// List of Mind Role Prototypes to be added to the player's mind. + /// + [DataField] + public List>? MindRoles; + /// /// A set of starting gear that's equipped to the player. /// diff --git a/Content.Server/Atmos/Components/AtmosFixMarkerComponent.cs b/Content.Server/Atmos/Components/AtmosFixMarkerComponent.cs index 5123500239e..a60d042fb57 100644 --- a/Content.Server/Atmos/Components/AtmosFixMarkerComponent.cs +++ b/Content.Server/Atmos/Components/AtmosFixMarkerComponent.cs @@ -1,9 +1,11 @@ +using Robust.Shared.Prototypes; + namespace Content.Server.Atmos.Components { /// /// Used by FixGridAtmos. Entities with this may get magically auto-deleted on map initialization in future. /// - [RegisterComponent] + [RegisterComponent, EntityCategory("Mapping")] public sealed partial class AtmosFixMarkerComponent : Component { // See FixGridAtmos for more details diff --git a/Content.Server/Atmos/Consoles/AtmosAlertsComputerSystem.cs b/Content.Server/Atmos/Consoles/AtmosAlertsComputerSystem.cs index d9a475dbfb7..2d35ae59731 100644 --- a/Content.Server/Atmos/Consoles/AtmosAlertsComputerSystem.cs +++ b/Content.Server/Atmos/Consoles/AtmosAlertsComputerSystem.cs @@ -1,15 +1,19 @@ using Content.Server.Atmos.Monitor.Components; using Content.Server.DeviceNetwork.Components; +using Content.Server.DeviceNetwork.Systems; +using Content.Server.Pinpointer; using Content.Server.Power.Components; using Content.Shared.Atmos; using Content.Shared.Atmos.Components; using Content.Shared.Atmos.Consoles; using Content.Shared.Atmos.Monitor; using Content.Shared.Atmos.Monitor.Components; +using Content.Shared.DeviceNetwork.Components; using Content.Shared.Pinpointer; +using Content.Shared.Tag; using Robust.Server.GameObjects; using Robust.Shared.Map.Components; -using Robust.Shared.Player; +using Robust.Shared.Timing; using System.Diagnostics.CodeAnalysis; using System.Linq; @@ -21,6 +25,12 @@ public sealed class AtmosAlertsComputerSystem : SharedAtmosAlertsComputerSystem [Dependency] private readonly AirAlarmSystem _airAlarmSystem = default!; [Dependency] private readonly AtmosDeviceNetworkSystem _atmosDevNet = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly TagSystem _tagSystem = default!; + [Dependency] private readonly MapSystem _mapSystem = default!; + [Dependency] private readonly TransformSystem _transformSystem = default!; + [Dependency] private readonly NavMapSystem _navMapSystem = default!; + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly DeviceListSystem _deviceListSystem = default!; private const float UpdateTime = 1.0f; @@ -38,6 +48,9 @@ public override void Initialize() // Grid events SubscribeLocalEvent(OnGridSplit); + + // Alarm events + SubscribeLocalEvent(OnDeviceTerminatingEvent); SubscribeLocalEvent(OnDeviceAnchorChanged); } @@ -81,6 +94,16 @@ private void OnGridSplit(ref GridSplitEvent args) } private void OnDeviceAnchorChanged(EntityUid uid, AtmosAlertsDeviceComponent component, AnchorStateChangedEvent args) + { + OnDeviceAdditionOrRemoval(uid, component, args.Anchored); + } + + private void OnDeviceTerminatingEvent(EntityUid uid, AtmosAlertsDeviceComponent component, ref EntityTerminatingEvent args) + { + OnDeviceAdditionOrRemoval(uid, component, false); + } + + private void OnDeviceAdditionOrRemoval(EntityUid uid, AtmosAlertsDeviceComponent component, bool isAdding) { var xform = Transform(uid); var gridUid = xform.GridUid; @@ -88,10 +111,13 @@ private void OnDeviceAnchorChanged(EntityUid uid, AtmosAlertsDeviceComponent com if (gridUid == null) return; - if (!TryGetAtmosDeviceNavMapData(uid, component, xform, gridUid.Value, out var data)) + if (!TryComp(xform.GridUid, out var navMap)) return; - var netEntity = EntityManager.GetNetEntity(uid); + if (!TryGetAtmosDeviceNavMapData(uid, component, xform, out var data)) + return; + + var netEntity = GetNetEntity(uid); var query = AllEntityQuery(); while (query.MoveNext(out var ent, out var entConsole, out var entXform)) @@ -99,11 +125,18 @@ private void OnDeviceAnchorChanged(EntityUid uid, AtmosAlertsDeviceComponent com if (gridUid != entXform.GridUid) continue; - if (args.Anchored) + if (isAdding) + { entConsole.AtmosDevices.Add(data.Value); + } - else if (!args.Anchored) + else + { entConsole.AtmosDevices.RemoveWhere(x => x.NetEntity == netEntity); + _navMapSystem.RemoveNavMapRegion(gridUid.Value, navMap, netEntity); + } + + Dirty(ent, entConsole); } } @@ -209,6 +242,12 @@ private List GetAlarmStateData(EntityUid gridUid, Atmo if (entDevice.Group != group) continue; + if (!TryComp(entXform.GridUid, out var mapGrid)) + continue; + + if (!TryComp(entXform.GridUid, out var navMap)) + continue; + // If emagged, change the alarm type to normal var alarmState = (entAtmosAlarmable.LastAlarmState == AtmosAlarmType.Emagged) ? AtmosAlarmType.Normal : entAtmosAlarmable.LastAlarmState; @@ -216,14 +255,45 @@ private List GetAlarmStateData(EntityUid gridUid, Atmo if (TryComp(ent, out var entAPCPower) && !entAPCPower.Powered) alarmState = AtmosAlarmType.Invalid; + // Create entry + var netEnt = GetNetEntity(ent); + var entry = new AtmosAlertsComputerEntry - (GetNetEntity(ent), + (netEnt, GetNetCoordinates(entXform.Coordinates), entDevice.Group, alarmState, MetaData(ent).EntityName, entDeviceNetwork.Address); + // Get the list of sensors attached to the alarm + var sensorList = TryComp(ent, out var entDeviceList) ? _deviceListSystem.GetDeviceList(ent, entDeviceList) : null; + + if (sensorList?.Any() == true) + { + var alarmRegionSeeds = new HashSet(); + + // If valid and anchored, use the position of sensors as seeds for the region + foreach (var (address, sensorEnt) in sensorList) + { + if (!sensorEnt.IsValid() || !HasComp(sensorEnt)) + continue; + + var sensorXform = Transform(sensorEnt); + + if (sensorXform.Anchored && sensorXform.GridUid == entXform.GridUid) + alarmRegionSeeds.Add(_mapSystem.CoordinatesToTile(entXform.GridUid.Value, mapGrid, _transformSystem.GetMapCoordinates(sensorEnt, sensorXform))); + } + + var regionProperties = new SharedNavMapSystem.NavMapRegionProperties(netEnt, AtmosAlertsComputerUiKey.Key, alarmRegionSeeds); + _navMapSystem.AddOrUpdateNavMapRegion(gridUid, navMap, netEnt, regionProperties); + } + + else + { + _navMapSystem.RemoveNavMapRegion(entXform.GridUid.Value, navMap, netEnt); + } + alarmStateData.Add(entry); } @@ -306,7 +376,10 @@ private HashSet GetAllAtmosDeviceNavMapData(EntityU var query = AllEntityQuery(); while (query.MoveNext(out var ent, out var entComponent, out var entXform)) { - if (TryGetAtmosDeviceNavMapData(ent, entComponent, entXform, gridUid, out var data)) + if (entXform.GridUid != gridUid) + continue; + + if (TryGetAtmosDeviceNavMapData(ent, entComponent, entXform, out var data)) atmosDeviceNavMapData.Add(data.Value); } @@ -317,14 +390,10 @@ private bool TryGetAtmosDeviceNavMapData (EntityUid uid, AtmosAlertsDeviceComponent component, TransformComponent xform, - EntityUid gridUid, [NotNullWhen(true)] out AtmosAlertsDeviceNavMapData? output) { output = null; - if (xform.GridUid != gridUid) - return false; - if (!xform.Anchored) return false; diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Gases.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Gases.cs index 70c4639e481..f38ec3fef60 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Gases.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Gases.cs @@ -281,6 +281,17 @@ public bool IsMixtureProbablySafe(GasMixture? air) return true; } + /// + /// Compares two TileAtmospheres to see if they are within acceptable ranges for group processing to be enabled. + /// + public GasCompareResult CompareExchange(TileAtmosphere sample, TileAtmosphere otherSample) + { + if (sample.AirArchived == null || otherSample.AirArchived == null) + return GasCompareResult.NoExchange; + + return CompareExchange(sample.AirArchived, otherSample.AirArchived); + } + /// /// Compares two gas mixtures to see if they are within acceptable ranges for group processing to be enabled. /// diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.GridAtmosphere.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.GridAtmosphere.cs index 3983234dea6..b11eb5dc3e6 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.GridAtmosphere.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.GridAtmosphere.cs @@ -270,7 +270,7 @@ private void GridFixTileVacuum(TileAtmosphere tile) { DebugTools.AssertNotNull(tile.Air); DebugTools.Assert(tile.Air?.Immutable == false); - Array.Clear(tile.MolesArchived); + tile.AirArchived = null; tile.ArchivedCycle = 0; var count = 0; diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.HighPressureDelta.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.HighPressureDelta.cs index b96dd0ac48d..0b43c924149 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.HighPressureDelta.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.HighPressureDelta.cs @@ -210,7 +210,7 @@ public void ExperiencePressureDifference( MovedByPressureComponent.ProbabilityOffset); // Can we yeet the thing (due to probability, strength, etc.) - if (moveProb > MovedByPressureComponent.ProbabilityOffset && _robustRandom.Prob(MathF.Min(moveProb / 100f, 1f)) + if (moveProb > MovedByPressureComponent.ProbabilityOffset && _random.Prob(MathF.Min(moveProb / 100f, 1f)) && !float.IsPositiveInfinity(component.MoveResist) && (physics.BodyType != BodyType.Static && (maxForce >= (component.MoveResist * MovedByPressureComponent.MoveForcePushRatio))) diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.LINDA.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.LINDA.cs index fb2375899d9..55b38924c0e 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.LINDA.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.LINDA.cs @@ -54,7 +54,7 @@ private void ProcessCell( } shouldShareAir = true; - } else if (CompareExchange(tile.Air, enemyTile.Air) != GasCompareResult.NoExchange) + } else if (CompareExchange(tile, enemyTile) != GasCompareResult.NoExchange) { AddActiveTile(gridAtmosphere, enemyTile); if (ExcitedGroups) @@ -117,9 +117,8 @@ private void ProcessCell( private void Archive(TileAtmosphere tile, int fireCount) { if (tile.Air != null) - tile.Air.Moles.AsSpan().CopyTo(tile.MolesArchived.AsSpan()); + tile.AirArchived = new GasMixture(tile.Air); - tile.TemperatureArchived = tile.Temperature; tile.ArchivedCycle = fireCount; } @@ -184,10 +183,10 @@ private void RemoveActiveTile(GridAtmosphereComponent gridAtmosphere, TileAtmosp /// public float GetHeatCapacityArchived(TileAtmosphere tile) { - if (tile.Air == null) + if (tile.AirArchived == null) return tile.HeatCapacity; - return GetHeatCapacityCalculation(tile.MolesArchived!, tile.Space); + return GetHeatCapacity(tile.AirArchived); } /// @@ -195,10 +194,11 @@ public float GetHeatCapacityArchived(TileAtmosphere tile) /// public float Share(TileAtmosphere tileReceiver, TileAtmosphere tileSharer, int atmosAdjacentTurfs) { - if (tileReceiver.Air is not {} receiver || tileSharer.Air is not {} sharer) + if (tileReceiver.Air is not {} receiver || tileSharer.Air is not {} sharer || + tileReceiver.AirArchived == null || tileSharer.AirArchived == null) return 0f; - var temperatureDelta = tileReceiver.TemperatureArchived - tileSharer.TemperatureArchived; + var temperatureDelta = tileReceiver.AirArchived.Temperature - tileSharer.AirArchived.Temperature; var absTemperatureDelta = Math.Abs(temperatureDelta); var oldHeatCapacity = 0f; var oldSharerHeatCapacity = 0f; @@ -249,12 +249,12 @@ public float Share(TileAtmosphere tileReceiver, TileAtmosphere tileSharer, int a // Transfer of thermal energy (via changed heat capacity) between self and sharer. if (!receiver.Immutable && newHeatCapacity > Atmospherics.MinimumHeatCapacity) { - receiver.Temperature = ((oldHeatCapacity * receiver.Temperature) - (heatCapacityToSharer * tileReceiver.TemperatureArchived) + (heatCapacitySharerToThis * tileSharer.TemperatureArchived)) / newHeatCapacity; + receiver.Temperature = ((oldHeatCapacity * receiver.Temperature) - (heatCapacityToSharer * tileReceiver.AirArchived.Temperature) + (heatCapacitySharerToThis * tileSharer.AirArchived.Temperature)) / newHeatCapacity; } if (!sharer.Immutable && newSharerHeatCapacity > Atmospherics.MinimumHeatCapacity) { - sharer.Temperature = ((oldSharerHeatCapacity * sharer.Temperature) - (heatCapacitySharerToThis * tileSharer.TemperatureArchived) + (heatCapacityToSharer * tileReceiver.TemperatureArchived)) / newSharerHeatCapacity; + sharer.Temperature = ((oldSharerHeatCapacity * sharer.Temperature) - (heatCapacitySharerToThis * tileSharer.AirArchived.Temperature) + (heatCapacityToSharer * tileReceiver.AirArchived.Temperature)) / newSharerHeatCapacity; } // Thermal energy of the system (self and sharer) is unchanged. @@ -273,7 +273,7 @@ public float Share(TileAtmosphere tileReceiver, TileAtmosphere tileSharer, int a var moles = receiver.TotalMoles; var theirMoles = sharer.TotalMoles; - return (tileReceiver.TemperatureArchived * (moles + movedMoles)) - (tileSharer.TemperatureArchived * (theirMoles - movedMoles)) * Atmospherics.R / receiver.Volume; + return (tileReceiver.AirArchived.Temperature * (moles + movedMoles)) - (tileSharer.AirArchived.Temperature * (theirMoles - movedMoles)) * Atmospherics.R / receiver.Volume; } /// @@ -281,10 +281,11 @@ public float Share(TileAtmosphere tileReceiver, TileAtmosphere tileSharer, int a /// public float TemperatureShare(TileAtmosphere tileReceiver, TileAtmosphere tileSharer, float conductionCoefficient) { - if (tileReceiver.Air is not { } receiver || tileSharer.Air is not { } sharer) + if (tileReceiver.Air is not { } receiver || tileSharer.Air is not { } sharer || + tileReceiver.AirArchived == null || tileSharer.AirArchived == null) return 0f; - var temperatureDelta = tileReceiver.TemperatureArchived - tileSharer.TemperatureArchived; + var temperatureDelta = tileReceiver.AirArchived.Temperature - tileSharer.AirArchived.Temperature; if (MathF.Abs(temperatureDelta) > Atmospherics.MinimumTemperatureDeltaToConsider) { var heatCapacity = GetHeatCapacityArchived(tileReceiver); @@ -310,10 +311,10 @@ public float TemperatureShare(TileAtmosphere tileReceiver, TileAtmosphere tileSh /// public float TemperatureShare(TileAtmosphere tileReceiver, float conductionCoefficient, float sharerTemperature, float sharerHeatCapacity) { - if (tileReceiver.Air is not {} receiver) + if (tileReceiver.Air is not {} receiver || tileReceiver.AirArchived == null) return 0; - var temperatureDelta = tileReceiver.TemperatureArchived - sharerTemperature; + var temperatureDelta = tileReceiver.AirArchived.Temperature - sharerTemperature; if (MathF.Abs(temperatureDelta) > Atmospherics.MinimumTemperatureDeltaToConsider) { var heatCapacity = GetHeatCapacityArchived(tileReceiver); diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Monstermos.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Monstermos.cs index 08193027d67..e6466c8157f 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Monstermos.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Monstermos.cs @@ -355,7 +355,7 @@ private void EqualizePressureInZone( continue; DebugTools.Assert(otherTile2.AdjacentBits.IsFlagSet(direction.GetOpposite())); - if (otherTile2.Air != null && CompareExchange(otherTile2.Air, tile.Air) == GasCompareResult.NoExchange) + if (otherTile2.Air != null && CompareExchange(otherTile2, tile) == GasCompareResult.NoExchange) continue; AddActiveTile(gridAtmosphere, otherTile2); @@ -689,7 +689,7 @@ private void HandleDecompressionFloorRip(MapGridComponent mapGrid, TileAtmospher var chance = MathHelper.Clamp(0.01f + (sum / SpacingMaxWind) * 0.3f, 0.003f, 0.3f); - if (sum > 20 && _robustRandom.Prob(chance)) + if (sum > 20 && _random.Prob(chance)) PryTile(mapGrid, tile.GridIndices); } diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Processing.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Processing.cs index 85b1a93e20f..59320ba67ba 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Processing.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Processing.cs @@ -231,7 +231,7 @@ private void RemoveMapAtmos(GridAtmosphereComponent atmos, TileAtmosphere tile) tile.MapAtmosphere = false; atmos.MapTiles.Remove(tile); tile.Air = null; - Array.Clear(tile.MolesArchived); + tile.AirArchived = null; tile.ArchivedCycle = 0; tile.LastShare = 0f; tile.Space = false; @@ -261,7 +261,7 @@ private void UpdateTileAir( return; tile.Air = null; - Array.Clear(tile.MolesArchived); + tile.AirArchived = null; tile.ArchivedCycle = 0; tile.LastShare = 0f; tile.Hotspot = new Hotspot(); diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Superconductivity.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Superconductivity.cs index 8ed92a9d0eb..46a554054b4 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Superconductivity.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.Superconductivity.cs @@ -131,7 +131,10 @@ private void TemperatureShareOpenToSolid(TileAtmosphere tile, TileAtmosphere oth private void TemperatureShareMutualSolid(TileAtmosphere tile, TileAtmosphere other, float conductionCoefficient) { - var deltaTemperature = (tile.TemperatureArchived - other.TemperatureArchived); + if (tile.AirArchived == null || other.AirArchived == null) + return; + + var deltaTemperature = (tile.AirArchived.Temperature - other.AirArchived.Temperature); if (MathF.Abs(deltaTemperature) > Atmospherics.MinimumTemperatureDeltaToConsider && tile.HeatCapacity != 0f && other.HeatCapacity != 0f) { @@ -145,11 +148,14 @@ private void TemperatureShareMutualSolid(TileAtmosphere tile, TileAtmosphere oth public void RadiateToSpace(TileAtmosphere tile) { + if (tile.AirArchived == null) + return; + // Considering 0ºC as the break even point for radiation in and out. if (tile.Temperature > Atmospherics.T0C) { // Hardcoded space temperature. - var deltaTemperature = (tile.TemperatureArchived - Atmospherics.TCMB); + var deltaTemperature = (tile.AirArchived.Temperature - Atmospherics.TCMB); if ((tile.HeatCapacity > 0) && (MathF.Abs(deltaTemperature) > Atmospherics.MinimumTemperatureDeltaToConsider)) { var heat = tile.ThermalConductivity * deltaTemperature * (tile.HeatCapacity * diff --git a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.cs b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.cs index 13d8f73dc56..f27f7411bf4 100644 --- a/Content.Server/Atmos/EntitySystems/AtmosphereSystem.cs +++ b/Content.Server/Atmos/EntitySystems/AtmosphereSystem.cs @@ -14,7 +14,6 @@ using Robust.Shared.Map; using Robust.Shared.Physics.Systems; using Robust.Shared.Prototypes; -using Robust.Shared.Random; using System.Linq; namespace Content.Server.Atmos.EntitySystems; @@ -27,7 +26,6 @@ public sealed partial class AtmosphereSystem : SharedAtmosphereSystem { [Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly ITileDefinitionManager _tileDefinitionManager = default!; - [Dependency] private readonly IRobustRandom _robustRandom = default!; [Dependency] private readonly IAdminLogManager _adminLog = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly InternalsSystem _internals = default!; @@ -39,7 +37,6 @@ public sealed partial class AtmosphereSystem : SharedAtmosphereSystem [Dependency] private readonly SharedTransformSystem _transformSystem = default!; [Dependency] private readonly TileSystem _tile = default!; [Dependency] private readonly MapSystem _map = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] public readonly PuddleSystem Puddle = default!; private const float ExposedUpdateDelay = 1f; @@ -124,6 +121,6 @@ public override void Update(float frameTime) private void CacheDecals() { - _burntDecals = _prototypeManager.EnumeratePrototypes().Where(x => x.Tags.Contains("burnt")).Select(x => x.ID).ToArray(); + _burntDecals = _protoMan.EnumeratePrototypes().Where(x => x.Tags.Contains("burnt")).Select(x => x.ID).ToArray(); } } diff --git a/Content.Server/Atmos/Piping/Unary/Components/GasVentPumpComponent.cs b/Content.Server/Atmos/Piping/Unary/Components/GasVentPumpComponent.cs index 7d702904fbe..fcf3ddf969c 100644 --- a/Content.Server/Atmos/Piping/Unary/Components/GasVentPumpComponent.cs +++ b/Content.Server/Atmos/Piping/Unary/Components/GasVentPumpComponent.cs @@ -6,6 +6,7 @@ namespace Content.Server.Atmos.Piping.Unary.Components { // The world if people documented their shit. + [AutoGenerateComponentPause] [RegisterComponent] public sealed partial class GasVentPumpComponent : Component { @@ -15,31 +16,25 @@ public sealed partial class GasVentPumpComponent : Component [ViewVariables] public bool IsDirty { get; set; } = false; - [ViewVariables(VVAccess.ReadWrite)] - [DataField("inlet")] + [DataField] public string Inlet { get; set; } = "pipe"; - [ViewVariables(VVAccess.ReadWrite)] - [DataField("outlet")] + [DataField] public string Outlet { get; set; } = "pipe"; - [ViewVariables(VVAccess.ReadWrite)] - [DataField("pumpDirection")] + [DataField] public VentPumpDirection PumpDirection { get; set; } = VentPumpDirection.Releasing; - [ViewVariables(VVAccess.ReadWrite)] - [DataField("pressureChecks")] + [DataField] public VentPressureBound PressureChecks { get; set; } = VentPressureBound.ExternalBound; - [ViewVariables(VVAccess.ReadOnly)] - [DataField("underPressureLockout")] + [DataField] public bool UnderPressureLockout { get; set; } = false; /// /// In releasing mode, do not pump when environment pressure is below this limit. /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("underPressureLockoutThreshold")] + [DataField] public float UnderPressureLockoutThreshold = 80; // this must be tuned in conjunction with atmos.mmos_spacing_speed /// @@ -55,12 +50,30 @@ public sealed partial class GasVentPumpComponent : Component /// repressurizing of the development map take about 30 minutes using an oxygen tank (high pressure) /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("underPressureLockoutLeaking")] + [DataField] public float UnderPressureLockoutLeaking = 0.0001f; + /// + /// Is the vent pressure lockout currently manually disabled? + /// + [DataField] + public bool IsPressureLockoutManuallyDisabled = false; + /// + /// The time when the manual pressure lockout will be reenabled. + /// + [DataField] + [AutoPausedField] + public TimeSpan ManualLockoutReenabledAt; + /// + /// How long the lockout should remain manually disabled after being interacted with. + /// + [DataField] + public TimeSpan ManualLockoutDisabledDuration = TimeSpan.FromSeconds(30); // Enough time to fill a 5x5 room + /// + /// How long the doAfter should take when attempting to manually disable the pressure lockout. + /// + public float ManualLockoutDisableDoAfter = 2.0f; - [ViewVariables(VVAccess.ReadWrite)] - [DataField("externalPressureBound")] + [DataField] public float ExternalPressureBound { get => _externalPressureBound; @@ -72,8 +85,7 @@ public float ExternalPressureBound private float _externalPressureBound = Atmospherics.OneAtmosphere; - [ViewVariables(VVAccess.ReadWrite)] - [DataField("internalPressureBound")] + [DataField] public float InternalPressureBound { get => _internalPressureBound; @@ -88,8 +100,7 @@ public float InternalPressureBound /// /// Max pressure of the target gas (NOT relative to source). /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("maxPressure")] + [DataField] public float MaxPressure = Atmospherics.MaxOutputPressure; /// @@ -100,8 +111,7 @@ public float InternalPressureBound /// is too high, and the vent is connected to a large pipe-net, then someone can nearly instantly flood a /// room with gas. /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("targetPressureChange")] + [DataField] public float TargetPressureChange = Atmospherics.OneAtmosphere; /// @@ -111,29 +121,26 @@ public float InternalPressureBound /// Vents cannot suck a pipe completely empty, instead pressurizing a section to a max of /// pipe pressure * PumpPower (in kPa). So a 51 kPa pipe is required for 101 kPA sections at PumpPower 2.0 /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("PumpPower")] + [DataField] public float PumpPower = 2.0f; #region Machine Linking /// /// Whether or not machine linking is enabled for this component. /// - [DataField("canLink")] + [DataField] public bool CanLink = false; - [DataField("pressurizePort", customTypeSerializer: typeof(PrototypeIdSerializer))] + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] public string PressurizePort = "Pressurize"; - [DataField("depressurizePort", customTypeSerializer: typeof(PrototypeIdSerializer))] + [DataField(customTypeSerializer: typeof(PrototypeIdSerializer))] public string DepressurizePort = "Depressurize"; - [ViewVariables(VVAccess.ReadWrite)] - [DataField("pressurizePressure")] + [DataField] public float PressurizePressure = Atmospherics.OneAtmosphere; - [ViewVariables(VVAccess.ReadWrite)] - [DataField("depressurizePressure")] + [DataField] public float DepressurizePressure = 0; // When true, ignore under-pressure lockout. Used to re-fill rooms in air alarm "Fill" mode. diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs index dbbbf2d0083..9d9862ff1dd 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasVentPumpSystem.cs @@ -7,21 +7,22 @@ using Content.Server.DeviceNetwork; using Content.Server.DeviceNetwork.Components; using Content.Server.DeviceNetwork.Systems; -using Content.Server.NodeContainer; using Content.Server.NodeContainer.EntitySystems; using Content.Server.NodeContainer.Nodes; -using Content.Server.Power.Components; using Content.Shared.Atmos; using Content.Shared.Atmos.Monitor; +using Content.Shared.Atmos.Piping.Unary; using Content.Shared.Atmos.Piping.Unary.Components; using Content.Shared.Atmos.Visuals; using Content.Shared.Audio; using Content.Shared.DeviceNetwork; +using Content.Shared.DoAfter; using Content.Shared.Examine; +using Content.Shared.Interaction; using Content.Shared.Power; using Content.Shared.Tools.Systems; using JetBrains.Annotations; -using Robust.Server.GameObjects; +using Robust.Shared.Timing; namespace Content.Server.Atmos.Piping.Unary.EntitySystems { @@ -35,7 +36,9 @@ public sealed class GasVentPumpSystem : EntitySystem [Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly WeldableSystem _weldable = default!; - + [Dependency] private readonly SharedToolSystem _toolSystem = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!; + [Dependency] private readonly IGameTiming _timing = default!; public override void Initialize() { base.Initialize(); @@ -51,6 +54,8 @@ public override void Initialize() SubscribeLocalEvent(OnSignalReceived); SubscribeLocalEvent(OnAnalyzed); SubscribeLocalEvent(OnWeldChanged); + SubscribeLocalEvent(OnInteractUsing); + SubscribeLocalEvent(OnVentScrewed); } private void OnGasVentPumpUpdated(EntityUid uid, GasVentPumpComponent vent, ref AtmosDeviceUpdateEvent args) @@ -80,11 +85,16 @@ private void OnGasVentPumpUpdated(EntityUid uid, GasVentPumpComponent vent, ref { return; } + // If the lockout has expired, disable it. + if (vent.IsPressureLockoutManuallyDisabled && _timing.CurTime >= vent.ManualLockoutReenabledAt) + { + vent.IsPressureLockoutManuallyDisabled = false; + } var timeDelta = args.dt; var pressureDelta = timeDelta * vent.TargetPressureChange; - var lockout = (environment.Pressure < vent.UnderPressureLockoutThreshold); + var lockout = (environment.Pressure < vent.UnderPressureLockoutThreshold) && !vent.IsPressureLockoutManuallyDisabled; if (vent.UnderPressureLockout != lockout) // update visuals only if this changes { vent.UnderPressureLockout = lockout; @@ -115,7 +125,7 @@ private void OnGasVentPumpUpdated(EntityUid uid, GasVentPumpComponent vent, ref var transferMoles = pressureDelta * environment.Volume / (pipe.Air.Temperature * Atmospherics.R); // Only run if the device is under lockout and not being overriden - if (vent.UnderPressureLockout & !vent.PressureLockoutOverride) + if (vent.UnderPressureLockout & !vent.PressureLockoutOverride & !vent.IsPressureLockoutManuallyDisabled) { // Leak only a small amount of gas as a proportion of supply pipe pressure. var pipeDelta = pipe.Air.Pressure - environment.Pressure; @@ -273,7 +283,7 @@ private void UpdateState(EntityUid uid, GasVentPumpComponent vent, AppearanceCom } else if (vent.PumpDirection == VentPumpDirection.Releasing) { - if (vent.UnderPressureLockout & !vent.PressureLockoutOverride) + if (vent.UnderPressureLockout & !vent.PressureLockoutOverride & !vent.IsPressureLockoutManuallyDisabled) _appearance.SetData(uid, VentPumpVisuals.State, VentPumpState.Lockout, appearance); else _appearance.SetData(uid, VentPumpVisuals.State, VentPumpState.Out, appearance); @@ -290,7 +300,7 @@ private void OnExamine(EntityUid uid, GasVentPumpComponent component, ExaminedEv return; if (args.IsInDetailsRange) { - if (pumpComponent.PumpDirection == VentPumpDirection.Releasing & pumpComponent.UnderPressureLockout & !pumpComponent.PressureLockoutOverride) + if (pumpComponent.PumpDirection == VentPumpDirection.Releasing & pumpComponent.UnderPressureLockout & !pumpComponent.PressureLockoutOverride & !pumpComponent.IsPressureLockoutManuallyDisabled) { args.PushMarkup(Loc.GetString("gas-vent-pump-uvlo")); } @@ -325,5 +335,25 @@ private void OnWeldChanged(EntityUid uid, GasVentPumpComponent component, ref We { UpdateState(uid, component); } + private void OnInteractUsing(EntityUid uid, GasVentPumpComponent component, InteractUsingEvent args) + { + if (args.Handled + || component.UnderPressureLockout == false + || !_toolSystem.HasQuality(args.Used, "Screwing") + || !Transform(uid).Anchored + ) + { + return; + } + + args.Handled = true; + + _doAfterSystem.TryStartDoAfter(new DoAfterArgs(EntityManager, args.User, component.ManualLockoutDisableDoAfter, new VentScrewedDoAfterEvent(), uid, uid, args.Used)); + } + private void OnVentScrewed(EntityUid uid, GasVentPumpComponent component, VentScrewedDoAfterEvent args) + { + component.ManualLockoutReenabledAt = _timing.CurTime + component.ManualLockoutDisabledDuration; + component.IsPressureLockoutManuallyDisabled = true; + } } } diff --git a/Content.Server/Atmos/TileAtmosphere.cs b/Content.Server/Atmos/TileAtmosphere.cs index 0026dbbf4f0..46a85990fa9 100644 --- a/Content.Server/Atmos/TileAtmosphere.cs +++ b/Content.Server/Atmos/TileAtmosphere.cs @@ -22,9 +22,6 @@ public sealed class TileAtmosphere : IGasMixtureHolder [ViewVariables] public float Temperature { get; set; } = Atmospherics.T20C; - [ViewVariables] - public float TemperatureArchived { get; set; } = Atmospherics.T20C; - [ViewVariables] public TileAtmosphere? PressureSpecificTarget { get; set; } @@ -93,12 +90,16 @@ public sealed class TileAtmosphere : IGasMixtureHolder [Access(typeof(AtmosphereSystem), Other = AccessPermissions.ReadExecute)] // FIXME Friends public GasMixture? Air { get; set; } + /// + /// Like Air, but a copy stored each atmos tick before tile processing takes place. This lets us update Air + /// in-place without affecting the results based on update order. + /// + [ViewVariables] + public GasMixture? AirArchived; + [DataField("lastShare")] public float LastShare; - [ViewVariables] - public readonly float[] MolesArchived = new float[Atmospherics.AdjustedNumberOfGases]; - GasMixture IGasMixtureHolder.Air { get => Air ?? new GasMixture(Atmospherics.CellVolume){ Temperature = Temperature }; @@ -139,6 +140,7 @@ public TileAtmosphere(EntityUid gridIndex, Vector2i gridIndices, GasMixture? mix GridIndex = gridIndex; GridIndices = gridIndices; Air = mixture; + AirArchived = Air != null ? Air.Clone() : null; Space = space; if(immutable) @@ -153,7 +155,7 @@ public TileAtmosphere(TileAtmosphere other) NoGridTile = other.NoGridTile; MapAtmosphere = other.MapAtmosphere; Air = other.Air?.Clone(); - Array.Copy(other.MolesArchived, MolesArchived, MolesArchived.Length); + AirArchived = Air != null ? Air.Clone() : null; } public TileAtmosphere() diff --git a/Content.Server/Bed/Cryostorage/CryostorageSystem.cs b/Content.Server/Bed/Cryostorage/CryostorageSystem.cs index cd4aa4a0981..345f51783ca 100644 --- a/Content.Server/Bed/Cryostorage/CryostorageSystem.cs +++ b/Content.Server/Bed/Cryostorage/CryostorageSystem.cs @@ -239,7 +239,7 @@ public void HandleEnterCryostorage(Entity ent, Ne Loc.GetString( "earlyleave-cryo-announcement", ("character", name), - ("entity", ent.Owner), + ("entity", ent.Owner), // gender things for supporting downstreams with other languages ("job", CultureInfo.CurrentCulture.TextInfo.ToTitleCase(jobName)) ), Loc.GetString("earlyleave-cryo-sender"), playDefaultSound: false diff --git a/Content.Server/Body/Systems/BloodstreamSystem.cs b/Content.Server/Body/Systems/BloodstreamSystem.cs index 18790e7326b..198123cc5fd 100644 --- a/Content.Server/Body/Systems/BloodstreamSystem.cs +++ b/Content.Server/Body/Systems/BloodstreamSystem.cs @@ -472,7 +472,7 @@ public void ChangeBloodReagent(EntityUid uid, string reagent, BloodstreamCompone return; } - var currentVolume = bloodSolution.RemoveReagent(component.BloodReagent, bloodSolution.Volume); + var currentVolume = bloodSolution.RemoveReagent(component.BloodReagent, bloodSolution.Volume, ignoreReagentData: true); component.BloodReagent = reagent; diff --git a/Content.Server/Body/Systems/LungSystem.cs b/Content.Server/Body/Systems/LungSystem.cs index 901d61f8fc8..859618ae1a2 100644 --- a/Content.Server/Body/Systems/LungSystem.cs +++ b/Content.Server/Body/Systems/LungSystem.cs @@ -14,7 +14,6 @@ public sealed class LungSystem : EntitySystem [Dependency] private readonly AtmosphereSystem _atmos = default!; [Dependency] private readonly InternalsSystem _internals = default!; [Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!; - [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; public static string LungSolutionName = "Lung"; @@ -29,7 +28,7 @@ public override void Initialize() private void OnGotUnequipped(Entity ent, ref GotUnequippedEvent args) { - _atmosphereSystem.DisconnectInternals(ent); + _atmos.DisconnectInternals(ent); } private void OnGotEquipped(Entity ent, ref GotEquippedEvent args) @@ -93,7 +92,7 @@ private void GasToReagent(GasMixture gas, Solution solution) if (moles <= 0) continue; - var reagent = _atmosphereSystem.GasReagents[i]; + var reagent = _atmos.GasReagents[i]; if (reagent is null) continue; diff --git a/Content.Server/Botany/Components/PlantHolderComponent.cs b/Content.Server/Botany/Components/PlantHolderComponent.cs index 8218bead72c..f0661e4a301 100644 --- a/Content.Server/Botany/Components/PlantHolderComponent.cs +++ b/Content.Server/Botany/Components/PlantHolderComponent.cs @@ -1,5 +1,6 @@ using Content.Shared.Chemistry.Components; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; +using Robust.Shared.Audio; namespace Content.Server.Botany.Components; @@ -23,6 +24,9 @@ public sealed partial class PlantHolderComponent : Component [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] public TimeSpan LastCycle = TimeSpan.Zero; + [DataField] + public SoundSpecifier? WateringSound; + [DataField] public bool UpdateSpriteAfterUpdate; diff --git a/Content.Server/Botany/Systems/MutationSystem.cs b/Content.Server/Botany/Systems/MutationSystem.cs index 07a24d19f6b..37b68d9475f 100644 --- a/Content.Server/Botany/Systems/MutationSystem.cs +++ b/Content.Server/Botany/Systems/MutationSystem.cs @@ -27,7 +27,7 @@ public void CheckRandomMutations(EntityUid plantHolder, ref SeedData seed, float { foreach (var mutation in _randomMutations.mutations) { - if (Random(mutation.BaseOdds * severity)) + if (Random(Math.Min(mutation.BaseOdds * severity, 1.0f))) { if (mutation.AppliesToPlant) { diff --git a/Content.Server/Botany/Systems/PlantHolderSystem.cs b/Content.Server/Botany/Systems/PlantHolderSystem.cs index 0fdca029b79..34d6a75bf25 100644 --- a/Content.Server/Botany/Systems/PlantHolderSystem.cs +++ b/Content.Server/Botany/Systems/PlantHolderSystem.cs @@ -1,6 +1,5 @@ using Content.Server.Atmos.EntitySystems; using Content.Server.Botany.Components; -using Content.Server.Fluids.Components; using Content.Server.Kitchen.Components; using Content.Server.Popups; using Content.Shared.Chemistry.EntitySystems; @@ -18,7 +17,6 @@ using Content.Shared.Random; using Content.Shared.Tag; using Robust.Server.GameObjects; -using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Player; using Robust.Shared.Prototypes; @@ -37,7 +35,6 @@ public sealed class PlantHolderSystem : EntitySystem [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; - [Dependency] private readonly SharedPointLightSystem _pointLight = default!; [Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!; [Dependency] private readonly TagSystem _tagSystem = default!; [Dependency] private readonly RandomHelperSystem _randomHelper = default!; @@ -53,6 +50,7 @@ public override void Initialize() SubscribeLocalEvent(OnExamine); SubscribeLocalEvent(OnInteractUsing); SubscribeLocalEvent(OnInteractHand); + SubscribeLocalEvent(OnSolutionTransferred); } public override void Update(float frameTime) @@ -158,6 +156,7 @@ private void OnInteractUsing(Entity entity, ref InteractUs if (!_botany.TryGetSeed(seeds, out var seed)) return; + args.Handled = true; var name = Loc.GetString(seed.Name); var noun = Loc.GetString(seed.Noun); _popup.PopupCursor(Loc.GetString("plant-holder-component-plant-success-message", @@ -185,6 +184,7 @@ private void OnInteractUsing(Entity entity, ref InteractUs return; } + args.Handled = true; _popup.PopupCursor(Loc.GetString("plant-holder-component-already-seeded-message", ("name", Comp(uid).EntityName)), args.User, PopupType.Medium); return; @@ -192,6 +192,7 @@ private void OnInteractUsing(Entity entity, ref InteractUs if (_tagSystem.HasTag(args.Used, "Hoe")) { + args.Handled = true; if (component.WeedLevel > 0) { _popup.PopupCursor(Loc.GetString("plant-holder-component-remove-weeds-message", @@ -211,6 +212,7 @@ private void OnInteractUsing(Entity entity, ref InteractUs if (HasComp(args.Used)) { + args.Handled = true; if (component.Seed != null) { _popup.PopupCursor(Loc.GetString("plant-holder-component-remove-plant-message", @@ -228,39 +230,9 @@ private void OnInteractUsing(Entity entity, ref InteractUs return; } - if (_solutionContainerSystem.TryGetDrainableSolution(args.Used, out var solution, out _) - && _solutionContainerSystem.ResolveSolution(uid, component.SoilSolutionName, ref component.SoilSolution) - && TryComp(args.Used, out SprayComponent? spray)) - { - var amount = FixedPoint2.New(1); - - var targetEntity = uid; - var solutionEntity = args.Used; - - _audio.PlayPvs(spray.SpraySound, args.Used, AudioParams.Default.WithVariation(0.125f)); - - var split = _solutionContainerSystem.Drain(solutionEntity, solution.Value, amount); - - if (split.Volume == 0) - { - _popup.PopupCursor(Loc.GetString("plant-holder-component-no-plant-message", - ("owner", args.Used)), args.User); - return; - } - - _popup.PopupCursor(Loc.GetString("plant-holder-component-spray-message", - ("owner", uid), - ("amount", split.Volume)), args.User, PopupType.Medium); - - _solutionContainerSystem.TryAddSolution(component.SoilSolution.Value, split); - - ForceUpdateByExternalCause(uid, component); - - return; - } - if (_tagSystem.HasTag(args.Used, "PlantSampleTaker")) { + args.Handled = true; if (component.Seed == null) { _popup.PopupCursor(Loc.GetString("plant-holder-component-nothing-to-sample-message"), args.User); @@ -316,10 +288,15 @@ private void OnInteractUsing(Entity entity, ref InteractUs } if (HasComp(args.Used)) + { + args.Handled = true; DoHarvest(uid, args.User, component); + return; + } if (TryComp(args.Used, out var produce)) { + args.Handled = true; _popup.PopupCursor(Loc.GetString("plant-holder-component-compost-message", ("owner", uid), ("usingItem", args.Used)), args.User, PopupType.Medium); @@ -351,6 +328,10 @@ private void OnInteractUsing(Entity entity, ref InteractUs } } + private void OnSolutionTransferred(Entity ent, ref SolutionTransferredEvent args) + { + _audio.PlayPvs(ent.Comp.WateringSound, ent.Owner); + } private void OnInteractHand(Entity entity, ref InteractHandEvent args) { DoHarvest(entity, args.User, entity.Comp); diff --git a/Content.Server/Cargo/Components/PriceGunComponent.cs b/Content.Server/Cargo/Components/PriceGunComponent.cs deleted file mode 100644 index 7207beae999..00000000000 --- a/Content.Server/Cargo/Components/PriceGunComponent.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Content.Server.Cargo.Components; - -/// -/// This is used for the price gun, which calculates the price of any object it appraises. -/// -[RegisterComponent] -public sealed partial class PriceGunComponent : Component -{ - -} diff --git a/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs b/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs index 37d7015fd9f..373e8e243ba 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs @@ -420,6 +420,13 @@ public bool TryAddBounty(EntityUid uid, CargoBountyPrototype bounty, StationCarg return false; _nameIdentifier.GenerateUniqueName(uid, BountyNameIdentifierGroup, out var randomVal); + var newBounty = new CargoBountyData(bounty, randomVal); + // This bounty id already exists! Probably because NameIdentifierSystem ran out of ids. + if (component.Bounties.Any(b => b.Id == newBounty.Id)) + { + Log.Error("Failed to add bounty {ID} because another one with the same ID already existed!", newBounty.Id); + return false; + } component.Bounties.Add(new CargoBountyData(bounty, randomVal)); _adminLogger.Add(LogType.Action, LogImpact.Low, $"Added bounty \"{bounty.ID}\" (id:{component.TotalBounties}) to station {ToPrettyString(uid)}"); component.TotalBounties++; diff --git a/Content.Server/Cargo/Systems/CargoSystem.Orders.cs b/Content.Server/Cargo/Systems/CargoSystem.Orders.cs index 6c519c9fd4a..69a276302f9 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Orders.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Orders.cs @@ -85,9 +85,11 @@ private void UpdateConsole(float frameTime) { _timer -= Delay; - foreach (var account in EntityQuery()) + var stationQuery = EntityQueryEnumerator(); + while (stationQuery.MoveNext(out var uid, out var bank)) { - account.Balance += account.IncreasePerSecond * Delay; + var balanceToAdd = bank.IncreasePerSecond * Delay; + UpdateBankAccount(uid, bank, balanceToAdd); } var query = EntityQueryEnumerator(); @@ -213,7 +215,7 @@ private void OnApproveOrderMessage(EntityUid uid, CargoOrderConsoleComponent com $"{ToPrettyString(player):user} approved order [orderId:{order.OrderId}, quantity:{order.OrderQuantity}, product:{order.ProductId}, requester:{order.Requester}, reason:{order.Reason}] with balance at {bank.Balance}"); orderDatabase.Orders.Remove(order); - DeductFunds(bank, cost); + UpdateBankAccount(station.Value, bank, -cost); UpdateOrders(station.Value); } @@ -538,11 +540,6 @@ private bool FulfillOrder(CargoOrderData order, EntityCoordinates spawn, string? } - private void DeductFunds(StationBankAccountComponent component, int amount) - { - component.Balance = Math.Max(0, component.Balance - amount); - } - #region Station private bool TryGetOrderDatabase([NotNullWhen(true)] EntityUid? stationUid, [MaybeNullWhen(false)] out StationCargoOrderDatabaseComponent dbComp) diff --git a/Content.Server/Cargo/Systems/PriceGunSystem.cs b/Content.Server/Cargo/Systems/PriceGunSystem.cs index 19fe07bd253..94f9f9cba9e 100644 --- a/Content.Server/Cargo/Systems/PriceGunSystem.cs +++ b/Content.Server/Cargo/Systems/PriceGunSystem.cs @@ -1,73 +1,34 @@ -using Content.Server.Cargo.Components; using Content.Server.Popups; using Content.Shared.IdentityManagement; -using Content.Shared.Interaction; using Content.Shared.Timing; -using Content.Shared.Verbs; +using Content.Shared.Cargo.Systems; namespace Content.Server.Cargo.Systems; -/// -/// This handles... -/// -public sealed class PriceGunSystem : EntitySystem +public sealed class PriceGunSystem : SharedPriceGunSystem { [Dependency] private readonly UseDelaySystem _useDelay = default!; [Dependency] private readonly PricingSystem _pricingSystem = default!; [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly CargoSystem _bountySystem = default!; - /// - public override void Initialize() + protected override bool GetPriceOrBounty(EntityUid priceGunUid, EntityUid target, EntityUid user) { - SubscribeLocalEvent(OnAfterInteract); - SubscribeLocalEvent>(OnUtilityVerb); - } - - private void OnUtilityVerb(EntityUid uid, PriceGunComponent component, GetVerbsEvent args) - { - if (!args.CanAccess || !args.CanInteract || args.Using == null) - return; - - if (!TryComp(uid, out UseDelayComponent? useDelay) || _useDelay.IsDelayed((uid, useDelay))) - return; - - var price = _pricingSystem.GetPrice(args.Target); - - var verb = new UtilityVerb() - { - Act = () => - { - _popupSystem.PopupEntity(Loc.GetString("price-gun-pricing-result", ("object", Identity.Entity(args.Target, EntityManager)), ("price", $"{price:F2}")), args.User, args.User); - _useDelay.TryResetDelay((uid, useDelay)); - }, - Text = Loc.GetString("price-gun-verb-text"), - Message = Loc.GetString("price-gun-verb-message", ("object", Identity.Entity(args.Target, EntityManager))) - }; - - args.Verbs.Add(verb); - } - - private void OnAfterInteract(EntityUid uid, PriceGunComponent component, AfterInteractEvent args) - { - if (!args.CanReach || args.Target == null || args.Handled) - return; - - if (!TryComp(uid, out UseDelayComponent? useDelay) || _useDelay.IsDelayed((uid, useDelay))) - return; + if (!TryComp(priceGunUid, out UseDelayComponent? useDelay) || _useDelay.IsDelayed((priceGunUid, useDelay))) + return false; // Check if we're scanning a bounty crate - if (_bountySystem.IsBountyComplete(args.Target.Value, out _)) + if (_bountySystem.IsBountyComplete(target, out _)) { - _popupSystem.PopupEntity(Loc.GetString("price-gun-bounty-complete"), args.User, args.User); + _popupSystem.PopupEntity(Loc.GetString("price-gun-bounty-complete"), user, user); } else // Otherwise appraise the price { - double price = _pricingSystem.GetPrice(args.Target.Value); - _popupSystem.PopupEntity(Loc.GetString("price-gun-pricing-result", ("object", Identity.Entity(args.Target.Value, EntityManager)), ("price", $"{price:F2}")), args.User, args.User); + var price = _pricingSystem.GetPrice(target); + _popupSystem.PopupEntity(Loc.GetString("price-gun-pricing-result", ("object", Identity.Entity(target, EntityManager)), ("price", $"{price:F2}")), user, user); } - _useDelay.TryResetDelay((uid, useDelay)); - args.Handled = true; + _useDelay.TryResetDelay((priceGunUid, useDelay)); + return true; } } diff --git a/Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeComponent.cs b/Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeComponent.cs new file mode 100644 index 00000000000..fd616a1c803 --- /dev/null +++ b/Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeComponent.cs @@ -0,0 +1,9 @@ +using Content.Shared.CartridgeLoader.Cartridges; +using Content.Shared.GPS; + +namespace Content.Server.CartridgeLoader.Cartridges; + +[RegisterComponent] +public sealed partial class AstroNavCartridgeComponent : Component +{ +} diff --git a/Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeSystem.cs b/Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeSystem.cs new file mode 100644 index 00000000000..60d14789fa0 --- /dev/null +++ b/Content.Server/CartridgeLoader/Cartridges/AstroNavCartridgeSystem.cs @@ -0,0 +1,32 @@ +using Content.Shared.CartridgeLoader; +using Content.Shared.CartridgeLoader.Cartridges; +using Content.Shared.GPS.Components; + +namespace Content.Server.CartridgeLoader.Cartridges; + +public sealed class AstroNavCartridgeSystem : EntitySystem +{ + [Dependency] private readonly CartridgeLoaderSystem _cartridgeLoaderSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnCartridgeAdded); + SubscribeLocalEvent(OnCartridgeRemoved); + } + + private void OnCartridgeAdded(Entity ent, ref CartridgeAddedEvent args) + { + EnsureComp(args.Loader); + } + + private void OnCartridgeRemoved(Entity ent, ref CartridgeRemovedEvent args) + { + // only remove when the program itself is removed + if (!_cartridgeLoaderSystem.HasProgram(args.Loader)) + { + RemComp(args.Loader); + } + } +} diff --git a/Content.Server/CartridgeLoader/Cartridges/MedTekCartridgeComponent.cs b/Content.Server/CartridgeLoader/Cartridges/MedTekCartridgeComponent.cs new file mode 100644 index 00000000000..1a49b4d1f77 --- /dev/null +++ b/Content.Server/CartridgeLoader/Cartridges/MedTekCartridgeComponent.cs @@ -0,0 +1,6 @@ +namespace Content.Server.CartridgeLoader.Cartridges; + +[RegisterComponent] +public sealed partial class MedTekCartridgeComponent : Component +{ +} diff --git a/Content.Server/CartridgeLoader/Cartridges/MedTekCartridgeSystem.cs b/Content.Server/CartridgeLoader/Cartridges/MedTekCartridgeSystem.cs new file mode 100644 index 00000000000..4d1b71dad04 --- /dev/null +++ b/Content.Server/CartridgeLoader/Cartridges/MedTekCartridgeSystem.cs @@ -0,0 +1,31 @@ +using Content.Server.Medical.Components; +using Content.Shared.CartridgeLoader; + +namespace Content.Server.CartridgeLoader.Cartridges; + +public sealed class MedTekCartridgeSystem : EntitySystem +{ + [Dependency] private readonly CartridgeLoaderSystem _cartridgeLoaderSystem = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnCartridgeAdded); + SubscribeLocalEvent(OnCartridgeRemoved); + } + + private void OnCartridgeAdded(Entity ent, ref CartridgeAddedEvent args) + { + var healthAnalyzer = EnsureComp(args.Loader); + } + + private void OnCartridgeRemoved(Entity ent, ref CartridgeRemovedEvent args) + { + // only remove when the program itself is removed + if (!_cartridgeLoaderSystem.HasProgram(args.Loader)) + { + RemComp(args.Loader); + } + } +} diff --git a/Content.Server/Chat/Managers/ChatManager.RateLimit.cs b/Content.Server/Chat/Managers/ChatManager.RateLimit.cs index 45e7d2e20d0..86bd3619e5e 100644 --- a/Content.Server/Chat/Managers/ChatManager.RateLimit.cs +++ b/Content.Server/Chat/Managers/ChatManager.RateLimit.cs @@ -1,6 +1,6 @@ -using Content.Server.Players.RateLimiting; using Content.Shared.CCVar; using Content.Shared.Database; +using Content.Shared.Players.RateLimiting; using Robust.Shared.Player; namespace Content.Server.Chat.Managers; @@ -12,15 +12,13 @@ internal sealed partial class ChatManager private void RegisterRateLimits() { _rateLimitManager.Register(RateLimitKey, - new RateLimitRegistration - { - CVarLimitPeriodLength = CCVars.ChatRateLimitPeriod, - CVarLimitCount = CCVars.ChatRateLimitCount, - CVarAdminAnnounceDelay = CCVars.ChatRateLimitAnnounceAdminsDelay, - PlayerLimitedAction = RateLimitPlayerLimited, - AdminAnnounceAction = RateLimitAlertAdmins, - AdminLogType = LogType.ChatRateLimited, - }); + new RateLimitRegistration(CCVars.ChatRateLimitPeriod, + CCVars.ChatRateLimitCount, + RateLimitPlayerLimited, + CCVars.ChatRateLimitAnnounceAdminsDelay, + RateLimitAlertAdmins, + LogType.ChatRateLimited) + ); } private void RateLimitPlayerLimited(ICommonSession player) @@ -30,8 +28,7 @@ private void RateLimitPlayerLimited(ICommonSession player) private void RateLimitAlertAdmins(ICommonSession player) { - if (_configurationManager.GetCVar(CCVars.ChatRateLimitAnnounceAdmins)) - SendAdminAlert(Loc.GetString("chat-manager-rate-limit-admin-announcement", ("player", player.Name))); + // SendAdminAlert(Loc.GetString("chat-manager-rate-limit-admin-announcement", ("player", player.Name))); // DeltaV - I DON'T CARE } public RateLimitStatus HandleRateLimit(ICommonSession player) diff --git a/Content.Server/Chat/Managers/ChatManager.cs b/Content.Server/Chat/Managers/ChatManager.cs index 02f718daef0..75c46abe37b 100644 --- a/Content.Server/Chat/Managers/ChatManager.cs +++ b/Content.Server/Chat/Managers/ChatManager.cs @@ -12,6 +12,7 @@ using Content.Shared.Chat; using Content.Shared.Database; using Content.Shared.Mind; +using Content.Shared.Players.RateLimiting; using Robust.Shared.Configuration; using Robust.Shared.Network; using Robust.Shared.Player; diff --git a/Content.Server/Chat/Managers/ChatSanitizationManager.cs b/Content.Server/Chat/Managers/ChatSanitizationManager.cs index 634d8cdefab..0c78e45f86e 100644 --- a/Content.Server/Chat/Managers/ChatSanitizationManager.cs +++ b/Content.Server/Chat/Managers/ChatSanitizationManager.cs @@ -1,17 +1,19 @@ using System.Diagnostics.CodeAnalysis; -using System.Globalization; +using System.Text.RegularExpressions; using Content.Shared.CCVar; using Robust.Shared.Configuration; namespace Content.Server.Chat.Managers; +/// +/// Sanitizes messages! +/// It currently ony removes the shorthands for emotes (like "lol" or "^-^") from a chat message and returns the last +/// emote in their message +/// public sealed class ChatSanitizationManager : IChatSanitizationManager { - [Dependency] private readonly IConfigurationManager _configurationManager = default!; - - private static readonly Dictionary SmileyToEmote = new() + private static readonly Dictionary ShorthandToEmote = new() { - // I could've done this with regex, but felt it wasn't the right idea. { ":)", "chatsan-smiles" }, { ":]", "chatsan-smiles" }, { "=)", "chatsan-smiles" }, @@ -33,7 +35,7 @@ public sealed class ChatSanitizationManager : IChatSanitizationManager { ":D", "chatsan-smiles-widely" }, { "D:", "chatsan-frowns-deeply" }, { ":O", "chatsan-surprised" }, - { ":3", "chatsan-smiles" }, //nope + { ":3", "chatsan-smiles" }, { ":S", "chatsan-uncertain" }, { ":>", "chatsan-grins" }, { ":<", "chatsan-pouts" }, @@ -75,7 +77,7 @@ public sealed class ChatSanitizationManager : IChatSanitizationManager { "kek", "chatsan-laughs" }, { "rofl", "chatsan-laughs" }, { "o7", "chatsan-salutes" }, - { ";_;7", "chatsan-tearfully-salutes"}, + { ";_;7", "chatsan-tearfully-salutes" }, { "idk", "chatsan-shrugs" }, { ";)", "chatsan-winks" }, { ";]", "chatsan-winks" }, @@ -88,9 +90,12 @@ public sealed class ChatSanitizationManager : IChatSanitizationManager { "(':", "chatsan-tearfully-smiles" }, { "[':", "chatsan-tearfully-smiles" }, { "('=", "chatsan-tearfully-smiles" }, - { "['=", "chatsan-tearfully-smiles" }, + { "['=", "chatsan-tearfully-smiles" } }; + [Dependency] private readonly IConfigurationManager _configurationManager = default!; + [Dependency] private readonly ILocalizationManager _loc = default!; + private bool _doSanitize; public void Initialize() @@ -98,29 +103,60 @@ public void Initialize() _configurationManager.OnValueChanged(CCVars.ChatSanitizerEnabled, x => _doSanitize = x, true); } - public bool TrySanitizeOutSmilies(string input, EntityUid speaker, out string sanitized, [NotNullWhen(true)] out string? emote) + /// + /// Remove the shorthands from the message, returning the last one found as the emote + /// + /// The pre-sanitized message + /// The speaker + /// The sanitized message with shorthands removed + /// The localized emote + /// True if emote has been sanitized out + public bool TrySanitizeEmoteShorthands(string message, + EntityUid speaker, + out string sanitized, + [NotNullWhen(true)] out string? emote) { + emote = null; + sanitized = message; + if (!_doSanitize) - { - sanitized = input; - emote = null; return false; - } - input = input.TrimEnd(); + // -1 is just a canary for nothing found yet + var lastEmoteIndex = -1; - foreach (var (smiley, replacement) in SmileyToEmote) + foreach (var (shorthand, emoteKey) in ShorthandToEmote) { - if (input.EndsWith(smiley, true, CultureInfo.InvariantCulture)) + // We have to escape it because shorthands like ":)" or "-_-" would break the regex otherwise. + var escaped = Regex.Escape(shorthand); + + // So there are 2 cases: + // - If there is whitespace before it and after it is either punctuation, whitespace, or the end of the line + // Delete the word and the whitespace before + // - If it is at the start of the string and is followed by punctuation, whitespace, or the end of the line + // Delete the word and the punctuation if it exists. + var pattern = + $@"\s{escaped}(?=\p{{P}}|\s|$)|^{escaped}(?:\p{{P}}|(?=\s|$))"; + + var r = new Regex(pattern, RegexOptions.RightToLeft | RegexOptions.IgnoreCase); + + // We're using sanitized as the original message until the end so that we can make sure the indices of + // the emotes are accurate. + var lastMatch = r.Match(sanitized); + + if (!lastMatch.Success) + continue; + + if (lastMatch.Index > lastEmoteIndex) { - sanitized = input.Remove(input.Length - smiley.Length).TrimEnd(); - emote = Loc.GetString(replacement, ("ent", speaker)); - return true; + lastEmoteIndex = lastMatch.Index; + emote = _loc.GetString(emoteKey, ("ent", speaker)); } + + message = r.Replace(message, string.Empty); } - sanitized = input; - emote = null; - return false; + sanitized = message.Trim(); + return emote is not null; } } diff --git a/Content.Server/Chat/Managers/IChatManager.cs b/Content.Server/Chat/Managers/IChatManager.cs index 76fa91d8474..23211c28fa0 100644 --- a/Content.Server/Chat/Managers/IChatManager.cs +++ b/Content.Server/Chat/Managers/IChatManager.cs @@ -1,17 +1,14 @@ using System.Diagnostics.CodeAnalysis; -using Content.Server.Players; -using Content.Server.Players.RateLimiting; using Content.Shared.Administration; using Content.Shared.Chat; +using Content.Shared.Players.RateLimiting; using Robust.Shared.Network; using Robust.Shared.Player; namespace Content.Server.Chat.Managers { - public interface IChatManager + public interface IChatManager : ISharedChatManager { - void Initialize(); - /// /// Dispatch a server announcement to every connected player. /// @@ -26,8 +23,6 @@ public interface IChatManager void SendHookOOC(string sender, string message); void SendAdminAnnouncement(string message, AdminFlags? flagBlacklist = null, AdminFlags? flagWhitelist = null); void SendAdminAnnouncementMessage(ICommonSession player, string message, bool suppressLog = true); - void SendAdminAlert(string message); - void SendAdminAlert(EntityUid player, string message); void ChatMessageToOne(ChatChannel channel, string message, string wrappedMessage, EntityUid source, bool hideChat, INetChannel client, Color? colorOverride = null, bool recordReplay = false, string? audioPath = null, float audioVolume = 0, NetUserId? author = null); diff --git a/Content.Server/Chat/Managers/IChatSanitizationManager.cs b/Content.Server/Chat/Managers/IChatSanitizationManager.cs index c067cf02ee7..ac85d4b4a7a 100644 --- a/Content.Server/Chat/Managers/IChatSanitizationManager.cs +++ b/Content.Server/Chat/Managers/IChatSanitizationManager.cs @@ -6,5 +6,8 @@ public interface IChatSanitizationManager { public void Initialize(); - public bool TrySanitizeOutSmilies(string input, EntityUid speaker, out string sanitized, [NotNullWhen(true)] out string? emote); + public bool TrySanitizeEmoteShorthands(string input, + EntityUid speaker, + out string sanitized, + [NotNullWhen(true)] out string? emote); } diff --git a/Content.Server/Chat/Systems/ChatSystem.cs b/Content.Server/Chat/Systems/ChatSystem.cs index 02102d674a8..3b4eb5f8016 100644 --- a/Content.Server/Chat/Systems/ChatSystem.cs +++ b/Content.Server/Chat/Systems/ChatSystem.cs @@ -4,11 +4,11 @@ using Content.Server.Administration.Logs; using Content.Server.Administration.Managers; using Content.Server.Chat.Managers; -using Content.Server.Examine; using Content.Server.GameTicking; using Content.Server.Players.RateLimiting; using Content.Server.Speech.Components; using Content.Server.Speech.EntitySystems; +using Content.Shared.Speech.Hushing; // DeltaV using Content.Server.Nyanotrasen.Chat; using Content.Server.Speech.Components; using Content.Server.Speech.EntitySystems; @@ -21,13 +21,11 @@ using Content.Shared.Database; using Content.Shared.Examine; using Content.Shared.Ghost; -using Content.Shared.Humanoid; using Content.Shared.IdentityManagement; -using Content.Shared.Interaction; using Content.Shared.Mobs.Systems; using Content.Shared.Players; +using Content.Shared.Players.RateLimiting; using Content.Shared.Radio; -using Content.Shared.Speech; using Content.Shared.Whitelist; using Robust.Server.Player; using Robust.Shared.Audio; @@ -128,6 +126,7 @@ private void OnGameChange(GameRunLevelChangedEvent ev) _configurationManager.SetCVar(CCVars.OocEnabled, false); break; case GameRunLevel.PostRound: + case GameRunLevel.PreRoundLobby: if (!_configurationManager.GetCVar(CCVars.OocEnableDuringRound)) _configurationManager.SetCVar(CCVars.OocEnabled, true); break; @@ -223,6 +222,15 @@ public void TrySendInGameICMessage( message = message[1..]; } + // DeltaV - Hushed trait logic + // This needs to happen after prefix removal to avoid bug + if (desiredType == InGameICChatType.Speak && HasComp(source)) + { + // hushed players cannot speak on local chat so will be sent as whisper instead + desiredType = InGameICChatType.Whisper; + } + // DeltaV - End hushed trait logic + bool shouldCapitalize = (desiredType != InGameICChatType.Emote); bool shouldPunctuate = _configurationManager.GetCVar(CCVars.ChatPunctuation); // Capitalizing the word I only happens in English, so we check language here @@ -449,9 +457,9 @@ private void SendEntitySpeak( { var nameEv = new TransformSpeakerNameEvent(source, Name(source)); RaiseLocalEvent(source, nameEv); - name = nameEv.Name; + name = nameEv.VoiceName; // Check for a speech verb override - if (nameEv.SpeechVerb != null && _prototypeManager.TryIndex(nameEv.SpeechVerb, out var proto)) + if (nameEv.SpeechVerb != null && _prototypeManager.TryIndex(nameEv.SpeechVerb, out var proto)) speech = proto; } @@ -523,7 +531,7 @@ private void SendEntityWhisper( { var nameEv = new TransformSpeakerNameEvent(source, Name(source)); RaiseLocalEvent(source, nameEv); - name = nameEv.Name; + name = nameEv.VoiceName; } name = FormattedMessage.EscapeText(name); @@ -758,11 +766,12 @@ private bool CanSendInGame(string message, IConsoleShell? shell = null, ICommonS // ReSharper disable once InconsistentNaming private string SanitizeInGameICMessage(EntityUid source, string message, out string? emoteStr, bool capitalize = true, bool punctuate = false, bool capitalizeTheWordI = true) { - var newMessage = message.Trim(); - newMessage = SanitizeMessageReplaceWords(newMessage); + var newMessage = SanitizeMessageReplaceWords(message.Trim()); - // DeltaV: sanitize first - _sanitizer.TrySanitizeOutSmilies(newMessage, source, out newMessage, out emoteStr); + GetRadioKeycodePrefix(source, newMessage, out newMessage, out var prefix); + + // Sanitize it first as it might change the word order + _sanitizer.TrySanitizeEmoteShorthands(newMessage, source, out newMessage, out emoteStr); if (capitalize) newMessage = SanitizeMessageCapital(newMessage); @@ -771,7 +780,7 @@ private string SanitizeInGameICMessage(EntityUid source, string message, out str if (punctuate) newMessage = SanitizeMessagePeriod(newMessage); - return newMessage; + return prefix + newMessage; } private string SanitizeInGameOOCMessage(string message) @@ -921,20 +930,6 @@ public record ExpandICChatRecipientsEvent(EntityUid Source, float VoiceRange, Di { } -public sealed class TransformSpeakerNameEvent : EntityEventArgs -{ - public EntityUid Sender; - public string Name; - public string? SpeechVerb; - - public TransformSpeakerNameEvent(EntityUid sender, string name, string? speechVerb = null) - { - Sender = sender; - Name = name; - SpeechVerb = speechVerb; - } -} - /// /// Raised broadcast in order to transform speech.transmit /// diff --git a/Content.Server/Chemistry/Components/SolutionInjectWhileEmbeddedComponent.cs b/Content.Server/Chemistry/Components/SolutionInjectWhileEmbeddedComponent.cs new file mode 100644 index 00000000000..0f10e2a4492 --- /dev/null +++ b/Content.Server/Chemistry/Components/SolutionInjectWhileEmbeddedComponent.cs @@ -0,0 +1,24 @@ +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; + + +namespace Content.Server.Chemistry.Components; + +/// +/// Used for embeddable entities that should try to inject a +/// contained solution into a target over time while they are embbeded into. +/// +[RegisterComponent, AutoGenerateComponentPause] +public sealed partial class SolutionInjectWhileEmbeddedComponent : BaseSolutionInjectOnEventComponent { + /// + ///The time at which the injection will happen. + /// + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField] + public TimeSpan NextUpdate; + + /// + ///The delay between each injection in seconds. + /// + [DataField] + public TimeSpan UpdateInterval = TimeSpan.FromSeconds(3); +} + diff --git a/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs b/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs index d56fded024a..f15edcf0672 100644 --- a/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs @@ -2,6 +2,7 @@ using Content.Server.Body.Systems; using Content.Server.Chemistry.Components; using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Chemistry.Events; using Content.Shared.Inventory; using Content.Shared.Popups; using Content.Shared.Projectiles; @@ -29,6 +30,7 @@ public override void Initialize() SubscribeLocalEvent(HandleProjectileHit); SubscribeLocalEvent(HandleEmbed); SubscribeLocalEvent(HandleMeleeHit); + SubscribeLocalEvent(OnInjectOverTime); } private void HandleProjectileHit(Entity entity, ref ProjectileHitEvent args) @@ -49,6 +51,11 @@ private void HandleMeleeHit(Entity entity, ref M TryInjectTargets((entity.Owner, entity.Comp), args.HitEntities, args.User); } + private void OnInjectOverTime(Entity entity, ref InjectOverTimeEvent args) + { + DoInjection((entity.Owner, entity.Comp), args.EmbeddedIntoUid); + } + private void DoInjection(Entity injectorEntity, EntityUid target, EntityUid? source = null) { TryInjectTargets(injectorEntity, [target], source); diff --git a/Content.Server/Chemistry/EntitySystems/SolutionInjectWhileEmbeddedSystem.cs b/Content.Server/Chemistry/EntitySystems/SolutionInjectWhileEmbeddedSystem.cs new file mode 100644 index 00000000000..2baeba9da15 --- /dev/null +++ b/Content.Server/Chemistry/EntitySystems/SolutionInjectWhileEmbeddedSystem.cs @@ -0,0 +1,60 @@ +using Content.Server.Body.Components; +using Content.Server.Body.Systems; +using Content.Server.Chemistry.Components; +using Content.Shared.Chemistry.EntitySystems; +using Content.Shared.Chemistry.Events; +using Content.Shared.Inventory; +using Content.Shared.Popups; +using Content.Shared.Projectiles; +using Content.Shared.Tag; +using Content.Shared.Weapons.Melee.Events; +using Robust.Shared.Collections; +using Robust.Shared.Timing; + +namespace Content.Server.Chemistry.EntitySystems; + +/// +/// System for handling injecting into an entity while a projectile is embedded. +/// +public sealed class SolutionInjectWhileEmbeddedSystem : EntitySystem +{ + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly BloodstreamSystem _bloodstream = default!; + [Dependency] private readonly InventorySystem _inventory = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!; + [Dependency] private readonly TagSystem _tag = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMapInit); + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + ent.Comp.NextUpdate = _gameTiming.CurTime + ent.Comp.UpdateInterval; + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var injectComponent, out var projectileComponent)) + { + if (_gameTiming.CurTime < injectComponent.NextUpdate) + continue; + + injectComponent.NextUpdate += injectComponent.UpdateInterval; + + if(projectileComponent.EmbeddedIntoUid == null) + continue; + + var ev = new InjectOverTimeEvent(projectileComponent.EmbeddedIntoUid.Value); + RaiseLocalEvent(uid, ref ev); + + } + } +} diff --git a/Content.Server/Cloning/CloningSystem.cs b/Content.Server/Cloning/CloningSystem.cs index ac33250474a..0eafad35862 100644 --- a/Content.Server/Cloning/CloningSystem.cs +++ b/Content.Server/Cloning/CloningSystem.cs @@ -271,7 +271,7 @@ public bool TryCloning(EntityUid uid, EntityUid bodyToClone, Entity public sealed partial class ConnectionManager : IConnectionManager { - [Dependency] private readonly IServerDbManager _dbManager = default!; [Dependency] private readonly IPlayerManager _plyMgr = default!; [Dependency] private readonly IServerNetManager _netMgr = default!; [Dependency] private readonly IServerDbManager _db = default!; @@ -209,7 +208,7 @@ session.Status is SessionStatus.Connected or SessionStatus.InGame return null; } - var adminData = await _dbManager.GetAdminDataForAsync(e.UserId); + var adminData = await _db.GetAdminDataForAsync(e.UserId); if (_cfg.GetCVar(CCVars.PanicBunkerEnabled) && adminData == null) { @@ -217,7 +216,7 @@ session.Status is SessionStatus.Connected or SessionStatus.InGame var customReason = _cfg.GetCVar(CCVars.PanicBunkerCustomReason); var minMinutesAge = _cfg.GetCVar(CCVars.PanicBunkerMinAccountAge); - var record = await _dbManager.GetPlayerRecordByUserId(userId); + var record = await _db.GetPlayerRecordByUserId(userId); var validAccountAge = record != null && record.FirstSeenTime.CompareTo(DateTimeOffset.UtcNow - TimeSpan.FromMinutes(minMinutesAge)) <= 0; var bypassAllowed = _cfg.GetCVar(CCVars.BypassBunkerWhitelist) && await _db.GetWhitelistStatusAsync(userId); @@ -344,7 +343,7 @@ session.Status is SessionStatus.Connected or SessionStatus.InGame var maxPlaytimeMinutes = _cfg.GetCVar(CCVars.BabyJailMaxOverallMinutes); // Wait some time to lookup data - var record = await _dbManager.GetPlayerRecordByUserId(userId); + var record = await _db.GetPlayerRecordByUserId(userId); // No player record = new account or the DB is having a skill issue if (record == null) diff --git a/Content.Server/Construction/Completions/AttemptElectrocute.cs b/Content.Server/Construction/Completions/AttemptElectrocute.cs index 05f0977b662..5c97d5e90fe 100644 --- a/Content.Server/Construction/Completions/AttemptElectrocute.cs +++ b/Content.Server/Construction/Completions/AttemptElectrocute.cs @@ -1,4 +1,5 @@ using Content.Server.Electrocution; +using Content.Shared.Electrocution; using Content.Shared.Construction; namespace Content.Server.Construction.Completions; diff --git a/Content.Server/Database/ServerDbBase.cs b/Content.Server/Database/ServerDbBase.cs index 3c59c36f77e..c85b774e381 100644 --- a/Content.Server/Database/ServerDbBase.cs +++ b/Content.Server/Database/ServerDbBase.cs @@ -52,7 +52,7 @@ public ServerDbBase(ISawmill opsLog) .ThenInclude(h => h.Loadouts) .ThenInclude(l => l.Groups) .ThenInclude(group => group.Loadouts) - .AsSingleQuery() + .AsSplitQuery() .SingleOrDefaultAsync(p => p.UserId == userId.UserId, cancel); if (prefs is null) @@ -875,10 +875,41 @@ public async Task UpdateAdminRankAsync(AdminRank rank, CancellationToken cancel) public async Task AddAdminLogs(List logs) { + const int maxRetryAttempts = 5; + var initialRetryDelay = TimeSpan.FromSeconds(5); + DebugTools.Assert(logs.All(x => x.RoundId > 0), "Adding logs with invalid round ids."); - await using var db = await GetDb(); - db.DbContext.AdminLog.AddRange(logs); - await db.DbContext.SaveChangesAsync(); + + var attempt = 0; + var retryDelay = initialRetryDelay; + + while (attempt < maxRetryAttempts) + { + try + { + await using var db = await GetDb(); + db.DbContext.AdminLog.AddRange(logs); + await db.DbContext.SaveChangesAsync(); + _opsLog.Debug($"Successfully saved {logs.Count} admin logs."); + break; + } + catch (Exception ex) + { + attempt += 1; + _opsLog.Error($"Attempt {attempt} failed to save logs: {ex}"); + + if (attempt >= maxRetryAttempts) + { + _opsLog.Error($"Max retry attempts reached. Failed to save {logs.Count} admin logs."); + return; + } + + _opsLog.Warning($"Retrying in {retryDelay.TotalSeconds} seconds..."); + await Task.Delay(retryDelay); + + retryDelay *= 2; + } + } } protected abstract IQueryable StartAdminLogsQuery(ServerDbContext db, LogFilter? filter = null); diff --git a/Content.Server/Database/ServerDbPostgres.Notifications.cs b/Content.Server/Database/ServerDbPostgres.Notifications.cs index fe358923bf0..69cf2c7d775 100644 --- a/Content.Server/Database/ServerDbPostgres.Notifications.cs +++ b/Content.Server/Database/ServerDbPostgres.Notifications.cs @@ -97,6 +97,8 @@ private async Task NotificationListener(CancellationToken cancellationToken) _notifyLog.Error($"Error in notification listener: {e}"); } } + + _notificationConnection.Dispose(); } private void OnNotification(object _, NpgsqlNotificationEventArgs notification) @@ -116,6 +118,5 @@ public override void Shutdown() return; _notificationConnection.Notification -= OnNotification; - _notificationConnection.Dispose(); } } diff --git a/Content.Server/Decals/DecalSystem.cs b/Content.Server/Decals/DecalSystem.cs index 519f7a133e5..718475754f2 100644 --- a/Content.Server/Decals/DecalSystem.cs +++ b/Content.Server/Decals/DecalSystem.cs @@ -35,7 +35,7 @@ public sealed class DecalSystem : SharedDecalSystem [Dependency] private readonly IConfigurationManager _conf = default!; [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!; - [Dependency] private readonly MapSystem _mapSystem = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; private readonly Dictionary> _dirtyChunks = new(); private readonly Dictionary>> _previousSentChunks = new(); @@ -106,7 +106,7 @@ private void OnGridSplit(ref PostGridSplitEvent ev) return; // Transfer decals over to the new grid. - var enumerator = Comp(ev.Grid).GetAllTilesEnumerator(); + var enumerator = _mapSystem.GetAllTilesEnumerator(ev.Grid, Comp(ev.Grid)); var oldChunkCollection = oldComp.ChunkCollection.ChunkCollection; var chunkCollection = newComp.ChunkCollection.ChunkCollection; diff --git a/Content.Server/DeltaV/AACTablet/AACTabletSystem.cs b/Content.Server/DeltaV/AACTablet/AACTabletSystem.cs index d9509f4f819..daa90417a76 100644 --- a/Content.Server/DeltaV/AACTablet/AACTabletSystem.cs +++ b/Content.Server/DeltaV/AACTablet/AACTabletSystem.cs @@ -1,5 +1,5 @@ using Content.Server.Chat.Systems; -using Content.Server.VoiceMask; +using Content.Server.Speech.Components; using Content.Shared.DeltaV.AACTablet; using Content.Shared.DeltaV.QuickPhrase; using Content.Shared.IdentityManagement; @@ -36,8 +36,7 @@ private void OnSendPhrase(EntityUid uid, AACTabletComponent component, AACTablet if (!_prototypeManager.TryIndex(message.PhraseID, out var phrase)) return; - if (TryComp(uid, out VoiceMaskComponent? mask)) - mask.VoiceName = speakerName; + EnsureComp(uid).NameOverride = speakerName; _chat.TrySendInGameICMessage(uid, _loc.GetString(phrase.Text), diff --git a/Content.Server/DeltaV/Addictions/AddictionSystem.cs b/Content.Server/DeltaV/Addictions/AddictionSystem.cs new file mode 100644 index 00000000000..1df7eeecbee --- /dev/null +++ b/Content.Server/DeltaV/Addictions/AddictionSystem.cs @@ -0,0 +1,89 @@ +using Content.Shared.Dataset; +using Content.Shared.DeltaV.Addictions; +using Content.Shared.Popups; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using Robust.Shared.Timing; + +namespace Content.Server.DeltaV.Addictions; + +public sealed class AddictionSystem : SharedAddictionSystem +{ + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IGameTiming _timing = default!; + + // Define the numbers, we're not making another DeepFryerSystem.cs + // Minimum time between popups + private const int MinEffectInterval = 10; + + // Maximum time between popups + private const int MaxEffectInterval = 41; + + // The time to add after the last metabolism cycle + private const int SuppressionDuration = 10; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnInit); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var curTime = _timing.CurTime; + var query = EntityQueryEnumerator(); + + while (query.MoveNext(out var uid, out var component)) + { + // If it's suppressed, check if it's still supposed to be + if (component.Suppressed) + { + UpdateSuppressed(component); + continue; + } + + if (curTime < component.NextEffectTime) + continue; + + DoAddictionEffect(uid); + component.NextEffectTime = curTime + TimeSpan.FromSeconds(_random.Next(MinEffectInterval, MaxEffectInterval)); + } + } + + // Make sure we don't get a popup on the first update + private void OnInit(Entity ent, ref ComponentStartup args) + { + var curTime = _timing.CurTime; + ent.Comp.NextEffectTime = curTime + TimeSpan.FromSeconds(_random.Next(MinEffectInterval, MaxEffectInterval)); + } + + private void UpdateSuppressed(AddictedComponent component) + { + component.Suppressed = (_timing.CurTime < component.SuppressionEndTime); + } + + private string GetRandomPopup() + { + return Loc.GetString(_random.Pick(_prototypeManager.Index("AddictionEffects").Values)); + } + + private void DoAddictionEffect(EntityUid uid) + { + _popup.PopupEntity(GetRandomPopup(), uid, uid); + } + + // Called each time a reagent with the Addicted effect gets metabolized + protected override void UpdateTime(EntityUid uid) + { + if (!TryComp(uid, out var component)) + return; + + component.LastMetabolismTime = _timing.CurTime; + component.SuppressionEndTime = _timing.CurTime + TimeSpan.FromSeconds(SuppressionDuration); + UpdateSuppressed(component); + } +} diff --git a/Content.Server/DeltaV/Cargo/Components/StationStockMarketComponent.cs b/Content.Server/DeltaV/Cargo/Components/StationStockMarketComponent.cs new file mode 100644 index 00000000000..4ea9bd43133 --- /dev/null +++ b/Content.Server/DeltaV/Cargo/Components/StationStockMarketComponent.cs @@ -0,0 +1,71 @@ +using System.Numerics; +using Content.Server.DeltaV.Cargo.Systems; +using Content.Server.DeltaV.CartridgeLoader.Cartridges; +using Content.Shared.CartridgeLoader.Cartridges; +using Robust.Shared.Audio; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; +using Robust.Shared.Timing; + +namespace Content.Server.DeltaV.Cargo.Components; + +[RegisterComponent, AutoGenerateComponentPause] +[Access(typeof(StockMarketSystem), typeof(StockTradingCartridgeSystem))] +public sealed partial class StationStockMarketComponent : Component +{ + /// + /// The list of companies you can invest in + /// + [DataField] + public List Companies = []; + + /// + /// The list of shares owned by the station + /// + [DataField] + public Dictionary StockOwnership = new(); + + /// + /// The interval at which the stock market updates + /// + [DataField] + public TimeSpan UpdateInterval = TimeSpan.FromSeconds(600); // 10 minutes + + /// + /// The timespan of next update. + /// + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] + [AutoPausedField] + public TimeSpan NextUpdate = TimeSpan.Zero; + + /// + /// The sound to play after selling or buying stocks + /// + [DataField] + public SoundSpecifier ConfirmSound = new SoundPathSpecifier("/Audio/Effects/Cargo/ping.ogg"); + + /// + /// The sound to play if the don't have access to buy or sell stocks + /// + [DataField] + public SoundSpecifier DenySound = new SoundPathSpecifier("/Audio/Effects/Cargo/buzz_sigh.ogg"); + + // These work well as presets but can be changed in the yaml + [DataField] + public List MarketChanges = + [ + new() { Chance = 0.86f, Range = new Vector2(-0.05f, 0.05f) }, // Minor + new() { Chance = 0.10f, Range = new Vector2(-0.3f, 0.2f) }, // Moderate + new() { Chance = 0.03f, Range = new Vector2(-0.5f, 1.5f) }, // Major + new() { Chance = 0.01f, Range = new Vector2(-0.9f, 4.0f) }, // Catastrophic + ]; +} + +[DataDefinition] +public sealed partial class MarketChange +{ + [DataField(required: true)] + public float Chance; + + [DataField(required: true)] + public Vector2 Range; +} diff --git a/Content.Server/DeltaV/Cargo/StocksCommands.cs b/Content.Server/DeltaV/Cargo/StocksCommands.cs new file mode 100644 index 00000000000..dfe1776f666 --- /dev/null +++ b/Content.Server/DeltaV/Cargo/StocksCommands.cs @@ -0,0 +1,135 @@ +using Content.Server.Administration; +using Content.Server.DeltaV.Cargo.Components; +using Content.Server.DeltaV.Cargo.Systems; +using Content.Shared.Administration; +using Content.Shared.CartridgeLoader.Cartridges; +using Robust.Shared.Console; + +namespace Content.Server.DeltaV.Cargo; + +[AdminCommand(AdminFlags.Fun)] +public sealed class ChangeStocksPriceCommand : IConsoleCommand +{ + public string Command => "changestocksprice"; + public string Description => Loc.GetString("cmd-changestocksprice-desc"); + public string Help => Loc.GetString("cmd-changestocksprice-help", ("command", Command)); + + [Dependency] private readonly IEntityManager _entityManager = default!; + [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; + + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length < 2) + { + shell.WriteLine(Loc.GetString("shell-wrong-arguments-number")); + return; + } + + if (!int.TryParse(args[0], out var companyIndex)) + { + shell.WriteError(Loc.GetString("shell-argument-must-be-number")); + return; + } + + if (!float.TryParse(args[1], out var newPrice)) + { + shell.WriteError(Loc.GetString("shell-argument-must-be-number")); + return; + } + + EntityUid? targetStation = null; + if (args.Length > 2) + { + if (!EntityUid.TryParse(args[2], out var station)) + { + shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number")); + return; + } + targetStation = station; + } + + var stockMarket = _entitySystemManager.GetEntitySystem(); + var query = _entityManager.EntityQueryEnumerator(); + + while (query.MoveNext(out var uid, out var comp)) + { + // Skip if we're looking for a specific station and this isn't it + if (targetStation != null && uid != targetStation) + continue; + + if (stockMarket.TryChangeStocksPrice(uid, comp, newPrice, companyIndex)) + { + shell.WriteLine(Loc.GetString("shell-command-success")); + return; + } + + shell.WriteLine(Loc.GetString("cmd-changestocksprice-invalid-company")); + return; + } + + shell.WriteLine(targetStation != null + ? Loc.GetString("cmd-changestocksprice-invalid-station") + : Loc.GetString("cmd-changestocksprice-no-stations")); + } +} + +[AdminCommand(AdminFlags.Fun)] +public sealed class AddStocksCompanyCommand : IConsoleCommand +{ + public string Command => "addstockscompany"; + public string Description => Loc.GetString("cmd-addstockscompany-desc"); + public string Help => Loc.GetString("cmd-addstockscompany-help", ("command", Command)); + + [Dependency] private readonly IEntityManager _entityManager = default!; + [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; + + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length < 2) + { + shell.WriteLine(Loc.GetString("shell-wrong-arguments-number")); + return; + } + + if (!float.TryParse(args[1], out var basePrice)) + { + shell.WriteError(Loc.GetString("shell-argument-must-be-number")); + return; + } + + EntityUid? targetStation = null; + if (args.Length > 2) + { + if (!EntityUid.TryParse(args[2], out var station)) + { + shell.WriteError(Loc.GetString("shell-entity-uid-must-be-number")); + return; + } + targetStation = station; + } + + var displayName = args[0]; + var stockMarket = _entitySystemManager.GetEntitySystem(); + var query = _entityManager.EntityQueryEnumerator(); + + while (query.MoveNext(out var uid, out var comp)) + { + // Skip if we're looking for a specific station and this isn't it + if (targetStation != null && uid != targetStation) + continue; + + if (stockMarket.TryAddCompany(uid, comp, basePrice, displayName)) + { + shell.WriteLine(Loc.GetString("shell-command-success")); + return; + } + + shell.WriteLine(Loc.GetString("cmd-addstockscompany-failure")); + return; + } + + shell.WriteLine(targetStation != null + ? Loc.GetString("cmd-addstockscompany-invalid-station") + : Loc.GetString("cmd-addstockscompany-no-stations")); + } +} diff --git a/Content.Server/DeltaV/Cargo/Systems/StockMarketSystem.cs b/Content.Server/DeltaV/Cargo/Systems/StockMarketSystem.cs new file mode 100644 index 00000000000..5ff5cd4ff7f --- /dev/null +++ b/Content.Server/DeltaV/Cargo/Systems/StockMarketSystem.cs @@ -0,0 +1,385 @@ +using Content.Server.Access.Systems; +using Content.Server.Administration.Logs; +using Content.Server.Cargo.Components; +using Content.Server.Cargo.Systems; +using Content.Server.DeltaV.Cargo.Components; +using Content.Server.DeltaV.CartridgeLoader.Cartridges; +using Content.Shared.Access.Components; +using Content.Shared.Access.Systems; +using Content.Shared.CartridgeLoader; +using Content.Shared.CartridgeLoader.Cartridges; +using Content.Shared.Database; +using Robust.Shared.Audio; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Player; +using Robust.Shared.Random; +using Robust.Shared.Timing; + +namespace Content.Server.DeltaV.Cargo.Systems; + +/// +/// This handles the stock market updates +/// +public sealed class StockMarketSystem : EntitySystem +{ + [Dependency] private readonly AccessReaderSystem _accessSystem = default!; + [Dependency] private readonly CargoSystem _cargo = default!; + [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly ILogManager _log = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IdCardSystem _idCardSystem = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + + private ISawmill _sawmill = default!; + private const float MaxPrice = 262144; // 1/64 of max safe integer + + public override void Initialize() + { + base.Initialize(); + + _sawmill = _log.GetSawmill("admin.stock_market"); + + SubscribeLocalEvent(OnStockTradingMessage); + } + + public override void Update(float frameTime) + { + var curTime = _timing.CurTime; + var query = EntityQueryEnumerator(); + + while (query.MoveNext(out var uid, out var component)) + { + if (curTime < component.NextUpdate) + continue; + + component.NextUpdate = curTime + component.UpdateInterval; + UpdateStockPrices(uid, component); + } + } + + private void OnStockTradingMessage(Entity ent, ref CartridgeMessageEvent args) + { + if (args is not StockTradingUiMessageEvent message) + return; + + var companyIndex = message.CompanyIndex; + var amount = (int)message.Amount; + var station = ent.Comp.Station; + var loader = GetEntity(args.LoaderUid); + var xform = Transform(loader); + + // Ensure station and stock market components are valid + if (station == null || !TryComp(station, out var stockMarket)) + return; + + // Validate company index + if (companyIndex < 0 || companyIndex >= stockMarket.Companies.Count) + return; + + if (!TryComp(ent.Owner, out var access)) + return; + + // Attempt to retrieve ID card from loader + IdCardComponent? idCard = null; + if (_idCardSystem.TryGetIdCard(loader, out var pdaId)) + idCard = pdaId; + + // Play deny sound and exit if access is not allowed + if (idCard == null || !_accessSystem.IsAllowed(pdaId.Owner, ent.Owner, access)) + { + _audio.PlayEntity( + stockMarket.DenySound, + Filter.Empty().AddInRange(_transform.GetMapCoordinates(loader, xform), 0.05f), + loader, + true, + AudioParams.Default.WithMaxDistance(0.05f) + ); + return; + } + + try + { + var company = stockMarket.Companies[companyIndex]; + + // Attempt to buy or sell stocks based on the action + bool success; + switch (message.Action) + { + case StockTradingUiAction.Buy: + _adminLogger.Add(LogType.Action, + LogImpact.Medium, + $"{ToPrettyString(loader)} attempting to buy {amount} stocks of {company.LocalizedDisplayName}"); + success = TryBuyStocks(station.Value, stockMarket, companyIndex, amount); + break; + + case StockTradingUiAction.Sell: + _adminLogger.Add(LogType.Action, + LogImpact.Medium, + $"{ToPrettyString(loader)} attempting to sell {amount} stocks of {company.LocalizedDisplayName}"); + success = TrySellStocks(station.Value, stockMarket, companyIndex, amount); + break; + + default: + throw new ArgumentOutOfRangeException(); + } + + // Play confirmation sound if the transaction was successful + if (success) + { + _audio.PlayEntity( + stockMarket.ConfirmSound, + Filter.Empty().AddInRange(_transform.GetMapCoordinates(loader, xform), 0.05f), + loader, + true, + AudioParams.Default.WithMaxDistance(0.05f) + ); + } + } + finally + { + // Raise the event to update the UI regardless of outcome + var ev = new StockMarketUpdatedEvent(station.Value); + RaiseLocalEvent(ev); + } + } + + private bool TryBuyStocks( + EntityUid station, + StationStockMarketComponent stockMarket, + int companyIndex, + int amount) + { + if (amount <= 0 || companyIndex < 0 || companyIndex >= stockMarket.Companies.Count) + return false; + + // Check if the station has a bank account + if (!TryComp(station, out var bank)) + return false; + + var company = stockMarket.Companies[companyIndex]; + var totalValue = (int)Math.Round(company.CurrentPrice * amount); + + // See if we can afford it + if (bank.Balance < totalValue) + return false; + + if (!stockMarket.StockOwnership.TryGetValue(companyIndex, out var currentOwned)) + currentOwned = 0; + + // Update the bank account + _cargo.UpdateBankAccount(station, bank, -totalValue); + stockMarket.StockOwnership[companyIndex] = currentOwned + amount; + + // Log the transaction + _adminLogger.Add(LogType.Action, + LogImpact.Medium, + $"[StockMarket] Bought {amount} stocks of {company.LocalizedDisplayName} at {company.CurrentPrice:F2} credits each (Total: {totalValue})"); + + return true; + } + + private bool TrySellStocks( + EntityUid station, + StationStockMarketComponent stockMarket, + int companyIndex, + int amount) + { + if (amount <= 0 || companyIndex < 0 || companyIndex >= stockMarket.Companies.Count) + return false; + + // Check if the station has a bank account + if (!TryComp(station, out var bank)) + return false; + + if (!stockMarket.StockOwnership.TryGetValue(companyIndex, out var currentOwned) || currentOwned < amount) + return false; + + var company = stockMarket.Companies[companyIndex]; + var totalValue = (int)Math.Round(company.CurrentPrice * amount); + + // Update stock ownership + var newAmount = currentOwned - amount; + if (newAmount > 0) + stockMarket.StockOwnership[companyIndex] = newAmount; + else + stockMarket.StockOwnership.Remove(companyIndex); + + // Update the bank account + _cargo.UpdateBankAccount(station, bank, totalValue); + + // Log the transaction + _adminLogger.Add(LogType.Action, + LogImpact.Medium, + $"[StockMarket] Sold {amount} stocks of {company.LocalizedDisplayName} at {company.CurrentPrice:F2} credits each (Total: {totalValue})"); + + return true; + } + + private void UpdateStockPrices(EntityUid station, StationStockMarketComponent stockMarket) + { + for (var i = 0; i < stockMarket.Companies.Count; i++) + { + var company = stockMarket.Companies[i]; + var changeType = DetermineMarketChange(stockMarket.MarketChanges); + var multiplier = CalculatePriceMultiplier(changeType); + + UpdatePriceHistory(company); + + // Update price with multiplier + var oldPrice = company.CurrentPrice; + company.CurrentPrice *= (1 + multiplier); + + // Ensure price doesn't go below minimum threshold + company.CurrentPrice = MathF.Max(company.CurrentPrice, company.BasePrice * 0.1f); + + // Ensure price doesn't go above maximum threshold + company.CurrentPrice = MathF.Min(company.CurrentPrice, MaxPrice); + + stockMarket.Companies[i] = company; + + // Calculate the percentage change + var percentChange = (company.CurrentPrice - oldPrice) / oldPrice * 100; + + // Raise the event + var ev = new StockMarketUpdatedEvent(station); + RaiseLocalEvent(ev); + + // Log it + _adminLogger.Add(LogType.Action, + LogImpact.Medium, + $"[StockMarket] Company '{company.LocalizedDisplayName}' price updated by {percentChange:+0.00;-0.00}% from {oldPrice:0.00} to {company.CurrentPrice:0.00}"); + } + } + + /// + /// Attempts to change the price for a specific company + /// + /// True if the operation was successful, false otherwise + public bool TryChangeStocksPrice(EntityUid station, + StationStockMarketComponent stockMarket, + float newPrice, + int companyIndex) + { + // Check if it exceeds the max price + if (newPrice > MaxPrice) + { + _sawmill.Error($"New price cannot be greater than {MaxPrice}."); + return false; + } + + if (companyIndex < 0 || companyIndex >= stockMarket.Companies.Count) + return false; + + var company = stockMarket.Companies[companyIndex]; + UpdatePriceHistory(company); + + company.CurrentPrice = MathF.Max(newPrice, company.BasePrice * 0.1f); + stockMarket.Companies[companyIndex] = company; + + var ev = new StockMarketUpdatedEvent(station); + RaiseLocalEvent(ev); + return true; + } + + /// + /// Attempts to add a new company to the station + /// + /// False if the company already exists, true otherwise + public bool TryAddCompany(EntityUid station, + StationStockMarketComponent stockMarket, + float basePrice, + string displayName) + { + // Create a new company struct with the specified parameters + var company = new StockCompanyStruct + { + LocalizedDisplayName = displayName, // Assume there's no Loc for it + BasePrice = basePrice, + CurrentPrice = basePrice, + PriceHistory = [], + }; + + stockMarket.Companies.Add(company); + UpdatePriceHistory(company); + + var ev = new StockMarketUpdatedEvent(station); + RaiseLocalEvent(ev); + + return true; + } + + /// + /// Attempts to add a new company to the station using the StockCompanyStruct + /// + /// False if the company already exists, true otherwise + public bool TryAddCompany(EntityUid station, + StationStockMarketComponent stockMarket, + StockCompanyStruct company) + { + // Add the new company to the dictionary + stockMarket.Companies.Add(company); + + // Make sure it has a price history + UpdatePriceHistory(company); + + var ev = new StockMarketUpdatedEvent(station); + RaiseLocalEvent(ev); + + return true; + } + + private static void UpdatePriceHistory(StockCompanyStruct company) + { + // Create if null + company.PriceHistory ??= []; + + // Make sure it has at least 5 entries + while (company.PriceHistory.Count < 5) + { + company.PriceHistory.Add(company.BasePrice); + } + + // Store previous price in history + company.PriceHistory.Add(company.CurrentPrice); + + if (company.PriceHistory.Count > 5) // Keep last 5 prices + company.PriceHistory.RemoveAt(1); // Always keep the base price + } + + private MarketChange DetermineMarketChange(List marketChanges) + { + var roll = _random.NextFloat(); + var cumulative = 0f; + + foreach (var change in marketChanges) + { + cumulative += change.Chance; + if (roll <= cumulative) + return change; + } + + return marketChanges[0]; // Default to first (usually minor) change if we somehow exceed 100% + } + + private float CalculatePriceMultiplier(MarketChange change) + { + // Using Box-Muller transform for normal distribution + var u1 = _random.NextFloat(); + var u2 = _random.NextFloat(); + var randStdNormal = Math.Sqrt(-2.0 * Math.Log(u1)) * Math.Sin(2.0 * Math.PI * u2); + + // Scale and shift the result to our desired range + var range = change.Range.Y - change.Range.X; + var mean = (change.Range.Y + change.Range.X) / 2; + var stdDev = range / 6.0f; // 99.7% of values within range + + var result = (float)(mean + (stdDev * randStdNormal)); + return Math.Clamp(result, change.Range.X, change.Range.Y); + } +} +public sealed class StockMarketUpdatedEvent(EntityUid station) : EntityEventArgs +{ + public EntityUid Station = station; +} diff --git a/Content.Server/DeltaV/CartridgeLoader/Cartridges/MailMetricsCartridgeSystem.cs b/Content.Server/DeltaV/CartridgeLoader/Cartridges/MailMetricsCartridgeSystem.cs index 905e3854ee8..c85d7e6d927 100644 --- a/Content.Server/DeltaV/CartridgeLoader/Cartridges/MailMetricsCartridgeSystem.cs +++ b/Content.Server/DeltaV/CartridgeLoader/Cartridges/MailMetricsCartridgeSystem.cs @@ -4,7 +4,7 @@ using Content.Server.CartridgeLoader; using Content.Shared.CartridgeLoader; using Content.Shared.CartridgeLoader.Cartridges; -using Content.Server.Mail.Components; +using Content.Server.DeltaV.Mail.Components; namespace Content.Server.DeltaV.CartridgeLoader.Cartridges; diff --git a/Content.Server/DeltaV/CartridgeLoader/Cartridges/StockTradingCartridgeComponent.cs b/Content.Server/DeltaV/CartridgeLoader/Cartridges/StockTradingCartridgeComponent.cs new file mode 100644 index 00000000000..7ab11f64d4a --- /dev/null +++ b/Content.Server/DeltaV/CartridgeLoader/Cartridges/StockTradingCartridgeComponent.cs @@ -0,0 +1,11 @@ +namespace Content.Server.DeltaV.CartridgeLoader.Cartridges; + +[RegisterComponent, Access(typeof(StockTradingCartridgeSystem))] +public sealed partial class StockTradingCartridgeComponent : Component +{ + /// + /// Station entity to keep track of + /// + [DataField] + public EntityUid? Station; +} diff --git a/Content.Server/DeltaV/CartridgeLoader/Cartridges/StockTradingCartridgeSystem.cs b/Content.Server/DeltaV/CartridgeLoader/Cartridges/StockTradingCartridgeSystem.cs new file mode 100644 index 00000000000..cd68c5adb43 --- /dev/null +++ b/Content.Server/DeltaV/CartridgeLoader/Cartridges/StockTradingCartridgeSystem.cs @@ -0,0 +1,101 @@ +using System.Linq; +using Content.Server.Cargo.Components; +using Content.Server.DeltaV.Cargo.Components; +using Content.Server.DeltaV.Cargo.Systems; +using Content.Server.Station.Systems; +using Content.Server.CartridgeLoader; +using Content.Shared.Cargo.Components; +using Content.Shared.CartridgeLoader; +using Content.Shared.CartridgeLoader.Cartridges; + +namespace Content.Server.DeltaV.CartridgeLoader.Cartridges; + +public sealed class StockTradingCartridgeSystem : EntitySystem +{ + [Dependency] private readonly CartridgeLoaderSystem _cartridgeLoader = default!; + [Dependency] private readonly StationSystem _station = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnUiReady); + SubscribeLocalEvent(OnStockMarketUpdated); + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnBalanceUpdated); + } + + private void OnBalanceUpdated(Entity ent, ref BankBalanceUpdatedEvent args) + { + UpdateAllCartridges(args.Station); + } + + private void OnUiReady(Entity ent, ref CartridgeUiReadyEvent args) + { + UpdateUI(ent, args.Loader); + } + + private void OnStockMarketUpdated(StockMarketUpdatedEvent args) + { + UpdateAllCartridges(args.Station); + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + // Initialize price history for each company + for (var i = 0; i < ent.Comp.Companies.Count; i++) + { + var company = ent.Comp.Companies[i]; + + // Create initial price history using base price + company.PriceHistory = new List(); + for (var j = 0; j < 5; j++) + { + company.PriceHistory.Add(company.BasePrice); + } + + ent.Comp.Companies[i] = company; + } + + if (_station.GetOwningStation(ent.Owner) is { } station) + UpdateAllCartridges(station); + } + + private void UpdateAllCartridges(EntityUid station) + { + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var comp, out var cartridge)) + { + if (cartridge.LoaderUid is not { } loader || comp.Station != station) + continue; + UpdateUI((uid, comp), loader); + } + } + + private void UpdateUI(Entity ent, EntityUid loader) + { + if (_station.GetOwningStation(loader) is { } station) + ent.Comp.Station = station; + + if (!TryComp(ent.Comp.Station, out var stockMarket) || + !TryComp(ent.Comp.Station, out var bankAccount)) + return; + + // Convert company data to UI state format + var entries = stockMarket.Companies.Select(company => new StockCompanyStruct( + displayName: company.LocalizedDisplayName, + currentPrice: company.CurrentPrice, + basePrice: company.BasePrice, + priceHistory: company.PriceHistory)) + .ToList(); + + // Send the UI state with balance and owned stocks + var state = new StockTradingUiState( + entries: entries, + ownedStocks: stockMarket.StockOwnership, + balance: bankAccount.Balance + ); + + _cartridgeLoader.UpdateCartridgeUiState(loader, state); + } +} diff --git a/Content.Server/DeltaV/Chapel/SacrificialAltarSystem.cs b/Content.Server/DeltaV/Chapel/SacrificialAltarSystem.cs new file mode 100644 index 00000000000..a903d4124da --- /dev/null +++ b/Content.Server/DeltaV/Chapel/SacrificialAltarSystem.cs @@ -0,0 +1,139 @@ +using Content.Server.Bible.Components; +using Content.Server.Nyanotrasen.Cloning; +using Content.Shared.Abilities.Psionics; +using Content.Shared.Administration.Logs; +using Content.Shared.Body.Components; +using Content.Shared.Body.Systems; +using Content.Shared.Database; +using Content.Shared.DeltaV.Chapel; +using Content.Shared.DoAfter; +using Content.Shared.EntityTable; +using Content.Shared.Humanoid; +using Content.Shared.Mind; +using Content.Shared.Popups; +using Content.Shared.Psionics.Glimmer; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; + +namespace Content.Server.DeltaV.Chapel; + +public sealed class SacrificialAltarSystem : SharedSacrificialAltarSystem +{ + [Dependency] private readonly EntityTableSystem _entityTable = default!; + [Dependency] private readonly GlimmerSystem _glimmer = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedBodySystem _body = default!; + [Dependency] private readonly SharedMindSystem _mind = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnDoAfter); + } + + private void OnDoAfter(Entity ent, ref SacrificeDoAfterEvent args) + { + ent.Comp.SacrificeStream = _audio.Stop(ent.Comp.SacrificeStream); + ent.Comp.DoAfter = null; + + var user = args.Args.User; + + if (args.Cancelled || args.Handled || args.Args.Target is not {} target) + return; + + if (!_mind.TryGetMind(target, out var mindId, out var mind)) + return; + + // prevent starting the doafter then mindbreaking to double dip + if (!HasComp(target)) + return; + + _adminLogger.Add(LogType.Action, LogImpact.Extreme, $"{ToPrettyString(user):player} sacrificed {ToPrettyString(target):target} on {ToPrettyString(ent):altar}"); + + // lower glimmer by a random amount + _glimmer.Glimmer -= ent.Comp.GlimmerReduction.Next(_random); + + // spawn all the loot + var proto = _proto.Index(ent.Comp.RewardPool); + var coords = Transform(ent).Coordinates; + foreach (var id in _entityTable.GetSpawns(proto.Table)) + { + Spawn(id, coords); + } + + // TODO GOLEMS: create a soul crystal and transfer mind into it + + // finally gib the targets old body + if (TryComp(target, out var body)) + _body.GibBody(target, gibOrgans: true, body, launchGibs: true); + else + QueueDel(target); + } + + protected override void AttemptSacrifice(Entity ent, EntityUid user, EntityUid target) + { + if (ent.Comp.DoAfter != null) + return; + + // can't sacrifice yourself + if (user == target) + { + _popup.PopupEntity(Loc.GetString("altar-failure-reason-self"), ent, user, PopupType.SmallCaution); + return; + } + + // you need to be psionic OR bible user + if (!HasComp(user) && !HasComp(user)) + { + _popup.PopupEntity(Loc.GetString("altar-failure-reason-user"), ent, user, PopupType.SmallCaution); + return; + } + + // and no golems or familiars or whatever should be sacrificing + if (!HasComp(user)) + { + _popup.PopupEntity(Loc.GetString("altar-failure-reason-user-humanoid"), ent, user, PopupType.SmallCaution); + return; + } + + // prevent psichecking SSD people... + // notably there is no check in OnDoAfter so you can't alt f4 to survive being sacrificed + if (!HasComp(target) || _mind.GetMind(target) == null) + { + _popup.PopupEntity(Loc.GetString("altar-failure-reason-target-catatonic", ("target", target)), ent, user, PopupType.SmallCaution); + return; + } + + // TODO: there should be a penalty to the user for psichecking like this + if (!HasComp(target)) + { + _popup.PopupEntity(Loc.GetString("altar-failure-reason-target", ("target", target)), ent, user, PopupType.SmallCaution); + return; + } + + if (!HasComp(target) && !HasComp(target)) + { + _popup.PopupEntity(Loc.GetString("altar-failure-reason-target-humanoid", ("target", target)), ent, user, PopupType.SmallCaution); + return; + } + + _popup.PopupEntity(Loc.GetString("altar-sacrifice-popup", ("user", user), ("target", target)), ent, PopupType.LargeCaution); + + ent.Comp.SacrificeStream = _audio.PlayPvs(ent.Comp.SacrificeSound, ent)?.Entity; + + var ev = new SacrificeDoAfterEvent(); + var args = new DoAfterArgs(EntityManager, user, ent.Comp.SacrificeTime, ev, target: target, eventTarget: ent) + { + BreakOnDamage = true, + NeedHand = true + }; + DoAfter.TryStartDoAfter(args, out ent.Comp.DoAfter); + } +} diff --git a/Content.Server/DeltaV/EntityEffects/Effects/Addicted.cs b/Content.Server/DeltaV/EntityEffects/Effects/Addicted.cs new file mode 100644 index 00000000000..591e51a3d62 --- /dev/null +++ b/Content.Server/DeltaV/EntityEffects/Effects/Addicted.cs @@ -0,0 +1,29 @@ +using Content.Shared.DeltaV.Addictions; +using Content.Shared.EntityEffects; +using Robust.Shared.Prototypes; + +namespace Content.Server.EntityEffects.Effects; + +public sealed partial class Addicted : EntityEffect +{ + /// + /// How long should each metabolism cycle make the effect last for. + /// + [DataField] + public float AddictionTime = 3f; + + protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) + => Loc.GetString("reagent-effect-guidebook-addicted", ("chance", Probability)); + + public override void Effect(EntityEffectBaseArgs args) + { + var addictionTime = AddictionTime; + + if (args is EntityEffectReagentArgs reagentArgs) { + addictionTime *= reagentArgs.Scale.Float(); + } + + var addictionSystem = args.EntityManager.System(); + addictionSystem.TryApplyAddiction(args.TargetEntity, addictionTime); + } +} diff --git a/Content.Server/DeltaV/Ghost/Roles/Components/GhostRoleCharacterSpawnerComponent.cs b/Content.Server/DeltaV/Ghost/Roles/Components/GhostRoleCharacterSpawnerComponent.cs index e2aaa94d948..63eb96f520a 100644 --- a/Content.Server/DeltaV/Ghost/Roles/Components/GhostRoleCharacterSpawnerComponent.cs +++ b/Content.Server/DeltaV/Ghost/Roles/Components/GhostRoleCharacterSpawnerComponent.cs @@ -1,4 +1,7 @@ -namespace Content.Server.Ghost.Roles.Components +using Content.Shared.Roles; +using Robust.Shared.Prototypes; + +namespace Content.Server.Ghost.Roles.Components { /// /// Allows a ghost to take this role, spawning their selected character. @@ -7,16 +10,22 @@ [Access(typeof(GhostRoleSystem))] public sealed partial class GhostRoleCharacterSpawnerComponent : Component { - [ViewVariables(VVAccess.ReadWrite)] [DataField("deleteOnSpawn")] + [DataField] public bool DeleteOnSpawn = true; - [ViewVariables(VVAccess.ReadWrite)] [DataField("availableTakeovers")] + [DataField] public int AvailableTakeovers = 1; [ViewVariables] public int CurrentTakeovers = 0; - [ViewVariables(VVAccess.ReadWrite)] [DataField("outfitPrototype")] - public string OutfitPrototype = "PassengerGear"; + [DataField] + public ProtoId OutfitPrototype = "PassengerGear"; + + /// + /// Components to give on spawn. + /// + [DataField] + public ComponentRegistry AddedComponents = new(); } } diff --git a/Content.Server/DeltaV/Ghost/Roles/GhostRoleSystem.Character.cs b/Content.Server/DeltaV/Ghost/Roles/GhostRoleSystem.Character.cs index ced4ec802d8..f8320f7514c 100644 --- a/Content.Server/DeltaV/Ghost/Roles/GhostRoleSystem.Character.cs +++ b/Content.Server/DeltaV/Ghost/Roles/GhostRoleSystem.Character.cs @@ -5,8 +5,6 @@ using Content.Server.Station.Systems; using Content.Shared.Mind.Components; using Content.Shared.Preferences; -using Content.Shared.Roles; -using Robust.Shared.Prototypes; namespace Content.Server.Ghost.Roles { @@ -14,11 +12,13 @@ public sealed partial class GhostRoleSystem { [Dependency] private readonly IServerPreferencesManager _prefs = default!; [Dependency] private readonly IEntityManager _entityManager = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - private void OnSpawnerTakeCharacter( EntityUid uid, GhostRoleCharacterSpawnerComponent component, + private void OnSpawnerTakeCharacter(Entity ent, ref TakeGhostRoleEvent args) { + var uid = ent.Owner; + var component = ent.Comp; + if (!TryComp(uid, out GhostRoleComponent? ghostRole) || ghostRole.Taken) { @@ -32,10 +32,6 @@ private void OnSpawnerTakeCharacter( EntityUid uid, GhostRoleCharacterSpawnerCom .SpawnPlayerMob(Transform(uid).Coordinates, null, character, null); _transform.AttachToGridOrMap(mob); - string? outfit = null; - if (_prototypeManager.TryIndex(component.OutfitPrototype, out var outfitProto)) - outfit = outfitProto.ID; - var spawnedEvent = new GhostRoleSpawnerUsedEvent(uid, mob); RaiseLocalEvent(mob, spawnedEvent); @@ -43,8 +39,9 @@ private void OnSpawnerTakeCharacter( EntityUid uid, GhostRoleCharacterSpawnerCom GhostRoleInternalCreateMindAndTransfer(args.Player, uid, mob, ghostRole); - if (outfit != null) - SetOutfitCommand.SetOutfit(mob, outfit, _entityManager); + SetOutfitCommand.SetOutfit(mob, component.OutfitPrototype, _entityManager); + + EntityManager.AddComponents(mob, component.AddedComponents); if (++component.CurrentTakeovers < component.AvailableTakeovers) { diff --git a/Content.Server/DeltaV/Implants/SubdermalBionicSyrinxImplantSystem.cs b/Content.Server/DeltaV/Implants/SubdermalBionicSyrinxImplantSystem.cs deleted file mode 100644 index dfd47378bdd..00000000000 --- a/Content.Server/DeltaV/Implants/SubdermalBionicSyrinxImplantSystem.cs +++ /dev/null @@ -1,152 +0,0 @@ -using Content.Server.Actions; -using Content.Server.Administration.Logs; -using Content.Server.Chat.Systems; -using Content.Server.Implants; -using Content.Server.Popups; -using Content.Server.VoiceMask; -using Content.Shared.Database; -using Content.Shared.Implants; -using Content.Shared.Implants.Components; -using Content.Shared.Inventory; -using Content.Shared.Popups; -using Content.Shared.Preferences; -using Content.Shared.Speech; -using Content.Shared.Tag; -using Content.Shared.VoiceMask; -using Robust.Server.GameObjects; -using Robust.Shared.Containers; -using Robust.Shared.Prototypes; - -namespace Content.Server.DeltaV.Implants; - -public sealed class SubdermalBionicSyrinxImplantSystem : EntitySystem -{ - [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; - [Dependency] private readonly PopupSystem _popupSystem = default!; - [Dependency] private readonly IAdminLogManager _adminLogger = default!; - [Dependency] private readonly TagSystem _tag = default!; - [Dependency] private readonly IPrototypeManager _proto = default!; - [Dependency] private readonly InventorySystem _inventory = default!; - [Dependency] private readonly ActionsSystem _actions = default!; - - [ValidatePrototypeId] - public const string BionicSyrinxImplant = "BionicSyrinxImplant"; - - private const string MaskSlot = "mask"; - - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent(OnInsert); - SubscribeLocalEvent(OnSpeakerNameTransform); - SubscribeLocalEvent(OnChangeName); - SubscribeLocalEvent(OnChangeVerb); - // We need to remove the SyrinxVoiceMaskComponent from the owner before the implant - // is removed, so we need to execute before the SubdermalImplantSystem. - SubscribeLocalEvent(OnRemove, before: new[] { typeof(SubdermalImplantSystem) }); - } - - private void OnChangeVerb(Entity ent, ref VoiceMaskChangeVerbMessage msg) - { - if (msg.Verb is {} id && !_proto.HasIndex(id)) - return; - - ent.Comp.SpeechVerb = msg.Verb; - // verb is only important to metagamers so no need to log as opposed to name - - _popupSystem.PopupEntity(Loc.GetString("voice-mask-popup-success"), ent, msg.Actor); - - TrySetLastSpeechVerb(ent, msg.Verb); - - UpdateUI(ent, ent.Comp); - } - - private void OnInsert(EntityUid uid, VoiceMaskerComponent component, ImplantImplantedEvent args) - { - if (!args.Implanted.HasValue || - !_tag.HasTag(args.Implant, BionicSyrinxImplant)) - return; - - var voicemask = EnsureComp(args.Implanted.Value); - voicemask.VoiceName = MetaData(args.Implanted.Value).EntityName; - Dirty(args.Implanted.Value, voicemask); - } - - private void OnRemove(EntityUid uid, VoiceMaskerComponent component, EntGotRemovedFromContainerMessage args) - { - if (!TryComp(uid, out var implanted) || implanted.ImplantedEntity == null) - return; - - RemComp(implanted.ImplantedEntity.Value); - } - - /// - /// Copy from VoiceMaskSystem, adapted to work with SyrinxVoiceMaskComponent. - /// - private void OnChangeName(EntityUid uid, SyrinxVoiceMaskComponent component, VoiceMaskChangeNameMessage message) - { - if (message.Name.Length > HumanoidCharacterProfile.MaxNameLength || message.Name.Length <= 0) - { - _popupSystem.PopupEntity(Loc.GetString("voice-mask-popup-failure"), uid, message.Actor, PopupType.SmallCaution); - return; - } - - component.VoiceName = message.Name; - _adminLogger.Add(LogType.Action, LogImpact.Medium, $"{ToPrettyString(message.Actor):player} set voice of {ToPrettyString(uid):mask}: {component.VoiceName}"); - - _popupSystem.PopupEntity(Loc.GetString("voice-mask-popup-success"), uid, message.Actor); - - TrySetLastKnownName(uid, message.Name); - - UpdateUI(uid, component); - } - - /// - /// Copy from VoiceMaskSystem, adapted to work with SyrinxVoiceMaskComponent. - /// - private void TrySetLastKnownName(EntityUid implanted, string lastName) - { - if (!HasComp(implanted) - || !TryComp(implanted, out var maskComp)) - return; - - maskComp.LastSetName = lastName; - } - - /// - /// Copy from VoiceMaskSystem, adapted to work with SyrinxVoiceMaskComponent. - /// - private void UpdateUI(EntityUid owner, SyrinxVoiceMaskComponent? component = null) - { - if (!Resolve(owner, ref component, logMissing: false)) - return; - - if (_uiSystem.HasUi(owner, VoiceMaskUIKey.Key)) - _uiSystem.SetUiState(owner, VoiceMaskUIKey.Key, new VoiceMaskBuiState(component.VoiceName, component.SpeechVerb)); - } - - /// - /// Copy from VoiceMaskSystem, adapted to work with SyrinxVoiceMaskComponent. - /// - private void OnSpeakerNameTransform(EntityUid uid, SyrinxVoiceMaskComponent component, TransformSpeakerNameEvent args) - { - if (component.Enabled) - args.Name = component.VoiceName; - } - - private VoiceMaskerComponent? TryGetMask(EntityUid user) - { - if (!HasComp(user) || !_inventory.TryGetSlotEntity(user, MaskSlot, out var maskEntity)) - return null; - - return CompOrNull(maskEntity); - } - - private void TrySetLastSpeechVerb(EntityUid user, string? verb) - { - if (TryGetMask(user) is {} comp) - comp.LastSpeechVerb = verb; - } -} diff --git a/Content.Server/DeltaV/Implants/SyrinxImplantSystem.cs b/Content.Server/DeltaV/Implants/SyrinxImplantSystem.cs new file mode 100644 index 00000000000..6393eb6a249 --- /dev/null +++ b/Content.Server/DeltaV/Implants/SyrinxImplantSystem.cs @@ -0,0 +1,23 @@ +using Content.Server.VoiceMask; +using Content.Shared.Implants; + +namespace Content.Server.Implants; + +public sealed class SubdermalBionicSyrinxImplantSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInsert); + } + + private void OnInsert(Entity ent, ref ImplantImplantedEvent args) + { + if (!args.Implanted.HasValue) + return; + + // Update the name so it's the entities default name. You can't take it off like a voice mask so it's important! + ent.Comp.VoiceMaskName = Name(args.Implanted.Value); + } +} diff --git a/Content.Server/_NF/Mail/DelayedItemComponent.cs b/Content.Server/DeltaV/Mail/Components/DelayedItemComponent.cs similarity index 90% rename from Content.Server/_NF/Mail/DelayedItemComponent.cs rename to Content.Server/DeltaV/Mail/Components/DelayedItemComponent.cs index dbf1ab6fcbb..e6e8b63fad0 100644 --- a/Content.Server/_NF/Mail/DelayedItemComponent.cs +++ b/Content.Server/DeltaV/Mail/Components/DelayedItemComponent.cs @@ -1,4 +1,4 @@ -namespace Content.Server.Mail +namespace Content.Server.DeltaV.Mail.Components { /// /// A placeholder for another entity, spawned when dropped or placed in someone's hands. diff --git a/Content.Server/Nyanotrasen/Mail/Components/MailComponent.cs b/Content.Server/DeltaV/Mail/Components/MailComponent.cs similarity index 96% rename from Content.Server/Nyanotrasen/Mail/Components/MailComponent.cs rename to Content.Server/DeltaV/Mail/Components/MailComponent.cs index 2b1c4e26e56..6a30c498580 100644 --- a/Content.Server/Nyanotrasen/Mail/Components/MailComponent.cs +++ b/Content.Server/DeltaV/Mail/Components/MailComponent.cs @@ -1,9 +1,9 @@ using System.Threading; using Robust.Shared.Audio; using Content.Shared.Storage; -using Content.Shared.Mail; +using Content.Shared.DeltaV.Mail; -namespace Content.Server.Mail.Components +namespace Content.Server.DeltaV.Mail.Components { [RegisterComponent] public sealed partial class MailComponent : SharedMailComponent @@ -108,6 +108,6 @@ public sealed partial class MailComponent : SharedMailComponent /// public bool IsEnabled = true; - public CancellationTokenSource? priorityCancelToken; + public CancellationTokenSource? PriorityCancelToken; } } diff --git a/Content.Server/Nyanotrasen/Mail/Components/MailReceiverComponent.cs b/Content.Server/DeltaV/Mail/Components/MailReceiverComponent.cs similarity index 61% rename from Content.Server/Nyanotrasen/Mail/Components/MailReceiverComponent.cs rename to Content.Server/DeltaV/Mail/Components/MailReceiverComponent.cs index 4224de5de45..fbb962d3ae8 100644 --- a/Content.Server/Nyanotrasen/Mail/Components/MailReceiverComponent.cs +++ b/Content.Server/DeltaV/Mail/Components/MailReceiverComponent.cs @@ -1,6 +1,7 @@ -namespace Content.Server.Mail.Components +namespace Content.Server.DeltaV.Mail.Components { [RegisterComponent] public sealed partial class MailReceiverComponent : Component - {} + { + } } diff --git a/Content.Server/Nyanotrasen/Mail/Components/MailTeleporterComponent.cs b/Content.Server/DeltaV/Mail/Components/MailTeleporterComponent.cs similarity index 84% rename from Content.Server/Nyanotrasen/Mail/Components/MailTeleporterComponent.cs rename to Content.Server/DeltaV/Mail/Components/MailTeleporterComponent.cs index aa045f843db..6608084a6e5 100644 --- a/Content.Server/Nyanotrasen/Mail/Components/MailTeleporterComponent.cs +++ b/Content.Server/DeltaV/Mail/Components/MailTeleporterComponent.cs @@ -1,6 +1,6 @@ using Robust.Shared.Audio; -namespace Content.Server.Mail.Components +namespace Content.Server.DeltaV.Mail.Components { /// /// This is for the mail teleporter. @@ -11,16 +11,16 @@ public sealed partial class MailTeleporterComponent : Component { // Not starting accumulator at 0 so mail carriers have some deliveries to make shortly after roundstart. - [DataField("accumulator")] + [DataField] public float Accumulator = 285f; - [DataField("teleportInterval")] + [DataField] public TimeSpan TeleportInterval = TimeSpan.FromMinutes(5); /// /// The sound that's played when new mail arrives. /// - [DataField("teleportSound")] + [DataField] public SoundSpecifier TeleportSound = new SoundPathSpecifier("/Audio/Effects/teleport_arrival.ogg"); /// @@ -36,10 +36,10 @@ public sealed partial class MailTeleporterComponent : Component /// to determine how many deliveries will be teleported in. /// It does not determine unique recipients. That is random. /// - [DataField("candidatesPerDelivery")] + [DataField] public int CandidatesPerDelivery = 8; - [DataField("minimumDeliveriesPerTeleport")] + [DataField] public int MinimumDeliveriesPerTeleport = 1; /// @@ -58,45 +58,45 @@ public sealed partial class MailTeleporterComponent : Component /// This is just a simple check to see if anyone's been picking up the /// mail lately to prevent entity bloat for the sake of performance. /// - [DataField("maximumUndeliveredParcels")] + [DataField] public int MaximumUndeliveredParcels = 5; /// /// Any item that breaks or is destroyed in less than this amount of /// damage is one of the types of items considered fragile. /// - [DataField("fragileDamageThreshold")] + [DataField] public int FragileDamageThreshold = 10; /// /// What's the bonus for delivering a fragile package intact? /// - [DataField("fragileBonus")] + [DataField] public int FragileBonus = 100; /// /// What's the malus for failing to deliver a fragile package? /// - [DataField("fragileMalus")] + [DataField] public int FragileMalus = -100; /// /// What's the chance for any one delivery to be marked as priority mail? /// - [DataField("priorityChance")] + [DataField] public float PriorityChance = 0.1f; /// /// How long until a priority delivery is considered as having failed /// if not delivered? /// - [DataField("priorityDuration")] - public TimeSpan priorityDuration = TimeSpan.FromMinutes(5); + [DataField] + public TimeSpan PriorityDuration = TimeSpan.FromMinutes(5); /// /// What's the bonus for delivering a priority package on time? /// - [DataField("priorityBonus")] + [DataField] public int PriorityBonus = 250; /// @@ -110,13 +110,13 @@ public sealed partial class MailTeleporterComponent : Component /// What's the bonus for delivering a large package intact? /// [DataField] - public int LargeBonus = 1500; //DeltaV; 5000 to 1500 + public int LargeBonus = 1500; // DeltaV; 5000 to 1500 /// /// What's the malus for failing to deliver a large package? /// [DataField] - public int LargeMalus = -500; //DeltaV; -250 to -500 + public int LargeMalus = -500; // DeltaV; -250 to -500 // End Frontier: Large mail } } diff --git a/Content.Server/Nyanotrasen/Mail/Components/StationMailRouterComponent.cs b/Content.Server/DeltaV/Mail/Components/StationMailRouterComponent.cs similarity index 79% rename from Content.Server/Nyanotrasen/Mail/Components/StationMailRouterComponent.cs rename to Content.Server/DeltaV/Mail/Components/StationMailRouterComponent.cs index ce87eb131fc..4100c5a353f 100644 --- a/Content.Server/Nyanotrasen/Mail/Components/StationMailRouterComponent.cs +++ b/Content.Server/DeltaV/Mail/Components/StationMailRouterComponent.cs @@ -1,4 +1,4 @@ -namespace Content.Server.Mail; +namespace Content.Server.DeltaV.Mail.Components; /// /// Designates a station as a place for sending and receiving mail. diff --git a/Content.Server/_NF/Mail/DelayedItemSystem.cs b/Content.Server/DeltaV/Mail/EntitySystems/DelayedItemSystem.cs similarity index 95% rename from Content.Server/_NF/Mail/DelayedItemSystem.cs rename to Content.Server/DeltaV/Mail/EntitySystems/DelayedItemSystem.cs index a8dd5fae73a..7075c3ef1d6 100644 --- a/Content.Server/_NF/Mail/DelayedItemSystem.cs +++ b/Content.Server/DeltaV/Mail/EntitySystems/DelayedItemSystem.cs @@ -1,8 +1,9 @@ +using Content.Server.DeltaV.Mail.Components; using Content.Shared.Damage; using Content.Shared.Hands; using Robust.Shared.Containers; -namespace Content.Server.Mail +namespace Content.Server.DeltaV.Mail.EntitySystems { /// /// A placeholder for another entity, spawned when taken out of a container, with the placeholder deleted shortly after. diff --git a/Content.Server/Nyanotrasen/Mail/MailSystem.cs b/Content.Server/DeltaV/Mail/EntitySystems/MailSystem.cs similarity index 70% rename from Content.Server/Nyanotrasen/Mail/MailSystem.cs rename to Content.Server/DeltaV/Mail/EntitySystems/MailSystem.cs index c120c4d1960..19f91487c0c 100644 --- a/Content.Server/Nyanotrasen/Mail/MailSystem.cs +++ b/Content.Server/DeltaV/Mail/EntitySystems/MailSystem.cs @@ -1,83 +1,73 @@ -using System.Diagnostics.CodeAnalysis; -using System.Linq; -using System.Threading; -using Robust.Shared.Audio; -using Robust.Shared.Containers; -using Robust.Shared.Prototypes; -using Robust.Shared.Random; using Content.Server.Access.Systems; using Content.Server.Cargo.Components; using Content.Server.Cargo.Systems; using Content.Server.Chat.Systems; -using Content.Server.Chemistry.Containers.EntitySystems; -using Content.Server.Chemistry.EntitySystems; using Content.Server.Damage.Components; using Content.Server.DeltaV.Cargo.Components; -using Content.Server.Destructible; -using Content.Server.Destructible.Thresholds; +using Content.Server.DeltaV.Cargo.Systems; +using Content.Server.DeltaV.Mail.Components; using Content.Server.Destructible.Thresholds.Behaviors; using Content.Server.Destructible.Thresholds.Triggers; -using Content.Server.Fluids.Components; -using Content.Server.Item; -using Content.Server.Mail.Components; +using Content.Server.Destructible.Thresholds; +using Content.Server.Destructible; using Content.Server.Mind; -using Content.Server.Nutrition.Components; -using Content.Server.Nutrition.EntitySystems; using Content.Server.Popups; using Content.Server.Power.Components; -using Content.Server.Station.Systems; using Content.Server.Spawners.EntitySystems; -using Content.Shared.Access; +using Content.Server.Station.Systems; using Content.Shared.Access.Components; using Content.Shared.Access.Systems; +using Content.Shared.Access; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Damage; -using Content.Shared.Emag.Components; +using Content.Shared.DeltaV.Mail; using Content.Shared.Destructible; +using Content.Shared.Emag.Components; using Content.Shared.Emag.Systems; using Content.Shared.Examine; using Content.Shared.Fluids.Components; using Content.Shared.Hands.EntitySystems; -using Content.Shared.Interaction; using Content.Shared.Interaction.Events; -using Content.Shared.Item; -using Content.Shared.Mail; -using Content.Shared.Maps; +using Content.Shared.Interaction; using Content.Shared.Nutrition.Components; using Content.Shared.Nutrition.EntitySystems; using Content.Shared.PDA; -using Content.Shared.Random.Helpers; using Content.Shared.Roles; -using Content.Shared.StatusIcon; using Content.Shared.Storage; using Content.Shared.Tag; using Robust.Shared.Audio.Systems; +using Robust.Shared.Audio; +using Robust.Shared.Containers; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Threading; using Timer = Robust.Shared.Timing.Timer; -using Content.Server.DeltaV.Cargo.Systems; -namespace Content.Server.Mail +namespace Content.Server.DeltaV.Mail.EntitySystems { public sealed class MailSystem : EntitySystem { - [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly AccessReaderSystem _accessSystem = default!; - [Dependency] private readonly SharedHandsSystem _handsSystem = default!; - [Dependency] private readonly IdCardSystem _idCardSystem = default!; - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly TagSystem _tagSystem = default!; [Dependency] private readonly CargoSystem _cargoSystem = default!; - [Dependency] private readonly StationSystem _stationSystem = default!; [Dependency] private readonly ChatSystem _chatSystem = default!; - [Dependency] private readonly OpenableSystem _openable = default!; + [Dependency] private readonly DamageableSystem _damageableSystem = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly SharedContainerSystem _containerSystem = default!; - [Dependency] private readonly SolutionContainerSystem _solutionContainerSystem = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IdCardSystem _idCardSystem = default!; + [Dependency] private readonly MetaDataSystem _metaDataSystem = default!; + [Dependency] private readonly MindSystem _mindSystem = default!; + [Dependency] private readonly OpenableSystem _openable = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!; [Dependency] private readonly SharedAudioSystem _audioSystem = default!; - [Dependency] private readonly DamageableSystem _damageableSystem = default!; - [Dependency] private readonly ItemSystem _itemSystem = default!; - [Dependency] private readonly MindSystem _mindSystem = default!; - [Dependency] private readonly MetaDataSystem _metaDataSystem = default!; + [Dependency] private readonly SharedContainerSystem _containerSystem = default!; + [Dependency] private readonly SharedHandsSystem _handsSystem = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solution = default!; + [Dependency] private readonly StationSystem _stationSystem = default!; + [Dependency] private readonly TagSystem _tagSystem = default!; // DeltaV - system that keeps track of mail and cargo stats [Dependency] private readonly LogisticStatsSystem _logisticsStatsSystem = default!; @@ -105,19 +95,20 @@ public override void Initialize() public override void Update(float frameTime) { base.Update(frameTime); - foreach (var mailTeleporter in EntityQuery()) + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var mailTeleporter)) { - if (TryComp(mailTeleporter.Owner, out var power) && !power.Powered) - return; + if (TryComp(uid, out var power) && !power.Powered) + continue; mailTeleporter.Accumulator += frameTime; if (mailTeleporter.Accumulator < mailTeleporter.TeleportInterval.TotalSeconds) continue; - mailTeleporter.Accumulator -= (float) mailTeleporter.TeleportInterval.TotalSeconds; - - SpawnMail(mailTeleporter.Owner, mailTeleporter); + mailTeleporter.Accumulator -= (float)mailTeleporter.TeleportInterval.TotalSeconds; + SpawnMail(uid, mailTeleporter); } } @@ -139,16 +130,14 @@ private void OnSpawnPlayer(PlayerSpawningEvent args) AddComp(args.SpawnResult.Value); } - private void OnRemove(EntityUid uid, MailComponent component, ComponentRemove args) + private static void OnRemove(EntityUid uid, MailComponent component, ComponentRemove args) { - // Make sure the priority timer doesn't run. - if (component.priorityCancelToken != null) - component.priorityCancelToken.Cancel(); + component.PriorityCancelToken?.Cancel(); } /// /// Try to open the mail. - /// + /// private void OnUseInHand(EntityUid uid, MailComponent component, UseInHandEvent args) { if (!component.IsEnabled) @@ -170,11 +159,11 @@ private void UnlockMail(EntityUid uid, MailComponent component) component.IsLocked = false; UpdateAntiTamperVisuals(uid, false); - if (component.IsPriority) - { + if (!component.IsPriority) + return; + // This is a successful delivery. Keep the failure timer from triggering. - if (component.priorityCancelToken != null) - component.priorityCancelToken.Cancel(); + component.PriorityCancelToken?.Cancel(); // The priority tape is visually considered to be a part of the // anti-tamper lock, so remove that too. @@ -183,7 +172,6 @@ private void UnlockMail(EntityUid uid, MailComponent component) // The examination code depends on this being false to not show // the priority tape description anymore. component.IsPriority = false; - } } /// @@ -194,26 +182,25 @@ private void OnAfterInteractUsing(EntityUid uid, MailComponent component, AfterI if (!args.CanReach || !component.IsLocked) return; - if (!TryComp(uid, out var access)) + if (!HasComp(uid)) return; IdCardComponent? idCard = null; // We need an ID card. - if (HasComp(args.Used)) /// Can we find it in a PDA if the user is using that? + if (HasComp(args.Used)) // Can we find it in a PDA if the user is using that? { - _idCardSystem.TryGetIdCard(args.Used, out var pdaID); - idCard = pdaID; + _idCardSystem.TryGetIdCard(args.Used, out var pdaId); + idCard = pdaId; } - - if (HasComp(args.Used)) /// Or are they using an id card directly? + if (idCard == null && HasComp(args.Used)) // If we still don't have an ID, check if the item itself is one idCard = Comp(args.Used); - if (idCard == null) /// Return if we still haven't found an id card. + if (idCard == null) // Return if we still haven't found an id card. return; if (!HasComp(uid)) { - if (idCard.FullName != component.Recipient || idCard.JobTitle != component.RecipientJob) + if (idCard.FullName != component.Recipient || idCard.LocalizedJobTitle != component.RecipientJob) { _popupSystem.PopupEntity(Loc.GetString("mail-recipient-mismatch"), uid, args.User); return; @@ -227,12 +214,14 @@ private void OnAfterInteractUsing(EntityUid uid, MailComponent component, AfterI } // DeltaV - Add earnings to logistic stats - ExecuteForEachLogisticsStats(uid, (station, logisticStats) => + ExecuteForEachLogisticsStats(uid, + (station, logisticStats) => { _logisticsStatsSystem.AddOpenedMailEarnings(station, logisticStats, component.IsProfitable ? component.Bounty : 0); }); + UnlockMail(uid, component); if (!component.IsProfitable) @@ -242,7 +231,6 @@ private void OnAfterInteractUsing(EntityUid uid, MailComponent component, AfterI } _popupSystem.PopupEntity(Loc.GetString("mail-unlocked-reward", ("bounty", component.Bounty)), uid, args.User); - component.IsProfitable = false; var query = EntityQueryEnumerator(); @@ -257,27 +245,26 @@ private void OnAfterInteractUsing(EntityUid uid, MailComponent component, AfterI private void OnExamined(EntityUid uid, MailComponent component, ExaminedEvent args) { - MailEntityStrings mailEntityStrings = component.IsLarge ? MailConstants.MailLarge : MailConstants.Mail; //Frontier: mail types stored per type (large mail) + var mailEntityStrings = component.IsLarge ? MailConstants.MailLarge : MailConstants.Mail; + if (!args.IsInDetailsRange) { - args.PushMarkup(Loc.GetString(mailEntityStrings.DescFar)); // Frontier: mail constants struct + args.PushMarkup(Loc.GetString(mailEntityStrings.DescFar)); return; } - args.PushMarkup(Loc.GetString(mailEntityStrings.DescClose, ("name", component.Recipient), ("job", component.RecipientJob))); // Frontier: mail constants struct + args.PushMarkup(Loc.GetString(mailEntityStrings.DescClose, + ("name", component.Recipient), + ("job", component.RecipientJob))); if (component.IsFragile) args.PushMarkup(Loc.GetString("mail-desc-fragile")); if (component.IsPriority) - { - if (component.IsProfitable) - args.PushMarkup(Loc.GetString("mail-desc-priority")); - else - args.PushMarkup(Loc.GetString("mail-desc-priority-inactive")); - } + args.PushMarkup(Loc.GetString(component.IsProfitable ? "mail-desc-priority" : "mail-desc-priority-inactive")); } + /// /// Penalize a station for a failed delivery. /// @@ -290,7 +277,7 @@ private void OnExamined(EntityUid uid, MailComponent component, ExaminedEvent ar /// but this allows a delivery to fail for other reasons too /// while having a generic function to handle different messages. /// - public void PenalizeStationFailedDelivery(EntityUid uid, MailComponent component, string localizationString) + private void PenalizeStationFailedDelivery(EntityUid uid, MailComponent component, string localizationString) { if (!component.IsProfitable) return; @@ -319,7 +306,8 @@ private void OnDestruction(EntityUid uid, MailComponent component, DestructionEv if (component.IsLocked) { // DeltaV - Tampered mail recorded to logistic stats - ExecuteForEachLogisticsStats(uid, (station, logisticStats) => + ExecuteForEachLogisticsStats(uid, + (station, logisticStats) => { _logisticsStatsSystem.AddTamperedMailLosses(station, logisticStats, @@ -355,18 +343,18 @@ private void OnBreak(EntityUid uid, MailComponent component, BreakageEventArgs a { _appearanceSystem.SetData(uid, MailVisuals.IsBroken, true); - if (component.IsFragile) - { - // DeltaV - Broken mail recorded to logistic stats - ExecuteForEachLogisticsStats(uid, (station, logisticStats) => + if (!component.IsFragile) + return; + // DeltaV - Broken mail recorded to logistic stats + ExecuteForEachLogisticsStats(uid, + (station, logisticStats) => { _logisticsStatsSystem.AddDamagedMailLosses(station, logisticStats, component.IsProfitable ? component.Penalty : 0); }); - PenalizeStationFailedDelivery(uid, component, "mail-penalty-fragile"); - } + PenalizeStationFailedDelivery(uid, component, "mail-penalty-fragile"); } private void OnMailEmagged(EntityUid uid, MailComponent component, ref GotEmaggedEvent args) @@ -386,7 +374,7 @@ private void OnMailEmagged(EntityUid uid, MailComponent component, ref GotEmagge /// /// Returns true if the given entity is considered fragile for delivery. /// - public bool IsEntityFragile(EntityUid uid, int fragileDamageThreshold) + private bool IsEntityFragile(EntityUid uid, int fragileDamageThreshold) { // It takes damage on falling. if (HasComp(uid)) @@ -396,73 +384,67 @@ public bool IsEntityFragile(EntityUid uid, int fragileDamageThreshold) if (HasComp(uid) && TryComp(uid, out var openable) && !_openable.IsClosed(uid, null, openable) - && _solutionContainerSystem.PercentFull(uid) > 0) + && _solution.PercentFull(uid) > 0) return true; // It might be made of non-reinforced glass. - if (TryComp(uid, out DamageableComponent? damageableComponent) + if (TryComp(uid, out var damageableComponent) && damageableComponent.DamageModifierSetId == "Glass") return true; // Fallback: It breaks or is destroyed in less than a damage // threshold dictated by the teleporter. - if (TryComp(uid, out DestructibleComponent? destructibleComp)) + if (!TryComp(uid, out var destructibleComp)) + return false; + + foreach (var threshold in destructibleComp.Thresholds) { - foreach (var threshold in destructibleComp.Thresholds) + if (threshold.Trigger is not DamageTrigger trigger || trigger.Damage >= fragileDamageThreshold) + continue; + + foreach (var behavior in threshold.Behaviors) { - if (threshold.Trigger is DamageTrigger trigger - && trigger.Damage < fragileDamageThreshold) - { - foreach (var behavior in threshold.Behaviors) - { - if (behavior is DoActsBehavior doActs) - { - if (doActs.Acts.HasFlag(ThresholdActs.Breakage) - || doActs.Acts.HasFlag(ThresholdActs.Destruction)) - { - return true; - } - } - } - } + if (behavior is not DoActsBehavior doActs) + continue; + + if (doActs.Acts.HasFlag(ThresholdActs.Breakage) || doActs.Acts.HasFlag(ThresholdActs.Destruction)) + return true; } } return false; } - public bool TryMatchJobTitleToDepartment(string jobTitle, [NotNullWhen(true)] out string? jobDepartment) + private bool TryMatchJobTitleToDepartment(string jobTitle, [NotNullWhen(true)] out string? jobDepartment) { - foreach (var department in _prototypeManager.EnumeratePrototypes()) + jobDepartment = null; + + var departments = _prototypeManager.EnumeratePrototypes(); + + foreach (var department in departments) { - foreach (var role in department.Roles) - { - if (_prototypeManager.TryIndex(role, out JobPrototype? _jobPrototype) - && _jobPrototype.LocalizedName == jobTitle) - { - jobDepartment = department.ID; - return true; - } - } + var foundJob = department.Roles + .Any(role => + _prototypeManager.TryIndex(role, out var jobPrototype) + && jobPrototype.LocalizedName == jobTitle); + + if (!foundJob) + continue; + + jobDepartment = department.ID; + return true; } - jobDepartment = null; return false; } - public bool TryMatchJobTitleToPrototype(string jobTitle, [NotNullWhen(true)] out JobPrototype? jobPrototype) + private bool TryMatchJobTitleToPrototype(string jobTitle, [NotNullWhen(true)] out JobPrototype? jobPrototype) { - foreach (var job in _prototypeManager.EnumeratePrototypes()) - { - if (job.LocalizedName == jobTitle) - { - jobPrototype = job; - return true; - } - } + jobPrototype = _prototypeManager + .EnumeratePrototypes() + .FirstOrDefault(job => job.LocalizedName == jobTitle); - jobPrototype = null; - return false; + return jobPrototype != null; } /// @@ -476,10 +458,8 @@ public void SetupMail(EntityUid uid, MailTeleporterComponent component, MailReci var mailComp = EnsureComp(uid); var container = _containerSystem.EnsureContainer(uid, "contents"); - foreach (var item in EntitySpawnCollection.GetSpawns(mailComp.Contents, _random)) + foreach (var entity in EntitySpawnCollection.GetSpawns(mailComp.Contents, _random).Select(item => EntityManager.SpawnEntity(item, Transform(uid).Coordinates))) { - var entity = EntityManager.SpawnEntity(item, Transform(uid).Coordinates); - if (!_containerSystem.Insert(entity, container)) { _sawmill.Error($"Can't insert {ToPrettyString(entity)} into new mail delivery {ToPrettyString(uid)}! Deleting it."); @@ -503,7 +483,7 @@ public void SetupMail(EntityUid uid, MailTeleporterComponent component, MailReci mailComp.Recipient = recipient.Name; // Frontier: Large mail bonus - MailEntityStrings mailEntityStrings = mailComp.IsLarge ? MailConstants.MailLarge : MailConstants.Mail; + var mailEntityStrings = mailComp.IsLarge ? MailConstants.MailLarge : MailConstants.Mail; if (mailComp.IsLarge) { mailComp.Bounty += component.LargeBonus; @@ -524,13 +504,14 @@ public void SetupMail(EntityUid uid, MailTeleporterComponent component, MailReci mailComp.Penalty += component.PriorityMalus; _appearanceSystem.SetData(uid, MailVisuals.IsPriority, true); - mailComp.priorityCancelToken = new CancellationTokenSource(); + mailComp.PriorityCancelToken = new CancellationTokenSource(); - Timer.Spawn((int) component.priorityDuration.TotalMilliseconds, + Timer.Spawn((int) component.PriorityDuration.TotalMilliseconds, () => { // DeltaV - Expired mail recorded to logistic stats - ExecuteForEachLogisticsStats(uid, (station, logisticStats) => + ExecuteForEachLogisticsStats(uid, + (station, logisticStats) => { _logisticsStatsSystem.AddExpiredMailLosses(station, logisticStats, @@ -539,18 +520,19 @@ public void SetupMail(EntityUid uid, MailTeleporterComponent component, MailReci PenalizeStationFailedDelivery(uid, mailComp, "mail-penalty-expired"); }, - mailComp.priorityCancelToken.Token); + mailComp.PriorityCancelToken.Token); } _appearanceSystem.SetData(uid, MailVisuals.JobIcon, recipient.JobIcon); - _metaDataSystem.SetEntityName(uid, Loc.GetString(mailEntityStrings.NameAddressed, // Frontier: move constant to MailEntityString + _metaDataSystem.SetEntityName(uid, + Loc.GetString(mailEntityStrings.NameAddressed, // Frontier: move constant to MailEntityString ("recipient", recipient.Name))); var accessReader = EnsureComp(uid); foreach (var access in recipient.AccessTags) { - accessReader.AccessLists.Add(new HashSet>{access}); + accessReader.AccessLists.Add([access]); } } @@ -558,69 +540,66 @@ public void SetupMail(EntityUid uid, MailTeleporterComponent component, MailReci /// Return the parcels waiting for delivery. /// /// The mail teleporter to check. - public List GetUndeliveredParcels(EntityUid uid) + private List GetUndeliveredParcels(EntityUid uid) { // An alternative solution would be to keep a list of the unopened // parcels spawned by the teleporter and see if they're not carried // by someone, but this is simple, and simple is good. - List undeliveredParcels = new(); - foreach (var entityInTile in TurfHelpers.GetEntitiesInTile(Transform(uid).Coordinates, LookupFlags.Dynamic | LookupFlags.Sundries)) - { - if (HasComp(entityInTile)) - undeliveredParcels.Add(entityInTile); - } - return undeliveredParcels; + var coordinates = Transform(uid).Coordinates; + const LookupFlags lookupFlags = LookupFlags.Dynamic | LookupFlags.Sundries; + + var entitiesInTile = _lookup.GetEntitiesIntersecting(coordinates, lookupFlags); + + return entitiesInTile.Where(HasComp).ToList(); } /// /// Return how many parcels are waiting for delivery. /// /// The mail teleporter to check. - public uint GetUndeliveredParcelCount(EntityUid uid) + private uint GetUndeliveredParcelCount(EntityUid uid) { - return (uint) GetUndeliveredParcels(uid).Count(); + return (uint)GetUndeliveredParcels(uid).Count; } /// /// Try to match a mail receiver to a mail teleporter. /// - public bool TryGetMailTeleporterForReceiver(MailReceiverComponent receiver, [NotNullWhen(true)] out MailTeleporterComponent? teleporterComponent) + public bool TryGetMailTeleporterForReceiver(EntityUid receiverUid, [NotNullWhen(true)] out MailTeleporterComponent? teleporterComponent, [NotNullWhen(true)] out EntityUid? teleporterUid) { - foreach (var mailTeleporter in EntityQuery()) + var query = EntityQueryEnumerator(); + var receiverStation = _stationSystem.GetOwningStation(receiverUid); + + while (query.MoveNext(out var uid, out var mailTeleporter)) { - if (_stationSystem.GetOwningStation(receiver.Owner) == _stationSystem.GetOwningStation(mailTeleporter.Owner)) - { - teleporterComponent = mailTeleporter; - return true; - } + var teleporterStation = _stationSystem.GetOwningStation(uid); + if (receiverStation != teleporterStation) + continue; + teleporterComponent = mailTeleporter; + teleporterUid = uid; + return true; } teleporterComponent = null; + teleporterUid = null; return false; } /// /// Try to construct a recipient struct for a mail parcel based on a receiver. /// - public bool TryGetMailRecipientForReceiver(MailReceiverComponent receiver, [NotNullWhen(true)] out MailRecipient? recipient) + public bool TryGetMailRecipientForReceiver(EntityUid receiverUid, [NotNullWhen(true)] out MailRecipient? recipient) { - // Because of the way this works, people are not considered - // candidates for mail if there is no valid PDA or ID in their slot - // or active hand. A better future solution might be checking the - // station records, possibly cross-referenced with the medical crew - // scanner to look for living recipients. TODO - - if (_idCardSystem.TryFindIdCard(receiver.Owner, out var idCard) + if (_idCardSystem.TryFindIdCard(receiverUid, out var idCard) && TryComp(idCard.Owner, out var access) - && idCard.Comp.FullName != null - && idCard.Comp.JobTitle != null) + && idCard.Comp.FullName != null) { var accessTags = access.Tags; + var mayReceivePriorityMail = !(_mindSystem.GetMind(receiverUid) == null); - var mayReceivePriorityMail = !(_mindSystem.GetMind(receiver.Owner) == null); - - recipient = new MailRecipient(idCard.Comp.FullName, - idCard.Comp.JobTitle, + recipient = new MailRecipient( + idCard.Comp.FullName, + idCard.Comp.LocalizedJobTitle ?? idCard.Comp.JobTitle ?? "Unknown", idCard.Comp.JobIcon, accessTags, mayReceivePriorityMail); @@ -635,16 +614,19 @@ public bool TryGetMailRecipientForReceiver(MailReceiverComponent receiver, [NotN /// /// Get the list of valid mail recipients for a mail teleporter. /// - public List GetMailRecipientCandidates(EntityUid uid) + private List GetMailRecipientCandidates(EntityUid uid) { - List candidateList = new(); + var candidateList = new List(); + var query = EntityQueryEnumerator(); + var teleporterStation = _stationSystem.GetOwningStation(uid); - foreach (var receiver in EntityQuery()) + while (query.MoveNext(out var receiverUid, out _)) { - if (_stationSystem.GetOwningStation(receiver.Owner) != _stationSystem.GetOwningStation(uid)) + var receiverStation = _stationSystem.GetOwningStation(receiverUid); + if (receiverStation != teleporterStation) continue; - if (TryGetMailRecipientForReceiver(receiver, out MailRecipient? recipient)) + if (TryGetMailRecipientForReceiver(receiverUid, out var recipient)) candidateList.Add(recipient.Value); } @@ -654,7 +636,7 @@ public List GetMailRecipientCandidates(EntityUid uid) /// /// Handle the spawning of all the mail for a mail teleporter. /// - public void SpawnMail(EntityUid uid, MailTeleporterComponent? component = null) + private void SpawnMail(EntityUid uid, MailTeleporterComponent? component = null) { if (!Resolve(uid, ref component)) { @@ -679,25 +661,27 @@ public void SpawnMail(EntityUid uid, MailTeleporterComponent? component = null) return; } - for (int i = 0; - i < component.MinimumDeliveriesPerTeleport + candidateList.Count / component.CandidatesPerDelivery; - i++) + var deliveryCount = component.MinimumDeliveriesPerTeleport + candidateList.Count / component.CandidatesPerDelivery; + + for (var i = 0; i < deliveryCount; i++) { var candidate = _random.Pick(candidateList); var possibleParcels = new Dictionary(pool.Everyone); - if (TryMatchJobTitleToPrototype(candidate.Job, out JobPrototype? jobPrototype) - && pool.Jobs.TryGetValue(jobPrototype.ID, out Dictionary? jobParcels)) + if (TryMatchJobTitleToPrototype(candidate.Job, out var jobPrototype) + && pool.Jobs.TryGetValue(jobPrototype.ID, out var jobParcels)) { - possibleParcels = possibleParcels.Union(jobParcels) + possibleParcels = possibleParcels + .Concat(jobParcels) .GroupBy(g => g.Key) .ToDictionary(pair => pair.Key, pair => pair.First().Value); } - if (TryMatchJobTitleToDepartment(candidate.Job, out string? department) - && pool.Departments.TryGetValue(department, out Dictionary? departmentParcels)) + if (TryMatchJobTitleToDepartment(candidate.Job, out var department) + && pool.Departments.TryGetValue(department, out var departmentParcels)) { - possibleParcels = possibleParcels.Union(departmentParcels) + possibleParcels = possibleParcels + .Concat(departmentParcels) .GroupBy(g => g.Key) .ToDictionary(pair => pair.Key, pair => pair.First().Value); } @@ -705,14 +689,14 @@ public void SpawnMail(EntityUid uid, MailTeleporterComponent? component = null) var accumulated = 0f; var randomPoint = _random.NextFloat(possibleParcels.Values.Sum()); string? chosenParcel = null; - foreach (var (key, weight) in possibleParcels) + + foreach (var parcel in possibleParcels) { - accumulated += weight; - if (accumulated >= randomPoint) - { - chosenParcel = key; - break; - } + accumulated += parcel.Value; + if (!(accumulated >= randomPoint)) + continue; + chosenParcel = parcel.Key; + break; } if (chosenParcel == null) @@ -721,7 +705,8 @@ public void SpawnMail(EntityUid uid, MailTeleporterComponent? component = null) return; } - var mail = EntityManager.SpawnEntity(chosenParcel, Transform(uid).Coordinates); + var coordinates = Transform(uid).Coordinates; + var mail = EntityManager.SpawnEntity(chosenParcel, coordinates); SetupMail(mail, component, candidate); _tagSystem.AddTag(mail, "Mail"); // Frontier @@ -733,7 +718,7 @@ public void SpawnMail(EntityUid uid, MailTeleporterComponent? component = null) _audioSystem.PlayPvs(component.TeleportSound, uid); } - public void OpenMail(EntityUid uid, MailComponent? component = null, EntityUid? user = null) + private void OpenMail(EntityUid uid, MailComponent? component = null, EntityUid? user = null) { if (!Resolve(uid, ref component)) return; @@ -787,21 +772,17 @@ private void ExecuteForEachLogisticsStats(EntityUid uid, } } - public struct MailRecipient + public struct MailRecipient( + string name, + string job, + string jobIcon, + HashSet> accessTags, + bool mayReceivePriorityMail) { - public string Name; - public string Job; - public string JobIcon; - public HashSet> AccessTags; - public bool MayReceivePriorityMail; - - public MailRecipient(string name, string job, string jobIcon, HashSet> accessTags, bool mayReceivePriorityMail) - { - Name = name; - Job = job; - JobIcon = jobIcon; - AccessTags = accessTags; - MayReceivePriorityMail = mayReceivePriorityMail; - } + public readonly string Name = name; + public readonly string Job = job; + public readonly string JobIcon = jobIcon; + public readonly HashSet> AccessTags = accessTags; + public readonly bool MayReceivePriorityMail = mayReceivePriorityMail; } } diff --git a/Content.Server/Nyanotrasen/Mail/MailCommands.cs b/Content.Server/DeltaV/Mail/MailCommands.cs similarity index 65% rename from Content.Server/Nyanotrasen/Mail/MailCommands.cs rename to Content.Server/DeltaV/Mail/MailCommands.cs index e28343710fe..057e7fb1596 100644 --- a/Content.Server/Nyanotrasen/Mail/MailCommands.cs +++ b/Content.Server/DeltaV/Mail/MailCommands.cs @@ -4,9 +4,10 @@ using Robust.Shared.Prototypes; using Content.Shared.Administration; using Content.Server.Administration; -using Content.Server.Mail.Components; +using Content.Server.DeltaV.Mail.Components; +using Content.Server.DeltaV.Mail.EntitySystems; -namespace Content.Server.Mail; +namespace Content.Server.DeltaV.Mail; [AdminCommand(AdminFlags.Fun)] public sealed class MailToCommand : IConsoleCommand @@ -19,10 +20,10 @@ public sealed class MailToCommand : IConsoleCommand [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; - private readonly string _blankMailPrototype = "MailAdminFun"; - private readonly string _blankLargeMailPrototype = "MailLargeAdminFun"; // Frontier: large mail - private readonly string _container = "storagebase"; - private readonly string _mailContainer = "contents"; + private const string BlankMailPrototype = "MailAdminFun"; + private const string BlankLargeMailPrototype = "MailLargeAdminFun"; // Frontier: large mail + private const string Container = "storagebase"; + private const string MailContainer = "contents"; public async void Execute(IConsoleShell shell, string argStr, string[] args) @@ -45,33 +46,33 @@ public async void Execute(IConsoleShell shell, string argStr, string[] args) return; } - if (!Boolean.TryParse(args[2], out var isFragile)) + if (!bool.TryParse(args[2], out var isFragile)) { shell.WriteError(Loc.GetString("shell-invalid-bool")); return; } - if (!Boolean.TryParse(args[3], out var isPriority)) + if (!bool.TryParse(args[3], out var isPriority)) { shell.WriteError(Loc.GetString("shell-invalid-bool")); return; } // Frontier: Large Mail - bool isLarge = false; - if (args.Length > 4 && !Boolean.TryParse(args[4], out isLarge)) + var isLarge = false; + if (args.Length > 4 && !bool.TryParse(args[4], out isLarge)) { shell.WriteError(Loc.GetString("shell-invalid-bool")); return; } - var mailPrototype = isLarge ? _blankLargeMailPrototype : _blankMailPrototype; + var mailPrototype = isLarge ? BlankLargeMailPrototype : BlankMailPrototype; // End Frontier - var _mailSystem = _entitySystemManager.GetEntitySystem(); - var _containerSystem = _entitySystemManager.GetEntitySystem(); + var mailSystem = _entitySystemManager.GetEntitySystem(); + var containerSystem = _entitySystemManager.GetEntitySystem(); - if (!_entityManager.TryGetComponent(recipientUid, out MailReceiverComponent? mailReceiver)) + if (!_entityManager.HasComponent(recipientUid)) { shell.WriteLine(Loc.GetString("command-mailto-no-mailreceiver", ("requiredComponent", nameof(MailReceiverComponent)))); return; @@ -79,48 +80,50 @@ public async void Execute(IConsoleShell shell, string argStr, string[] args) if (!_prototypeManager.HasIndex(mailPrototype)) // Frontier: _blankMailPrototype(containerUid).Coordinates); // Frontier: _blankMailPrototype(mailUid, _mailContainer); + var mailContents = containerSystem.EnsureContainer(mailUid, MailContainer); - if (!_entityManager.TryGetComponent(mailUid, out MailComponent? mailComponent)) + if (!_entityManager.TryGetComponent(mailUid, out var mailComponent)) { shell.WriteLine(Loc.GetString("command-mailto-bogus-mail", ("blankMail", mailPrototype), ("requiredMailComponent", nameof(MailComponent)))); // Frontier: _blankMailPrototype(teleporterComponent.Owner, "queued"); - _containerSystem.Insert(mailUid, teleporterQueue); + var teleporterQueue = containerSystem.EnsureContainer((EntityUid)teleporterUid, "queued"); + containerSystem.Insert(mailUid, teleporterQueue); shell.WriteLine(Loc.GetString("command-mailto-success", ("timeToTeleport", teleporterComponent.TeleportInterval.TotalSeconds - teleporterComponent.Accumulator))); } } @@ -133,12 +136,9 @@ public sealed class MailNowCommand : IConsoleCommand public string Help => Loc.GetString("command-mailnow-help", ("command", Command)); [Dependency] private readonly IEntityManager _entityManager = default!; - [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; public async void Execute(IConsoleShell shell, string argStr, string[] args) { - var _mailSystem = _entitySystemManager.GetEntitySystem(); - foreach (var mailTeleporter in _entityManager.EntityQuery()) { mailTeleporter.Accumulator += (float) mailTeleporter.TeleportInterval.TotalSeconds - mailTeleporter.Accumulator; diff --git a/Content.Server/_NF/Mail/MailConstants.cs b/Content.Server/DeltaV/Mail/MailConstants.cs similarity index 84% rename from Content.Server/_NF/Mail/MailConstants.cs rename to Content.Server/DeltaV/Mail/MailConstants.cs index a739a70ab89..06ed4953ab6 100644 --- a/Content.Server/_NF/Mail/MailConstants.cs +++ b/Content.Server/DeltaV/Mail/MailConstants.cs @@ -1,4 +1,4 @@ -namespace Content.Server.Mail +namespace Content.Server.DeltaV.Mail { /// /// A set of localized strings related to mail entities @@ -17,22 +17,22 @@ public sealed class MailConstants : EntitySystem { /// /// Locale strings related to small parcels. - /// + /// public static readonly MailEntityStrings Mail = new() { NameAddressed = "mail-item-name-addressed", DescClose = "mail-desc-close", - DescFar = "mail-desc-far" + DescFar = "mail-desc-far", }; /// /// Locale strings related to large packages. - /// + /// public static readonly MailEntityStrings MailLarge = new() { NameAddressed = "mail-large-item-name-addressed", DescClose = "mail-large-desc-close", - DescFar = "mail-large-desc-far" + DescFar = "mail-large-desc-far", }; } -} \ No newline at end of file +} diff --git a/Content.Server/DeltaV/Objectives/Systems/NotJobsRequirementSystem.cs b/Content.Server/DeltaV/Objectives/Systems/NotJobsRequirementSystem.cs index 4ba15008371..e6667f3b159 100644 --- a/Content.Server/DeltaV/Objectives/Systems/NotJobsRequirementSystem.cs +++ b/Content.Server/DeltaV/Objectives/Systems/NotJobsRequirementSystem.cs @@ -1,6 +1,6 @@ using Content.Server.Objectives.Components; using Content.Shared.Objectives.Components; -using Content.Shared.Roles.Jobs; +using Content.Shared.Roles; namespace Content.Server.Objectives.Systems; @@ -9,23 +9,29 @@ namespace Content.Server.Objectives.Systems; /// public sealed class NotJobsRequirementSystem : EntitySystem { + private EntityQuery _query; + public override void Initialize() { base.Initialize(); + _query = GetEntityQuery(); + SubscribeLocalEvent(OnCheck); } - private void OnCheck(EntityUid uid, NotJobsRequirementComponent comp, ref RequirementCheckEvent args) + private void OnCheck(Entity ent, ref RequirementCheckEvent args) { if (args.Cancelled) return; - // if player has no job then don't care - if (!TryComp(args.MindId, out var job)) - return; - foreach (string forbidJob in comp.Jobs) - if (job.Prototype == forbidJob) - args.Cancelled = true; + foreach (var forbidJob in ent.Comp.Jobs) + { + foreach (var roleId in args.Mind.MindRoles) + { + if (_query.CompOrNull(roleId)?.JobPrototype == forbidJob) + args.Cancelled = true; + } + } } } diff --git a/Content.Server/DeltaV/StationEvents/Events/FugitiveRule.cs b/Content.Server/DeltaV/StationEvents/Events/FugitiveRule.cs index 009f15faa64..5aed54bc976 100644 --- a/Content.Server/DeltaV/StationEvents/Events/FugitiveRule.cs +++ b/Content.Server/DeltaV/StationEvents/Events/FugitiveRule.cs @@ -1,5 +1,6 @@ using Content.Server.Antag; using Content.Server.Communications; +using Content.Server.Forensics; using Content.Server.StationEvents.Components; using Content.Shared.GameTicking.Components; using Content.Shared.Ghost; @@ -105,9 +106,9 @@ private Entity SpawnReport(FugitiveRuleComponent rule, Transform private FormattedMessage GenerateReport(EntityUid uid, FugitiveRuleComponent rule) { var report = new FormattedMessage(); - report.PushMarkup(Loc.GetString("fugitive-report-title", ("name", uid))); + report.PushMarkup(Loc.GetString("fugitive-report-title")); report.PushNewline(); - report.PushMarkup(Loc.GetString("fugitive-report-first-line", ("name", uid))); + report.PushMarkup(Loc.GetString("fugitive-report-first-line")); report.PushNewline(); if (!TryComp(uid, out var humanoid)) @@ -125,6 +126,13 @@ private FormattedMessage GenerateReport(EntityUid uid, FugitiveRuleComponent rul if (TryComp(uid, out var physics)) report.PushMarkup(Loc.GetString("fugitive-report-weight", ("weight", Math.Round(physics.FixturesMass)))); + // add a random identifying quality that officers can use to track them down + report.PushMarkup(RobustRandom.Next(0, 2) switch + { + 0 => Loc.GetString("fugitive-report-detail-dna", ("dna", GetDNA(uid))), + _ => Loc.GetString("fugitive-report-detail-prints", ("prints", GetPrints(uid))) + }); + report.PushNewline(); report.PushMarkup(Loc.GetString("fugitive-report-crimes-header")); @@ -139,6 +147,16 @@ private FormattedMessage GenerateReport(EntityUid uid, FugitiveRuleComponent rul return report; } + private string GetDNA(EntityUid uid) + { + return CompOrNull(uid)?.DNA ?? "?"; + } + + private string GetPrints(EntityUid uid) + { + return CompOrNull(uid)?.Fingerprint ?? "?"; + } + private void AddCharges(FormattedMessage report, FugitiveRuleComponent rule) { var crimeTypes = PrototypeManager.Index(rule.CrimesDataset); diff --git a/Content.Server/DeltaV/StationEvents/Events/GlimmerMobSpawnRule.cs b/Content.Server/DeltaV/StationEvents/Events/GlimmerMobSpawnRule.cs index f1ec9372897..9acfd3021d5 100644 --- a/Content.Server/DeltaV/StationEvents/Events/GlimmerMobSpawnRule.cs +++ b/Content.Server/DeltaV/StationEvents/Events/GlimmerMobSpawnRule.cs @@ -1,5 +1,6 @@ using System.Linq; using Content.Server.Psionics.Glimmer; +using Content.Server.Station.Systems; using Content.Server.StationEvents; using Content.Server.StationEvents.Components; using Content.Server.StationEvents.Events; @@ -15,14 +16,18 @@ namespace Content.Server.DeltaV.StationEvents.Events; public sealed class GlimmerMobRule : StationEventSystem { [Dependency] private readonly GlimmerSystem _glimmer = default!; + [Dependency] private readonly StationSystem _stationSystem = default!; protected override void Started(EntityUid uid, GlimmerMobRuleComponent comp, GameRuleComponent gameRule, GameRuleStartedEvent args) { base.Started(uid, comp, gameRule, args); - var glimmerSources = GetCoords(); - var normalSpawns = GetCoords(); - var hiddenSpawns = GetCoords(); + if (!TryGetRandomStation(out var station)) + return; + + var glimmerSources = GetCoords(station.Value); + var normalSpawns = GetCoords(station.Value); + var hiddenSpawns = GetCoords(station.Value); var psionics = EntityQuery().Count(); var baseCount = Math.Max(1, psionics / comp.MobsPerPsionic); @@ -43,15 +48,19 @@ protected override void Started(EntityUid uid, GlimmerMobRuleComponent comp, Gam } } - private List GetCoords() where T : IComponent + private List GetCoords(EntityUid station) where T : IComponent { var coords = new List(); var query = EntityQueryEnumerator(); + while (query.MoveNext(out var xform, out _)) { - coords.Add(xform.Coordinates); - } + if (xform.GridUid == null) + continue; + if (_stationSystem.GetOwningStation(xform.GridUid.Value) == station) + coords.Add(xform.Coordinates); + } return coords; } diff --git a/Content.Server/DeltaV/StationEvents/Events/ParadoxClonerRule.cs b/Content.Server/DeltaV/StationEvents/Events/ParadoxClonerRule.cs index 102563ddcb2..27129e49e9a 100644 --- a/Content.Server/DeltaV/StationEvents/Events/ParadoxClonerRule.cs +++ b/Content.Server/DeltaV/StationEvents/Events/ParadoxClonerRule.cs @@ -59,16 +59,17 @@ private bool TrySpawnParadoxAnomaly(EntityUid spawner, [NotNullWhen(true)] out E clone = null; // Get a list of potential candidates - var candidates = new List<(EntityUid, Entity, HumanoidCharacterProfile)>(); + var candidates = new List<(EntityUid, EntityUid, ProtoId, HumanoidCharacterProfile)>(); var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var mindContainer, out var humanoid)) { if (humanoid.LastProfileLoaded is {} profile && - _mind.GetMind(uid, mindContainer) is {} mindId && - TryComp(mindId, out var job) && - !_role.MindIsAntagonist(mindId)) + mindContainer.Mind is {} mindId && + !_role.MindIsAntagonist(mindId) && + _role.MindHasRole(mindId, out var role) && + role?.Comp1.JobPrototype is {} job) { - candidates.Add((uid, (mindId, job), profile)); + candidates.Add((uid, mindId, job, profile)); } } @@ -82,10 +83,10 @@ private bool TrySpawnParadoxAnomaly(EntityUid spawner, [NotNullWhen(true)] out E return true; } - private EntityUid SpawnParadoxAnomaly(EntityUid spawner, List<(EntityUid, Entity, HumanoidCharacterProfile)> candidates) + private EntityUid SpawnParadoxAnomaly(EntityUid spawner, List<(EntityUid, EntityUid, ProtoId, HumanoidCharacterProfile)> candidates) { // Select a candidate. - var (uid, (mindId, job), profile) = _random.Pick(candidates); + var (uid, mindId, job, profile) = _random.Pick(candidates); // Spawn the clone. var coords = Transform(spawner).Coordinates; diff --git a/Content.Server/DeltaV/Tesla/TeslaEnergyBallSystem.PassiveDrain.cs b/Content.Server/DeltaV/Tesla/TeslaEnergyBallSystem.PassiveDrain.cs new file mode 100644 index 00000000000..76a4dc8008a --- /dev/null +++ b/Content.Server/DeltaV/Tesla/TeslaEnergyBallSystem.PassiveDrain.cs @@ -0,0 +1,29 @@ +using Content.Server.Tesla.Components; +using Robust.Shared.Timing; + +namespace Content.Server.Tesla.EntitySystems; + +/// +/// Manages the passive energy drain for the Tesla. +/// +public sealed partial class TeslaEnergyBallSystem +{ + [Dependency] private readonly IGameTiming _timing = default!; + + private static readonly TimeSpan UpdateInterval = TimeSpan.FromSeconds(1); + + public override void Update(float frameTime) + { + var curTime = _timing.CurTime; + var query = EntityQueryEnumerator(); + + while (query.MoveNext(out var uid, out var component)) + { + if (curTime < component.NextUpdateTime) + continue; + + component.NextUpdateTime = curTime + UpdateInterval; + AdjustEnergy(uid, component, -component.PassiveEnergyDrainRate); + } + } +} diff --git a/Content.Server/DeltaV/VoiceMask/SyrinxVoiceMaskComponent.cs b/Content.Server/DeltaV/VoiceMask/SyrinxVoiceMaskComponent.cs deleted file mode 100644 index b3fe3631b36..00000000000 --- a/Content.Server/DeltaV/VoiceMask/SyrinxVoiceMaskComponent.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Content.Shared.Speech; -using Robust.Shared.Prototypes; - -namespace Content.Server.VoiceMask; - -[RegisterComponent] -public sealed partial class SyrinxVoiceMaskComponent : Component -{ - [ViewVariables(VVAccess.ReadWrite)] public bool Enabled = true; - - [ViewVariables(VVAccess.ReadWrite)] public string VoiceName = "Unknown"; - - /// - /// If EnableSpeechVerbModification is true, overrides the speech verb used when this entity speaks. - /// - [DataField] - [ViewVariables(VVAccess.ReadWrite)] - public ProtoId? SpeechVerb; -} diff --git a/Content.Server/Destructible/Thresholds/Behaviors/TimerStartBehavior.cs b/Content.Server/Destructible/Thresholds/Behaviors/TimerStartBehavior.cs new file mode 100644 index 00000000000..97a5f8b7ef5 --- /dev/null +++ b/Content.Server/Destructible/Thresholds/Behaviors/TimerStartBehavior.cs @@ -0,0 +1,10 @@ +namespace Content.Server.Destructible.Thresholds.Behaviors; + +[DataDefinition] +public sealed partial class TimerStartBehavior : IThresholdBehavior +{ + public void Execute(EntityUid owner, DestructibleSystem system, EntityUid? cause = null) + { + system.TriggerSystem.StartTimer(owner, cause); + } +} diff --git a/Content.Server/Discord/WebhookMessages/VoteWebhooks.cs b/Content.Server/Discord/WebhookMessages/VoteWebhooks.cs new file mode 100644 index 00000000000..74953d10fa2 --- /dev/null +++ b/Content.Server/Discord/WebhookMessages/VoteWebhooks.cs @@ -0,0 +1,183 @@ +using Content.Server.GameTicking; +using Content.Server.Voting; +using Robust.Server; +using Robust.Shared.Configuration; +using Robust.Shared.Utility; +using System.Diagnostics; +using System.Text.Json; +using System.Text.Json.Nodes; + +namespace Content.Server.Discord.WebhookMessages; + +public sealed class VoteWebhooks : IPostInjectInit +{ + [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] private readonly IEntitySystemManager _entSys = default!; + [Dependency] private readonly DiscordWebhook _discord = default!; + [Dependency] private readonly IBaseServer _baseServer = default!; + + private ISawmill _sawmill = default!; + + public WebhookState? CreateWebhookIfConfigured(VoteOptions voteOptions, string? webhookUrl = null, string? customVoteName = null, string? customVoteMessage = null) + { + // All this webhook code is complete garbage. + // I tried to clean it up somewhat, at least to fix the glaring bugs in it. + // Jesus christ man what is with our code review process. + + if (string.IsNullOrEmpty(webhookUrl)) + return null; + + // Set up the webhook payload + var serverName = _baseServer.ServerName; + + var fields = new List(); + + foreach (var voteOption in voteOptions.Options) + { + var newVote = new WebhookEmbedField + { + Name = voteOption.text, + Value = Loc.GetString("custom-vote-webhook-option-pending") + }; + fields.Add(newVote); + } + + var gameTicker = _entSys.GetEntitySystemOrNull(); + _sawmill = Logger.GetSawmill("discord"); + + var runLevel = gameTicker != null ? Loc.GetString($"game-run-level-{gameTicker.RunLevel}") : ""; + var runId = gameTicker != null ? gameTicker.RoundId : 0; + + var voteName = customVoteName ?? Loc.GetString("custom-vote-webhook-name"); + var description = customVoteMessage ?? voteOptions.Title; + + var payload = new WebhookPayload() + { + Username = voteName, + Embeds = new List + { + new() + { + Title = voteOptions.InitiatorText, + Color = 13438992, // #CD1010 + Description = description, + Footer = new WebhookEmbedFooter + { + Text = Loc.GetString( + "custom-vote-webhook-footer", + ("serverName", serverName), + ("roundId", runId), + ("runLevel", runLevel)), + }, + + Fields = fields, + }, + }, + }; + + var state = new WebhookState + { + WebhookUrl = webhookUrl, + Payload = payload, + }; + + CreateWebhookMessage(state, payload); + + return state; + } + + public void UpdateWebhookIfConfigured(WebhookState? state, VoteFinishedEventArgs finished) + { + if (state == null) + return; + + var embed = state.Payload.Embeds![0]; + embed.Color = 2353993; // #23EB49 + + for (var i = 0; i < finished.Votes.Count; i++) + { + var oldName = embed.Fields[i].Name; + var newValue = finished.Votes[i].ToString(); + embed.Fields[i] = new WebhookEmbedField { Name = oldName, Value = newValue, Inline = true }; + } + + state.Payload.Embeds[0] = embed; + + UpdateWebhookMessage(state, state.Payload, state.MessageId); + } + + public void UpdateCancelledWebhookIfConfigured(WebhookState? state, string? customCancelReason = null) + { + if (state == null) + return; + + var embed = state.Payload.Embeds![0]; + embed.Color = 13356304; // #CBCD10 + if (customCancelReason == null) + embed.Description += "\n\n" + Loc.GetString("custom-vote-webhook-cancelled"); + else + embed.Description += "\n\n" + customCancelReason; + + for (var i = 0; i < embed.Fields.Count; i++) + { + var oldName = embed.Fields[i].Name; + embed.Fields[i] = new WebhookEmbedField { Name = oldName, Value = Loc.GetString("custom-vote-webhook-option-cancelled"), Inline = true }; + } + + state.Payload.Embeds[0] = embed; + + UpdateWebhookMessage(state, state.Payload, state.MessageId); + } + + // Sends the payload's message. + public async void CreateWebhookMessage(WebhookState state, WebhookPayload payload) + { + try + { + if (await _discord.GetWebhook(state.WebhookUrl) is not { } identifier) + return; + + state.Identifier = identifier.ToIdentifier(); + _sawmill.Debug(JsonSerializer.Serialize(payload)); + + var request = await _discord.CreateMessage(identifier.ToIdentifier(), payload); + var content = await request.Content.ReadAsStringAsync(); + state.MessageId = ulong.Parse(JsonNode.Parse(content)?["id"]!.GetValue()!); + } + catch (Exception e) + { + _sawmill.Error($"Error while sending vote webhook to Discord: {e}"); + } + } + + // Edits a pre-existing payload message, given an ID + public async void UpdateWebhookMessage(WebhookState state, WebhookPayload payload, ulong id) + { + if (state.MessageId == 0) + { + _sawmill.Warning("Failed to deliver update to custom vote webhook: message ID was zero. This likely indicates a previous connection error sending the original message."); + return; + } + + DebugTools.Assert(state.Identifier != default); + + try + { + await _discord.EditMessage(state.Identifier, id, payload); + } + catch (Exception e) + { + _sawmill.Error($"Error while updating vote webhook on Discord: {e}"); + } + } + + public sealed class WebhookState + { + public required string WebhookUrl; + public required WebhookPayload Payload; + public WebhookIdentifier Identifier; + public ulong MessageId; + } + + void IPostInjectInit.PostInject() { } +} diff --git a/Content.Server/Doors/WireActions/DoorBoltWireAction.cs b/Content.Server/Doors/WireActions/DoorBoltWireAction.cs index fc1cf50cd87..80555f68f9b 100644 --- a/Content.Server/Doors/WireActions/DoorBoltWireAction.cs +++ b/Content.Server/Doors/WireActions/DoorBoltWireAction.cs @@ -2,7 +2,6 @@ using Content.Server.Wires; using Content.Shared.Doors; using Content.Shared.Doors.Components; -using Content.Shared.Doors.Systems; using Content.Shared.Wires; namespace Content.Server.Doors; diff --git a/Content.Server/Electrocution/ElectrocutionSystem.cs b/Content.Server/Electrocution/ElectrocutionSystem.cs index 67e60c9de46..88404c4aa96 100644 --- a/Content.Server/Electrocution/ElectrocutionSystem.cs +++ b/Content.Server/Electrocution/ElectrocutionSystem.cs @@ -488,4 +488,15 @@ private void PlayElectrocutionSound(EntityUid targetUid, EntityUid sourceUid, El } _audio.PlayPvs(electrified.ShockNoises, targetUid, AudioParams.Default.WithVolume(electrified.ShockVolume)); } + + public void SetElectrifiedWireCut(Entity ent, bool value) + { + if (ent.Comp.IsWireCut == value) + { + return; + } + + ent.Comp.IsWireCut = value; + Dirty(ent); + } } diff --git a/Content.Server/Ensnaring/EnsnareableSystem.Ensnaring.cs b/Content.Server/Ensnaring/EnsnareableSystem.Ensnaring.cs deleted file mode 100644 index 7d6963826ad..00000000000 --- a/Content.Server/Ensnaring/EnsnareableSystem.Ensnaring.cs +++ /dev/null @@ -1,189 +0,0 @@ -using System.Linq; -using Content.Server.Body.Systems; -using Content.Shared.Alert; -using Content.Shared.Body.Part; -using Content.Shared.CombatMode.Pacification; -using Content.Shared.Damage.Components; -using Content.Shared.Damage.Systems; -using Content.Shared.DoAfter; -using Content.Shared.Ensnaring; -using Content.Shared.Ensnaring.Components; -using Content.Shared.IdentityManagement; -using Content.Shared.StepTrigger.Systems; -using Content.Shared.Throwing; - -namespace Content.Server.Ensnaring; - -public sealed partial class EnsnareableSystem -{ - [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; - [Dependency] private readonly AlertsSystem _alerts = default!; - [Dependency] private readonly BodySystem _body = default!; - [Dependency] private readonly StaminaSystem _stamina = default!; - - public void InitializeEnsnaring() - { - SubscribeLocalEvent(OnComponentRemove); - SubscribeLocalEvent(AttemptStepTrigger); - SubscribeLocalEvent(OnStepTrigger); - SubscribeLocalEvent(OnThrowHit); - SubscribeLocalEvent(OnAttemptPacifiedThrow); - SubscribeLocalEvent(OnRemoveEnsnareAlert); - } - - private void OnAttemptPacifiedThrow(Entity ent, ref AttemptPacifiedThrowEvent args) - { - args.Cancel("pacified-cannot-throw-snare"); - } - - private void OnRemoveEnsnareAlert(Entity ent, ref RemoveEnsnareAlertEvent args) - { - if (args.Handled) - return; - - foreach (var ensnare in ent.Comp.Container.ContainedEntities) - { - if (!TryComp(ensnare, out var ensnaringComponent)) - return; - - TryFree(ent, ent, ensnare, ensnaringComponent); - - args.Handled = true; - // Only one snare at a time. - break; - } - } - - private void OnComponentRemove(EntityUid uid, EnsnaringComponent component, ComponentRemove args) - { - if (!TryComp(component.Ensnared, out var ensnared)) - return; - - if (ensnared.IsEnsnared) - ForceFree(uid, component); - } - - private void AttemptStepTrigger(EntityUid uid, EnsnaringComponent component, ref StepTriggerAttemptEvent args) - { - args.Continue = true; - } - - private void OnStepTrigger(EntityUid uid, EnsnaringComponent component, ref StepTriggeredOffEvent args) - { - TryEnsnare(args.Tripper, uid, component); - } - - private void OnThrowHit(EntityUid uid, EnsnaringComponent component, ThrowDoHitEvent args) - { - if (!component.CanThrowTrigger) - return; - - TryEnsnare(args.Target, uid, component); - } - - /// - /// Used where you want to try to ensnare an entity with the - /// - /// The entity that will be ensnared - /// The entity that is used to ensnare - /// The ensnaring component - public void TryEnsnare(EntityUid target, EntityUid ensnare, EnsnaringComponent component) - { - //Don't do anything if they don't have the ensnareable component. - if (!TryComp(target, out var ensnareable)) - return; - - var legs = _body.GetBodyChildrenOfType(target, BodyPartType.Leg).Count(); - var ensnaredLegs = (2 * ensnareable.Container.ContainedEntities.Count); - var freeLegs = legs - ensnaredLegs; - - if (freeLegs <= 0) - return; - - // Apply stamina damage to target if they weren't ensnared before. - if (ensnareable.IsEnsnared != true) - { - if (TryComp(target, out var stamina)) - { - _stamina.TakeStaminaDamage(target, component.StaminaDamage, with: ensnare); - } - } - - component.Ensnared = target; - _container.Insert(ensnare, ensnareable.Container); - ensnareable.IsEnsnared = true; - Dirty(target, ensnareable); - - UpdateAlert(target, ensnareable); - var ev = new EnsnareEvent(component.WalkSpeed, component.SprintSpeed); - RaiseLocalEvent(target, ev); - } - - /// - /// Used where you want to try to free an entity with the - /// - /// The entity that will be freed - /// The entity that is freeing the target - /// The entity used to ensnare - /// The ensnaring component - public void TryFree(EntityUid target, EntityUid user, EntityUid ensnare, EnsnaringComponent component) - { - // Don't do anything if they don't have the ensnareable component. - if (!HasComp(target)) - return; - - var freeTime = user == target ? component.BreakoutTime : component.FreeTime; - var breakOnMove = !component.CanMoveBreakout; - - var doAfterEventArgs = new DoAfterArgs(EntityManager, user, freeTime, new EnsnareableDoAfterEvent(), target, target: target, used: ensnare) - { - BreakOnMove = breakOnMove, - BreakOnDamage = false, - NeedHand = true, - BreakOnDropItem = false, - }; - - if (!_doAfter.TryStartDoAfter(doAfterEventArgs)) - return; - - if (user == target) - _popup.PopupEntity(Loc.GetString("ensnare-component-try-free", ("ensnare", ensnare)), target, target); - else - _popup.PopupEntity(Loc.GetString("ensnare-component-try-free-other", ("ensnare", ensnare), ("user", Identity.Entity(target, EntityManager))), user, user); - } - - /// - /// Used to force free someone for things like if the is removed - /// - public void ForceFree(EntityUid ensnare, EnsnaringComponent component) - { - if (component.Ensnared == null) - return; - - if (!TryComp(component.Ensnared, out var ensnareable)) - return; - - var target = component.Ensnared.Value; - - _container.Remove(ensnare, ensnareable.Container, force: true); - ensnareable.IsEnsnared = ensnareable.Container.ContainedEntities.Count > 0; - Dirty(component.Ensnared.Value, ensnareable); - component.Ensnared = null; - - UpdateAlert(target, ensnareable); - var ev = new EnsnareRemoveEvent(component.WalkSpeed, component.SprintSpeed); - RaiseLocalEvent(ensnare, ev); - } - - /// - /// Update the Ensnared alert for an entity. - /// - /// The entity that has been affected by a snare - public void UpdateAlert(EntityUid target, EnsnareableComponent component) - { - if (!component.IsEnsnared) - _alerts.ClearAlert(target, component.EnsnaredAlert); - else - _alerts.ShowAlert(target, component.EnsnaredAlert); - } -} diff --git a/Content.Server/Ensnaring/EnsnareableSystem.cs b/Content.Server/Ensnaring/EnsnareableSystem.cs index d732c5f3a39..778d7b35804 100644 --- a/Content.Server/Ensnaring/EnsnareableSystem.cs +++ b/Content.Server/Ensnaring/EnsnareableSystem.cs @@ -1,61 +1,5 @@ -using Content.Server.Popups; -using Content.Shared.DoAfter; using Content.Shared.Ensnaring; -using Content.Shared.Ensnaring.Components; -using Content.Shared.Hands.EntitySystems; -using Content.Shared.Popups; -using Robust.Server.Containers; -using Robust.Shared.Containers; namespace Content.Server.Ensnaring; -public sealed partial class EnsnareableSystem : SharedEnsnareableSystem -{ - [Dependency] private readonly ContainerSystem _container = default!; - [Dependency] private readonly SharedHandsSystem _hands = default!; - [Dependency] private readonly PopupSystem _popup = default!; - - public override void Initialize() - { - base.Initialize(); - - InitializeEnsnaring(); - - SubscribeLocalEvent(OnEnsnareableInit); - SubscribeLocalEvent(OnDoAfter); - } - - private void OnEnsnareableInit(EntityUid uid, EnsnareableComponent component, ComponentInit args) - { - component.Container = _container.EnsureContainer(uid, "ensnare"); - } - - private void OnDoAfter(EntityUid uid, EnsnareableComponent component, DoAfterEvent args) - { - if (args.Args.Target == null) - return; - - if (args.Handled || !TryComp(args.Args.Used, out var ensnaring)) - return; - - if (args.Cancelled || !_container.Remove(args.Args.Used.Value, component.Container)) - { - _popup.PopupEntity(Loc.GetString("ensnare-component-try-free-fail", ("ensnare", args.Args.Used)), uid, uid, PopupType.MediumCaution); - return; - } - - component.IsEnsnared = component.Container.ContainedEntities.Count > 0; - Dirty(uid, component); - ensnaring.Ensnared = null; - - _hands.PickupOrDrop(args.Args.User, args.Args.Used.Value); - - _popup.PopupEntity(Loc.GetString("ensnare-component-try-free-complete", ("ensnare", args.Args.Used)), uid, uid, PopupType.Medium); - - UpdateAlert(args.Args.Target.Value, component); - var ev = new EnsnareRemoveEvent(ensnaring.WalkSpeed, ensnaring.SprintSpeed); - RaiseLocalEvent(uid, ev); - - args.Handled = true; - } -} +public sealed class EnsnareableSystem : SharedEnsnareableSystem; diff --git a/Content.Server/EntityEffects/EffectConditions/JobCondition.cs b/Content.Server/EntityEffects/EffectConditions/JobCondition.cs index 20d67d6de0c..9621d6945f6 100644 --- a/Content.Server/EntityEffects/EffectConditions/JobCondition.cs +++ b/Content.Server/EntityEffects/EffectConditions/JobCondition.cs @@ -1,49 +1,53 @@ using System.Linq; using Content.Shared.EntityEffects; -using Content.Shared.Mobs; -using Content.Shared.Mobs.Components; using Content.Shared.Localizations; -using Robust.Shared.Prototypes; using Content.Shared.Mind; using Content.Shared.Mind.Components; using Content.Shared.Roles; using Content.Shared.Roles.Jobs; -using Content.Shared.Station; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; -using Robust.Shared.IoC; +using Robust.Shared.Prototypes; namespace Content.Server.EntityEffects.EffectConditions; public sealed partial class JobCondition : EntityEffectCondition { [DataField(required: true)] public List> Job; - + public override bool Condition(EntityEffectBaseArgs args) - { + { args.EntityManager.TryGetComponent(args.TargetEntity, out var mindContainer); - if (mindContainer != null && mindContainer.Mind != null) + + if ( mindContainer is null + || !args.EntityManager.TryGetComponent(mindContainer.Mind, out var mind)) + return false; + + foreach (var roleId in mind.MindRoles) { - var prototypeManager = IoCManager.Resolve(); - if (args.EntityManager.TryGetComponent(mindContainer?.Mind, out var comp) && prototypeManager.TryIndex(comp.Prototype, out var prototype)) + if(!args.EntityManager.HasComponent(roleId)) + continue; + + if (!args.EntityManager.TryGetComponent(roleId, out var mindRole)) { - foreach (var jobId in Job) - { - if (prototype.ID == jobId) - { - return true; - } - } + Logger.Error($"Encountered job mind role entity {roleId} without a {nameof(MindRoleComponent)}"); + continue; } + + if (mindRole.JobPrototype == null) + { + Logger.Error($"Encountered job mind role entity {roleId} without a {nameof(JobPrototype)}"); + continue; + } + + if (Job.Contains(mindRole.JobPrototype.Value)) + return true; } - + return false; } - + public override string GuidebookExplanation(IPrototypeManager prototype) { var localizedNames = Job.Select(jobId => prototype.Index(jobId).LocalizedName).ToList(); return Loc.GetString("reagent-effect-condition-guidebook-job-condition", ("job", ContentLocalizationManager.FormatListToOr(localizedNames))); } } - - diff --git a/Content.Server/Entry/IgnoredComponents.cs b/Content.Server/Entry/IgnoredComponents.cs index d9b81c8e5a5..04c45662272 100644 --- a/Content.Server/Entry/IgnoredComponents.cs +++ b/Content.Server/Entry/IgnoredComponents.cs @@ -12,7 +12,6 @@ public static class IgnoredComponents "GuideHelp", "Clickable", "Icon", - "HandheldGPS", "CableVisualizer", "SolutionItemStatus", "UIFragment", diff --git a/Content.Server/Explosion/Components/TimerStartOnSignalComponent.cs b/Content.Server/Explosion/Components/TimerStartOnSignalComponent.cs new file mode 100644 index 00000000000..9adc6dab871 --- /dev/null +++ b/Content.Server/Explosion/Components/TimerStartOnSignalComponent.cs @@ -0,0 +1,15 @@ +using Content.Shared.DeviceLinking; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Server.Explosion.Components +{ + /// + /// Sends a trigger when signal is received. + /// + [RegisterComponent] + public sealed partial class TimerStartOnSignalComponent : Component + { + [DataField("port", customTypeSerializer: typeof(PrototypeIdSerializer))] + public string Port = "Timer"; + } +} diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.GridMap.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.GridMap.cs index 75bb606441a..09f89abae14 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.GridMap.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.GridMap.cs @@ -29,7 +29,7 @@ private void OnGridStartup(GridStartupEvent ev) Dictionary edges = new(); _gridEdges[ev.EntityUid] = edges; - foreach (var tileRef in grid.GetAllTiles()) + foreach (var tileRef in _map.GetAllTiles(ev.EntityUid, grid)) { if (IsEdge(grid, tileRef.GridIndices, out var dir)) edges.Add(tileRef.GridIndices, dir); diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs index 6d0cbcf2794..6335a9b32cd 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.Processing.cs @@ -487,9 +487,12 @@ private void ProcessEntity( && physics.BodyType == BodyType.Dynamic) { var pos = _transformSystem.GetWorldPosition(xform); + var dir = pos - epicenter.Position; + if (dir.IsLengthZero()) + dir = _robustRandom.NextVector2().Normalized(); _throwingSystem.TryThrow( uid, - pos - epicenter.Position, + dir, physics, xform, _projectileQuery, @@ -665,6 +668,7 @@ struct ExplosionData private readonly IEntityManager _entMan; private readonly ExplosionSystem _system; + private readonly SharedMapSystem _mapSystem; public readonly EntityUid VisualEnt; @@ -687,11 +691,13 @@ public Explosion(ExplosionSystem system, IEntityManager entMan, IMapManager mapMan, EntityUid visualEnt, - EntityUid? cause) + EntityUid? cause, + SharedMapSystem mapSystem) { VisualEnt = visualEnt; Cause = cause; _system = system; + _mapSystem = mapSystem; ExplosionType = explosionType; _tileSetIntensity = tileSetIntensity; Epicenter = epicenter; @@ -898,7 +904,7 @@ private void SetTiles() { if (list.Count > 0 && _entMan.EntityExists(grid.Owner)) { - grid.SetTiles(list); + _mapSystem.SetTiles(grid.Owner, grid, list); } } _tileUpdateDict.Clear(); diff --git a/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs b/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs index cd0ca1c22eb..a919204c05c 100644 --- a/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs +++ b/Content.Server/Explosion/EntitySystems/ExplosionSystem.cs @@ -396,7 +396,8 @@ public void QueueExplosion(MapCoordinates epicenter, EntityManager, _mapManager, visualEnt, - queued.Cause); + queued.Cause, + _map); } private void CameraShake(float range, MapCoordinates epicenter, float totalIntensity) diff --git a/Content.Server/Explosion/EntitySystems/TriggerSystem.Signal.cs b/Content.Server/Explosion/EntitySystems/TriggerSystem.Signal.cs index ffd47f0257b..ce4d201f289 100644 --- a/Content.Server/Explosion/EntitySystems/TriggerSystem.Signal.cs +++ b/Content.Server/Explosion/EntitySystems/TriggerSystem.Signal.cs @@ -11,6 +11,9 @@ private void InitializeSignal() { SubscribeLocalEvent(OnSignalReceived); SubscribeLocalEvent(OnInit); + + SubscribeLocalEvent(OnTimerSignalReceived); + SubscribeLocalEvent(OnTimerSignalInit); } private void OnSignalReceived(EntityUid uid, TriggerOnSignalComponent component, ref SignalReceivedEvent args) @@ -24,5 +27,17 @@ private void OnInit(EntityUid uid, TriggerOnSignalComponent component, Component { _signalSystem.EnsureSinkPorts(uid, component.Port); } + + private void OnTimerSignalReceived(EntityUid uid, TimerStartOnSignalComponent component, ref SignalReceivedEvent args) + { + if (args.Port != component.Port) + return; + + StartTimer(uid, args.Trigger); + } + private void OnTimerSignalInit(EntityUid uid, TimerStartOnSignalComponent component, ComponentInit args) + { + _signalSystem.EnsureSinkPorts(uid, component.Port); + } } } diff --git a/Content.Server/Explosion/EntitySystems/TriggerSystem.cs b/Content.Server/Explosion/EntitySystems/TriggerSystem.cs index 57847551aa7..57e8e9cb62f 100644 --- a/Content.Server/Explosion/EntitySystems/TriggerSystem.cs +++ b/Content.Server/Explosion/EntitySystems/TriggerSystem.cs @@ -212,7 +212,8 @@ private void HandleRattleTrigger(EntityUid uid, RattleComponent component, Trigg return; // Gets location of the implant - var posText = FormattedMessage.RemoveMarkupOrThrow(_navMap.GetNearestBeaconString(uid)); + var position = _transformSystem.GetMapCoordinates(Transform(uid)).Position; // DeltaV + var posText = FormattedMessage.RemoveMarkupOrThrow(_navMap.GetNearestBeaconString(uid) + $" ({(int)position[0]}, {(int)position[1]})"); // DeltaV modified, adds the GPS coordinates on the message. var critMessage = Loc.GetString(component.CritMessage, ("user", implanted.ImplantedEntity.Value), ("position", posText)); var deathMessage = Loc.GetString(component.DeathMessage, ("user", implanted.ImplantedEntity.Value), ("position", posText)); diff --git a/Content.Server/Fluids/EntitySystems/DrainSystem.cs b/Content.Server/Fluids/EntitySystems/DrainSystem.cs index 091f3849861..69d15b8d008 100644 --- a/Content.Server/Fluids/EntitySystems/DrainSystem.cs +++ b/Content.Server/Fluids/EntitySystems/DrainSystem.cs @@ -1,5 +1,4 @@ using Content.Server.DoAfter; -using Content.Server.Fluids.Components; using Content.Server.Popups; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Audio; @@ -13,9 +12,7 @@ using Content.Shared.Interaction; using Content.Shared.Tag; using Content.Shared.Verbs; -using Robust.Server.GameObjects; using Robust.Shared.Audio.Systems; -using Robust.Shared.Collections; using Robust.Shared.Prototypes; using Robust.Shared.Random; using Robust.Shared.Utility; @@ -32,19 +29,27 @@ public sealed class DrainSystem : SharedDrainSystem [Dependency] private readonly TagSystem _tagSystem = default!; [Dependency] private readonly DoAfterSystem _doAfterSystem = default!; [Dependency] private readonly PuddleSystem _puddleSystem = default!; - [Dependency] private readonly TransformSystem _transform = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + private readonly HashSet> _puddles = new(); + public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(OnDrainMapInit); SubscribeLocalEvent>(AddEmptyVerb); SubscribeLocalEvent(OnExamined); SubscribeLocalEvent(OnInteract); SubscribeLocalEvent(OnDoAfter); } + private void OnDrainMapInit(Entity ent, ref MapInitEvent args) + { + // Randomise puddle drains so roundstart ones don't all dump at the same time. + ent.Comp.Accumulator = _random.NextFloat(ent.Comp.DrainFrequency); + } + private void AddEmptyVerb(Entity entity, ref GetVerbsEvent args) { if (!args.CanAccess || !args.CanInteract || args.Using == null) @@ -118,9 +123,6 @@ public override void Update(float frameTime) { base.Update(frameTime); var managerQuery = GetEntityQuery(); - var xformQuery = GetEntityQuery(); - var puddleQuery = GetEntityQuery(); - var puddles = new ValueList<(Entity Entity, string Solution)>(); var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var drain)) @@ -158,22 +160,10 @@ public override void Update(float frameTime) // This will ensure that UnitsPerSecond is per second... var amount = drain.UnitsPerSecond * drain.DrainFrequency; - if (!xformQuery.TryGetComponent(uid, out var xform)) - continue; - - puddles.Clear(); - - foreach (var entity in _lookup.GetEntitiesInRange(_transform.GetMapCoordinates(uid, xform), drain.Range)) - { - // No InRangeUnobstructed because there's no collision group that fits right now - // and these are placed by mappers and not buildable/movable so shouldnt really be a problem... - if (puddleQuery.TryGetComponent(entity, out var puddle)) - { - puddles.Add(((entity, puddle), puddle.SolutionName)); - } - } + _puddles.Clear(); + _lookup.GetEntitiesInRange(Transform(uid).Coordinates, drain.Range, _puddles); - if (puddles.Count == 0) + if (_puddles.Count == 0) { _ambientSoundSystem.SetAmbience(uid, false); continue; @@ -181,13 +171,13 @@ public override void Update(float frameTime) _ambientSoundSystem.SetAmbience(uid, true); - amount /= puddles.Count; + amount /= _puddles.Count; - foreach (var (puddle, solution) in puddles) + foreach (var puddle in _puddles) { // Queue the solution deletion if it's empty. EvaporationSystem might also do this // but queuedelete should be pretty safe. - if (!_solutionContainerSystem.ResolveSolution(puddle.Owner, solution, ref puddle.Comp.Solution, out var puddleSolution)) + if (!_solutionContainerSystem.ResolveSolution(puddle.Owner, puddle.Comp.SolutionName, ref puddle.Comp.Solution, out var puddleSolution)) { EntityManager.QueueDeleteEntity(puddle); continue; diff --git a/Content.Server/Fluids/EntitySystems/SpraySystem.cs b/Content.Server/Fluids/EntitySystems/SpraySystem.cs index fe179be402f..a1f195bf43e 100644 --- a/Content.Server/Fluids/EntitySystems/SpraySystem.cs +++ b/Content.Server/Fluids/EntitySystems/SpraySystem.cs @@ -14,6 +14,7 @@ using Robust.Shared.Physics.Components; using Robust.Shared.Prototypes; using System.Numerics; +using Robust.Shared.Map; namespace Content.Server.Fluids.EntitySystems; @@ -35,6 +36,19 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(OnAfterInteract); + SubscribeLocalEvent(OnActivateInWorld); + } + + private void OnActivateInWorld(Entity entity, ref UserActivateInWorldEvent args) + { + if (args.Handled) + return; + + args.Handled = true; + + var targetMapPos = _transform.GetMapCoordinates(GetEntityQuery().GetComponent(args.Target)); + + Spray(entity, args.User, targetMapPos); } private void OnAfterInteract(Entity entity, ref AfterInteractEvent args) @@ -44,29 +58,36 @@ private void OnAfterInteract(Entity entity, ref AfterInteractEve args.Handled = true; + var clickPos = _transform.ToMapCoordinates(args.ClickLocation); + + Spray(entity, args.User, clickPos); + } + + public void Spray(Entity entity, EntityUid user, MapCoordinates mapcoord) + { if (!_solutionContainer.TryGetSolution(entity.Owner, SprayComponent.SolutionName, out var soln, out var solution)) return; - var ev = new SprayAttemptEvent(args.User); + var ev = new SprayAttemptEvent(user); RaiseLocalEvent(entity, ref ev); if (ev.Cancelled) return; - if (!TryComp(entity, out var useDelay) - || _useDelay.IsDelayed((entity, useDelay))) + if (TryComp(entity, out var useDelay) + && _useDelay.IsDelayed((entity, useDelay))) return; if (solution.Volume <= 0) { - _popupSystem.PopupEntity(Loc.GetString("spray-component-is-empty-message"), entity.Owner, args.User); + _popupSystem.PopupEntity(Loc.GetString("spray-component-is-empty-message"), entity.Owner, user); return; } var xformQuery = GetEntityQuery(); - var userXform = xformQuery.GetComponent(args.User); + var userXform = xformQuery.GetComponent(user); var userMapPos = _transform.GetMapCoordinates(userXform); - var clickMapPos = args.ClickLocation.ToMap(EntityManager, _transform); + var clickMapPos = mapcoord; var diffPos = clickMapPos.Position - userMapPos.Position; if (diffPos == Vector2.Zero || diffPos == Vector2Helpers.NaN) @@ -88,8 +109,6 @@ private void OnAfterInteract(Entity entity, ref AfterInteractEve var amount = Math.Max(Math.Min((solution.Volume / entity.Comp.TransferAmount).Int(), entity.Comp.VaporAmount), 1); var spread = entity.Comp.VaporSpread / amount; - // TODO: Just use usedelay homie. - var cooldownTime = 0f; for (var i = 0; i < amount; i++) { @@ -131,20 +150,19 @@ private void OnAfterInteract(Entity entity, ref AfterInteractEve // impulse direction is defined in world-coordinates, not local coordinates var impulseDirection = rotation.ToVec(); var time = diffLength / entity.Comp.SprayVelocity; - cooldownTime = MathF.Max(time, cooldownTime); - _vapor.Start(ent, vaporXform, impulseDirection * diffLength, entity.Comp.SprayVelocity, target, time, args.User); + _vapor.Start(ent, vaporXform, impulseDirection * diffLength, entity.Comp.SprayVelocity, target, time, user); - if (TryComp(args.User, out var body)) + if (TryComp(user, out var body)) { - if (_gravity.IsWeightless(args.User, body)) - _physics.ApplyLinearImpulse(args.User, -impulseDirection.Normalized() * entity.Comp.PushbackAmount, body: body); + if (_gravity.IsWeightless(user, body)) + _physics.ApplyLinearImpulse(user, -impulseDirection.Normalized() * entity.Comp.PushbackAmount, body: body); } } _audio.PlayPvs(entity.Comp.SpraySound, entity, entity.Comp.SpraySound.Params.WithVariation(0.125f)); - _useDelay.SetLength(entity.Owner, TimeSpan.FromSeconds(cooldownTime)); - _useDelay.TryResetDelay((entity, useDelay)); + if (useDelay != null) + _useDelay.TryResetDelay((entity, useDelay)); } } diff --git a/Content.Server/GameTicking/GameTicker.CVars.cs b/Content.Server/GameTicking/GameTicker.CVars.cs index 60ffa660f57..bb684597400 100644 --- a/Content.Server/GameTicking/GameTicker.CVars.cs +++ b/Content.Server/GameTicking/GameTicker.CVars.cs @@ -36,7 +36,7 @@ public sealed partial class GameTicker private void InitializeCVars() { - Subs.CVar(_configurationManager, CCVars.GameLobbyEnabled, value => + Subs.CVar(_cfg, CCVars.GameLobbyEnabled, value => { LobbyEnabled = value; foreach (var (userId, status) in _playerGameStatuses) @@ -47,23 +47,23 @@ private void InitializeCVars() LobbyEnabled ? PlayerGameStatus.NotReadyToPlay : PlayerGameStatus.ReadyToPlay; } }, true); - Subs.CVar(_configurationManager, CCVars.GameDummyTicker, value => DummyTicker = value, true); - Subs.CVar(_configurationManager, CCVars.GameLobbyDuration, value => LobbyDuration = TimeSpan.FromSeconds(value), true); - Subs.CVar(_configurationManager, CCVars.GameDisallowLateJoins, + Subs.CVar(_cfg, CCVars.GameDummyTicker, value => DummyTicker = value, true); + Subs.CVar(_cfg, CCVars.GameLobbyDuration, value => LobbyDuration = TimeSpan.FromSeconds(value), true); + Subs.CVar(_cfg, CCVars.GameDisallowLateJoins, value => { DisallowLateJoin = value; UpdateLateJoinStatus(); }, true); - Subs.CVar(_configurationManager, CCVars.AdminLogsServerName, value => + Subs.CVar(_cfg, CCVars.AdminLogsServerName, value => { // TODO why tf is the server name on admin logs ServerName = value; }, true); - Subs.CVar(_configurationManager, CCVars.DiscordRoundUpdateWebhook, value => + Subs.CVar(_cfg, CCVars.DiscordRoundUpdateWebhook, value => { if (!string.IsNullOrWhiteSpace(value)) { _discord.GetWebhook(value, data => _webhookIdentifier = data.ToIdentifier()); } }, true); - Subs.CVar(_configurationManager, CCVars.DiscordRoundEndRoleWebhook, value => + Subs.CVar(_cfg, CCVars.DiscordRoundEndRoleWebhook, value => { DiscordRoundEndRole = value; @@ -72,9 +72,9 @@ private void InitializeCVars() DiscordRoundEndRole = null; } }, true); - Subs.CVar(_configurationManager, CCVars.RoundEndSoundCollection, value => RoundEndSoundCollection = value, true); + Subs.CVar(_cfg, CCVars.RoundEndSoundCollection, value => RoundEndSoundCollection = value, true); #if EXCEPTION_TOLERANCE - Subs.CVar(_configurationManager, CCVars.RoundStartFailShutdownCount, value => RoundStartFailShutdownCount = value, true); + Subs.CVar(_cfg, CCVars.RoundStartFailShutdownCount, value => RoundStartFailShutdownCount = value, true); #endif } } diff --git a/Content.Server/GameTicking/GameTicker.GamePreset.cs b/Content.Server/GameTicking/GameTicker.GamePreset.cs index 5642e84f908..d1a8b062c48 100644 --- a/Content.Server/GameTicking/GameTicker.GamePreset.cs +++ b/Content.Server/GameTicking/GameTicker.GamePreset.cs @@ -41,9 +41,9 @@ void FailedPresetRestart() DelayStart(TimeSpan.FromSeconds(PresetFailedCooldownIncrease)); } - if (_configurationManager.GetCVar(CCVars.GameLobbyFallbackEnabled)) + if (_cfg.GetCVar(CCVars.GameLobbyFallbackEnabled)) { - var fallbackPresets = _configurationManager.GetCVar(CCVars.GameLobbyFallbackPreset).Split(","); + var fallbackPresets = _cfg.GetCVar(CCVars.GameLobbyFallbackPreset).Split(","); var startFailed = true; foreach (var preset in fallbackPresets) @@ -86,7 +86,7 @@ void FailedPresetRestart() private void InitializeGamePreset() { - SetGamePreset(LobbyEnabled ? _configurationManager.GetCVar(CCVars.GameLobbyDefaultPreset) : "sandbox"); + SetGamePreset(LobbyEnabled ? _cfg.GetCVar(CCVars.GameLobbyDefaultPreset) : "sandbox"); } public void SetGamePreset(GamePresetPrototype? preset, bool force = false) @@ -190,7 +190,7 @@ public void StartGamePresetRules() private void IncrementRoundNumber() { var playerIds = _playerGameStatuses.Keys.Select(player => player.UserId).ToArray(); - var serverName = _configurationManager.GetCVar(CCVars.AdminLogsServerName); + var serverName = _cfg.GetCVar(CCVars.AdminLogsServerName); // TODO FIXME AAAAAAAAAAAAAAAAAAAH THIS IS BROKEN // Task.Run as a terrible dirty workaround to avoid synchronization context deadlock from .Result here. diff --git a/Content.Server/GameTicking/GameTicker.Player.cs b/Content.Server/GameTicking/GameTicker.Player.cs index 5b8b03b248c..5b02dd975ef 100644 --- a/Content.Server/GameTicking/GameTicker.Player.cs +++ b/Content.Server/GameTicking/GameTicker.Player.cs @@ -1,5 +1,3 @@ -using System.Linq; -using Content.Server.Database; using Content.Shared.Administration; using Content.Shared.CCVar; using Content.Shared.GameTicking; @@ -9,7 +7,6 @@ using JetBrains.Annotations; using Robust.Server.Player; using Robust.Shared.Audio; -using Robust.Shared.Audio.Systems; using Robust.Shared.Enums; using Robust.Shared.Player; using Robust.Shared.Timing; @@ -21,8 +18,6 @@ namespace Content.Server.GameTicking public sealed partial class GameTicker { [Dependency] private readonly IPlayerManager _playerManager = default!; - [Dependency] private readonly IServerDbManager _dbManager = default!; - [Dependency] private readonly SharedAudioSystem _audioSystem = default!; private void InitializePlayer() { @@ -65,7 +60,7 @@ private async void PlayerStatusChanged(object? sender, SessionStatusEventArgs ar // timer time must be > tick length Timer.Spawn(0, () => _playerManager.JoinGame(args.Session)); - var record = await _dbManager.GetPlayerRecordByUserId(args.Session.UserId); + var record = await _db.GetPlayerRecordByUserId(args.Session.UserId); var firstConnection = record != null && Math.Abs((record.FirstSeenTime - record.LastSeenTime).TotalMinutes) < 1; @@ -75,8 +70,8 @@ private async void PlayerStatusChanged(object? sender, SessionStatusEventArgs ar RaiseNetworkEvent(GetConnectionStatusMsg(), session.Channel); - if (firstConnection && _configurationManager.GetCVar(CCVars.AdminNewPlayerJoinSound)) - _audioSystem.PlayGlobal(new SoundPathSpecifier("/Audio/Effects/newplayerping.ogg"), + if (firstConnection && _cfg.GetCVar(CCVars.AdminNewPlayerJoinSound)) + _audio.PlayGlobal(new SoundPathSpecifier("/Audio/Effects/newplayerping.ogg"), Filter.Empty().AddPlayers(_adminManager.ActiveAdmins), false, audioParams: new AudioParams { Volume = -5f }); diff --git a/Content.Server/GameTicking/GameTicker.Replays.cs b/Content.Server/GameTicking/GameTicker.Replays.cs index 9109fbf96a2..7efa52bd00c 100644 --- a/Content.Server/GameTicking/GameTicker.Replays.cs +++ b/Content.Server/GameTicking/GameTicker.Replays.cs @@ -127,8 +127,8 @@ private void ReplaysOnRecordingStopped(MappingDataNode metadata) metadata["gamemode"] = new ValueDataNode(CurrentPreset != null ? Loc.GetString(CurrentPreset.ModeTitle) : string.Empty); metadata["roundEndPlayers"] = _serialman.WriteValue(_replayRoundPlayerInfo); metadata["roundEndText"] = new ValueDataNode(_replayRoundText); - metadata["server_id"] = new ValueDataNode(_configurationManager.GetCVar(CCVars.ServerId)); - metadata["server_name"] = new ValueDataNode(_configurationManager.GetCVar(CCVars.AdminLogsServerName)); + metadata["server_id"] = new ValueDataNode(_cfg.GetCVar(CCVars.ServerId)); + metadata["server_name"] = new ValueDataNode(_cfg.GetCVar(CCVars.AdminLogsServerName)); metadata["roundId"] = new ValueDataNode(RoundId.ToString()); } diff --git a/Content.Server/GameTicking/GameTicker.RoundFlow.cs b/Content.Server/GameTicking/GameTicker.RoundFlow.cs index ca087c46ed4..a7dd5d6ab62 100644 --- a/Content.Server/GameTicking/GameTicker.RoundFlow.cs +++ b/Content.Server/GameTicking/GameTicker.RoundFlow.cs @@ -4,6 +4,7 @@ using Content.Server.GameTicking.Events; using Content.Server.Ghost; using Content.Server.Maps; +using Content.Server.Roles; using Content.Shared.CCVar; using Content.Shared.Database; using Content.Shared.GameTicking; @@ -26,6 +27,7 @@ namespace Content.Server.GameTicking public sealed partial class GameTicker { [Dependency] private readonly DiscordWebhook _discord = default!; + [Dependency] private readonly RoleSystem _role = default!; [Dependency] private readonly ITaskManager _taskManager = default!; private static readonly Counter RoundNumberMetric = Metrics.CreateCounter( @@ -190,9 +192,6 @@ public int ReadyPlayerCount() if (!_playerManager.TryGetSessionById(userId, out _)) continue; - if (_banManager.GetRoleBans(userId) == null) - continue; - total++; } @@ -236,11 +235,7 @@ public void StartRound(bool force = false) #if DEBUG DebugTools.Assert(_userDb.IsLoadComplete(session), $"Player was readied up but didn't have user DB data loaded yet??"); #endif - if (_banManager.GetRoleBans(userId) == null) - { - Logger.ErrorS("RoleBans", $"Role bans for player {session} {userId} have not been loaded yet."); - continue; - } + readyPlayers.Add(session); HumanoidCharacterProfile profile; if (_prefsManager.TryGetCachedPreferences(userId, out var preferences)) @@ -339,8 +334,23 @@ public void EndRound(string text = "") RunLevel = GameRunLevel.PostRound; - ShowRoundEndScoreboard(text); - SendRoundEndDiscordMessage(); + try + { + ShowRoundEndScoreboard(text); + } + catch (Exception e) + { + Log.Error($"Error while showing round end scoreboard: {e}"); + } + + try + { + SendRoundEndDiscordMessage(); + } + catch (Exception e) + { + Log.Error($"Error while sending round end Discord message: {e}"); + } } public void ShowRoundEndScoreboard(string text = "") @@ -364,7 +374,7 @@ public void ShowRoundEndScoreboard(string text = "") var listOfPlayerInfo = new List(); // Grab the great big book of all the Minds, we'll need them for this. var allMinds = EntityQueryEnumerator(); - var pvsOverride = _configurationManager.GetCVar(CCVars.RoundEndPVSOverrides); + var pvsOverride = _cfg.GetCVar(CCVars.RoundEndPVSOverrides); while (allMinds.MoveNext(out var mindId, out var mind)) { // TODO don't list redundant observer roles? @@ -373,7 +383,7 @@ public void ShowRoundEndScoreboard(string text = "") var userId = mind.UserId ?? mind.OriginalOwnerUserId; var connected = false; - var observer = HasComp(mindId); + var observer = _role.MindHasRole(mindId); // Continuing if (userId != null && _playerManager.ValidSessionId(userId.Value)) { @@ -400,7 +410,7 @@ public void ShowRoundEndScoreboard(string text = "") _pvsOverride.AddGlobalOverride(GetNetEntity(entity.Value), recursive: true); } - var roles = _roles.MindGetAllRoles(mindId); + var roles = _roles.MindGetAllRoleInfo(mindId); var playerEndRoundInfo = new RoundEndMessageEvent.RoundEndPlayerInfo() { diff --git a/Content.Server/GameTicking/GameTicker.Spawning.cs b/Content.Server/GameTicking/GameTicker.Spawning.cs index c20c18af129..8bec89747d9 100644 --- a/Content.Server/GameTicking/GameTicker.Spawning.cs +++ b/Content.Server/GameTicking/GameTicker.Spawning.cs @@ -3,8 +3,6 @@ using System.Numerics; using Content.Server.Administration.Managers; using Content.Server.GameTicking.Events; -using Content.Server.Ghost; -using Content.Server.Shuttles.Components; using Content.Server.Spawners.Components; using Content.Server.Speech.Components; using Content.Server.Station.Components; @@ -224,8 +222,7 @@ private void SpawnPlayer(ICommonSession player, _mind.SetUserId(newMind, data.UserId); var jobPrototype = _prototypeManager.Index(jobId); - var job = new JobComponent {Prototype = jobId}; - _roles.MindAddRole(newMind, job, silent: silent); + _roles.MindAddJobRole(newMind, silent: silent, jobPrototype:jobId); var jobName = _jobs.MindTryGetJobName(newMind); _playTimeTrackings.PlayerRolesChanged(player); @@ -238,7 +235,7 @@ private void SpawnPlayer(ICommonSession player, spawnPointType = SpawnPointType.Job; } - var mobMaybe = _stationSpawning.SpawnPlayerCharacterOnStation(station, job, character, spawnPointType: spawnPointType); // DeltaV: pass in spawn point type + var mobMaybe = _stationSpawning.SpawnPlayerCharacterOnStation(station, jobId, character, spawnPointType: spawnPointType); // DeltaV: pass in spawn point type DebugTools.AssertNotNull(mobMaybe); var mob = mobMaybe!.Value; @@ -277,13 +274,17 @@ private void SpawnPlayer(ICommonSession player, _stationJobs.TryAssignJob(station, jobPrototype, player.UserId); if (lateJoin) + { _adminLogger.Add(LogType.LateJoin, LogImpact.Medium, $"Player {player.Name} late joined as {character.Name:characterName} on station {Name(station):stationName} with {ToPrettyString(mob):entity} as a {jobName:jobName}."); + } else + { _adminLogger.Add(LogType.RoundStartJoin, LogImpact.Medium, $"Player {player.Name} joined as {character.Name:characterName} on station {Name(station):stationName} with {ToPrettyString(mob):entity} as a {jobName:jobName}."); + } // Make sure they're aware of extended access. if (Comp(station).ExtendedAccess @@ -369,7 +370,7 @@ public void SpawnObserver(ICommonSession player) var (mindId, mindComp) = _mind.CreateMind(player.UserId, name); mind = (mindId, mindComp); _mind.SetUserId(mind.Value, player.UserId); - _roles.MindAddRole(mind.Value, new ObserverRoleComponent()); + _roles.MindAddRole(mind.Value, "MindRoleObserver"); } var ghost = _ghost.SpawnGhost(mind.Value); diff --git a/Content.Server/GameTicking/GameTicker.cs b/Content.Server/GameTicking/GameTicker.cs index fa1e01c7a80..f8ba7e1d7d9 100644 --- a/Content.Server/GameTicking/GameTicker.cs +++ b/Content.Server/GameTicking/GameTicker.cs @@ -8,19 +8,15 @@ using Content.Server.Players.PlayTimeTracking; using Content.Server.Preferences.Managers; using Content.Server.ServerUpdates; -using Content.Server.Shuttles.Systems; using Content.Server.Station.Systems; using Content.Shared.Chat; -using Content.Shared.Damage; using Content.Shared.GameTicking; using Content.Shared.Mind; -using Content.Shared.Mobs.Systems; using Content.Shared.Roles; using Robust.Server; using Robust.Server.GameObjects; using Robust.Server.GameStates; using Robust.Shared.Audio.Systems; -using Robust.Shared.Configuration; using Robust.Shared.Console; using Robust.Shared.Map; using Robust.Shared.Prototypes; @@ -39,7 +35,6 @@ public sealed partial class GameTicker : SharedGameTicker [Dependency] private readonly IBanManager _banManager = default!; [Dependency] private readonly IBaseServer _baseServer = default!; [Dependency] private readonly IChatManager _chatManager = default!; - [Dependency] private readonly IConfigurationManager _configurationManager = default!; [Dependency] private readonly IConsoleHost _consoleHost = default!; [Dependency] private readonly IGameMapManager _gameMapManager = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; diff --git a/Content.Server/GameTicking/Rules/Components/TraitorRuleComponent.cs b/Content.Server/GameTicking/Rules/Components/TraitorRuleComponent.cs index 62f92963aa7..6f82aa042f0 100644 --- a/Content.Server/GameTicking/Rules/Components/TraitorRuleComponent.cs +++ b/Content.Server/GameTicking/Rules/Components/TraitorRuleComponent.cs @@ -1,4 +1,5 @@ using Content.Shared.Dataset; +using Content.Shared.FixedPoint; using Content.Shared.NPC.Prototypes; using Content.Shared.Random; using Content.Shared.Roles; @@ -31,6 +32,24 @@ public sealed partial class TraitorRuleComponent : Component [DataField] public ProtoId ObjectiveIssuers = "TraitorCorporations"; + /// + /// Give this traitor an Uplink on spawn. + /// + [DataField] + public bool GiveUplink = true; + + /// + /// Give this traitor the codewords. + /// + [DataField] + public bool GiveCodewords = true; + + /// + /// Give this traitor a briefing in chat. + /// + [DataField] + public bool GiveBriefing = true; + public int TotalTraitors => TraitorMinds.Count; public string[] Codewords = new string[3]; @@ -68,5 +87,5 @@ public enum SelectionState /// The amount of TC traitors start with. /// [DataField] - public int StartingBalance = 20; + public FixedPoint2 StartingBalance = 20; } diff --git a/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs b/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs index 57239ee8c15..ca6548301a7 100644 --- a/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/NukeopsRuleSystem.cs @@ -9,7 +9,6 @@ using Content.Server.Shuttles.Events; using Content.Server.Shuttles.Systems; using Content.Server.Station.Components; -using Content.Server.Store.Components; using Content.Server.Store.Systems; using Content.Shared.GameTicking.Components; using Content.Shared.Mobs; @@ -31,9 +30,9 @@ namespace Content.Server.GameTicking.Rules; public sealed class NukeopsRuleSystem : GameRuleSystem { + [Dependency] private readonly AntagSelectionSystem _antag = default!; [Dependency] private readonly EmergencyShuttleSystem _emergency = default!; [Dependency] private readonly NpcFactionSystem _npcFaction = default!; - [Dependency] private readonly AntagSelectionSystem _antag = default!; [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly RoundEndSystem _roundEndSystem = default!; [Dependency] private readonly StoreSystem _store = default!; @@ -57,6 +56,8 @@ public override void Initialize() SubscribeLocalEvent(OnMobStateChanged); SubscribeLocalEvent(OnOperativeZombified); + SubscribeLocalEvent(OnGetBriefing); + SubscribeLocalEvent(OnShuttleFTLAttempt); SubscribeLocalEvent(OnWarDeclared); SubscribeLocalEvent(OnShuttleCallAttempt); @@ -65,7 +66,9 @@ public override void Initialize() SubscribeLocalEvent(OnRuleLoadedGrids); } - protected override void Started(EntityUid uid, NukeopsRuleComponent component, GameRuleComponent gameRule, + protected override void Started(EntityUid uid, + NukeopsRuleComponent component, + GameRuleComponent gameRule, GameRuleStartedEvent args) { var eligible = new List>(); @@ -85,7 +88,9 @@ protected override void Started(EntityUid uid, NukeopsRuleComponent component, G } #region Event Handlers - protected override void AppendRoundEndText(EntityUid uid, NukeopsRuleComponent component, GameRuleComponent gameRule, + protected override void AppendRoundEndText(EntityUid uid, + NukeopsRuleComponent component, + GameRuleComponent gameRule, ref RoundEndTextAppendEvent args) { var winText = Loc.GetString($"nukeops-{component.WinType.ToString().ToLower()}"); @@ -227,7 +232,8 @@ private void OnRoundEnd(Entity ent) // If the disk is currently at Central Command, the crew wins - just slightly. // This also implies that some nuclear operatives have died. - SetWinType(ent, diskAtCentCom + SetWinType(ent, + diskAtCentCom ? WinType.CrewMinor : WinType.OpsMinor); ent.Comp.WinConditions.Add(diskAtCentCom @@ -456,8 +462,11 @@ private void CheckRoundShouldEnd(Entity ent) : WinCondition.AllNukiesDead); SetWinType(ent, WinType.CrewMajor, false); - _roundEndSystem.DoRoundEndBehavior( - nukeops.RoundEndBehavior, nukeops.EvacShuttleTime, nukeops.RoundEndTextSender, nukeops.RoundEndTextShuttleCall, nukeops.RoundEndTextAnnouncement); + _roundEndSystem.DoRoundEndBehavior(nukeops.RoundEndBehavior, + nukeops.EvacShuttleTime, + nukeops.RoundEndTextSender, + nukeops.RoundEndTextShuttleCall, + nukeops.RoundEndTextAnnouncement); // prevent it called multiple times nukeops.RoundEndBehavior = RoundEndBehavior.Nothing; @@ -465,16 +474,22 @@ private void CheckRoundShouldEnd(Entity ent) private void OnAfterAntagEntSelected(Entity ent, ref AfterAntagEntitySelectedEvent args) { - if (ent.Comp.TargetStation is not { } station) - return; + var target = (ent.Comp.TargetStation is not null) ? Name(ent.Comp.TargetStation.Value) : "the target"; - _antag.SendBriefing(args.Session, Loc.GetString("nukeops-welcome", - ("station", station), + _antag.SendBriefing(args.Session, + Loc.GetString("nukeops-welcome", + ("station", target), ("name", Name(ent))), Color.Red, ent.Comp.GreetSoundNotification); } + private void OnGetBriefing(Entity role, ref GetBriefingEvent args) + { + // TODO Different character screen briefing for the 3 nukie types + args.Append(Loc.GetString("nukeops-briefing")); + } + /// /// Is this method the shitty glue holding together the last of my sanity? yes. /// Do i have a better solution? not presently. diff --git a/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs b/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs index c5f88ab6cf1..a313b78eaf1 100644 --- a/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/RevolutionaryRuleSystem.cs @@ -15,7 +15,6 @@ using Content.Shared.GameTicking.Components; using Content.Shared.Humanoid; using Content.Shared.IdentityManagement; -using Content.Shared.Mind; using Content.Shared.Mind.Components; using Content.Shared.Mindshield.Components; using Content.Shared.Mobs; @@ -38,8 +37,8 @@ namespace Content.Server.GameTicking.Rules; public sealed class RevolutionaryRuleSystem : GameRuleSystem { [Dependency] private readonly IAdminLogManager _adminLogManager = default!; - [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly AntagSelectionSystem _antag = default!; + [Dependency] private readonly EmergencyShuttleSystem _emergencyShuttle = default!; [Dependency] private readonly EuiManager _euiMan = default!; [Dependency] private readonly MindSystem _mind = default!; [Dependency] private readonly MobStateSystem _mobState = default!; @@ -49,7 +48,7 @@ public sealed class RevolutionaryRuleSystem : GameRuleSystem RevolutionaryNpcFaction = "Revolutionary"; @@ -59,9 +58,12 @@ public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnCommandMobStateChanged); + + SubscribeLocalEvent(OnPostFlash); SubscribeLocalEvent(OnHeadRevMobStateChanged); + SubscribeLocalEvent(OnGetBriefing); - SubscribeLocalEvent(OnPostFlash); + } protected override void Started(EntityUid uid, RevolutionaryRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args) @@ -85,7 +87,9 @@ protected override void ActiveTick(EntityUid uid, RevolutionaryRuleComponent com } } - protected override void AppendRoundEndText(EntityUid uid, RevolutionaryRuleComponent component, GameRuleComponent gameRule, + protected override void AppendRoundEndText(EntityUid uid, + RevolutionaryRuleComponent component, + GameRuleComponent gameRule, ref RoundEndTextAppendEvent args) { base.AppendRoundEndText(uid, component, gameRule, ref args); @@ -101,7 +105,9 @@ protected override void AppendRoundEndText(EntityUid uid, RevolutionaryRuleCompo args.AddLine(Loc.GetString("rev-headrev-count", ("initialCount", sessionData.Count))); foreach (var (mind, data, name) in sessionData) { - var count = CompOrNull(mind)?.ConvertedCount ?? 0; + _role.MindHasRole(mind, out var role); + var count = CompOrNull(role)?.ConvertedCount ?? 0; + args.AddLine(Loc.GetString("rev-headrev-name-user", ("name", name), ("username", data.UserName), @@ -113,10 +119,8 @@ protected override void AppendRoundEndText(EntityUid uid, RevolutionaryRuleCompo private void OnGetBriefing(EntityUid uid, RevolutionaryRoleComponent comp, ref GetBriefingEvent args) { - if (!TryComp(uid, out var mind) || mind.OwnedEntity == null) - return; - - var head = HasComp(mind.OwnedEntity); + var ent = args.Mind.Comp.OwnedEntity; + var head = HasComp(ent); args.Append(Loc.GetString(head ? "head-rev-briefing" : "rev-briefing")); } @@ -145,15 +149,20 @@ private void OnPostFlash(EntityUid uid, HeadRevolutionaryComponent comp, ref Aft if (ev.User != null) { - _adminLogManager.Add(LogType.Mind, LogImpact.Medium, $"{ToPrettyString(ev.User.Value)} converted {ToPrettyString(ev.Target)} into a Revolutionary"); + _adminLogManager.Add(LogType.Mind, + LogImpact.Medium, + $"{ToPrettyString(ev.User.Value)} converted {ToPrettyString(ev.Target)} into a Revolutionary"); - if (_mind.TryGetRole(ev.User.Value, out var headrev)) - headrev.ConvertedCount++; + if (_mind.TryGetMind(ev.User.Value, out var revMindId, out _)) + { + if (_role.MindHasRole(revMindId, out var role)) + role.Value.Comp2.ConvertedCount++; + } } if (mindId == default || !_role.MindHasRole(mindId)) { - _role.MindAddRole(mindId, new RevolutionaryRoleComponent { PrototypeId = RevPrototypeId }); + _role.MindAddRole(mindId, "MindRoleRevolutionary"); } if (mind?.Session != null) diff --git a/Content.Server/GameTicking/Rules/ThiefRuleSystem.cs b/Content.Server/GameTicking/Rules/ThiefRuleSystem.cs index 074b4c0df7a..b00ed386363 100644 --- a/Content.Server/GameTicking/Rules/ThiefRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/ThiefRuleSystem.cs @@ -1,18 +1,12 @@ using Content.Server.Antag; using Content.Server.GameTicking.Rules.Components; -using Content.Server.Mind; -using Content.Server.Objectives; using Content.Server.Roles; using Content.Shared.Humanoid; -using Content.Shared.Mind; -using Content.Shared.Objectives.Components; -using Robust.Shared.Random; namespace Content.Server.GameTicking.Rules; public sealed class ThiefRuleSystem : GameRuleSystem { - [Dependency] private readonly MindSystem _mindSystem = default!; [Dependency] private readonly AntagSelectionSystem _antag = default!; public override void Initialize() @@ -24,32 +18,33 @@ public override void Initialize() SubscribeLocalEvent(OnGetBriefing); } - private void AfterAntagSelected(Entity ent, ref AfterAntagEntitySelectedEvent args) + // Greeting upon thief activation + private void AfterAntagSelected(Entity mindId, ref AfterAntagEntitySelectedEvent args) { - if (!_mindSystem.TryGetMind(args.EntityUid, out var mindId, out var mind)) - return; - - //Generate objectives - _antag.SendBriefing(args.EntityUid, MakeBriefing(args.EntityUid), null, null); + var ent = args.EntityUid; + _antag.SendBriefing(ent, MakeBriefing(ent), null, null); } - //Add mind briefing - private void OnGetBriefing(Entity thief, ref GetBriefingEvent args) + // Character screen briefing + private void OnGetBriefing(Entity role, ref GetBriefingEvent args) { - if (!TryComp(thief.Owner, out var mind) || mind.OwnedEntity == null) - return; + var ent = args.Mind.Comp.OwnedEntity; - args.Append(MakeBriefing(mind.OwnedEntity.Value)); + if (ent is null) + return; + args.Append(MakeBriefing(ent.Value)); } - private string MakeBriefing(EntityUid thief) + private string MakeBriefing(EntityUid ent) { - var isHuman = HasComp(thief); + var isHuman = HasComp(ent); var briefing = isHuman ? Loc.GetString("thief-role-greeting-human") : Loc.GetString("thief-role-greeting-animal"); - briefing += "\n \n" + Loc.GetString("thief-role-greeting-equipment") + "\n"; + if (isHuman) + briefing += "\n \n" + Loc.GetString("thief-role-greeting-equipment") + "\n"; + return briefing; } } diff --git a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs index 4e4191a51bf..1987613763b 100644 --- a/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/TraitorRuleSystem.cs @@ -1,3 +1,4 @@ +using Content.Server.Administration.Logs; using Content.Server.Antag; using Content.Server.GameTicking.Rules.Components; using Content.Server.Mind; @@ -5,12 +6,12 @@ using Content.Server.PDA.Ringer; using Content.Server.Roles; using Content.Server.Traitor.Uplink; +using Content.Shared.Database; +using Content.Shared.FixedPoint; using Content.Shared.GameTicking.Components; using Content.Shared.Mind; using Content.Shared.NPC.Systems; -using Content.Shared.Objectives.Components; using Content.Shared.PDA; -using Content.Shared.Radio; using Content.Shared.Roles; using Content.Shared.Roles.Jobs; using Content.Shared.Roles.RoleCodeword; @@ -25,29 +26,29 @@ public sealed class TraitorRuleSystem : GameRuleSystem { private static readonly Color TraitorCodewordColor = Color.FromHex("#cc3b3b"); - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly NpcFactionSystem _npcFaction = default!; + [Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly AntagSelectionSystem _antag = default!; - [Dependency] private readonly UplinkSystem _uplink = default!; - [Dependency] private readonly MindSystem _mindSystem = default!; - [Dependency] private readonly SharedRoleSystem _roleSystem = default!; [Dependency] private readonly SharedJobSystem _jobs = default!; + [Dependency] private readonly MindSystem _mindSystem = default!; + [Dependency] private readonly NpcFactionSystem _npcFaction = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly SharedRoleCodewordSystem _roleCodewordSystem = default!; + [Dependency] private readonly SharedRoleSystem _roleSystem = default!; + [Dependency] private readonly UplinkSystem _uplink = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(AfterEntitySelected); - SubscribeLocalEvent(OnObjectivesTextPrepend); } protected override void Added(EntityUid uid, TraitorRuleComponent component, GameRuleComponent gameRule, GameRuleAddedEvent args) { base.Added(uid, component, gameRule, args); - SetCodewords(component); + SetCodewords(component, args.RuleEntity); } private void AfterEntitySelected(Entity ent, ref AfterAntagEntitySelectedEvent args) @@ -55,9 +56,10 @@ private void AfterEntitySelected(Entity ent, ref AfterAnta MakeTraitor(args.EntityUid, ent); } - private void SetCodewords(TraitorRuleComponent component) + private void SetCodewords(TraitorRuleComponent component, EntityUid ruleEntity) { component.Codewords = GenerateTraitorCodewords(component); + _adminLogger.Add(LogType.EventStarted, LogImpact.Low, $"Codewords generated for game rule {ToPrettyString(ruleEntity)}: {string.Join(", ", component.Codewords)}"); } public string[] GenerateTraitorCodewords(TraitorRuleComponent component) @@ -74,47 +76,59 @@ public string[] GenerateTraitorCodewords(TraitorRuleComponent component) return codewords; } - public bool MakeTraitor(EntityUid traitor, TraitorRuleComponent component, bool giveUplink = true) + public bool MakeTraitor(EntityUid traitor, TraitorRuleComponent component) { - //Grab the mind if it wasnt provided + //Grab the mind if it wasn't provided if (!_mindSystem.TryGetMind(traitor, out var mindId, out var mind)) return false; - var briefing = Loc.GetString("traitor-role-codewords-short", ("codewords", string.Join(", ", component.Codewords))); + var briefing = ""; + + if (component.GiveCodewords) + briefing = Loc.GetString("traitor-role-codewords-short", ("codewords", string.Join(", ", component.Codewords))); + var issuer = _random.Pick(_prototypeManager.Index(component.ObjectiveIssuers).Values); + // Uplink code will go here if applicable, but we still need the variable if there aren't any Note[]? code = null; - if (giveUplink) + + if (component.GiveUplink) { // Calculate the amount of currency on the uplink. var startingBalance = component.StartingBalance; - if (_jobs.MindTryGetJob(mindId, out _, out var prototype)) - startingBalance = Math.Max(startingBalance - prototype.AntagAdvantage, 0); - - // creadth: we need to create uplink for the antag. - // PDA should be in place already - var pda = _uplink.FindUplinkTarget(traitor); - if (pda == null || !_uplink.AddUplink(traitor, startingBalance, giveDiscounts: true)) - return false; - - // Give traitors their codewords and uplink code to keep in their character info menu - code = EnsureComp(pda.Value).Code; + if (_jobs.MindTryGetJob(mindId, out var prototype)) + { + if (startingBalance < prototype.AntagAdvantage) // Can't use Math functions on FixedPoint2 + startingBalance = 0; + else + startingBalance = startingBalance - prototype.AntagAdvantage; + } - // If giveUplink is false the uplink code part is omitted - briefing = string.Format("{0}\n{1}", briefing, - Loc.GetString("traitor-role-uplink-code-short", ("code", string.Join("-", code).Replace("sharp", "#")))); + // Choose and generate an Uplink, and return the uplink code if applicable + var uplinkParams = RequestUplink(traitor, startingBalance, briefing); + code = uplinkParams.Item1; + briefing = uplinkParams.Item2; } - _antag.SendBriefing(traitor, GenerateBriefing(component.Codewords, code, issuer), null, component.GreetSoundNotification); + string[]? codewords = null; + if (component.GiveCodewords) + codewords = component.Codewords; + if (component.GiveBriefing) + _antag.SendBriefing(traitor, GenerateBriefing(codewords, code, issuer), null, component.GreetSoundNotification); component.TraitorMinds.Add(mindId); // Assign briefing - _roleSystem.MindAddRole(mindId, new RoleBriefingComponent + //Since this provides neither an antag/job prototype, nor antag status/roletype, + //and is intrinsically related to the traitor role + //it does not need to be a separate Mind Role Entity + _roleSystem.MindHasRole(mindId, out var traitorRole); + if (traitorRole is not null) { - Briefing = briefing - }, mind, true); + AddComp(traitorRole.Value.Owner); + Comp(traitorRole.Value.Owner).Briefing = briefing; + } // Send codewords to only the traitor client var color = TraitorCodewordColor; // Fall back to a dark red Syndicate color if a prototype is not found @@ -129,6 +143,32 @@ public bool MakeTraitor(EntityUid traitor, TraitorRuleComponent component, bool return true; } + private (Note[]?, string) RequestUplink(EntityUid traitor, FixedPoint2 startingBalance, string briefing) + { + var pda = _uplink.FindUplinkTarget(traitor); + Note[]? code = null; + + var uplinked = _uplink.AddUplink(traitor, startingBalance, pda, true); + + if (pda is not null && uplinked) + { + // Codes are only generated if the uplink is a PDA + code = EnsureComp(pda.Value).Code; + + // If giveUplink is false the uplink code part is omitted + briefing = string.Format("{0}\n{1}", + briefing, + Loc.GetString("traitor-role-uplink-code-short", ("code", string.Join("-", code).Replace("sharp", "#")))); + return (code, briefing); + } + else if (pda is null && uplinked) + { + briefing += "\n" + Loc.GetString("traitor-role-uplink-implant-short"); + } + + return (null, briefing); + } + // TODO: AntagCodewordsComponent private void OnObjectivesTextPrepend(EntityUid uid, TraitorRuleComponent comp, ref ObjectivesTextPrependEvent args) { @@ -136,13 +176,17 @@ private void OnObjectivesTextPrepend(EntityUid uid, TraitorRuleComponent comp, r } // TODO: figure out how to handle this? add priority to briefing event? - private string GenerateBriefing(string[] codewords, Note[]? uplinkCode, string? objectiveIssuer = null) + private string GenerateBriefing(string[]? codewords, Note[]? uplinkCode, string? objectiveIssuer = null) { var sb = new StringBuilder(); sb.AppendLine(Loc.GetString("traitor-role-greeting", ("corporation", objectiveIssuer ?? Loc.GetString("objective-issuer-unknown")))); - sb.AppendLine(Loc.GetString("traitor-role-codewords", ("codewords", string.Join(", ", codewords)))); + if (codewords != null) + sb.AppendLine(Loc.GetString("traitor-role-codewords", ("codewords", string.Join(", ", codewords)))); if (uplinkCode != null) sb.AppendLine(Loc.GetString("traitor-role-uplink-code", ("code", string.Join("-", uplinkCode).Replace("sharp", "#")))); + else + sb.AppendLine(Loc.GetString("traitor-role-uplink-implant")); + return sb.ToString(); } diff --git a/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs b/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs index e91931300e2..bb76721340d 100644 --- a/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs +++ b/Content.Server/GameTicking/Rules/ZombieRuleSystem.cs @@ -13,6 +13,7 @@ using Content.Shared.Mobs; using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; +using Content.Shared.Roles; using Content.Shared.Zombies; using Robust.Shared.Player; using Robust.Shared.Timing; @@ -22,15 +23,16 @@ namespace Content.Server.GameTicking.Rules; public sealed class ZombieRuleSystem : GameRuleSystem { + [Dependency] private readonly AntagSelectionSystem _antag = default!; [Dependency] private readonly ChatSystem _chat = default!; - [Dependency] private readonly RoundEndSystem _roundEnd = default!; - [Dependency] private readonly PopupSystem _popup = default!; - [Dependency] private readonly MobStateSystem _mobState = default!; - [Dependency] private readonly ZombieSystem _zombie = default!; [Dependency] private readonly SharedMindSystem _mindSystem = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly SharedRoleSystem _roles = default!; + [Dependency] private readonly RoundEndSystem _roundEnd = default!; [Dependency] private readonly StationSystem _station = default!; - [Dependency] private readonly AntagSelectionSystem _antag = default!; [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly ZombieSystem _zombie = default!; public override void Initialize() { @@ -41,23 +43,20 @@ public override void Initialize() SubscribeLocalEvent(OnZombifySelf); } - private void OnGetBriefing(EntityUid uid, InitialInfectedRoleComponent component, ref GetBriefingEvent args) + private void OnGetBriefing(Entity role, ref GetBriefingEvent args) { - if (!TryComp(uid, out var mind) || mind.OwnedEntity == null) - return; - if (HasComp(uid)) // don't show both briefings - return; - args.Append(Loc.GetString("zombie-patientzero-role-greeting")); + if (!_roles.MindHasRole(args.Mind.Owner)) + args.Append(Loc.GetString("zombie-patientzero-role-greeting")); } - private void OnGetBriefing(EntityUid uid, ZombieRoleComponent component, ref GetBriefingEvent args) + private void OnGetBriefing(Entity role, ref GetBriefingEvent args) { - if (!TryComp(uid, out var mind) || mind.OwnedEntity == null) - return; args.Append(Loc.GetString("zombie-infection-greeting")); } - protected override void AppendRoundEndText(EntityUid uid, ZombieRuleComponent component, GameRuleComponent gameRule, + protected override void AppendRoundEndText(EntityUid uid, + ZombieRuleComponent component, + GameRuleComponent gameRule, ref RoundEndTextAppendEvent args) { base.AppendRoundEndText(uid, component, gameRule, ref args); diff --git a/Content.Server/Ghost/GhostSystem.cs b/Content.Server/Ghost/GhostSystem.cs index 945b0ff998a..85fec0d7d1f 100644 --- a/Content.Server/Ghost/GhostSystem.cs +++ b/Content.Server/Ghost/GhostSystem.cs @@ -46,11 +46,9 @@ public sealed class GhostSystem : SharedGhostSystem [Dependency] private readonly JobSystem _jobs = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly MindSystem _minds = default!; - [Dependency] private readonly SharedMindSystem _mindSystem = default!; [Dependency] private readonly MobStateSystem _mobState = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; - [Dependency] private readonly GameTicker _ticker = default!; [Dependency] private readonly TransformSystem _transformSystem = default!; [Dependency] private readonly VisibilitySystem _visibilitySystem = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; @@ -170,7 +168,7 @@ private void OnGhostStartup(EntityUid uid, GhostComponent component, ComponentSt // Allow this entity to be seen by other ghosts. var visibility = EnsureComp(uid); - if (_ticker.RunLevel != GameRunLevel.PostRound) + if (_gameTicker.RunLevel != GameRunLevel.PostRound) { _visibilitySystem.AddLayer((uid, visibility), (int) VisibilityFlags.Ghost, false); _visibilitySystem.RemoveLayer((uid, visibility), (int) VisibilityFlags.Normal, false); @@ -277,7 +275,7 @@ private void OnGhostReturnToBodyRequest(GhostReturnToBodyRequest msg, EntitySess return; } - _mindSystem.UnVisit(actor.PlayerSession); + _mind.UnVisit(actor.PlayerSession); } #region Warp @@ -455,7 +453,7 @@ private bool IsValidSpawnPosition(EntityCoordinates? spawnPosition) spawnPosition = null; // If it's bad, look for a valid point to spawn - spawnPosition ??= _ticker.GetObserverSpawnPoint(); + spawnPosition ??= _gameTicker.GetObserverSpawnPoint(); // Make sure the new point is valid too if (!IsValidSpawnPosition(spawnPosition)) diff --git a/Content.Server/Ghost/Roles/GhostRoleMarkerRoleComponent.cs b/Content.Server/Ghost/Roles/GhostRoleMarkerRoleComponent.cs index bd276e6df70..3dfa37a6b13 100644 --- a/Content.Server/Ghost/Roles/GhostRoleMarkerRoleComponent.cs +++ b/Content.Server/Ghost/Roles/GhostRoleMarkerRoleComponent.cs @@ -1,11 +1,13 @@ -namespace Content.Server.Ghost.Roles; +using Content.Shared.Roles; + +namespace Content.Server.Ghost.Roles; /// /// This is used for round end display of ghost roles. /// It may also be used to ensure some ghost roles count as antagonists in future. /// [RegisterComponent] -public sealed partial class GhostRoleMarkerRoleComponent : Component +public sealed partial class GhostRoleMarkerRoleComponent : BaseMindRoleComponent { [DataField("name")] public string? Name; } diff --git a/Content.Server/Ghost/Roles/GhostRoleSystem.cs b/Content.Server/Ghost/Roles/GhostRoleSystem.cs index 1b7f25122d5..998116994e8 100644 --- a/Content.Server/Ghost/Roles/GhostRoleSystem.cs +++ b/Content.Server/Ghost/Roles/GhostRoleSystem.cs @@ -71,18 +71,22 @@ public override void Initialize() SubscribeLocalEvent(Reset); SubscribeLocalEvent(OnPlayerAttached); + SubscribeLocalEvent(OnMindAdded); SubscribeLocalEvent(OnMindRemoved); SubscribeLocalEvent(OnMobStateChanged); + SubscribeLocalEvent(OnTakeoverTakeRole); + SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnRoleStartup); SubscribeLocalEvent(OnRoleShutdown); SubscribeLocalEvent(OnPaused); SubscribeLocalEvent(OnUnpaused); + SubscribeLocalEvent(OnRaffleInit); SubscribeLocalEvent(OnRaffleShutdown); + SubscribeLocalEvent(OnSpawnerTakeRole); - SubscribeLocalEvent(OnTakeoverTakeRole); SubscribeLocalEvent(OnSpawnerTakeCharacter); // DeltaV - Character ghost roles, see Content.Server/DeltaV/Ghost/Roles/GhostRoleSystem.Character.cs SubscribeLocalEvent>(OnVerb); SubscribeLocalEvent(OnGhostRoleRadioMessage); @@ -510,7 +514,11 @@ public void GhostRoleInternalCreateMindAndTransfer(ICommonSession player, Entity var newMind = _mindSystem.CreateMind(player.UserId, EntityManager.GetComponent(mob).EntityName); - _roleSystem.MindAddRole(newMind, new GhostRoleMarkerRoleComponent { Name = role.RoleName }); + + _roleSystem.MindAddRole(newMind, "MindRoleGhostMarker"); + + if(_roleSystem.MindHasRole(newMind!, out var markerRole)) + markerRole.Value.Comp2.Name = role.RoleName; _mindSystem.SetUserId(newMind, player.UserId); _mindSystem.TransferTo(newMind, mob); @@ -603,10 +611,7 @@ private void OnMindAdded(EntityUid uid, GhostTakeoverAvailableComponent componen if (ghostRole.JobProto != null) { - if (HasComp(args.Mind)) - _roleSystem.MindRemoveRole(args.Mind); - - _roleSystem.MindAddRole(args.Mind, new JobComponent { Prototype = ghostRole.JobProto }); + _roleSystem.MindAddJobRole(args.Mind, args.Mind, silent:false,ghostRole.JobProto); } ghostRole.Taken = true; diff --git a/Content.Server/Holosign/HolosignSystem.cs b/Content.Server/Holosign/HolosignSystem.cs index a36603b01dd..b63a5459898 100644 --- a/Content.Server/Holosign/HolosignSystem.cs +++ b/Content.Server/Holosign/HolosignSystem.cs @@ -45,7 +45,7 @@ private void OnBeforeInteract(EntityUid uid, HolosignProjectorComponent componen if (args.Handled || !args.CanReach // prevent placing out of range || HasComp(args.Target) // if it's a storage component like a bag, we ignore usage so it can be stored - || !_powerCell.TryUseCharge(uid, component.ChargeUse) // if no battery or no charge, doesn't work + || !_powerCell.TryUseCharge(uid, component.ChargeUse, user: args.User) // if no battery or no charge, doesn't work ) return; diff --git a/Content.Server/IdentityManagement/IdentitySystem.cs b/Content.Server/IdentityManagement/IdentitySystem.cs index e110a424834..ff6901f5a92 100644 --- a/Content.Server/IdentityManagement/IdentitySystem.cs +++ b/Content.Server/IdentityManagement/IdentitySystem.cs @@ -166,7 +166,7 @@ private IdentityRepresentation GetIdentityRepresentation(EntityUid target, if (_idCard.TryFindIdCard(target, out var id)) { presumedName = string.IsNullOrWhiteSpace(id.Comp.FullName) ? null : id.Comp.FullName; - presumedJob = id.Comp.JobTitle?.ToLowerInvariant(); + presumedJob = id.Comp.LocalizedJobTitle?.ToLowerInvariant(); } // If it didn't find a job, that's fine. diff --git a/Content.Server/ImmovableRod/ImmovableRodSystem.cs b/Content.Server/ImmovableRod/ImmovableRodSystem.cs index f9873b0d6a9..0d3d69c1bcb 100644 --- a/Content.Server/ImmovableRod/ImmovableRodSystem.cs +++ b/Content.Server/ImmovableRod/ImmovableRodSystem.cs @@ -25,6 +25,7 @@ public sealed class ImmovableRodSystem : EntitySystem [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly DamageableSystem _damageable = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly SharedMapSystem _map = default!; public override void Update(float frameTime) { @@ -39,7 +40,7 @@ public override void Update(float frameTime) if (!TryComp(trans.GridUid, out var grid)) continue; - grid.SetTile(trans.Coordinates, Tile.Empty); + _map.SetTile(trans.GridUid.Value, grid, trans.Coordinates, Tile.Empty); } } diff --git a/Content.Server/Implants/SubdermalImplantSystem.cs b/Content.Server/Implants/SubdermalImplantSystem.cs index 7c69ec8ea54..6e277dd29fb 100644 --- a/Content.Server/Implants/SubdermalImplantSystem.cs +++ b/Content.Server/Implants/SubdermalImplantSystem.cs @@ -74,14 +74,12 @@ private void OnStoreRelay(EntityUid uid, StoreComponent store, ImplantRelayEvent return; // same as store code, but message is only shown to yourself - args.Handled = _store.TryAddCurrency(_store.GetCurrencyValue(args.Used, currency), uid, store); - - if (!args.Handled) + if (!_store.TryAddCurrency((args.Used, currency), (uid, store))) return; + args.Handled = true; var msg = Loc.GetString("store-currency-inserted-implant", ("used", args.Used)); _popup.PopupEntity(msg, args.User, args.User); - QueueDel(args.Used); } private void OnFreedomImplant(EntityUid uid, SubdermalImplantComponent component, UseFreedomImplantEvent args) diff --git a/Content.Server/IoC/ServerContentIoC.cs b/Content.Server/IoC/ServerContentIoC.cs index 3851f145c40..902e16d531f 100644 --- a/Content.Server/IoC/ServerContentIoC.cs +++ b/Content.Server/IoC/ServerContentIoC.cs @@ -7,6 +7,7 @@ using Content.Server.Connection; using Content.Server.Database; using Content.Server.Discord; +using Content.Server.Discord.WebhookMessages; using Content.Server.EUI; using Content.Server.GhostKick; using Content.Server.Info; @@ -14,8 +15,6 @@ using Content.Server.Maps; using Content.Server.MoMMI; using Content.Server.NodeContainer.NodeGroups; -using Content.Server.Objectives; -using Content.Server.Players; using Content.Server.Players.JobWhitelist; using Content.Server.Players.PlayTimeTracking; using Content.Server.Players.RateLimiting; @@ -26,8 +25,10 @@ using Content.Server.Worldgen.Tools; using Content.Shared.Administration.Logs; using Content.Shared.Administration.Managers; +using Content.Shared.Chat; using Content.Shared.Kitchen; using Content.Shared.Players.PlayTimeTracking; +using Content.Shared.Players.RateLimiting; namespace Content.Server.IoC { @@ -36,6 +37,7 @@ internal static class ServerContentIoC public static void Register() { IoCManager.Register(); + IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); @@ -63,11 +65,13 @@ public static void Register() IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); + IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); IoCManager.Register(); + IoCManager.Register(); IoCManager.Register(); } } diff --git a/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs b/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs index 12c5a30a4b2..de848b34c2c 100644 --- a/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs +++ b/Content.Server/Kitchen/EntitySystems/ReagentGrinderSystem.cs @@ -5,6 +5,7 @@ using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Chemistry.Components; using Content.Shared.Containers.ItemSlots; +using Content.Shared.Destructible; using Content.Shared.FixedPoint; using Content.Shared.Interaction; using Content.Shared.Kitchen; @@ -122,6 +123,9 @@ public override void Update(float frameTime) if (solution.Volume > containerSolution.AvailableVolume) continue; + var dev = new DestructionEventArgs(); + RaiseLocalEvent(item, dev); + QueueDel(item); } diff --git a/Content.Server/MassMedia/Systems/NewsSystem.cs b/Content.Server/MassMedia/Systems/NewsSystem.cs index 899e9419930..641f2074b80 100644 --- a/Content.Server/MassMedia/Systems/NewsSystem.cs +++ b/Content.Server/MassMedia/Systems/NewsSystem.cs @@ -4,7 +4,6 @@ using Content.Server.CartridgeLoader.Cartridges; using Content.Server.Chat.Managers; using Content.Server.GameTicking; -using Content.Server.Interaction; using Content.Server.MassMedia.Components; using Content.Server.Popups; using Content.Server.Station.Systems; @@ -27,7 +26,6 @@ public sealed class NewsSystem : SharedNewsSystem { [Dependency] private readonly AccessReaderSystem _accessReaderSystem = default!; [Dependency] private readonly IGameTiming _timing = default!; - [Dependency] private readonly InteractionSystem _interaction = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly UserInterfaceSystem _ui = default!; [Dependency] private readonly CartridgeLoaderSystem _cartridgeLoaderSystem = default!; @@ -35,7 +33,6 @@ public sealed class NewsSystem : SharedNewsSystem [Dependency] private readonly PopupSystem _popup = default!; [Dependency] private readonly StationSystem _station = default!; [Dependency] private readonly GameTicker _ticker = default!; - [Dependency] private readonly AccessReaderSystem _accessReader = default!; [Dependency] private readonly IChatManager _chatManager = default!; public override void Initialize() @@ -309,9 +306,6 @@ private void UpdateWriterDevices() private bool CanUse(EntityUid user, EntityUid console) { - // This shouldn't technically be possible because of BUI but don't trust client. - if (!_interaction.InRangeUnobstructed(console, user)) - return false; if (TryComp(console, out var accessReaderComponent)) { diff --git a/Content.Server/Materials/MaterialStorageSystem.cs b/Content.Server/Materials/MaterialStorageSystem.cs index 25e409fd010..9f43a220493 100644 --- a/Content.Server/Materials/MaterialStorageSystem.cs +++ b/Content.Server/Materials/MaterialStorageSystem.cs @@ -175,6 +175,10 @@ public List SpawnMultipleFromMaterial(int amount, MaterialPrototype m var materialPerStack = composition.MaterialComposition[materialProto.ID]; var amountToSpawn = amount / materialPerStack; overflowMaterial = amount - amountToSpawn * materialPerStack; + + if (amountToSpawn == 0) + return new List(); + return _stackSystem.SpawnMultiple(materialProto.StackEntity, amountToSpawn, coordinates); } diff --git a/Content.Server/Medical/Components/HealthAnalyzerComponent.cs b/Content.Server/Medical/Components/HealthAnalyzerComponent.cs index 85956b60299..34b7af0212d 100644 --- a/Content.Server/Medical/Components/HealthAnalyzerComponent.cs +++ b/Content.Server/Medical/Components/HealthAnalyzerComponent.cs @@ -54,7 +54,7 @@ public sealed partial class HealthAnalyzerComponent : Component /// Sound played on scanning end /// [DataField] - public SoundSpecifier? ScanningEndSound; + public SoundSpecifier ScanningEndSound = new SoundPathSpecifier("/Audio/Items/Medical/healthscanner.ogg"); /// /// Whether to show up the popup diff --git a/Content.Server/Medical/CryoPodSystem.cs b/Content.Server/Medical/CryoPodSystem.cs index a1c1f1f9ce9..fc9ab081d26 100644 --- a/Content.Server/Medical/CryoPodSystem.cs +++ b/Content.Server/Medical/CryoPodSystem.cs @@ -1,16 +1,13 @@ using Content.Server.Administration.Logs; -using Content.Server.Atmos; using Content.Server.Atmos.EntitySystems; using Content.Server.Atmos.Piping.Components; using Content.Server.Atmos.Piping.Unary.EntitySystems; using Content.Server.Body.Components; using Content.Server.Body.Systems; using Content.Server.Medical.Components; -using Content.Server.NodeContainer; using Content.Server.NodeContainer.EntitySystems; using Content.Server.NodeContainer.NodeGroups; using Content.Server.NodeContainer.Nodes; -using Content.Server.Power.Components; using Content.Server.Temperature.Components; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Atmos; @@ -18,7 +15,6 @@ using Content.Shared.Chemistry; using Content.Shared.Chemistry.Components; using Content.Shared.Chemistry.Components.SolutionManager; -using Content.Shared.Chemistry.Reagent; using Content.Shared.Climbing.Systems; using Content.Shared.Containers.ItemSlots; using Content.Shared.Database; @@ -46,7 +42,6 @@ public sealed partial class CryoPodSystem : SharedCryoPodSystem [Dependency] private readonly ItemSlotsSystem _itemSlotsSystem = default!; [Dependency] private readonly SharedSolutionContainerSystem _solutionContainerSystem = default!; [Dependency] private readonly BloodstreamSystem _bloodstreamSystem = default!; - [Dependency] private readonly UserInterfaceSystem _userInterfaceSystem = default!; [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!; [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; [Dependency] private readonly SharedToolSystem _toolSystem = default!; @@ -196,7 +191,7 @@ private void OnActivateUI(Entity entity, ref AfterActivatableU } // TODO: This should be a state my dude - _userInterfaceSystem.ServerSendUiMessage( + _uiSystem.ServerSendUiMessage( entity.Owner, HealthAnalyzerUiKey.Key, new HealthAnalyzerScannedUserMessage(GetNetEntity(entity.Comp.BodyContainer.ContainedEntity), diff --git a/Content.Server/Medical/HealthAnalyzerSystem.cs b/Content.Server/Medical/HealthAnalyzerSystem.cs index 82f80759028..60a492a755f 100644 --- a/Content.Server/Medical/HealthAnalyzerSystem.cs +++ b/Content.Server/Medical/HealthAnalyzerSystem.cs @@ -13,11 +13,9 @@ using Content.Shared.MedicalScanner; using Content.Shared.Mobs.Components; using Content.Shared.Popups; -using Content.Shared.PowerCell; using Robust.Server.GameObjects; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; -using Robust.Shared.Player; using Robust.Shared.Timing; namespace Content.Server.Medical; @@ -104,7 +102,8 @@ private void OnDoAfter(Entity uid, ref HealthAnalyzerDo if (args.Handled || args.Cancelled || args.Target == null || !_cell.HasDrawCharge(uid, user: args.User)) return; - _audio.PlayPvs(uid.Comp.ScanningEndSound, uid); + if (!uid.Comp.Silent) + _audio.PlayPvs(uid.Comp.ScanningEndSound, uid); OpenUserInterface(args.User, uid); BeginAnalyzingEntity(uid, args.Target.Value); diff --git a/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs b/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs index b1b87ae981d..f56b16432e1 100644 --- a/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs +++ b/Content.Server/Medical/SuitSensors/SuitSensorSystem.cs @@ -363,8 +363,8 @@ public void SetSensor(Entity sensors, SuitSensorMode mode, { if (card.Comp.FullName != null) userName = card.Comp.FullName; - if (card.Comp.JobTitle != null) - userJob = card.Comp.JobTitle; + if (card.Comp.LocalizedJobTitle != null) + userJob = card.Comp.LocalizedJobTitle; userJobIcon = card.Comp.JobIcon; foreach (var department in card.Comp.JobDepartments) diff --git a/Content.Server/Mind/Commands/MindInfoCommand.cs b/Content.Server/Mind/Commands/MindInfoCommand.cs index d4961b82dbb..c365702a314 100644 --- a/Content.Server/Mind/Commands/MindInfoCommand.cs +++ b/Content.Server/Mind/Commands/MindInfoCommand.cs @@ -43,7 +43,7 @@ public void Execute(IConsoleShell shell, string argStr, string[] args) builder.AppendFormat("player: {0}, mob: {1}\nroles: ", mind.UserId, mind.OwnedEntity); var roles = _entities.System(); - foreach (var role in roles.MindGetAllRoles(mindId)) + foreach (var role in roles.MindGetAllRoleInfo(mindId)) { builder.AppendFormat("{0} ", role.Name); } diff --git a/Content.Server/NPC/Queries/Considerations/TargetOnFireCon.cs b/Content.Server/NPC/Queries/Considerations/TargetOnFireCon.cs new file mode 100644 index 00000000000..d86dbc06eca --- /dev/null +++ b/Content.Server/NPC/Queries/Considerations/TargetOnFireCon.cs @@ -0,0 +1,9 @@ +namespace Content.Server.NPC.Queries.Considerations; + +/// +/// Returns 1f if the target is on fire or 0f if not. +/// +public sealed partial class TargetOnFireCon : UtilityConsideration +{ + +} diff --git a/Content.Server/NPC/Systems/NPCUtilitySystem.cs b/Content.Server/NPC/Systems/NPCUtilitySystem.cs index 8dff93648bf..60bc5cdfd8b 100644 --- a/Content.Server/NPC/Systems/NPCUtilitySystem.cs +++ b/Content.Server/NPC/Systems/NPCUtilitySystem.cs @@ -1,3 +1,4 @@ +using Content.Server.Atmos.Components; using Content.Server.Fluids.EntitySystems; using Content.Server.NPC.Queries; using Content.Server.NPC.Queries.Considerations; @@ -351,6 +352,12 @@ private float GetScore(NPCBlackboard blackboard, EntityUid targetUid, UtilityCon return 0f; } + case TargetOnFireCon: + { + if (TryComp(targetUid, out FlammableComponent? fire) && fire.OnFire) + return 1f; + return 0f; + } default: throw new NotImplementedException(); } diff --git a/Content.Server/NameIdentifier/NameIdentifierSystem.cs b/Content.Server/NameIdentifier/NameIdentifierSystem.cs index eefd4357cb3..6db6e0ff565 100644 --- a/Content.Server/NameIdentifier/NameIdentifierSystem.cs +++ b/Content.Server/NameIdentifier/NameIdentifierSystem.cs @@ -14,6 +14,7 @@ public sealed class NameIdentifierSystem : EntitySystem [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IRobustRandom _robustRandom = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; + [Dependency] private readonly ILogManager _logManager = default!; /// /// Free IDs available per . @@ -118,23 +119,39 @@ private void OnMapInit(EntityUid uid, NameIdentifierComponent component, MapInit private void InitialSetupPrototypes() { - foreach (var proto in _prototypeManager.EnumeratePrototypes()) - { - AddGroup(proto); - } + EnsureIds(); } - private void AddGroup(NameIdentifierGroupPrototype proto) + private void FillGroup(NameIdentifierGroupPrototype proto, List values) { - var values = new List(proto.MaxValue - proto.MinValue); - + values.Clear(); for (var i = proto.MinValue; i < proto.MaxValue; i++) { values.Add(i); } _robustRandom.Shuffle(values); - CurrentIds.Add(proto.ID, values); + } + + private List GetOrCreateIdList(NameIdentifierGroupPrototype proto) + { + if (!CurrentIds.TryGetValue(proto.ID, out var ids)) + { + ids = new List(proto.MaxValue - proto.MinValue); + CurrentIds.Add(proto.ID, ids); + } + + return ids; + } + + private void EnsureIds() + { + foreach (var proto in _prototypeManager.EnumeratePrototypes()) + { + var ids = GetOrCreateIdList(proto); + + FillGroup(proto, ids); + } } private void OnReloadPrototypes(PrototypesReloadedEventArgs ev) @@ -159,19 +176,20 @@ private void OnReloadPrototypes(PrototypesReloadedEventArgs ev) foreach (var proto in set.Modified.Values) { + var name_proto = (NameIdentifierGroupPrototype) proto; + // Only bother adding new ones. if (CurrentIds.ContainsKey(proto.ID)) continue; - AddGroup((NameIdentifierGroupPrototype) proto); + var ids = GetOrCreateIdList(name_proto); + FillGroup(name_proto, ids); } } + private void CleanupIds(RoundRestartCleanupEvent ev) { - foreach (var values in CurrentIds.Values) - { - _robustRandom.Shuffle(values); - } + EnsureIds(); } } diff --git a/Content.Server/Ninja/Systems/NinjaSuitSystem.cs b/Content.Server/Ninja/Systems/NinjaSuitSystem.cs index 244b7adf036..20674dda879 100644 --- a/Content.Server/Ninja/Systems/NinjaSuitSystem.cs +++ b/Content.Server/Ninja/Systems/NinjaSuitSystem.cs @@ -22,6 +22,9 @@ public sealed class NinjaSuitSystem : SharedNinjaSuitSystem [Dependency] private readonly PowerCellSystem _powerCell = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; + // How much the cell score should be increased per 1 AutoRechargeRate. + private const int AutoRechargeValue = 100; + public override void Initialize() { base.Initialize(); @@ -59,15 +62,26 @@ private void OnSuitInsertAttempt(EntityUid uid, NinjaSuitComponent comp, Contain return; // no power cell for some reason??? allow it - if (!_powerCell.TryGetBatteryFromSlot(uid, out var battery)) + if (!_powerCell.TryGetBatteryFromSlot(uid, out var batteryUid, out var battery)) + return; + + if (!TryComp(args.EntityUid, out var inserting)) + { + args.Cancel(); return; + } + + var user = Transform(uid).ParentUid; // can only upgrade power cell, not swap to recharge instantly otherwise ninja could just swap batteries with flashlights in maints for easy power - if (!TryComp(args.EntityUid, out var inserting) || inserting.MaxCharge <= battery.MaxCharge) + if (GetCellScore(inserting.Owner, inserting) <= GetCellScore(battery.Owner, battery)) + { args.Cancel(); + Popup.PopupEntity(Loc.GetString("ninja-cell-downgrade"), user, user); + return; + } // tell ninja abilities that use battery to update it so they don't use charge from the old one - var user = Transform(uid).ParentUid; if (!_ninja.IsNinja(user)) return; @@ -76,6 +90,16 @@ private void OnSuitInsertAttempt(EntityUid uid, NinjaSuitComponent comp, Contain RaiseLocalEvent(user, ref ev); } + // this function assigns a score to a power cell depending on the capacity, to be used when comparing which cell is better. + private float GetCellScore(EntityUid uid, BatteryComponent battcomp) + { + // if a cell is able to automatically recharge, boost the score drastically depending on the recharge rate, + // this is to ensure a ninja can still upgrade to a micro reactor cell even if they already have a medium or high. + if (TryComp(uid, out var selfcomp) && selfcomp.AutoRecharge) + return battcomp.MaxCharge + (selfcomp.AutoRechargeRate*AutoRechargeValue); + return battcomp.MaxCharge; + } + private void OnEmpAttempt(EntityUid uid, NinjaSuitComponent comp, EmpAttemptEvent args) { // ninja suit (battery) is immune to emp diff --git a/Content.Server/Ninja/Systems/SpiderChargeSystem.cs b/Content.Server/Ninja/Systems/SpiderChargeSystem.cs index c916d568d5f..6594d7883bc 100644 --- a/Content.Server/Ninja/Systems/SpiderChargeSystem.cs +++ b/Content.Server/Ninja/Systems/SpiderChargeSystem.cs @@ -1,14 +1,12 @@ using Content.Server.Explosion.EntitySystems; -using Content.Server.GameTicking.Rules.Components; using Content.Server.Mind; using Content.Server.Objectives.Components; using Content.Server.Popups; using Content.Server.Roles; -using Content.Shared.Interaction; using Content.Shared.Ninja.Components; using Content.Shared.Ninja.Systems; +using Content.Shared.Roles; using Content.Shared.Sticky; -using Robust.Shared.GameObjects; namespace Content.Server.Ninja.Systems; @@ -19,6 +17,7 @@ public sealed class SpiderChargeSystem : SharedSpiderChargeSystem { [Dependency] private readonly MindSystem _mind = default!; [Dependency] private readonly PopupSystem _popup = default!; + [Dependency] private readonly SharedRoleSystem _role = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly SpaceNinjaSystem _ninja = default!; @@ -41,7 +40,10 @@ private void OnAttemptStick(EntityUid uid, SpiderChargeComponent comp, ref Attem var user = args.User; - if (!_mind.TryGetRole(user, out var _)) + if (!_mind.TryGetMind(args.User, out var mind, out _)) + return; + + if (!_role.MindHasRole(mind)) { _popup.PopupEntity(Loc.GetString("spider-charge-not-ninja"), user, user); args.Cancelled = true; diff --git a/Content.Server/Nutrition/EntitySystems/CreamPieSystem.cs b/Content.Server/Nutrition/EntitySystems/CreamPieSystem.cs index 537690ec55a..a8d75ac5f80 100644 --- a/Content.Server/Nutrition/EntitySystems/CreamPieSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/CreamPieSystem.cs @@ -48,12 +48,9 @@ protected override void SplattedCreamPie(EntityUid uid, CreamPieComponent creamP { _puddle.TrySpillAt(uid, solution, out _, false); } - if (foodComp.Trash.Count == 0) + foreach (var trash in foodComp.Trash) { - foreach (var trash in foodComp.Trash) - { - EntityManager.SpawnEntity(trash, Transform(uid).Coordinates); - } + EntityManager.SpawnEntity(trash, Transform(uid).Coordinates); } } ActivatePayload(uid); diff --git a/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs b/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs index f04d79b47da..90a925e39f1 100644 --- a/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/DrinkSystem.cs @@ -317,7 +317,7 @@ private void OnDoAfter(Entity entity, ref ConsumeDoAfterEvent ar _adminLogger.Add(LogType.Ingestion, LogImpact.Low, $"{ToPrettyString(args.User):target} drank {ToPrettyString(entity.Owner):drink}"); } - _audio.PlayPvs(entity.Comp.UseSound, args.Target.Value, AudioParams.Default.WithVolume(-2f)); + _audio.PlayPvs(entity.Comp.UseSound, args.Target.Value, AudioParams.Default.WithVolume(-2f).WithVariation(0.25f)); _reaction.DoEntityReaction(args.Target.Value, solution, ReactionMethod.Ingestion); _stomach.TryTransferSolution(firstStomach.Value.Owner, drained, firstStomach.Value.Comp1); diff --git a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs index 3a7c249c2b3..158c7f4955c 100644 --- a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs @@ -33,6 +33,7 @@ using Content.Shared.Containers.ItemSlots; using Robust.Server.GameObjects; using Content.Shared.Whitelist; +using Content.Shared.Destructible; namespace Content.Server.Nutrition.EntitySystems; @@ -295,7 +296,7 @@ private void OnDoAfter(Entity entity, ref ConsumeDoAfterEvent arg _adminLogger.Add(LogType.Ingestion, LogImpact.Low, $"{ToPrettyString(args.User):target} ate {ToPrettyString(entity.Owner):food}"); } - _audio.PlayPvs(entity.Comp.UseSound, args.Target.Value, AudioParams.Default.WithVolume(-1f)); + _audio.PlayPvs(entity.Comp.UseSound, args.Target.Value, AudioParams.Default.WithVolume(-1f).WithVariation(0.20f)); // Try to break all used utensils foreach (var utensil in utensils) @@ -335,6 +336,9 @@ public void DeleteAndSpawnTrash(FoodComponent component, EntityUid food, EntityU if (ev.Cancelled) return; + var dev = new DestructionEventArgs(); + RaiseLocalEvent(food, dev); + if (component.Trash.Count == 0) { QueueDel(food); diff --git a/Content.Server/Nutrition/EntitySystems/SmokingSystem.Vape.cs b/Content.Server/Nutrition/EntitySystems/SmokingSystem.Vape.cs index f7650f599b4..c3d41cead6d 100644 --- a/Content.Server/Nutrition/EntitySystems/SmokingSystem.Vape.cs +++ b/Content.Server/Nutrition/EntitySystems/SmokingSystem.Vape.cs @@ -27,7 +27,6 @@ public sealed partial class SmokingSystem [Dependency] private readonly FoodSystem _foodSystem = default!; [Dependency] private readonly ExplosionSystem _explosionSystem = default!; [Dependency] private readonly PopupSystem _popupSystem = default!; - [Dependency] private readonly AtmosphereSystem _atmosphereSystem = default!; private void InitializeVapes() { @@ -127,7 +126,7 @@ private void OnVapeDoAfter(Entity entity, ref VapeDoAfterEvent ar || args.Args.Target == null) return; - var environment = _atmosphereSystem.GetContainingMixture(args.Args.Target.Value, true, true); + var environment = _atmos.GetContainingMixture(args.Args.Target.Value, true, true); if (environment == null) { return; @@ -139,7 +138,7 @@ private void OnVapeDoAfter(Entity entity, ref VapeDoAfterEvent ar var merger = new GasMixture(1) { Temperature = args.Solution.Temperature }; merger.SetMoles(entity.Comp.GasType, args.Solution.Volume.Value / entity.Comp.ReductionFactor); - _atmosphereSystem.Merge(environment, merger); + _atmos.Merge(environment, merger); args.Solution.RemoveAllSolution(); diff --git a/Content.Server/Nyanotrasen/Abilities/Psionics/Abilities/MetapsionicPowerSystem.cs b/Content.Server/Nyanotrasen/Abilities/Psionics/Abilities/MetapsionicPowerSystem.cs index b775117b716..63a06e9fdc8 100644 --- a/Content.Server/Nyanotrasen/Abilities/Psionics/Abilities/MetapsionicPowerSystem.cs +++ b/Content.Server/Nyanotrasen/Abilities/Psionics/Abilities/MetapsionicPowerSystem.cs @@ -1,25 +1,16 @@ using Content.Shared.Actions; using Content.Shared.Abilities.Psionics; -using Content.Shared.StatusEffect; using Content.Shared.Popups; -using Robust.Shared.Prototypes; -using Robust.Shared.Timing; -using Content.Shared.Mind; using Content.Shared.Actions.Events; namespace Content.Server.Abilities.Psionics { public sealed class MetapsionicPowerSystem : EntitySystem { - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; [Dependency] private readonly SharedActionsSystem _actions = default!; [Dependency] private readonly EntityLookupSystem _lookup = default!; [Dependency] private readonly SharedPopupSystem _popups = default!; [Dependency] private readonly SharedPsionicAbilitiesSystem _psionics = default!; - [Dependency] private readonly IGameTiming _gameTiming = default!; - [Dependency] private readonly SharedMindSystem _mindSystem = default!; - public override void Initialize() { diff --git a/Content.Server/Nyanotrasen/Psionics/Glimmer/GlimmerReactiveSystem.cs b/Content.Server/Nyanotrasen/Psionics/Glimmer/GlimmerReactiveSystem.cs index 03ebd044a2f..698a54c0aec 100644 --- a/Content.Server/Nyanotrasen/Psionics/Glimmer/GlimmerReactiveSystem.cs +++ b/Content.Server/Nyanotrasen/Psionics/Glimmer/GlimmerReactiveSystem.cs @@ -400,7 +400,7 @@ public override void Update(float frameTime) /// has the exact /// values corresponding to tiers. /// - public class GlimmerTierChangedEvent : EntityEventArgs + public sealed class GlimmerTierChangedEvent : EntityEventArgs { /// /// What was the last glimmer tier before this event fired? diff --git a/Content.Server/Nyanotrasen/Research/Oracle/OracleSystem.cs b/Content.Server/Nyanotrasen/Research/Oracle/OracleSystem.cs index 82f2fddbc59..bee14cc2778 100644 --- a/Content.Server/Nyanotrasen/Research/Oracle/OracleSystem.cs +++ b/Content.Server/Nyanotrasen/Research/Oracle/OracleSystem.cs @@ -107,7 +107,7 @@ private void OnInteractUsing(EntityUid uid, OracleComponent component, InteractU if (HasComp(args.Used)) return; - if (!TryComp(args.Used, out var meta)) + if (!TryComp(args.Used, out MetaDataComponent? meta)) return; if (HasComp(args.User)) @@ -139,13 +139,13 @@ private void OnInteractUsing(EntityUid uid, OracleComponent component, InteractU return; } - EntityManager.QueueDeleteEntity(args.Used); + QueueDel(args.Used); _adminLog.Add(LogType.InteractHand, LogImpact.Medium, $"{ToPrettyString(args.User):player} sold {ToPrettyString(args.Used)} to {ToPrettyString(uid)}."); - EntityManager.SpawnEntity("ResearchDisk5000", Transform(args.User).Coordinates); + Spawn("ResearchDisk5000", Transform(args.User).Coordinates); DispenseLiquidReward(uid, component); @@ -153,7 +153,7 @@ private void OnInteractUsing(EntityUid uid, OracleComponent component, InteractU while (i != 0) { - EntityManager.SpawnEntity("MaterialBluespace1", Transform(args.User).Coordinates); + Spawn("MaterialBluespace1", Transform(args.User).Coordinates); i--; } diff --git a/Content.Server/Objectives/Components/TargetObjectiveImmuneComponent.cs b/Content.Server/Objectives/Components/TargetObjectiveImmuneComponent.cs new file mode 100644 index 00000000000..1f2bc961fd0 --- /dev/null +++ b/Content.Server/Objectives/Components/TargetObjectiveImmuneComponent.cs @@ -0,0 +1,9 @@ +namespace Content.Server.Objectives.Components; + +/// +/// Use this to mark a player as immune to any target objectives, useful for ghost roles or events. +/// +[RegisterComponent] +public sealed partial class TargetObjectiveImmuneComponent : Component +{ +} diff --git a/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs b/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs index c1caa819e44..d61310908c3 100644 --- a/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs +++ b/Content.Server/Objectives/Systems/KillPersonConditionSystem.cs @@ -1,9 +1,10 @@ +using System.Linq; using Content.Server.Objectives.Components; +using Content.Server.Revolutionary.Components; using Content.Server.Shuttles.Systems; using Content.Shared.CCVar; using Content.Shared.Mind; using Content.Shared.Objectives.Components; -using Content.Shared.Roles.Jobs; using Robust.Shared.Configuration; using Robust.Shared.Random; @@ -17,7 +18,6 @@ public sealed class KillPersonConditionSystem : EntitySystem [Dependency] private readonly EmergencyShuttleSystem _emergencyShuttle = default!; [Dependency] private readonly IConfigurationManager _config = default!; [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly SharedJobSystem _job = default!; [Dependency] private readonly SharedMindSystem _mind = default!; [Dependency] private readonly TargetObjectiveSystem _target = default!; @@ -26,9 +26,7 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(OnGetProgress); - SubscribeLocalEvent(OnPersonAssigned); - SubscribeLocalEvent(OnHeadAssigned); } @@ -42,29 +40,15 @@ private void OnGetProgress(EntityUid uid, KillPersonConditionComponent comp, ref private void OnPersonAssigned(EntityUid uid, PickRandomPersonComponent comp, ref ObjectiveAssignedEvent args) { - // invalid objective prototype - if (!TryComp(uid, out var target)) - { - args.Cancelled = true; - return; - } - - // target already assigned - if (target.Target != null) - return; - - // no other humans to kill - var allHumans = _mind.GetAliveHumansExcept(args.MindId); - if (allHumans.Count == 0) - { - args.Cancelled = true; - return; - } - - _target.SetTarget(uid, _random.Pick(allHumans), target); + AssignRandomTarget(uid, args, _ => true); } private void OnHeadAssigned(EntityUid uid, PickRandomHeadComponent comp, ref ObjectiveAssignedEvent args) + { + AssignRandomTarget(uid, args, mind => HasComp(uid)); + } + + private void AssignRandomTarget(EntityUid uid, ObjectiveAssignedEvent args, Predicate filter, bool fallbackToAny = true) { // invalid prototype if (!TryComp(uid, out var target)) @@ -77,26 +61,30 @@ private void OnHeadAssigned(EntityUid uid, PickRandomHeadComponent comp, ref Obj if (target.Target != null) return; - // no other humans to kill - var allHumans = _mind.GetAliveHumansExcept(args.MindId); - if (allHumans.Count == 0) + // Get all alive humans, filter out any with TargetObjectiveImmuneComponent + var allHumans = _mind.GetAliveHumansExcept(args.MindId) + .Where(mindId => + { + if (!TryComp(mindId, out var mindComp) || mindComp.OwnedEntity == null) + return false; + return !HasComp(mindComp.OwnedEntity.Value); + }) + .ToList(); + + // Filter out targets based on the filter + var filteredHumans = allHumans.Where(mind => filter(mind)).ToList(); + + // There's no humans and we can't fall back to any other target + if (filteredHumans.Count == 0 && !fallbackToAny) { args.Cancelled = true; return; } - var allHeads = new List(); - foreach (var mind in allHumans) - { - // RequireAdminNotify used as a cheap way to check for command department - if (_job.MindTryGetJob(mind, out _, out var prototype) && prototype.RequireAdminNotify) - allHeads.Add(mind); - } - - if (allHeads.Count == 0) - allHeads = allHumans; // fallback to non-head target + // Pick between humans matching our filter or fall back to all humans alive + var selectedHumans = filteredHumans.Count > 0 ? filteredHumans : allHumans; - _target.SetTarget(uid, _random.Pick(allHeads), target); + _target.SetTarget(uid, _random.Pick(selectedHumans), target); } private float GetProgress(EntityUid target, bool requireDead) diff --git a/Content.Server/Objectives/Systems/NinjaConditionsSystem.cs b/Content.Server/Objectives/Systems/NinjaConditionsSystem.cs index 47c54b937a0..ee99658f66e 100644 --- a/Content.Server/Objectives/Systems/NinjaConditionsSystem.cs +++ b/Content.Server/Objectives/Systems/NinjaConditionsSystem.cs @@ -1,9 +1,10 @@ using Content.Server.Objectives.Components; +using Content.Server.Roles; using Content.Server.Warps; using Content.Shared.Objectives.Components; using Content.Shared.Ninja.Components; +using Content.Shared.Roles; using Robust.Shared.Random; -using Content.Server.Roles; namespace Content.Server.Objectives.Systems; @@ -16,6 +17,7 @@ public sealed class NinjaConditionsSystem : EntitySystem [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly NumberObjectiveSystem _number = default!; [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedRoleSystem _roles = default!; public override void Initialize() { @@ -46,10 +48,8 @@ private float DoorjackProgress(DoorjackConditionComponent comp, int target) // spider charge private void OnSpiderChargeRequirementCheck(EntityUid uid, SpiderChargeConditionComponent comp, ref RequirementCheckEvent args) { - if (args.Cancelled || !HasComp(args.MindId)) - { + if (args.Cancelled || !_roles.MindHasRole(args.MindId)) return; - } // choose spider charge detonation point var warps = new List(); diff --git a/Content.Server/Objectives/Systems/NotCommandRequirementSystem.cs b/Content.Server/Objectives/Systems/NotCommandRequirementSystem.cs index e63492bb5ed..0808dc5bcfd 100644 --- a/Content.Server/Objectives/Systems/NotCommandRequirementSystem.cs +++ b/Content.Server/Objectives/Systems/NotCommandRequirementSystem.cs @@ -1,13 +1,11 @@ using Content.Server.Objectives.Components; +using Content.Server.Revolutionary.Components; using Content.Shared.Objectives.Components; -using Content.Shared.Roles.Jobs; namespace Content.Server.Objectives.Systems; public sealed class NotCommandRequirementSystem : EntitySystem { - [Dependency] private readonly SharedJobSystem _job = default!; - public override void Initialize() { base.Initialize(); @@ -20,8 +18,7 @@ private void OnCheck(EntityUid uid, NotCommandRequirementComponent comp, ref Req if (args.Cancelled) return; - // cheap equivalent to checking that job department is command, since all command members require admin notification when leaving - if (_job.MindTryGetJob(args.MindId, out _, out var prototype) && prototype.RequireAdminNotify) + if (args.Mind.OwnedEntity is { } ent && HasComp(ent)) args.Cancelled = true; } } diff --git a/Content.Server/Objectives/Systems/NotJobRequirementSystem.cs b/Content.Server/Objectives/Systems/NotJobRequirementSystem.cs index 5c2b0404634..ac7e579c380 100644 --- a/Content.Server/Objectives/Systems/NotJobRequirementSystem.cs +++ b/Content.Server/Objectives/Systems/NotJobRequirementSystem.cs @@ -8,6 +8,8 @@ namespace Content.Server.Objectives.Systems; /// public sealed class NotJobRequirementSystem : EntitySystem { + [Dependency] private readonly SharedJobSystem _jobs = default!; + public override void Initialize() { base.Initialize(); @@ -20,11 +22,10 @@ private void OnCheck(EntityUid uid, NotJobRequirementComponent comp, ref Require if (args.Cancelled) return; - // if player has no job then don't care - if (!TryComp(args.MindId, out var job)) - return; + _jobs.MindTryGetJob(args.MindId, out var proto); - if (job.Prototype == comp.Job) + // if player has no job then don't care + if (proto is not null && proto.ID == comp.Job) args.Cancelled = true; } } diff --git a/Content.Server/Objectives/Systems/RoleRequirementSystem.cs b/Content.Server/Objectives/Systems/RoleRequirementSystem.cs index 8421987bae9..83d4c2ea4c5 100644 --- a/Content.Server/Objectives/Systems/RoleRequirementSystem.cs +++ b/Content.Server/Objectives/Systems/RoleRequirementSystem.cs @@ -22,8 +22,6 @@ private void OnCheck(EntityUid uid, RoleRequirementComponent comp, ref Requireme if (args.Cancelled) return; - // this whitelist trick only works because roles are components on the mind and not entities - // if that gets reworked then this will need changing if (_whitelistSystem.IsWhitelistFail(comp.Roles, args.MindId)) args.Cancelled = true; } diff --git a/Content.Server/PDA/PdaSystem.cs b/Content.Server/PDA/PdaSystem.cs index cdcdbc02e5f..7f17b97d0ad 100644 --- a/Content.Server/PDA/PdaSystem.cs +++ b/Content.Server/PDA/PdaSystem.cs @@ -192,7 +192,7 @@ public void UpdatePdaUi(EntityUid uid, PdaComponent? pda = null) { ActualOwnerName = pda.OwnerName, IdOwner = id?.FullName, - JobTitle = id?.JobTitle, + JobTitle = id?.LocalizedJobTitle, StationAlertLevel = pda.StationAlertLevel, StationAlertColor = pda.StationAlertColor }, diff --git a/Content.Server/Parallax/BiomeSystem.cs b/Content.Server/Parallax/BiomeSystem.cs index 1d7ea2a4407..22b531eb7cb 100644 --- a/Content.Server/Parallax/BiomeSystem.cs +++ b/Content.Server/Parallax/BiomeSystem.cs @@ -962,7 +962,7 @@ private void UnloadChunk(BiomeComponent component, EntityUid gridUid, MapGridCom } } - grid.SetTiles(tiles); + _mapSystem.SetTiles(gridUid, grid, tiles); tiles.Clear(); component.LoadedChunks.Remove(chunk); diff --git a/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.ControlBox.cs b/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.ControlBox.cs index 404eb00fef2..90a5cb2ea0e 100644 --- a/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.ControlBox.cs +++ b/Content.Server/ParticleAccelerator/EntitySystems/ParticleAcceleratorSystem.ControlBox.cs @@ -9,7 +9,6 @@ using Content.Shared.Power; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; -using Robust.Shared.Timing; using Robust.Shared.Player; namespace Content.Server.ParticleAccelerator.EntitySystems; @@ -18,7 +17,6 @@ public sealed partial class ParticleAcceleratorSystem { [Dependency] private readonly IAdminManager _adminManager = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly IGameTiming _timing = default!; private void InitializeControlBoxSystem() { @@ -175,7 +173,7 @@ or ParticleAcceleratorPowerState.Level1 if (strength >= alertMinPowerState) { var pos = Transform(uid); - if (_timing.CurTime > comp.EffectCooldown) + if (_gameTiming.CurTime > comp.EffectCooldown) { _chat.SendAdminAlert(player, Loc.GetString("particle-accelerator-admin-power-strength-warning", @@ -186,7 +184,7 @@ or ParticleAcceleratorPowerState.Level1 Filter.Empty().AddPlayers(_adminManager.ActiveAdmins), false, AudioParams.Default.WithVolume(-8f)); - comp.EffectCooldown = _timing.CurTime + comp.CooldownDuration; + comp.EffectCooldown = _gameTiming.CurTime + comp.CooldownDuration; } } } diff --git a/Content.Server/Physics/Controllers/ChaoticJumpSystem.cs b/Content.Server/Physics/Controllers/ChaoticJumpSystem.cs index ee4b776cf05..3f2493b43ff 100644 --- a/Content.Server/Physics/Controllers/ChaoticJumpSystem.cs +++ b/Content.Server/Physics/Controllers/ChaoticJumpSystem.cs @@ -18,7 +18,6 @@ public sealed class ChaoticJumpSystem : VirtualController [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; - [Dependency] private readonly SharedTransformSystem _xform = default!; public override void Initialize() { @@ -73,6 +72,6 @@ private void Jump(EntityUid uid, ChaoticJumpComponent component) Spawn(component.Effect, transform.Coordinates); - _xform.SetWorldPosition(uid, targetPos); + _transform.SetWorldPosition(uid, targetPos); } } diff --git a/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs b/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs index e9bd5140ae1..c897020d17f 100644 --- a/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs +++ b/Content.Server/Players/PlayTimeTracking/PlayTimeTrackingSystem.cs @@ -30,14 +30,15 @@ namespace Content.Server.Players.PlayTimeTracking; /// public sealed class PlayTimeTrackingSystem : EntitySystem { + [Dependency] private readonly IAdminManager _adminManager = default!; [Dependency] private readonly IAfkManager _afk = default!; - [Dependency] private readonly IPlayerManager _playerManager = default!; - [Dependency] private readonly IPrototypeManager _prototypes = default!; [Dependency] private readonly IConfigurationManager _cfg = default!; [Dependency] private readonly MindSystem _minds = default!; - [Dependency] private readonly PlayTimeTrackingManager _tracking = default!; - [Dependency] private readonly IAdminManager _adminManager = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IServerPreferencesManager _preferencesManager = default!; + [Dependency] private readonly IPrototypeManager _prototypes = default!; + [Dependency] private readonly SharedRoleSystem _roles = default!; + [Dependency] private readonly PlayTimeTrackingManager _tracking = default!; public override void Initialize() { @@ -101,10 +102,7 @@ private bool IsPlayerAlive(ICommonSession session) public IEnumerable GetTimedRoles(EntityUid mindId) { - var ev = new MindGetAllRolesEvent(new List()); - RaiseLocalEvent(mindId, ref ev); - - foreach (var role in ev.Roles) + foreach (var role in _roles.MindGetAllRoleInfo(mindId)) { if (string.IsNullOrWhiteSpace(role.PlayTimeTrackerId)) continue; diff --git a/Content.Server/Players/RateLimiting/PlayerRateLimitManager.cs b/Content.Server/Players/RateLimiting/PlayerRateLimitManager.cs index 59f086f9c31..a3b4d4a5364 100644 --- a/Content.Server/Players/RateLimiting/PlayerRateLimitManager.cs +++ b/Content.Server/Players/RateLimiting/PlayerRateLimitManager.cs @@ -1,6 +1,7 @@ using System.Runtime.InteropServices; using Content.Server.Administration.Logs; using Content.Shared.Database; +using Content.Shared.Players.RateLimiting; using Robust.Server.Player; using Robust.Shared.Configuration; using Robust.Shared.Enums; @@ -10,26 +11,7 @@ namespace Content.Server.Players.RateLimiting; -/// -/// General-purpose system to rate limit actions taken by clients, such as chat messages. -/// -/// -/// -/// Different categories of rate limits must be registered ahead of time by calling . -/// Once registered, you can simply call to count a rate-limited action for a player. -/// -/// -/// This system is intended for rate limiting player actions over short periods, -/// to ward against spam that can cause technical issues such as admin client load. -/// It should not be used for in-game actions or similar. -/// -/// -/// Rate limits are reset when a client reconnects. -/// This should not be an issue for the reasonably short rate limit periods this system is intended for. -/// -/// -/// -public sealed class PlayerRateLimitManager +public sealed class PlayerRateLimitManager : SharedPlayerRateLimitManager { [Dependency] private readonly IAdminLogManager _adminLog = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; @@ -39,18 +21,7 @@ public sealed class PlayerRateLimitManager private readonly Dictionary _registrations = new(); private readonly Dictionary> _rateLimitData = new(); - /// - /// Count and validate an action performed by a player against rate limits. - /// - /// The player performing the action. - /// The key string that was previously used to register a rate limit category. - /// Whether the action counted should be blocked due to surpassing rate limits or not. - /// - /// is not a connected player - /// OR is not a registered rate limit category. - /// - /// - public RateLimitStatus CountAction(ICommonSession player, string key) + public override RateLimitStatus CountAction(ICommonSession player, string key) { if (player.Status == SessionStatus.Disconnected) throw new ArgumentException("Player is not connected"); @@ -74,7 +45,8 @@ public RateLimitStatus CountAction(ICommonSession player, string key) return RateLimitStatus.Allowed; // Breached rate limits, inform admins if configured. - if (registration.AdminAnnounceDelay is { } cvarAnnounceDelay) + // Negative delays can be used to disable admin announcements. + if (registration.AdminAnnounceDelay is {TotalSeconds: >= 0} cvarAnnounceDelay) { if (datum.NextAdminAnnounce < time) { @@ -85,7 +57,7 @@ public RateLimitStatus CountAction(ICommonSession player, string key) if (!datum.Announced) { - registration.Registration.PlayerLimitedAction(player); + registration.Registration.PlayerLimitedAction?.Invoke(player); _adminLog.Add( registration.Registration.AdminLogType, LogImpact.Medium, @@ -97,17 +69,7 @@ public RateLimitStatus CountAction(ICommonSession player, string key) return RateLimitStatus.Blocked; } - /// - /// Register a new rate limit category. - /// - /// - /// The key string that will be referred to later with . - /// Must be unique and should probably just be a constant somewhere. - /// - /// The data specifying the rate limit's parameters. - /// has already been registered. - /// is invalid. - public void Register(string key, RateLimitRegistration registration) + public override void Register(string key, RateLimitRegistration registration) { if (_registrations.ContainsKey(key)) throw new InvalidOperationException($"Key already registered: {key}"); @@ -135,7 +97,7 @@ public void Register(string key, RateLimitRegistration registration) if (registration.CVarAdminAnnounceDelay != null) { _cfg.OnValueChanged( - registration.CVarLimitCount, + registration.CVarAdminAnnounceDelay, i => data.AdminAnnounceDelay = TimeSpan.FromSeconds(i), invokeImmediately: true); } @@ -143,10 +105,7 @@ public void Register(string key, RateLimitRegistration registration) _registrations.Add(key, data); } - /// - /// Initialize the manager's functionality at game startup. - /// - public void Initialize() + public override void Initialize() { _playerManager.PlayerStatusChanged += PlayerManagerOnPlayerStatusChanged; } @@ -189,66 +148,3 @@ private struct RateLimitDatum public TimeSpan NextAdminAnnounce; } } - -/// -/// Contains all data necessary to register a rate limit with . -/// -public sealed class RateLimitRegistration -{ - /// - /// CVar that controls the period over which the rate limit is counted, measured in seconds. - /// - public required CVarDef CVarLimitPeriodLength { get; init; } - - /// - /// CVar that controls how many actions are allowed in a single rate limit period. - /// - public required CVarDef CVarLimitCount { get; init; } - - /// - /// An action that gets invoked when this rate limit has been breached by a player. - /// - /// - /// This can be used for informing players or taking administrative action. - /// - public required Action PlayerLimitedAction { get; init; } - - /// - /// CVar that controls the minimum delay between admin notifications, measured in seconds. - /// This can be omitted to have no admin notification system. - /// - /// - /// If set, must be set too. - /// - public CVarDef? CVarAdminAnnounceDelay { get; init; } - - /// - /// An action that gets invoked when a rate limit was breached and admins should be notified. - /// - /// - /// If set, must be set too. - /// - public Action? AdminAnnounceAction { get; init; } - - /// - /// Log type used to log rate limit violations to the admin logs system. - /// - public LogType AdminLogType { get; init; } = LogType.RateLimited; -} - -/// -/// Result of a rate-limited operation. -/// -/// -public enum RateLimitStatus : byte -{ - /// - /// The action was not blocked by the rate limit. - /// - Allowed, - - /// - /// The action was blocked by the rate limit. - /// - Blocked, -} diff --git a/Content.Server/Pointing/EntitySystems/PointingSystem.cs b/Content.Server/Pointing/EntitySystems/PointingSystem.cs index d5ad1fb123e..23c70d78f48 100644 --- a/Content.Server/Pointing/EntitySystems/PointingSystem.cs +++ b/Content.Server/Pointing/EntitySystems/PointingSystem.cs @@ -40,6 +40,7 @@ internal sealed class PointingSystem : SharedPointingSystem [Dependency] private readonly VisibilitySystem _visibilitySystem = default!; [Dependency] private readonly SharedMindSystem _minds = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly SharedMapSystem _map = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!; [Dependency] private readonly ExamineSystemShared _examine = default!; @@ -73,8 +74,13 @@ private void OnPlayerStatusChanged(object? sender, SessionStatusEventArgs e) } // TODO: FOV - private void SendMessage(EntityUid source, IEnumerable viewers, EntityUid pointed, string selfMessage, - string viewerMessage, string? viewerPointedAtMessage = null) + private void SendMessage( + EntityUid source, + IEnumerable viewers, + EntityUid pointed, + string selfMessage, + string viewerMessage, + string? viewerPointedAtMessage = null) { var netSource = GetNetEntity(source); @@ -226,8 +232,8 @@ bool ViewerPredicate(ICommonSession playerSession) if (_mapManager.TryFindGridAt(mapCoordsPointed, out var gridUid, out var grid)) { - position = $"EntId={gridUid} {grid.WorldToTile(mapCoordsPointed.Position)}"; - tileRef = grid.GetTileRef(grid.WorldToTile(mapCoordsPointed.Position)); + position = $"EntId={gridUid} {_map.WorldToTile(gridUid, grid, mapCoordsPointed.Position)}"; + tileRef = _map.GetTileRef(gridUid, grid, _map.WorldToTile(gridUid, grid, mapCoordsPointed.Position)); } var tileDef = _tileDefinitionManager[tileRef?.Tile.TypeId ?? 0]; diff --git a/Content.Server/Power/Components/ApcComponent.cs b/Content.Server/Power/Components/ApcComponent.cs index bee8defc43e..0bf9bc18721 100644 --- a/Content.Server/Power/Components/ApcComponent.cs +++ b/Content.Server/Power/Components/ApcComponent.cs @@ -25,9 +25,6 @@ public sealed partial class ApcComponent : BaseApcNetComponent [DataField("enabled")] public bool MainBreakerEnabled = true; - // TODO: remove this since it probably breaks when 2 people use it - [DataField("hasAccess")] - public bool HasAccess = false; /// /// APC state needs to always be updated after first processing tick. diff --git a/Content.Server/Power/EntitySystems/ApcSystem.cs b/Content.Server/Power/EntitySystems/ApcSystem.cs index 52c19c302ce..14dddbb43e3 100644 --- a/Content.Server/Power/EntitySystems/ApcSystem.cs +++ b/Content.Server/Power/EntitySystems/ApcSystem.cs @@ -2,7 +2,6 @@ using Content.Server.Popups; using Content.Server.Power.Components; using Content.Server.Power.Pow3r; -using Content.Shared.Access.Components; using Content.Shared.Access.Systems; using Content.Shared.APC; using Content.Shared.Emag.Components; @@ -71,11 +70,8 @@ private static void OnApcStartup(EntityUid uid, ApcComponent component, Componen component.NeedStateUpdate = true; } - //Update the HasAccess var for UI to read private void OnBoundUiOpen(EntityUid uid, ApcComponent component, BoundUIOpenedEvent args) { - // TODO: this should be per-player not stored on the apc - component.HasAccess = _accessReader.IsAllowed(args.Actor, uid); UpdateApcState(uid, component); } @@ -165,7 +161,7 @@ public void UpdateUIState(EntityUid uid, // TODO: Fix ContentHelpers or make a new one coz this is cooked. var charge = ContentHelpers.RoundToNearestLevels(battery.CurrentStorage / battery.Capacity, 1.0, 100 / ChargeAccuracy) / 100f * ChargeAccuracy; - var state = new ApcBoundInterfaceState(apc.MainBreakerEnabled, apc.HasAccess, + var state = new ApcBoundInterfaceState(apc.MainBreakerEnabled, (int) MathF.Ceiling(battery.CurrentSupply), apc.LastExternalState, charge); diff --git a/Content.Server/Power/EntitySystems/BatterySystem.cs b/Content.Server/Power/EntitySystems/BatterySystem.cs index 0a0f2068b58..ed2d54ffaa6 100644 --- a/Content.Server/Power/EntitySystems/BatterySystem.cs +++ b/Content.Server/Power/EntitySystems/BatterySystem.cs @@ -84,7 +84,6 @@ public override void Update(float frameTime) while (query.MoveNext(out var uid, out var comp, out var batt)) { if (!comp.AutoRecharge) continue; - if (batt.IsFullyCharged) continue; SetCharge(uid, batt.CurrentCharge + comp.AutoRechargeRate * frameTime, batt); } } @@ -138,7 +137,8 @@ public void SetCharge(EntityUid uid, float value, BatteryComponent? battery = nu var old = battery.CurrentCharge; battery.CurrentCharge = MathHelper.Clamp(value, 0, battery.MaxCharge); - if (MathHelper.CloseTo(battery.CurrentCharge, old)) + if (MathHelper.CloseTo(battery.CurrentCharge, old) && + !(old != battery.CurrentCharge && battery.CurrentCharge == battery.MaxCharge)) return; var ev = new ChargeChangedEvent(battery.CurrentCharge, battery.MaxCharge); diff --git a/Content.Server/Power/EntitySystems/CableSystem.Placer.cs b/Content.Server/Power/EntitySystems/CableSystem.Placer.cs index 263d626ef55..a5cf54fae0c 100644 --- a/Content.Server/Power/EntitySystems/CableSystem.Placer.cs +++ b/Content.Server/Power/EntitySystems/CableSystem.Placer.cs @@ -11,6 +11,8 @@ namespace Content.Server.Power.EntitySystems; public sealed partial class CableSystem { [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly SharedMapSystem _map = default!; private void InitializeCablePlacer() { @@ -26,11 +28,12 @@ private void OnCablePlacerAfterInteract(Entity placer, ref if (component.CablePrototypeId == null) return; - if(!TryComp(args.ClickLocation.GetGridUid(EntityManager), out var grid)) + if(!TryComp(_transform.GetGrid(args.ClickLocation), out var grid)) return; + var gridUid = _transform.GetGrid(args.ClickLocation)!.Value; var snapPos = grid.TileIndicesFor(args.ClickLocation); - var tileDef = (ContentTileDefinition) _tileManager[grid.GetTileRef(snapPos).Tile.TypeId]; + var tileDef = (ContentTileDefinition) _tileManager[_map.GetTileRef(gridUid, grid,snapPos).Tile.TypeId]; if (!tileDef.IsSubFloor || !tileDef.Sturdy) return; diff --git a/Content.Server/Power/EntitySystems/CableSystem.cs b/Content.Server/Power/EntitySystems/CableSystem.cs index 62eb08d7cbc..d0f45b54fcf 100644 --- a/Content.Server/Power/EntitySystems/CableSystem.cs +++ b/Content.Server/Power/EntitySystems/CableSystem.cs @@ -17,7 +17,6 @@ public sealed partial class CableSystem : EntitySystem [Dependency] private readonly SharedToolSystem _toolSystem = default!; [Dependency] private readonly StackSystem _stack = default!; [Dependency] private readonly ElectrocutionSystem _electrocutionSystem = default!; - [Dependency] private readonly IAdminLogManager _adminLogs = default!; public override void Initialize() { @@ -51,7 +50,7 @@ private void OnCableCut(EntityUid uid, CableComponent cable, DoAfterEvent args) if (_electrocutionSystem.TryDoElectrifiedAct(uid, args.User)) return; - _adminLogs.Add(LogType.CableCut, LogImpact.Medium, $"The {ToPrettyString(uid)} at {xform.Coordinates} was cut by {ToPrettyString(args.User)}."); + _adminLogger.Add(LogType.CableCut, LogImpact.Medium, $"The {ToPrettyString(uid)} at {xform.Coordinates} was cut by {ToPrettyString(args.User)}."); Spawn(cable.CableDroppedOnCutPrototype, xform.Coordinates); QueueDel(uid); diff --git a/Content.Server/Power/PowerWireAction.cs b/Content.Server/Power/PowerWireAction.cs index ac34966036c..cebb7de8ec8 100644 --- a/Content.Server/Power/PowerWireAction.cs +++ b/Content.Server/Power/PowerWireAction.cs @@ -1,4 +1,5 @@ using Content.Server.Electrocution; +using Content.Shared.Electrocution; using Content.Server.Power.Components; using Content.Server.Wires; using Content.Shared.Power; @@ -104,6 +105,7 @@ private void SetElectrified(EntityUid used, bool setting, ElectrifiedComponent? && !EntityManager.TryGetComponent(used, out electrified)) return; + _electrocutionSystem.SetElectrifiedWireCut((used, electrified), setting); electrified.Enabled = setting; } diff --git a/Content.Server/Procedural/DungeonSystem.Commands.cs b/Content.Server/Procedural/DungeonSystem.Commands.cs index 51a6a57bbeb..09e881686e4 100644 --- a/Content.Server/Procedural/DungeonSystem.Commands.cs +++ b/Content.Server/Procedural/DungeonSystem.Commands.cs @@ -1,8 +1,6 @@ -using System.Threading.Tasks; using Content.Server.Administration; using Content.Shared.Administration; using Content.Shared.Procedural; -using Content.Shared.Procedural.DungeonGenerators; using Robust.Shared.Console; using Robust.Shared.Map; using Robust.Shared.Map.Components; @@ -44,7 +42,7 @@ private async void GenerateDungeon(IConsoleShell shell, string argstr, string[] } var position = new Vector2i(posX, posY); - var dungeonUid = _mapManager.GetMapEntityId(mapId); + var dungeonUid = _maps.GetMapOrInvalid(mapId); if (!TryComp(dungeonUid, out var dungeonGrid)) { @@ -118,7 +116,7 @@ private void DungeonPackVis(IConsoleShell shell, string argstr, string[] args) } var mapId = new MapId(mapInt); - var mapUid = _mapManager.GetMapEntityId(mapId); + var mapUid = _maps.GetMapOrInvalid(mapId); if (!_prototype.TryIndex(args[1], out var pack)) { @@ -156,7 +154,7 @@ private void DungeonPackVis(IConsoleShell shell, string argstr, string[] args) } } - grid.SetTiles(tiles); + _maps.SetTiles(mapUid, grid, tiles); shell.WriteLine(Loc.GetString("cmd-dungen_pack_vis")); } @@ -174,7 +172,7 @@ private void DungeonPresetVis(IConsoleShell shell, string argstr, string[] args) } var mapId = new MapId(mapInt); - var mapUid = _mapManager.GetMapEntityId(mapId); + var mapUid =_maps.GetMapOrInvalid(mapId); if (!_prototype.TryIndex(args[1], out var preset)) { @@ -197,7 +195,7 @@ private void DungeonPresetVis(IConsoleShell shell, string argstr, string[] args) } } - grid.SetTiles(tiles); + _maps.SetTiles(mapUid, grid, tiles); shell.WriteLine(Loc.GetString("cmd-dungen_pack_vis")); } diff --git a/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs b/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs index c977fbc0489..c8867744a40 100644 --- a/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs +++ b/Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs @@ -11,6 +11,7 @@ using Content.Shared.Interaction; using Content.Shared.Power; using Content.Shared.Radio; +using Content.Shared.Chat; using Content.Shared.Radio.Components; using Robust.Shared.Prototypes; @@ -213,7 +214,7 @@ private void OnReceiveRadio(EntityUid uid, RadioSpeakerComponent component, ref var name = Loc.GetString("speech-name-relay", ("speaker", Name(uid)), - ("originalName", nameEv.Name)); + ("originalName", nameEv.VoiceName)); // log to chat so people can identity the speaker/source, but avoid clogging ghost chat if there are many radios _chat.TrySendInGameICMessage(uid, args.Message, InGameICChatType.Whisper, ChatTransmitRange.GhostRangeLimit, nameOverride: name, checkRadioPrefix: false); diff --git a/Content.Server/Radio/EntitySystems/RadioSystem.cs b/Content.Server/Radio/EntitySystems/RadioSystem.cs index 283b5972817..bdc368fa932 100644 --- a/Content.Server/Radio/EntitySystems/RadioSystem.cs +++ b/Content.Server/Radio/EntitySystems/RadioSystem.cs @@ -2,7 +2,6 @@ using Content.Server.Chat.Systems; using Content.Server.Power.Components; using Content.Server.Radio.Components; -using Content.Server.VoiceMask; using Content.Shared.Chat; using Content.Shared.Database; using Content.Shared.Radio; @@ -78,24 +77,15 @@ public void SendRadioMessage(EntityUid messageSource, string message, RadioChann if (!_messages.Add(message)) return; - var name = TryComp(messageSource, out VoiceMaskComponent? mask) && mask.Enabled - ? mask.VoiceName - : MetaData(messageSource).EntityName; - - // Delta-V: Support syrinx voice mask on radio. - if (TryComp(messageSource, out SyrinxVoiceMaskComponent? syrinx) && syrinx.Enabled) - name = syrinx.VoiceName; + var evt = new TransformSpeakerNameEvent(messageSource, MetaData(messageSource).EntityName); + RaiseLocalEvent(messageSource, evt); + var name = evt.VoiceName; name = FormattedMessage.EscapeText(name); SpeechVerbPrototype speech; - if (mask != null - && mask.Enabled - && mask.SpeechVerb != null - && _prototype.TryIndex(mask.SpeechVerb, out var proto)) - { - speech = proto; - } + if (evt.SpeechVerb != null && _prototype.TryIndex(evt.SpeechVerb, out var evntProto)) + speech = evntProto; else speech = _chat.GetSpeechVerb(messageSource, message); diff --git a/Content.Server/Remotes/DoorRemoteSystem.cs b/Content.Server/Remotes/DoorRemoteSystem.cs index 67160650871..de327bd0840 100644 --- a/Content.Server/Remotes/DoorRemoteSystem.cs +++ b/Content.Server/Remotes/DoorRemoteSystem.cs @@ -74,7 +74,7 @@ private void OnBeforeInteract(Entity entity, ref BeforeRang case OperatingMode.ToggleEmergencyAccess: if (airlockComp != null) { - _airlock.ToggleEmergencyAccess(args.Target.Value, airlockComp); + _airlock.SetEmergencyAccess((args.Target.Value, airlockComp), !airlockComp.EmergencyAccess); _adminLogger.Add(LogType.Action, LogImpact.Medium, $"{ToPrettyString(args.User):player} used {ToPrettyString(args.Used)} on {ToPrettyString(args.Target.Value)} to set emergency access {(airlockComp.EmergencyAccess ? "on" : "off")}"); } diff --git a/Content.Server/Revolutionary/Components/CommandStaffComponent.cs b/Content.Server/Revolutionary/Components/CommandStaffComponent.cs index 8e42f41cb3d..79349b25da7 100644 --- a/Content.Server/Revolutionary/Components/CommandStaffComponent.cs +++ b/Content.Server/Revolutionary/Components/CommandStaffComponent.cs @@ -1,12 +1,12 @@ -using Content.Server.GameTicking.Rules; - namespace Content.Server.Revolutionary.Components; /// -/// Given to heads at round start for Revs. Used for tracking if heads died or not. +/// Given to heads at round start. Used for assigning traitors to kill heads and for revs to check if the heads died or not. /// -[RegisterComponent, Access(typeof(RevolutionaryRuleSystem))] +[RegisterComponent] public sealed partial class CommandStaffComponent : Component { } + +//TODO this should probably be on a mind role, not the mob diff --git a/Content.Server/Roles/DragonRoleComponent.cs b/Content.Server/Roles/DragonRoleComponent.cs index b85fd53eb0c..c47455d8f6f 100644 --- a/Content.Server/Roles/DragonRoleComponent.cs +++ b/Content.Server/Roles/DragonRoleComponent.cs @@ -4,9 +4,9 @@ namespace Content.Server.Roles; /// -/// Role used to keep track of space dragons for antag purposes. +/// Added to mind role entities to tag that they are a space dragon. /// -[RegisterComponent, Access(typeof(DragonSystem)), ExclusiveAntagonist] -public sealed partial class DragonRoleComponent : AntagonistRoleComponent +[RegisterComponent, Access(typeof(DragonSystem))] +public sealed partial class DragonRoleComponent : BaseMindRoleComponent { } diff --git a/Content.Server/Roles/FugitiveRoleComponent.cs b/Content.Server/Roles/FugitiveRoleComponent.cs deleted file mode 100644 index e68984ccf7a..00000000000 --- a/Content.Server/Roles/FugitiveRoleComponent.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Content.Shared.Roles; - -namespace Content.Server.Roles; - -/// -/// DeltaV - fugitive antag role -/// -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class FugitiveRoleComponent : AntagonistRoleComponent; diff --git a/Content.Server/Roles/InitialInfectedRoleComponent.cs b/Content.Server/Roles/InitialInfectedRoleComponent.cs index 52d3db41643..475cd3ba603 100644 --- a/Content.Server/Roles/InitialInfectedRoleComponent.cs +++ b/Content.Server/Roles/InitialInfectedRoleComponent.cs @@ -2,8 +2,11 @@ namespace Content.Server.Roles; -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class InitialInfectedRoleComponent : AntagonistRoleComponent +/// +/// Added to mind role entities to tag that they are an initial infected. +/// +[RegisterComponent] +public sealed partial class InitialInfectedRoleComponent : BaseMindRoleComponent { } diff --git a/Content.Server/Roles/Jobs/JobSystem.cs b/Content.Server/Roles/Jobs/JobSystem.cs index 9f0dd7ae32b..7e69d9d92bc 100644 --- a/Content.Server/Roles/Jobs/JobSystem.cs +++ b/Content.Server/Roles/Jobs/JobSystem.cs @@ -30,7 +30,7 @@ private void MindOnDoGreeting(EntityUid mindId, MindComponent component, ref Min if (!_mind.TryGetSession(mindId, out var session)) return; - if (!MindTryGetJob(mindId, out _, out var prototype)) + if (!MindTryGetJob(mindId, out var prototype)) return; _chat.DispatchServerMessage(session, Loc.GetString("job-greet-introduce-job-name", @@ -47,6 +47,6 @@ public void MindAddJob(EntityUid mindId, string jobPrototypeId) if (MindHasJobWithId(mindId, jobPrototypeId)) return; - _roles.MindAddRole(mindId, new JobComponent { Prototype = jobPrototypeId }); + _roles.MindAddJobRole(mindId, null, false, jobPrototypeId); } } diff --git a/Content.Server/Roles/NinjaRoleComponent.cs b/Content.Server/Roles/NinjaRoleComponent.cs index cb60e5bdf03..7bdffe67a31 100644 --- a/Content.Server/Roles/NinjaRoleComponent.cs +++ b/Content.Server/Roles/NinjaRoleComponent.cs @@ -2,7 +2,10 @@ namespace Content.Server.Roles; -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class NinjaRoleComponent : AntagonistRoleComponent +/// +/// Added to mind role entities to tag that they are a space ninja. +/// +[RegisterComponent] +public sealed partial class NinjaRoleComponent : BaseMindRoleComponent { } diff --git a/Content.Server/Roles/NukeopsRoleComponent.cs b/Content.Server/Roles/NukeopsRoleComponent.cs index a6ff0b71b06..41561088ea8 100644 --- a/Content.Server/Roles/NukeopsRoleComponent.cs +++ b/Content.Server/Roles/NukeopsRoleComponent.cs @@ -3,9 +3,9 @@ namespace Content.Server.Roles; /// -/// Added to mind entities to tag that they are a nuke operative. +/// Added to mind role entities to tag that they are a nuke operative. /// -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class NukeopsRoleComponent : AntagonistRoleComponent +[RegisterComponent] +public sealed partial class NukeopsRoleComponent : BaseMindRoleComponent { } diff --git a/Content.Server/Roles/RemoveRoleCommand.cs b/Content.Server/Roles/RemoveRoleCommand.cs index feba63a253f..fd4bb09317a 100644 --- a/Content.Server/Roles/RemoveRoleCommand.cs +++ b/Content.Server/Roles/RemoveRoleCommand.cs @@ -45,7 +45,7 @@ public void Execute(IConsoleShell shell, string argStr, string[] args) var roles = _entityManager.System(); var jobs = _entityManager.System(); if (jobs.MindHasJobWithId(mind, args[1])) - roles.MindRemoveRole(mind.Value); + roles.MindTryRemoveRole(mind.Value); } } } diff --git a/Content.Server/Roles/RevolutionaryRoleComponent.cs b/Content.Server/Roles/RevolutionaryRoleComponent.cs index bf56b960084..dcdb131b9d0 100644 --- a/Content.Server/Roles/RevolutionaryRoleComponent.cs +++ b/Content.Server/Roles/RevolutionaryRoleComponent.cs @@ -3,10 +3,10 @@ namespace Content.Server.Roles; /// -/// Added to mind entities to tag that they are a Revolutionary. +/// Added to mind role entities to tag that they are a Revolutionary. /// -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class RevolutionaryRoleComponent : AntagonistRoleComponent +[RegisterComponent] +public sealed partial class RevolutionaryRoleComponent : BaseMindRoleComponent { /// /// For headrevs, how many people you have converted. diff --git a/Content.Server/Roles/RoleSystem.cs b/Content.Server/Roles/RoleSystem.cs index c53fa1cf9eb..333f4f9b606 100644 --- a/Content.Server/Roles/RoleSystem.cs +++ b/Content.Server/Roles/RoleSystem.cs @@ -1,32 +1,40 @@ +using Content.Shared.Mind; using Content.Shared.Roles; namespace Content.Server.Roles; public sealed class RoleSystem : SharedRoleSystem { - public override void Initialize() - { - // TODO make roles entities - base.Initialize(); - - SubscribeAntagEvents(); - SubscribeAntagEvents(); - SubscribeAntagEvents(); - SubscribeAntagEvents(); - SubscribeAntagEvents(); - SubscribeAntagEvents(); - SubscribeAntagEvents(); - SubscribeAntagEvents(); - SubscribeAntagEvents(); - } - public string? MindGetBriefing(EntityUid? mindId) { if (mindId == null) + { + Log.Error($"MingGetBriefing failed for mind {mindId}"); + return null; + } + + TryComp(mindId.Value, out var mindComp); + + if (mindComp is null) + { + Log.Error($"MingGetBriefing failed for mind {mindId}"); return null; + } var ev = new GetBriefingEvent(); - RaiseLocalEvent(mindId.Value, ref ev); + + // This is on the event because while this Entity is also present on every Mind Role Entity's MindRoleComp + // getting to there from a GetBriefing event subscription can be somewhat boilerplate + // and this needs to be looked up for the event anyway so why calculate it again later + ev.Mind = (mindId.Value, mindComp); + + // Briefing is no longer raised on the mind entity itself + // because all the components that briefings subscribe to should be on Mind Role Entities + foreach(var role in mindComp.MindRoles) + { + RaiseLocalEvent(role, ref ev); + } + return ev.Briefing; } } @@ -38,8 +46,16 @@ public override void Initialize() [ByRefEvent] public sealed class GetBriefingEvent { + /// + /// The text that will be shown on the Character Screen + /// public string? Briefing; + /// + /// The Mind to whose Mind Role Entities the briefing is sent to + /// + public Entity Mind; + public GetBriefingEvent(string? briefing = null) { Briefing = briefing; diff --git a/Content.Server/Roles/SubvertedSiliconRoleComponent.cs b/Content.Server/Roles/SubvertedSiliconRoleComponent.cs index 70056fbec9e..55727573b9d 100644 --- a/Content.Server/Roles/SubvertedSiliconRoleComponent.cs +++ b/Content.Server/Roles/SubvertedSiliconRoleComponent.cs @@ -2,7 +2,10 @@ namespace Content.Server.Roles; +/// +/// Added to mind role entities to tag that they are a hacked borg. +/// [RegisterComponent] -public sealed partial class SubvertedSiliconRoleComponent : AntagonistRoleComponent +public sealed partial class SubvertedSiliconRoleComponent : BaseMindRoleComponent { } diff --git a/Content.Server/Roles/ThiefRoleComponent.cs b/Content.Server/Roles/ThiefRoleComponent.cs index 82e350ef630..c0ddee71a49 100644 --- a/Content.Server/Roles/ThiefRoleComponent.cs +++ b/Content.Server/Roles/ThiefRoleComponent.cs @@ -2,7 +2,10 @@ namespace Content.Server.Roles; +/// +/// Added to mind role entities to tag that they are a thief. +/// [RegisterComponent] -public sealed partial class ThiefRoleComponent : AntagonistRoleComponent +public sealed partial class ThiefRoleComponent : BaseMindRoleComponent { } diff --git a/Content.Server/Roles/TraitorRoleComponent.cs b/Content.Server/Roles/TraitorRoleComponent.cs index 96bfe8dd801..a8a11a8f1bd 100644 --- a/Content.Server/Roles/TraitorRoleComponent.cs +++ b/Content.Server/Roles/TraitorRoleComponent.cs @@ -2,7 +2,10 @@ namespace Content.Server.Roles; -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class TraitorRoleComponent : AntagonistRoleComponent +/// +/// Added to mind role entities to tag that they are a syndicate traitor. +/// +[RegisterComponent] +public sealed partial class TraitorRoleComponent : BaseMindRoleComponent { } diff --git a/Content.Server/Roles/ZombieRoleComponent.cs b/Content.Server/Roles/ZombieRoleComponent.cs index 2f9948022b3..cff25e53e80 100644 --- a/Content.Server/Roles/ZombieRoleComponent.cs +++ b/Content.Server/Roles/ZombieRoleComponent.cs @@ -2,7 +2,10 @@ namespace Content.Server.Roles; -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class ZombieRoleComponent : AntagonistRoleComponent +/// +/// Added to mind role entities to tag that they are a zombie. +/// +[RegisterComponent] +public sealed partial class ZombieRoleComponent : BaseMindRoleComponent { } diff --git a/Content.Server/ServerUpdates/ServerUpdateManager.cs b/Content.Server/ServerUpdates/ServerUpdateManager.cs index f4e54984e9b..bf18428e25b 100644 --- a/Content.Server/ServerUpdates/ServerUpdateManager.cs +++ b/Content.Server/ServerUpdates/ServerUpdateManager.cs @@ -12,9 +12,13 @@ namespace Content.Server.ServerUpdates; /// -/// Responsible for restarting the server for update, when not disruptive. +/// Responsible for restarting the server periodically or for update, when not disruptive. /// -public sealed class ServerUpdateManager +/// +/// This was originally only designed for restarting on *update*, +/// but now also handles periodic restarting to keep server uptime via . +/// +public sealed class ServerUpdateManager : IPostInjectInit { [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly IWatchdogApi _watchdog = default!; @@ -22,23 +26,43 @@ public sealed class ServerUpdateManager [Dependency] private readonly IChatManager _chatManager = default!; [Dependency] private readonly IBaseServer _server = default!; [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] private readonly ILogManager _logManager = default!; + + private ISawmill _sawmill = default!; [ViewVariables] private bool _updateOnRoundEnd; private TimeSpan? _restartTime; + private TimeSpan _uptimeRestart; + public void Initialize() { _watchdog.UpdateReceived += WatchdogOnUpdateReceived; _playerManager.PlayerStatusChanged += PlayerManagerOnPlayerStatusChanged; + + _cfg.OnValueChanged( + CCVars.ServerUptimeRestartMinutes, + minutes => _uptimeRestart = TimeSpan.FromMinutes(minutes), + true); } public void Update() { - if (_restartTime != null && _restartTime < _gameTiming.RealTime) + if (_restartTime != null) { - DoShutdown(); + if (_restartTime < _gameTiming.RealTime) + { + DoShutdown(); + } + } + else + { + if (ShouldShutdownDueToUptime()) + { + ServerEmptyUpdateRestartCheck("uptime"); + } } } @@ -48,7 +72,7 @@ public void Update() /// True if the server is going to restart. public bool RoundEnded() { - if (_updateOnRoundEnd) + if (_updateOnRoundEnd || ShouldShutdownDueToUptime()) { DoShutdown(); return true; @@ -61,11 +85,14 @@ private void PlayerManagerOnPlayerStatusChanged(object? sender, SessionStatusEve { switch (e.NewStatus) { - case SessionStatus.Connecting: + case SessionStatus.Connected: + if (_restartTime != null) + _sawmill.Debug("Aborting server restart timer due to player connection"); + _restartTime = null; break; case SessionStatus.Disconnected: - ServerEmptyUpdateRestartCheck(); + ServerEmptyUpdateRestartCheck("last player disconnect"); break; } } @@ -74,20 +101,20 @@ private void WatchdogOnUpdateReceived() { _chatManager.DispatchServerAnnouncement(Loc.GetString("server-updates-received")); _updateOnRoundEnd = true; - ServerEmptyUpdateRestartCheck(); + ServerEmptyUpdateRestartCheck("update notification"); } /// /// Checks whether there are still players on the server, /// and if not starts a timer to automatically reboot the server if an update is available. /// - private void ServerEmptyUpdateRestartCheck() + private void ServerEmptyUpdateRestartCheck(string reason) { // Can't simple check the current connected player count since that doesn't update // before PlayerStatusChanged gets fired. // So in the disconnect handler we'd still see a single player otherwise. var playersOnline = _playerManager.Sessions.Any(p => p.Status != SessionStatus.Disconnected); - if (playersOnline || !_updateOnRoundEnd) + if (playersOnline || !(_updateOnRoundEnd || ShouldShutdownDueToUptime())) { // Still somebody online. return; @@ -95,16 +122,30 @@ private void ServerEmptyUpdateRestartCheck() if (_restartTime != null) { - // Do nothing because I guess we already have a timer running..? + // Do nothing because we already have a timer running. return; } var restartDelay = TimeSpan.FromSeconds(_cfg.GetCVar(CCVars.UpdateRestartDelay)); _restartTime = restartDelay + _gameTiming.RealTime; + + _sawmill.Debug("Started server-empty restart timer due to {Reason}", reason); } private void DoShutdown() { - _server.Shutdown(Loc.GetString("server-updates-shutdown")); + _sawmill.Debug($"Shutting down via {nameof(ServerUpdateManager)}!"); + var reason = _updateOnRoundEnd ? "server-updates-shutdown" : "server-updates-shutdown-uptime"; + _server.Shutdown(Loc.GetString(reason)); + } + + private bool ShouldShutdownDueToUptime() + { + return _uptimeRestart != TimeSpan.Zero && _gameTiming.RealTime > _uptimeRestart; + } + + void IPostInjectInit.PostInject() + { + _sawmill = _logManager.GetSawmill("restart"); } } diff --git a/Content.Server/Shuttles/Commands/FTLDiskCommand.cs b/Content.Server/Shuttles/Commands/FTLDiskCommand.cs new file mode 100644 index 00000000000..b17c7c11a71 --- /dev/null +++ b/Content.Server/Shuttles/Commands/FTLDiskCommand.cs @@ -0,0 +1,183 @@ +using Content.Server.Administration; +using Content.Server.Labels; +using Content.Shared.Administration; +using Content.Shared.Hands.Components; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.Shuttles.Components; +using Content.Shared.Storage; +using Content.Shared.Storage.EntitySystems; +using Robust.Shared.Console; +using Robust.Shared.Map.Components; +using Robust.Shared.Prototypes; +using Robust.Shared.Utility; + +namespace Content.Server.Shuttles.Commands; + +/// +/// Creates FTL disks, to maps, grids, or entities. +/// +[AdminCommand(AdminFlags.Fun)] + +public sealed class FTLDiskCommand : LocalizedCommands +{ + [Dependency] private readonly IEntityManager _entManager = default!; + [Dependency] private readonly IEntitySystemManager _entSystemManager = default!; + + public override string Command => "ftldisk"; + + [ValidatePrototypeId] + public const string CoordinatesDisk = "CoordinatesDisk"; + + [ValidatePrototypeId] + public const string DiskCase = "DiskCase"; + public override void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length == 0) + { + shell.WriteError(Loc.GetString("shell-need-minimum-one-argument")); + return; + } + + var player = shell.Player; + + if (player == null) + { + shell.WriteLine(Loc.GetString("shell-only-players-can-run-this-command")); + return; + } + + if (player.AttachedEntity == null) + { + shell.WriteLine(Loc.GetString("shell-must-be-attached-to-entity")); + return; + } + + EntityUid entity = player.AttachedEntity.Value; + var coords = _entManager.GetComponent(entity).Coordinates; + + var handsSystem = _entSystemManager.GetEntitySystem(); + var labelSystem = _entSystemManager.GetEntitySystem(); + var mapSystem = _entSystemManager.GetEntitySystem(); + var storageSystem = _entSystemManager.GetEntitySystem(); + + foreach (var destinations in args) + { + DebugTools.AssertNotNull(destinations); + + // make sure destination is an id. + EntityUid dest; + + if (_entManager.TryParseNetEntity(destinations, out var nullableDest)) + { + DebugTools.AssertNotNull(nullableDest); + + dest = (EntityUid) nullableDest; + + // we need to go to a map, so check if the EntID is something else then try for its map + if (!_entManager.HasComponent(dest)) + { + if (!_entManager.TryGetComponent(dest, out var entTransform)) + { + shell.WriteLine(Loc.GetString("cmd-ftldisk-no-transform", ("destination", destinations))); + continue; + } + + if (!mapSystem.TryGetMap(entTransform.MapID, out var mapDest)) + { + shell.WriteLine(Loc.GetString("cmd-ftldisk-no-map", ("destination", destinations))); + continue; + } + + DebugTools.AssertNotNull(mapDest); + dest = mapDest!.Value; // explicit cast here should be fine since the previous if should catch it. + } + + // find and verify the map is not somehow unusable. + if (!_entManager.TryGetComponent(dest, out var mapComp)) // We have to check for a MapComponent here and above since we could have changed our dest entity. + { + shell.WriteLine(Loc.GetString("cmd-ftldisk-no-map-comp", ("destination", destinations), ("map", dest))); + continue; + } + if (mapComp.MapInitialized == false) + { + shell.WriteLine(Loc.GetString("cmd-ftldisk-map-not-init", ("destination", destinations), ("map", dest))); + continue; + } + if (mapComp.MapPaused == true) + { + shell.WriteLine(Loc.GetString("cmd-ftldisk-map-paused", ("destination", destinations), ("map", dest))); + continue; + } + + // check if our destination works already, if not, make it. + if (!_entManager.TryGetComponent(dest, out var ftlDestComp)) + { + FTLDestinationComponent ftlDest = _entManager.AddComponent(dest); + ftlDest.RequireCoordinateDisk = true; + + if (_entManager.HasComponent(dest)) + { + ftlDest.BeaconsOnly = true; + + shell.WriteLine(Loc.GetString("cmd-ftldisk-planet", ("destination", destinations), ("map", dest))); + } + } + else + { + // we don't do these automatically, since it isn't clear what the correct resolution is. Instead we provide feedback to the user and carry on like they know what theyre doing. + if (ftlDestComp.Enabled == false) + shell.WriteLine(Loc.GetString("cmd-ftldisk-already-dest-not-enabled", ("destination", destinations), ("map", dest))); + + if (ftlDestComp.BeaconsOnly == true) + shell.WriteLine(Loc.GetString("cmd-ftldisk-requires-ftl-point", ("destination", destinations), ("map", dest))); + } + + // create the FTL disk + EntityUid cdUid = _entManager.SpawnEntity(CoordinatesDisk, coords); + var cd = _entManager.EnsureComponent(cdUid); + cd.Destination = dest; + _entManager.Dirty(cdUid, cd); + + // create disk case + EntityUid cdCaseUid = _entManager.SpawnEntity(DiskCase, coords); + + // apply labels + if (_entManager.TryGetComponent(dest, out var meta) && meta != null && meta.EntityName != null) + { + labelSystem.Label(cdUid, meta.EntityName); + labelSystem.Label(cdCaseUid, meta.EntityName); + } + + // if the case has a storage, try to place the disk in there and then the case inhand + + if (_entManager.TryGetComponent(cdCaseUid, out var storage) && storageSystem.Insert(cdCaseUid, cdUid, out _, storageComp: storage, playSound: false)) + { + if (_entManager.TryGetComponent(entity, out var handsComponent) && handsSystem.TryGetEmptyHand(entity, out var emptyHand, handsComponent)) + { + handsSystem.TryPickup(entity, cdCaseUid, emptyHand, checkActionBlocker: false, handsComp: handsComponent); + } + } + else // the case was messed up, put disk inhand + { + _entManager.DeleteEntity(cdCaseUid); // something went wrong so just yeet the chaf + + if (_entManager.TryGetComponent(entity, out var handsComponent) && handsSystem.TryGetEmptyHand(entity, out var emptyHand, handsComponent)) + { + handsSystem.TryPickup(entity, cdUid, emptyHand, checkActionBlocker: false, handsComp: handsComponent); + } + } + } + else + { + shell.WriteLine(Loc.GetString("shell-invalid-entity-uid", ("uid", destinations))); + } + } + } + + public override CompletionResult GetCompletion(IConsoleShell shell, string[] args) + { + if (args.Length >= 1) + return CompletionResult.FromHintOptions(CompletionHelper.MapUids(_entManager), Loc.GetString("cmd-ftldisk-hint")); + return CompletionResult.Empty; + } +} diff --git a/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.FTL.cs b/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.FTL.cs index 02b15242923..eac2535e8b2 100644 --- a/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.FTL.cs +++ b/Content.Server/Shuttles/Systems/ShuttleConsoleSystem.FTL.cs @@ -124,6 +124,9 @@ private void ConsoleFTL(Entity ent, EntityCoordinates t if (!TryComp(shuttleUid, out ShuttleComponent? shuttleComp)) return; + if (shuttleComp.Enabled == false) + return; + // Check shuttle can even FTL if (!_shuttle.CanFTL(shuttleUid.Value, out var reason)) { diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs index ce6a914847f..d0aab9aad55 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs @@ -225,18 +225,28 @@ public void RemoveFTLDestination(EntityUid uid) /// public bool CanFTL(EntityUid shuttleUid, [NotNullWhen(false)] out string? reason) { + // Currently in FTL already if (HasComp(shuttleUid)) { reason = Loc.GetString("shuttle-console-in-ftl"); return false; } - if (FTLMassLimit > 0 && - TryComp(shuttleUid, out PhysicsComponent? shuttlePhysics) && - shuttlePhysics.Mass > FTLMassLimit) + if (TryComp(shuttleUid, out var shuttlePhysics)) { - reason = Loc.GetString("shuttle-console-mass"); - return false; + // Static physics type is set when station anchor is enabled + if (shuttlePhysics.BodyType == BodyType.Static) + { + reason = Loc.GetString("shuttle-console-static"); + return false; + } + + // Too large to FTL + if (FTLMassLimit > 0 && shuttlePhysics.Mass > FTLMassLimit) + { + reason = Loc.GetString("shuttle-console-mass"); + return false; + } } if (HasComp(shuttleUid)) diff --git a/Content.Server/Silicons/Borgs/BorgSystem.Modules.cs b/Content.Server/Silicons/Borgs/BorgSystem.Modules.cs index f289752b7cf..d5a429db030 100644 --- a/Content.Server/Silicons/Borgs/BorgSystem.Modules.cs +++ b/Content.Server/Silicons/Borgs/BorgSystem.Modules.cs @@ -60,6 +60,10 @@ private void OnSelectableInstalled(EntityUid uid, SelectableBorgModuleComponent if (_actions.AddAction(chassis, ref component.ModuleSwapActionEntity, out var action, component.ModuleSwapActionId, uid)) { + if(TryComp(uid, out var moduleIconComp)) + { + action.Icon = moduleIconComp.Icon; + }; action.EntityIcon = uid; Dirty(component.ModuleSwapActionEntity.Value, action); } diff --git a/Content.Server/Silicons/Laws/SiliconLawSystem.cs b/Content.Server/Silicons/Laws/SiliconLawSystem.cs index 6b7df52a6eb..0070beb6ef9 100644 --- a/Content.Server/Silicons/Laws/SiliconLawSystem.cs +++ b/Content.Server/Silicons/Laws/SiliconLawSystem.cs @@ -28,12 +28,12 @@ namespace Content.Server.Silicons.Laws; public sealed class SiliconLawSystem : SharedSiliconLawSystem { [Dependency] private readonly IChatManager _chatManager = default!; - [Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly SharedMindSystem _mind = default!; + [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly SharedRoleSystem _roles = default!; [Dependency] private readonly StationSystem _station = default!; - [Dependency] private readonly UserInterfaceSystem _userInterface = default!; [Dependency] private readonly SharedStunSystem _stunSystem = default!; - [Dependency] private readonly SharedRoleSystem _roles = default!; + [Dependency] private readonly UserInterfaceSystem _userInterface = default!; /// public override void Initialize() @@ -178,10 +178,8 @@ private void EnsureEmaggedRole(EntityUid uid, EmagSiliconLawComponent component) if (component.AntagonistRole == null || !_mind.TryGetMind(uid, out var mindId, out _)) return; - if (_roles.MindHasRole(mindId)) - return; - - _roles.MindAddRole(mindId, new SubvertedSiliconRoleComponent { PrototypeId = component.AntagonistRole }); + if (!_roles.MindHasRole(mindId)) + _roles.MindAddRole(mindId, "MindRoleSubvertedSilicon"); } public SiliconLawset GetLaws(EntityUid uid, SiliconLawBoundComponent? component = null) @@ -295,6 +293,8 @@ protected override void OnUpdaterInsert(Entity ent, while (query.MoveNext(out var update)) { SetLaws(lawset, update); + if (provider.LawUploadSound != null && _mind.TryGetMind(update, out var mindId, out _)) + _roles.MindPlaySound(mindId, provider.LawUploadSound); } } } diff --git a/Content.Server/Singularity/EntitySystems/EventHorizonSystem.cs b/Content.Server/Singularity/EntitySystems/EventHorizonSystem.cs index 3bf820535f0..bf5a45549ce 100644 --- a/Content.Server/Singularity/EntitySystems/EventHorizonSystem.cs +++ b/Content.Server/Singularity/EntitySystems/EventHorizonSystem.cs @@ -32,6 +32,7 @@ public sealed class EventHorizonSystem : SharedEventHorizonSystem [Dependency] private readonly SharedContainerSystem _containerSystem = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] private readonly SharedTransformSystem _xformSystem = default!; + [Dependency] private readonly SharedMapSystem _mapSystem = default!; [Dependency] private readonly TagSystem _tagSystem = default!; #endregion Dependencies @@ -254,7 +255,7 @@ public void ConsumeTiles(EntityUid hungry, List<(Vector2i, Tile)> tiles, EntityU var ev = new TilesConsumedByEventHorizonEvent(tiles, gridId, grid, hungry, eventHorizon); RaiseLocalEvent(hungry, ref ev); - grid.SetTiles(tiles); + _mapSystem.SetTiles(gridId, grid, tiles); } /// diff --git a/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs b/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs index 91314570f5b..bf694d229a1 100644 --- a/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs +++ b/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs @@ -12,10 +12,10 @@ namespace Content.Server.Spawners.EntitySystems; public sealed class ContainerSpawnPointSystem : EntitySystem { + [Dependency] private readonly ContainerSystem _container = default!; [Dependency] private readonly GameTicker _gameTicker = default!; - [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IPrototypeManager _proto = default!; - [Dependency] private readonly ContainerSystem _container = default!; + [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly StationSystem _station = default!; [Dependency] private readonly StationSpawningSystem _stationSpawning = default!; @@ -36,7 +36,7 @@ public void HandlePlayerSpawning(PlayerSpawningEvent args) // If it's just a spawn pref check if it's for cryo (silly). if (args.HumanoidCharacterProfile?.SpawnPriority != SpawnPriorityPreference.Cryosleep && - (!_proto.TryIndex(args.Job?.Prototype, out var jobProto) || jobProto.JobEntity == null)) + (!_proto.TryIndex(args.Job, out var jobProto) || jobProto.JobEntity == null)) { return; } @@ -52,7 +52,7 @@ public void HandlePlayerSpawning(PlayerSpawningEvent args) // DeltaV - Custom override for override spawnpoints, only used for prisoners currently. This shouldn't run for any other jobs if (args.DesiredSpawnPointType == SpawnPointType.Job) { - if (spawnPoint.SpawnType != SpawnPointType.Job || spawnPoint.Job != args.Job?.Prototype) + if (spawnPoint.SpawnType != SpawnPointType.Job || spawnPoint.Job != args.Job) continue; possibleContainers.Add((uid, spawnPoint, container, xform)); @@ -63,7 +63,7 @@ public void HandlePlayerSpawning(PlayerSpawningEvent args) if (spawnPoint.SpawnType == SpawnPointType.Unset) { // make sure we also check the job here for various reasons. - if (spawnPoint.Job == null || spawnPoint.Job == args.Job?.Prototype) + if (spawnPoint.Job == null || spawnPoint.Job == args.Job) possibleContainers.Add((uid, spawnPoint, container, xform)); continue; } @@ -75,7 +75,7 @@ public void HandlePlayerSpawning(PlayerSpawningEvent args) if (_gameTicker.RunLevel != GameRunLevel.InRound && spawnPoint.SpawnType == SpawnPointType.Job && - (args.Job == null || spawnPoint.Job == args.Job.Prototype)) + (args.Job == null || spawnPoint.Job == args.Job)) { possibleContainers.Add((uid, spawnPoint, container, xform)); } diff --git a/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs b/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs index ca41f5ce4e9..2a29b833d88 100644 --- a/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs +++ b/Content.Server/Spawners/EntitySystems/SpawnPointSystem.cs @@ -36,7 +36,7 @@ private void OnPlayerSpawning(PlayerSpawningEvent args) if (args.DesiredSpawnPointType != SpawnPointType.Unset) { var isMatchingJob = spawnPoint.SpawnType == SpawnPointType.Job && - (args.Job == null || spawnPoint.Job?.Id == args.Job.Prototype); + (args.Job == null || spawnPoint.Job?.Id == args.Job); switch (args.DesiredSpawnPointType) { @@ -57,7 +57,7 @@ private void OnPlayerSpawning(PlayerSpawningEvent args) if (_gameTicker.RunLevel != GameRunLevel.InRound && spawnPoint.SpawnType == SpawnPointType.Job && - (args.Job == null || spawnPoint.Job == args.Job.Prototype)) + (args.Job == null || spawnPoint.Job == args.Job)) { possiblePositions.Add(xform.Coordinates); } diff --git a/Content.Server/Speech/Components/ListenWireAction.cs b/Content.Server/Speech/Components/ListenWireAction.cs index 68d2201862c..b8b1c19e84b 100644 --- a/Content.Server/Speech/Components/ListenWireAction.cs +++ b/Content.Server/Speech/Components/ListenWireAction.cs @@ -1,9 +1,12 @@ -using Content.Server.Speech.Components; using Content.Server.Chat.Systems; -using Content.Server.VoiceMask; +using Content.Shared.Radio; +using Content.Server.Radio.Components; +using Content.Server.Radio.EntitySystems; +using Content.Server.Speech.Components; using Content.Server.Wires; -using Content.Shared.Speech; using Content.Shared.Wires; +using Content.Shared.Speech; +using Robust.Shared.Prototypes; namespace Content.Server.Speech; @@ -11,17 +14,13 @@ public sealed partial class ListenWireAction : BaseToggleWireAction { private WiresSystem _wires = default!; private ChatSystem _chat = default!; + private RadioSystem _radio = default!; + private IPrototypeManager _protoMan = default!; /// /// Length of the gibberish string sent when pulsing the wire /// private const int NoiseLength = 16; - - /// - /// Identifier of the SpeechVerbPrototype to use when pulsing the wire - /// - [ValidatePrototypeId] - private const string SpeechVerb = "Electricity"; public override Color Color { get; set; } = Color.Green; public override string Name { get; set; } = "wire-name-listen"; @@ -37,6 +36,8 @@ public override void Initialize() _wires = EntityManager.System(); _chat = EntityManager.System(); + _radio = EntityManager.System(); + _protoMan = IoCManager.Resolve(); } public override StatusLightState? GetLightState(Wire wire) { @@ -72,46 +73,20 @@ public override void Pulse(EntityUid user, Wire wire) if (!GetValue(wire.Owner) || !IsPowered(wire.Owner)) return; - // We have to use a valid euid in the ListenEvent. The user seems - // like a sensible choice, but we need to mask their name. - - // Save the user's existing voicemask if they have one - var oldEnabled = true; - var oldVoiceName = Loc.GetString("wire-listen-pulse-error-name"); - string? oldSpeechVerb = null; - if (EntityManager.TryGetComponent(user, out var oldMask)) - { - oldEnabled = oldMask.Enabled; - oldVoiceName = oldMask.VoiceName; - oldSpeechVerb = oldMask.SpeechVerb; - } - - // Give the user a temporary voicemask component - var mask = EntityManager.EnsureComponent(user); - mask.Enabled = true; - mask.VoiceName = Loc.GetString("wire-listen-pulse-identifier"); - mask.SpeechVerb = SpeechVerb; - var chars = Loc.GetString("wire-listen-pulse-characters").ToCharArray(); var noiseMsg = _chat.BuildGibberishString(chars, NoiseLength); - var attemptEv = new ListenAttemptEvent(wire.Owner); - EntityManager.EventBus.RaiseLocalEvent(wire.Owner, attemptEv); - if (!attemptEv.Cancelled) - { - var ev = new ListenEvent(noiseMsg, user); - EntityManager.EventBus.RaiseLocalEvent(wire.Owner, ev); - } + if (!EntityManager.TryGetComponent(wire.Owner, out var radioMicroPhoneComp)) + return; - // Remove the voicemask component, or set it back to what it was before - if (oldMask == null) - EntityManager.RemoveComponent(user, mask); - else - { - mask.Enabled = oldEnabled; - mask.VoiceName = oldVoiceName; - mask.SpeechVerb = oldSpeechVerb; - } + if (!EntityManager.TryGetComponent(wire.Owner, out var voiceOverrideComp)) + return; + + // The reason for the override is to make the voice sound like its coming from electrity rather than the intercom. + voiceOverrideComp.NameOverride = Loc.GetString("wire-listen-pulse-identifier"); + voiceOverrideComp.Enabled = true; + _radio.SendRadioMessage(wire.Owner, noiseMsg, _protoMan.Index(radioMicroPhoneComp.BroadcastChannel), wire.Owner); + voiceOverrideComp.Enabled = false; base.Pulse(user, wire); } diff --git a/Content.Server/Speech/Components/VoiceOverrideComponent.cs b/Content.Server/Speech/Components/VoiceOverrideComponent.cs new file mode 100644 index 00000000000..349babc948c --- /dev/null +++ b/Content.Server/Speech/Components/VoiceOverrideComponent.cs @@ -0,0 +1,35 @@ +using Content.Shared.Speech; +using Robust.Shared.Prototypes; + +namespace Content.Server.Speech.Components; + +/// +/// Will change the voice of the entity that has the component (e.g radio and speech). +/// +/// +/// Before using this component, please take a look at the the TransformSpeakerNameEvent (and the inventory relay version). +/// Depending on what you're doing, it could be a better choice! +/// +[RegisterComponent] +public sealed partial class VoiceOverrideComponent : Component +{ + /// + /// The name that will be used instead of an entities default one. + /// Uses the localized version of the string and if null wont do anything. + /// + [DataField] + public string? NameOverride = null; + + /// + /// The verb that will be used insteand of an entities default one. + /// If null, the defaut will be used. + /// + [DataField] + public ProtoId? SpeechVerbOverride = null; + + /// + /// If true, the override values (if they are not null) will be applied. + /// + [DataField] + public bool Enabled = true; +} diff --git a/Content.Server/Speech/EntitySystems/VoiceOverrideSystem.cs b/Content.Server/Speech/EntitySystems/VoiceOverrideSystem.cs new file mode 100644 index 00000000000..daaad099d65 --- /dev/null +++ b/Content.Server/Speech/EntitySystems/VoiceOverrideSystem.cs @@ -0,0 +1,22 @@ +using Content.Shared.Chat; +using Content.Server.Speech.Components; + +namespace Content.Server.Speech.EntitySystems; + +public sealed partial class VoiceOverrideSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnTransformSpeakerName); + } + + private void OnTransformSpeakerName(Entity entity, ref TransformSpeakerNameEvent args) + { + if (!entity.Comp.Enabled) + return; + + args.VoiceName = entity.Comp.NameOverride ?? args.VoiceName; + args.SpeechVerb = entity.Comp.SpeechVerbOverride ?? args.SpeechVerb; + } +} diff --git a/Content.Server/Stack/StackSystem.cs b/Content.Server/Stack/StackSystem.cs index b9553a6b849..bc1800ffd1e 100644 --- a/Content.Server/Stack/StackSystem.cs +++ b/Content.Server/Stack/StackSystem.cs @@ -100,6 +100,13 @@ public EntityUid Spawn(int amount, StackPrototype prototype, EntityCoordinates s /// public List SpawnMultiple(string entityPrototype, int amount, EntityCoordinates spawnPosition) { + if (amount <= 0) + { + Log.Error( + $"Attempted to spawn an invalid stack: {entityPrototype}, {amount}. Trace: {Environment.StackTrace}"); + return new(); + } + var spawns = CalculateSpawns(entityPrototype, amount); var spawnedEnts = new List(); @@ -116,6 +123,13 @@ public List SpawnMultiple(string entityPrototype, int amount, EntityC /// public List SpawnMultiple(string entityPrototype, int amount, EntityUid target) { + if (amount <= 0) + { + Log.Error( + $"Attempted to spawn an invalid stack: {entityPrototype}, {amount}. Trace: {Environment.StackTrace}"); + return new(); + } + var spawns = CalculateSpawns(entityPrototype, amount); var spawnedEnts = new List(); diff --git a/Content.Server/Station/Systems/StationSpawningSystem.cs b/Content.Server/Station/Systems/StationSpawningSystem.cs index 47340d9ff1e..4a0225c2302 100644 --- a/Content.Server/Station/Systems/StationSpawningSystem.cs +++ b/Content.Server/Station/Systems/StationSpawningSystem.cs @@ -1,4 +1,3 @@ -using System.Linq; using Content.Server.Access.Systems; using Content.Server.DetailExaminable; using Content.Server.Humanoid; @@ -18,13 +17,10 @@ using Content.Shared.PDA; using Content.Shared.Preferences; using Content.Shared.Preferences.Loadouts; -using Content.Shared.Preferences.Loadouts.Effects; using Content.Shared.Random; using Content.Shared.Random.Helpers; using Content.Shared.Roles; -using Content.Shared.Roles.Jobs; using Content.Shared.Station; -using Content.Shared.StatusIcon; using JetBrains.Annotations; using Robust.Shared.Configuration; using Robust.Shared.Map; @@ -42,16 +38,18 @@ namespace Content.Server.Station.Systems; [PublicAPI] public sealed class StationSpawningSystem : SharedStationSpawningSystem { - [Dependency] private readonly IConfigurationManager _configurationManager = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedAccessSystem _accessSystem = default!; [Dependency] private readonly ActorSystem _actors = default!; - [Dependency] private readonly HumanoidAppearanceSystem _humanoidSystem = default!; + [Dependency] private readonly ArrivalsSystem _arrivalsSystem = default!; [Dependency] private readonly IdCardSystem _cardSystem = default!; + [Dependency] private readonly IConfigurationManager _configurationManager = default!; + [Dependency] private readonly ContainerSpawnPointSystem _containerSpawnPointSystem = default!; + [Dependency] private readonly HumanoidAppearanceSystem _humanoidSystem = default!; [Dependency] private readonly IdentitySystem _identity = default!; [Dependency] private readonly MetaDataSystem _metaSystem = default!; [Dependency] private readonly PdaSystem _pdaSystem = default!; - [Dependency] private readonly SharedAccessSystem _accessSystem = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IRobustRandom _random = default!; private bool _randomizeCharacters; @@ -75,7 +73,7 @@ public override void Initialize() /// /// This only spawns the character, and does none of the mind-related setup you'd need for it to be playable. /// - public EntityUid? SpawnPlayerCharacterOnStation(EntityUid? station, JobComponent? job, HumanoidCharacterProfile? profile, StationSpawningComponent? stationSpawning = null, SpawnPointType spawnPointType = SpawnPointType.Unset) + public EntityUid? SpawnPlayerCharacterOnStation(EntityUid? station, ProtoId? job, HumanoidCharacterProfile? profile, StationSpawningComponent? stationSpawning = null, SpawnPointType spawnPointType = SpawnPointType.Unset) { if (station != null && !Resolve(station.Value, ref stationSpawning)) throw new ArgumentException("Tried to use a non-station entity as a station!", nameof(station)); @@ -104,12 +102,12 @@ public override void Initialize() /// The spawned entity public EntityUid SpawnPlayerMob( EntityCoordinates coordinates, - JobComponent? job, + ProtoId? job, HumanoidCharacterProfile? profile, EntityUid? station, EntityUid? entity = null) { - _prototypeManager.TryIndex(job?.Prototype ?? string.Empty, out var prototype); + _prototypeManager.TryIndex(job ?? string.Empty, out var prototype); RoleLoadout? loadout = null; // Need to get the loadout up-front to handle names if we use an entity spawn override. @@ -187,8 +185,8 @@ public EntityUid SpawnPlayerMob( if (profile != null) { - if (job != null) - SetPdaAndIdCardData(entity.Value, profile.Name, job, station); // DeltaV #1425 - Inherit job data from a VirtualJob if one exists + if (prototype != null) + SetPdaAndIdCardData(entity.Value, profile.Name, prototype, station); _humanoidSystem.LoadProfile(entity.Value, profile); _metaSystem.SetEntityName(entity.Value, profile.Name); @@ -203,9 +201,9 @@ public EntityUid SpawnPlayerMob( return entity.Value; } - private void DoJobSpecials(JobComponent? job, EntityUid entity) + private void DoJobSpecials(ProtoId? job, EntityUid entity) { - if (!_prototypeManager.TryIndex(job?.Prototype ?? string.Empty, out JobPrototype? prototype)) + if (!_prototypeManager.TryIndex(job ?? string.Empty, out JobPrototype? prototype)) return; foreach (var jobSpecial in prototype.Special) @@ -221,11 +219,8 @@ private void DoJobSpecials(JobComponent? job, EntityUid entity) /// Character name to use for the ID. /// Job prototype to use for the PDA and ID. /// The station this player is being spawned on. - public void SetPdaAndIdCardData(EntityUid entity, string characterName, JobComponent job, EntityUid? station) // DeltaV #1425 - Use Job instead of JobId to pass VirtualJobLocalizedName/Icon + public void SetPdaAndIdCardData(EntityUid entity, string characterName, JobPrototype jobPrototype, EntityUid? station) { - if (!_prototypeManager.TryIndex(job.Prototype, out var jobPrototype)) // DeltaV #1425 - Get jobPrototype separately as a result - return; - if (!InventorySystem.TryGetSlotEntity(entity, "id", out var idUid)) return; @@ -277,7 +272,7 @@ public sealed class PlayerSpawningEvent : EntityEventArgs /// /// The job to use, if any. /// - public readonly JobComponent? Job; + public readonly ProtoId? Job; /// /// The profile to use, if any. /// @@ -291,7 +286,7 @@ public sealed class PlayerSpawningEvent : EntityEventArgs /// public readonly SpawnPointType DesiredSpawnPointType; - public PlayerSpawningEvent(JobComponent? job, HumanoidCharacterProfile? humanoidCharacterProfile, EntityUid? station, SpawnPointType spawnPointType = SpawnPointType.Unset) + public PlayerSpawningEvent(ProtoId? job, HumanoidCharacterProfile? humanoidCharacterProfile, EntityUid? station, SpawnPointType spawnPointType = SpawnPointType.Unset) { Job = job; HumanoidCharacterProfile = humanoidCharacterProfile; diff --git a/Content.Server/StationRecords/Systems/StationRecordsSystem.cs b/Content.Server/StationRecords/Systems/StationRecordsSystem.cs index 80c88917c02..e416effbdd8 100644 --- a/Content.Server/StationRecords/Systems/StationRecordsSystem.cs +++ b/Content.Server/StationRecords/Systems/StationRecordsSystem.cs @@ -159,7 +159,7 @@ public void CreateGeneralRecord( { Name = name, Age = age, - JobTitle = card?.Comp.JobTitle ?? jobPrototype.LocalizedName, // DeltaV + JobTitle = card?.Comp.LocalizedJobTitle ?? jobPrototype.LocalizedName, // DeltaV JobIcon = card?.Comp.JobIcon ?? jobPrototype.Icon, // DeltaV JobPrototype = jobId, Species = species, diff --git a/Content.Server/Store/Components/CurrencyComponent.cs b/Content.Server/Store/Components/CurrencyComponent.cs index cfe9b76c8bf..eb4ca1c0e36 100644 --- a/Content.Server/Store/Components/CurrencyComponent.cs +++ b/Content.Server/Store/Components/CurrencyComponent.cs @@ -8,6 +8,11 @@ namespace Content.Server.Store.Components; /// Identifies a component that can be inserted into a store /// to increase its balance. /// +/// +/// Note that if this entity is a stack of items, then this is meant to represent the value per stack item, not +/// the whole stack. This also means that in general, the actual value should not be modified from the initial +/// prototype value because otherwise stack merging/splitting may modify the total value. +/// [RegisterComponent] public sealed partial class CurrencyComponent : Component { @@ -16,6 +21,12 @@ public sealed partial class CurrencyComponent : Component /// The string is the currency type that will be added. /// The FixedPoint2 is the value of each individual currency entity. /// + /// + /// Note that if this entity is a stack of items, then this is meant to represent the value per stack item, not + /// the whole stack. This also means that in general, the actual value should not be modified from the initial + /// prototype value + /// because otherwise stack merging/splitting may modify the total value. + /// [ViewVariables(VVAccess.ReadWrite)] [DataField("price", customTypeSerializer: typeof(PrototypeIdDictionarySerializer))] public Dictionary Price = new(); diff --git a/Content.Server/Store/Conditions/BuyerAntagCondition.cs b/Content.Server/Store/Conditions/BuyerAntagCondition.cs index 1edc4a33657..4b1b6013eb8 100644 --- a/Content.Server/Store/Conditions/BuyerAntagCondition.cs +++ b/Content.Server/Store/Conditions/BuyerAntagCondition.cs @@ -33,16 +33,16 @@ public override bool Condition(ListingConditionArgs args) return true; var roleSystem = ent.System(); - var roles = roleSystem.MindGetAllRoles(mindId); + var roles = roleSystem.MindGetAllRoleInfo(mindId); if (Blacklist != null) { foreach (var role in roles) { - if (role.Component is not AntagonistRoleComponent blacklistantag) + if (!role.Antagonist || string.IsNullOrEmpty(role.Prototype)) continue; - if (blacklistantag.PrototypeId != null && Blacklist.Contains(blacklistantag.PrototypeId)) + if (Blacklist.Contains(role.Prototype)) return false; } } @@ -52,10 +52,11 @@ public override bool Condition(ListingConditionArgs args) var found = false; foreach (var role in roles) { - if (role.Component is not AntagonistRoleComponent antag) + + if (!role.Antagonist || string.IsNullOrEmpty(role.Prototype)) continue; - if (antag.PrototypeId != null && Whitelist.Contains(antag.PrototypeId)) + if (Whitelist.Contains(role.Prototype)) found = true; } if (!found) diff --git a/Content.Server/Store/Conditions/BuyerDepartmentCondition.cs b/Content.Server/Store/Conditions/BuyerDepartmentCondition.cs index ea8de4a9ccd..43c06efad3c 100644 --- a/Content.Server/Store/Conditions/BuyerDepartmentCondition.cs +++ b/Content.Server/Store/Conditions/BuyerDepartmentCondition.cs @@ -37,13 +37,13 @@ public override bool Condition(ListingConditionArgs args) return true; var jobs = ent.System(); - jobs.MindTryGetJob(mindId, out var job, out _); + jobs.MindTryGetJob(mindId, out var job); - if (Blacklist != null && job?.Prototype != null) + if (Blacklist != null && job != null) { foreach (var department in prototypeManager.EnumeratePrototypes()) { - if (department.Roles.Contains(job.Prototype.Value) && Blacklist.Contains(department.ID)) + if (department.Roles.Contains(job.ID) && Blacklist.Contains(department.ID)) return false; } } @@ -52,11 +52,11 @@ public override bool Condition(ListingConditionArgs args) { var found = false; - if (job?.Prototype != null) + if (job != null) { foreach (var department in prototypeManager.EnumeratePrototypes()) { - if (department.Roles.Contains(job.Prototype.Value) && Whitelist.Contains(department.ID)) + if (department.Roles.Contains(job.ID) && Whitelist.Contains(department.ID)) { found = true; break; diff --git a/Content.Server/Store/Conditions/BuyerJobCondition.cs b/Content.Server/Store/Conditions/BuyerJobCondition.cs index 6a53af188c2..1ff4a97c33c 100644 --- a/Content.Server/Store/Conditions/BuyerJobCondition.cs +++ b/Content.Server/Store/Conditions/BuyerJobCondition.cs @@ -34,17 +34,17 @@ public override bool Condition(ListingConditionArgs args) return true; var jobs = ent.System(); - jobs.MindTryGetJob(mindId, out var job, out _); + jobs.MindTryGetJob(mindId, out var job); if (Blacklist != null) { - if (job?.Prototype != null && Blacklist.Contains(job.Prototype)) + if (job is not null && Blacklist.Contains(job.ID)) return false; } if (Whitelist != null) { - if (job?.Prototype == null || !Whitelist.Contains(job.Prototype)) + if (job == null || !Whitelist.Contains(job.ID)) return false; } diff --git a/Content.Server/Store/Systems/StoreSystem.Ui.cs b/Content.Server/Store/Systems/StoreSystem.Ui.cs index 247055c2a7f..f1c0cb1e906 100644 --- a/Content.Server/Store/Systems/StoreSystem.Ui.cs +++ b/Content.Server/Store/Systems/StoreSystem.Ui.cs @@ -30,7 +30,6 @@ public sealed partial class StoreSystem [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly StackSystem _stack = default!; [Dependency] private readonly UserInterfaceSystem _ui = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; private void InitializeUi() { @@ -260,7 +259,7 @@ private void OnBuyRequest(EntityUid uid, StoreComponent component, StoreBuyListi //log dat shit. _admin.Add(LogType.StorePurchase, LogImpact.Low, - $"{ToPrettyString(buyer):player} purchased listing \"{ListingLocalisationHelpers.GetLocalisedNameOrEntityName(listing, _prototypeManager)}\" from {ToPrettyString(uid)}"); + $"{ToPrettyString(buyer):player} purchased listing \"{ListingLocalisationHelpers.GetLocalisedNameOrEntityName(listing, _proto)}\" from {ToPrettyString(uid)}"); listing.PurchaseAmount++; //track how many times something has been purchased _audio.PlayEntity(component.BuySuccessSound, msg.Actor, uid); //cha-ching! @@ -284,6 +283,9 @@ private void OnBuyRequest(EntityUid uid, StoreComponent component, StoreBuyListi /// private void OnRequestWithdraw(EntityUid uid, StoreComponent component, StoreRequestWithdrawMessage msg) { + if (msg.Amount <= 0) + return; + //make sure we have enough cash in the bank and we actually support this currency if (!component.Balance.TryGetValue(msg.Currency, out var currentAmount) || currentAmount < msg.Amount) return; @@ -307,7 +309,8 @@ private void OnRequestWithdraw(EntityUid uid, StoreComponent component, StoreReq var cashId = proto.Cash[value]; var amountToSpawn = (int) MathF.Floor((float) (amountRemaining / value)); var ents = _stack.SpawnMultiple(cashId, amountToSpawn, coordinates); - _hands.PickupOrDrop(buyer, ents.First()); + if (ents.FirstOrDefault() is {} ent) + _hands.PickupOrDrop(buyer, ent); amountRemaining -= value * amountToSpawn; } diff --git a/Content.Server/Store/Systems/StoreSystem.cs b/Content.Server/Store/Systems/StoreSystem.cs index bf9e8a10ec9..33727fe37d1 100644 --- a/Content.Server/Store/Systems/StoreSystem.cs +++ b/Content.Server/Store/Systems/StoreSystem.cs @@ -92,14 +92,12 @@ private void OnAfterInteract(EntityUid uid, CurrencyComponent component, AfterIn if (ev.Cancelled) return; - args.Handled = TryAddCurrency(GetCurrencyValue(uid, component), args.Target.Value, store); + if (!TryAddCurrency((uid, component), (args.Target.Value, store))) + return; - if (args.Handled) - { - var msg = Loc.GetString("store-currency-inserted", ("used", args.Used), ("target", args.Target)); - _popup.PopupEntity(msg, args.Target.Value, args.User); - QueueDel(args.Used); - } + args.Handled = true; + var msg = Loc.GetString("store-currency-inserted", ("used", args.Used), ("target", args.Target)); + _popup.PopupEntity(msg, args.Target.Value, args.User); } private void OnImplantActivate(EntityUid uid, StoreComponent component, OpenUplinkImplantEvent args) @@ -111,6 +109,10 @@ private void OnImplantActivate(EntityUid uid, StoreComponent component, OpenUpli /// Gets the value from an entity's currency component. /// Scales with stacks. /// + /// + /// If this result is intended to be used with , + /// consider using instead to ensure that the currency is consumed in the process. + /// /// /// /// The value of the currency @@ -121,19 +123,34 @@ public Dictionary GetCurrencyValue(EntityUid uid, CurrencyC } /// - /// Tries to add a currency to a store's balance. + /// Tries to add a currency to a store's balance. Note that if successful, this will consume the currency in the process. /// - /// - /// - /// The currency to add - /// The store to add it to - /// Whether or not the currency was succesfully added - [PublicAPI] - public bool TryAddCurrency(EntityUid currencyEnt, EntityUid storeEnt, StoreComponent? store = null, CurrencyComponent? currency = null) + public bool TryAddCurrency(Entity currency, Entity store) { - if (!Resolve(currencyEnt, ref currency) || !Resolve(storeEnt, ref store)) + if (!Resolve(currency.Owner, ref currency.Comp)) + return false; + + if (!Resolve(store.Owner, ref store.Comp)) return false; - return TryAddCurrency(GetCurrencyValue(currencyEnt, currency), storeEnt, store); + + var value = currency.Comp.Price; + if (TryComp(currency.Owner, out StackComponent? stack) && stack.Count != 1) + { + value = currency.Comp.Price + .ToDictionary(v => v.Key, p => p.Value * stack.Count); + } + + if (!TryAddCurrency(value, store, store.Comp)) + return false; + + // Avoid having the currency accidentally be re-used. E.g., if multiple clients try to use the currency in the + // same tick + currency.Comp.Price.Clear(); + if (stack != null) + _stack.SetCount(currency.Owner, 0, stack); + + QueueDel(currency); + return true; } /// diff --git a/Content.Server/Strip/StrippableSystem.cs b/Content.Server/Strip/StrippableSystem.cs index 6d728df9d67..b74e40e1da9 100644 --- a/Content.Server/Strip/StrippableSystem.cs +++ b/Content.Server/Strip/StrippableSystem.cs @@ -19,588 +19,9 @@ using Robust.Shared.Player; using Robust.Shared.Utility; -namespace Content.Server.Strip -{ - public sealed class StrippableSystem : SharedStrippableSystem - { - [Dependency] private readonly InventorySystem _inventorySystem = default!; - [Dependency] private readonly EnsnareableSystem _ensnaringSystem = default!; - - [Dependency] private readonly SharedCuffableSystem _cuffableSystem = default!; - [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!; - [Dependency] private readonly SharedHandsSystem _handsSystem = default!; - [Dependency] private readonly SharedPopupSystem _popupSystem = default!; - - [Dependency] private readonly IAdminLogManager _adminLogger = default!; - - // TODO: ECS popups. Not all of these have ECS equivalents yet. - - public override void Initialize() - { - base.Initialize(); - - SubscribeLocalEvent>(AddStripVerb); - SubscribeLocalEvent>(AddStripExamineVerb); - - // BUI - SubscribeLocalEvent(OnStripButtonPressed); - SubscribeLocalEvent(OnStripEnsnareMessage); - - // DoAfters - SubscribeLocalEvent>(OnStrippableDoAfterRunning); - SubscribeLocalEvent(OnStrippableDoAfterFinished); - } - - private void AddStripVerb(EntityUid uid, StrippableComponent component, GetVerbsEvent args) - { - if (args.Hands == null || !args.CanAccess || !args.CanInteract || args.Target == args.User) - return; - - if (!HasComp(args.User)) - return; - - Verb verb = new() - { - Text = Loc.GetString("strip-verb-get-data-text"), - Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/outfit.svg.192dpi.png")), - Act = () => TryOpenStrippingUi(args.User, (uid, component), true), - }; - - args.Verbs.Add(verb); - } - - private void AddStripExamineVerb(EntityUid uid, StrippableComponent component, GetVerbsEvent args) - { - if (args.Hands == null || !args.CanAccess || !args.CanInteract || args.Target == args.User) - return; - - if (!HasComp(args.User)) - return; - - ExamineVerb verb = new() - { - Text = Loc.GetString("strip-verb-get-data-text"), - Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/outfit.svg.192dpi.png")), - Act = () => TryOpenStrippingUi(args.User, (uid, component), true), - Category = VerbCategory.Examine, - }; - - args.Verbs.Add(verb); - } - - private void OnStripButtonPressed(Entity strippable, ref StrippingSlotButtonPressed args) - { - if (args.Actor is not { Valid: true } user || - !TryComp(user, out var userHands)) - return; - - if (args.IsHand) - { - StripHand((user, userHands), (strippable.Owner, null), args.Slot, strippable); - return; - } - - if (!TryComp(strippable, out var inventory)) - return; - - var hasEnt = _inventorySystem.TryGetSlotEntity(strippable, args.Slot, out var held, inventory); - - if (userHands.ActiveHandEntity != null && !hasEnt) - StartStripInsertInventory((user, userHands), strippable.Owner, userHands.ActiveHandEntity.Value, args.Slot); - else if (userHands.ActiveHandEntity == null && hasEnt) - StartStripRemoveInventory(user, strippable.Owner, held!.Value, args.Slot); - } - - private void StripHand( - Entity user, - Entity target, - string handId, - StrippableComponent? targetStrippable) - { - if (!Resolve(user, ref user.Comp) || - !Resolve(target, ref target.Comp) || - !Resolve(target, ref targetStrippable)) - return; - - if (!_handsSystem.TryGetHand(target.Owner, handId, out var handSlot)) - return; - - // Is the target a handcuff? - if (TryComp(handSlot.HeldEntity, out var virtualItem) && - TryComp(target.Owner, out var cuffable) && - _cuffableSystem.GetAllCuffs(cuffable).Contains(virtualItem.BlockingEntity)) - { - _cuffableSystem.TryUncuff(target.Owner, user, virtualItem.BlockingEntity, cuffable); - return; - } - - if (user.Comp.ActiveHandEntity != null && handSlot.HeldEntity == null) - StartStripInsertHand(user, target, user.Comp.ActiveHandEntity.Value, handId, targetStrippable); - else if (user.Comp.ActiveHandEntity == null && handSlot.HeldEntity != null) - StartStripRemoveHand(user, target, handSlot.HeldEntity.Value, handId, targetStrippable); - } - - private void OnStripEnsnareMessage(EntityUid uid, EnsnareableComponent component, StrippingEnsnareButtonPressed args) - { - if (args.Actor is not { Valid: true } user) - return; - - foreach (var entity in component.Container.ContainedEntities) - { - if (!TryComp(entity, out var ensnaring)) - continue; - - _ensnaringSystem.TryFree(uid, user, entity, ensnaring); - return; - } - } - - /// - /// Checks whether the item is in a user's active hand and whether it can be inserted into the inventory slot. - /// - private bool CanStripInsertInventory( - Entity user, - EntityUid target, - EntityUid held, - string slot) - { - if (!Resolve(user, ref user.Comp)) - return false; - - if (user.Comp.ActiveHand == null) - return false; - - if (user.Comp.ActiveHandEntity == null) - return false; - - if (user.Comp.ActiveHandEntity != held) - return false; - - if (!_handsSystem.CanDropHeld(user, user.Comp.ActiveHand)) - { - _popupSystem.PopupCursor(Loc.GetString("strippable-component-cannot-drop"), user); - return false; - } - - if (_inventorySystem.TryGetSlotEntity(target, slot, out _)) - { - _popupSystem.PopupCursor(Loc.GetString("strippable-component-item-slot-occupied", ("owner", target)), user); - return false; - } - - if (!_inventorySystem.CanEquip(user, target, held, slot, out _)) - { - _popupSystem.PopupCursor(Loc.GetString("strippable-component-cannot-equip-message", ("owner", target)), user); - return false; - } - - return true; - } - - /// - /// Begins a DoAfter to insert the item in the user's active hand into the inventory slot. - /// - private void StartStripInsertInventory( - Entity user, - EntityUid target, - EntityUid held, - string slot) - { - if (!Resolve(user, ref user.Comp)) - return; - - if (!CanStripInsertInventory(user, target, held, slot)) - return; - - if (!_inventorySystem.TryGetSlot(target, slot, out var slotDef)) - { - Log.Error($"{ToPrettyString(user)} attempted to place an item in a non-existent inventory slot ({slot}) on {ToPrettyString(target)}"); - return; - } - - var (time, stealth) = GetStripTimeModifiers(user, target, held, slotDef.StripTime); - - if (!stealth) - _popupSystem.PopupEntity(Loc.GetString("strippable-component-alert-owner-insert", ("user", Identity.Entity(user, EntityManager)), ("item", user.Comp.ActiveHandEntity!.Value)), target, target, PopupType.Large); - - var prefix = stealth ? "stealthily " : ""; - _adminLogger.Add(LogType.Stripping, LogImpact.Low, $"{ToPrettyString(user):actor} is trying to {prefix}place the item {ToPrettyString(held):item} in {ToPrettyString(target):target}'s {slot} slot"); - - var doAfterArgs = new DoAfterArgs(EntityManager, user, time, new StrippableDoAfterEvent(true, true, slot), user, target, held) - { - Hidden = stealth, - AttemptFrequency = AttemptFrequency.EveryTick, - BreakOnDamage = true, - BreakOnMove = true, - NeedHand = true, - DuplicateCondition = DuplicateConditions.SameTool - }; - - _doAfterSystem.TryStartDoAfter(doAfterArgs); - } - - /// - /// Inserts the item in the user's active hand into the inventory slot. - /// - private void StripInsertInventory( - Entity user, - EntityUid target, - EntityUid held, - string slot) - { - if (!Resolve(user, ref user.Comp)) - return; - - if (!CanStripInsertInventory(user, target, held, slot)) - return; - - if (!_handsSystem.TryDrop(user, handsComp: user.Comp)) - return; - - _inventorySystem.TryEquip(user, target, held, slot); - _adminLogger.Add(LogType.Stripping, LogImpact.Medium, $"{ToPrettyString(user):actor} has placed the item {ToPrettyString(held):item} in {ToPrettyString(target):target}'s {slot} slot"); - } - - /// - /// Checks whether the item can be removed from the target's inventory. - /// - private bool CanStripRemoveInventory( - EntityUid user, - EntityUid target, - EntityUid item, - string slot) - { - if (!_inventorySystem.TryGetSlotEntity(target, slot, out var slotItem)) - { - _popupSystem.PopupCursor(Loc.GetString("strippable-component-item-slot-free-message", ("owner", target)), user); - return false; - } - - if (slotItem != item) - return false; - - if (!_inventorySystem.CanUnequip(user, target, slot, out var reason)) - { - _popupSystem.PopupCursor(Loc.GetString(reason), user); - return false; - } - - return true; - } +namespace Content.Server.Strip; - /// - /// Begins a DoAfter to remove the item from the target's inventory and insert it in the user's active hand. - /// - private void StartStripRemoveInventory( - EntityUid user, - EntityUid target, - EntityUid item, - string slot) - { - if (!CanStripRemoveInventory(user, target, item, slot)) - return; - - if (!_inventorySystem.TryGetSlot(target, slot, out var slotDef)) - { - Log.Error($"{ToPrettyString(user)} attempted to take an item from a non-existent inventory slot ({slot}) on {ToPrettyString(target)}"); - return; - } - - var (time, stealth) = GetStripTimeModifiers(user, target, item, slotDef.StripTime); - - if (!stealth) - { - if (slotDef.StripHidden) - _popupSystem.PopupEntity(Loc.GetString("strippable-component-alert-owner-hidden", ("slot", slot)), target, target, PopupType.Large); - else - _popupSystem.PopupEntity(Loc.GetString("strippable-component-alert-owner", ("user", Identity.Entity(user, EntityManager)), ("item", item)), target, target, PopupType.Large); - } - - var prefix = stealth ? "stealthily " : ""; - _adminLogger.Add(LogType.Stripping, LogImpact.Low, $"{ToPrettyString(user):actor} is trying to {prefix}strip the item {ToPrettyString(item):item} from {ToPrettyString(target):target}'s {slot} slot"); - - var doAfterArgs = new DoAfterArgs(EntityManager, user, time, new StrippableDoAfterEvent(false, true, slot), user, target, item) - { - Hidden = stealth, - AttemptFrequency = AttemptFrequency.EveryTick, - BreakOnDamage = true, - BreakOnMove = true, - NeedHand = true, - BreakOnHandChange = false, // Allow simultaneously removing multiple items. - DuplicateCondition = DuplicateConditions.SameTool - }; - - _doAfterSystem.TryStartDoAfter(doAfterArgs); - } - - /// - /// Removes the item from the target's inventory and inserts it in the user's active hand. - /// - private void StripRemoveInventory( - EntityUid user, - EntityUid target, - EntityUid item, - string slot, - bool stealth) - { - if (!CanStripRemoveInventory(user, target, item, slot)) - return; - - if (!_inventorySystem.TryUnequip(user, target, slot)) - return; - - RaiseLocalEvent(item, new DroppedEvent(user), true); // Gas tank internals etc. - - _handsSystem.PickupOrDrop(user, item, animateUser: stealth, animate: !stealth); - _adminLogger.Add(LogType.Stripping, LogImpact.Medium, $"{ToPrettyString(user):actor} has stripped the item {ToPrettyString(item):item} from {ToPrettyString(target):target}'s {slot} slot"); - } - - /// - /// Checks whether the item in the user's active hand can be inserted into one of the target's hands. - /// - private bool CanStripInsertHand( - Entity user, - Entity target, - EntityUid held, - string handName) - { - if (!Resolve(user, ref user.Comp) || - !Resolve(target, ref target.Comp)) - return false; - - if (user.Comp.ActiveHand == null) - return false; - - if (user.Comp.ActiveHandEntity == null) - return false; - - if (user.Comp.ActiveHandEntity != held) - return false; - - if (!_handsSystem.CanDropHeld(user, user.Comp.ActiveHand)) - { - _popupSystem.PopupCursor(Loc.GetString("strippable-component-cannot-drop"), user); - return false; - } - - if (!_handsSystem.TryGetHand(target, handName, out var handSlot, target.Comp) || - !_handsSystem.CanPickupToHand(target, user.Comp.ActiveHandEntity.Value, handSlot, checkActionBlocker: false, target.Comp)) - { - _popupSystem.PopupCursor(Loc.GetString("strippable-component-cannot-put-message", ("owner", target)), user); - return false; - } - - return true; - } - - /// - /// Begins a DoAfter to insert the item in the user's active hand into one of the target's hands. - /// - private void StartStripInsertHand( - Entity user, - Entity target, - EntityUid held, - string handName, - StrippableComponent? targetStrippable = null) - { - if (!Resolve(user, ref user.Comp) || - !Resolve(target, ref target.Comp) || - !Resolve(target, ref targetStrippable)) - return; - - if (!CanStripInsertHand(user, target, held, handName)) - return; - - var (time, stealth) = GetStripTimeModifiers(user, target, null, targetStrippable.HandStripDelay); - - if (!stealth) - _popupSystem.PopupEntity(Loc.GetString("strippable-component-alert-owner-insert-hand", ("user", Identity.Entity(user, EntityManager)), ("item", user.Comp.ActiveHandEntity!.Value)), target, target, PopupType.Large); - - var prefix = stealth ? "stealthily " : ""; - _adminLogger.Add(LogType.Stripping, LogImpact.Low, $"{ToPrettyString(user):actor} is trying to {prefix}place the item {ToPrettyString(held):item} in {ToPrettyString(target):target}'s hands"); - - var doAfterArgs = new DoAfterArgs(EntityManager, user, time, new StrippableDoAfterEvent(true, false, handName), user, target, held) - { - Hidden = stealth, - AttemptFrequency = AttemptFrequency.EveryTick, - BreakOnDamage = true, - BreakOnMove = true, - NeedHand = true, - DuplicateCondition = DuplicateConditions.SameTool - }; - - _doAfterSystem.TryStartDoAfter(doAfterArgs); - } - - /// - /// Places the item in the user's active hand into one of the target's hands. - /// - private void StripInsertHand( - Entity user, - Entity target, - EntityUid held, - string handName, - bool stealth) - { - if (!Resolve(user, ref user.Comp) || - !Resolve(target, ref target.Comp)) - return; - - if (!CanStripInsertHand(user, target, held, handName)) - return; - - _handsSystem.TryDrop(user, checkActionBlocker: false, handsComp: user.Comp); - _handsSystem.TryPickup(target, held, handName, checkActionBlocker: false, animateUser: stealth, animate: !stealth, handsComp: target.Comp); - _adminLogger.Add(LogType.Stripping, LogImpact.Medium, $"{ToPrettyString(user):actor} has placed the item {ToPrettyString(held):item} in {ToPrettyString(target):target}'s hands"); - - // Hand update will trigger strippable update. - } - - /// - /// Checks whether the item is in the target's hand and whether it can be dropped. - /// - private bool CanStripRemoveHand( - EntityUid user, - Entity target, - EntityUid item, - string handName) - { - if (!Resolve(target, ref target.Comp)) - return false; - - if (!_handsSystem.TryGetHand(target, handName, out var handSlot, target.Comp)) - { - _popupSystem.PopupCursor(Loc.GetString("strippable-component-item-slot-free-message", ("owner", Identity.Name(target, EntityManager, user))), user); - return false; - } - - if (HasComp(handSlot.HeldEntity)) - return false; - - if (handSlot.HeldEntity == null) - return false; - - if (handSlot.HeldEntity != item) - return false; - - if (!_handsSystem.CanDropHeld(target, handSlot, false)) - { - _popupSystem.PopupCursor(Loc.GetString("strippable-component-cannot-drop-message", ("owner", Identity.Name(target, EntityManager, user))), user); - return false; - } - - return true; - } - - /// - /// Begins a DoAfter to remove the item from the target's hand and insert it in the user's active hand. - /// - private void StartStripRemoveHand( - Entity user, - Entity target, - EntityUid item, - string handName, - StrippableComponent? targetStrippable = null) - { - if (!Resolve(user, ref user.Comp) || - !Resolve(target, ref target.Comp) || - !Resolve(target, ref targetStrippable)) - return; - - if (!CanStripRemoveHand(user, target, item, handName)) - return; - - var (time, stealth) = GetStripTimeModifiers(user, target, null, targetStrippable.HandStripDelay); - - if (!stealth) - _popupSystem.PopupEntity(Loc.GetString("strippable-component-alert-owner", ("user", Identity.Entity(user, EntityManager)), ("item", item)), target, target); - - var prefix = stealth ? "stealthily " : ""; - _adminLogger.Add(LogType.Stripping, LogImpact.Low, $"{ToPrettyString(user):actor} is trying to {prefix}strip the item {ToPrettyString(item):item} from {ToPrettyString(target):target}'s hands"); - - var doAfterArgs = new DoAfterArgs(EntityManager, user, time, new StrippableDoAfterEvent(false, false, handName), user, target, item) - { - Hidden = stealth, - AttemptFrequency = AttemptFrequency.EveryTick, - BreakOnDamage = true, - BreakOnMove = true, - NeedHand = true, - BreakOnHandChange = false, // Allow simultaneously removing multiple items. - DuplicateCondition = DuplicateConditions.SameTool - }; - - _doAfterSystem.TryStartDoAfter(doAfterArgs); - } - - /// - /// Takes the item from the target's hand and inserts it in the user's active hand. - /// - private void StripRemoveHand( - Entity user, - Entity target, - EntityUid item, - string handName, - bool stealth) - { - if (!Resolve(user, ref user.Comp) || - !Resolve(target, ref target.Comp)) - return; - - if (!CanStripRemoveHand(user, target, item, handName)) - return; - - _handsSystem.TryDrop(target, item, checkActionBlocker: false, handsComp: target.Comp); - _handsSystem.PickupOrDrop(user, item, animateUser: stealth, animate: !stealth, handsComp: user.Comp); - _adminLogger.Add(LogType.Stripping, LogImpact.Medium, $"{ToPrettyString(user):actor} has stripped the item {ToPrettyString(item):item} from {ToPrettyString(target):target}'s hands"); - - // Hand update will trigger strippable update. - } - - private void OnStrippableDoAfterRunning(Entity entity, ref DoAfterAttemptEvent ev) - { - var args = ev.DoAfter.Args; - - DebugTools.Assert(entity.Owner == args.User); - DebugTools.Assert(args.Target != null); - DebugTools.Assert(args.Used != null); - DebugTools.Assert(ev.Event.SlotOrHandName != null); - - if (ev.Event.InventoryOrHand) - { - if ( ev.Event.InsertOrRemove && !CanStripInsertInventory((entity.Owner, entity.Comp), args.Target.Value, args.Used.Value, ev.Event.SlotOrHandName) || - !ev.Event.InsertOrRemove && !CanStripRemoveInventory(entity.Owner, args.Target.Value, args.Used.Value, ev.Event.SlotOrHandName)) - ev.Cancel(); - } - else - { - if ( ev.Event.InsertOrRemove && !CanStripInsertHand((entity.Owner, entity.Comp), args.Target.Value, args.Used.Value, ev.Event.SlotOrHandName) || - !ev.Event.InsertOrRemove && !CanStripRemoveHand(entity.Owner, args.Target.Value, args.Used.Value, ev.Event.SlotOrHandName)) - ev.Cancel(); - } - } - - private void OnStrippableDoAfterFinished(Entity entity, ref StrippableDoAfterEvent ev) - { - if (ev.Cancelled) - return; - - DebugTools.Assert(entity.Owner == ev.User); - DebugTools.Assert(ev.Target != null); - DebugTools.Assert(ev.Used != null); - DebugTools.Assert(ev.SlotOrHandName != null); +public sealed class StrippableSystem : SharedStrippableSystem +{ - if (ev.InventoryOrHand) - { - if (ev.InsertOrRemove) - StripInsertInventory((entity.Owner, entity.Comp), ev.Target.Value, ev.Used.Value, ev.SlotOrHandName); - else StripRemoveInventory(entity.Owner, ev.Target.Value, ev.Used.Value, ev.SlotOrHandName, ev.Args.Hidden); - } - else - { - if (ev.InsertOrRemove) - StripInsertHand((entity.Owner, entity.Comp), ev.Target.Value, ev.Used.Value, ev.SlotOrHandName, ev.Args.Hidden); - else StripRemoveHand((entity.Owner, entity.Comp), ev.Target.Value, ev.Used.Value, ev.SlotOrHandName, ev.Args.Hidden); - } - } - } } diff --git a/Content.Server/SubFloor/SubFloorHideSystem.cs b/Content.Server/SubFloor/SubFloorHideSystem.cs index 2767f500f9a..497d7788d72 100644 --- a/Content.Server/SubFloor/SubFloorHideSystem.cs +++ b/Content.Server/SubFloor/SubFloorHideSystem.cs @@ -19,7 +19,7 @@ private void OnAnchorAttempt(EntityUid uid, SubFloorHideComponent component, Anc var xform = Transform(uid); if (TryComp(xform.GridUid, out var grid) - && HasFloorCover(grid, grid.TileIndicesFor(xform.Coordinates))) + && HasFloorCover(xform.GridUid.Value, grid, Map.TileIndicesFor(xform.GridUid.Value, grid, xform.Coordinates))) { args.Cancel(); } diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSpeakerSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSpeakerSystem.cs index 0e694a801eb..581ac197197 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSpeakerSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraSpeakerSystem.cs @@ -1,6 +1,7 @@ using Content.Server.Chat.Systems; using Content.Server.Speech; using Content.Shared.Speech; +using Content.Shared.Chat; using Robust.Shared.Audio.Systems; using Robust.Shared.Timing; @@ -48,7 +49,7 @@ private void OnSpeechSent(EntityUid uid, SurveillanceCameraSpeakerComponent comp RaiseLocalEvent(args.Speaker, nameEv); var name = Loc.GetString("speech-name-relay", ("speaker", Name(uid)), - ("originalName", nameEv.Name)); + ("originalName", nameEv.VoiceName)); // log to chat so people can identity the speaker/source, but avoid clogging ghost chat if there are many radios _chatSystem.TrySendInGameICMessage(uid, args.Message, InGameICChatType.Speak, ChatTransmitRange.GhostRangeLimit, nameOverride: name); diff --git a/Content.Server/Temperature/Systems/TemperatureSystem.cs b/Content.Server/Temperature/Systems/TemperatureSystem.cs index ccd981bbbc3..e46b18a2659 100644 --- a/Content.Server/Temperature/Systems/TemperatureSystem.cs +++ b/Content.Server/Temperature/Systems/TemperatureSystem.cs @@ -130,7 +130,7 @@ public void ForceChangeTemperature(EntityUid uid, float temp, TemperatureCompone public void ChangeHeat(EntityUid uid, float heatAmount, bool ignoreHeatResistance = false, TemperatureComponent? temperature = null) { - if (!Resolve(uid, ref temperature)) + if (!Resolve(uid, ref temperature, false)) return; if (!ignoreHeatResistance) @@ -311,7 +311,7 @@ private void OnTemperatureChangeAttempt(EntityUid uid, TemperatureProtectionComp private void ChangeTemperatureOnCollide(Entity ent, ref ProjectileHitEvent args) { - _temperature.ChangeHeat(args.Target, ent.Comp.Heat, ent.Comp.IgnoreHeatResistance);// adjust the temperature + _temperature.ChangeHeat(args.Target, ent.Comp.Heat, ent.Comp.IgnoreHeatResistance);// adjust the temperature } private void OnParentChange(EntityUid uid, TemperatureComponent component, diff --git a/Content.Server/Tesla/Components/TeslaEnergyBallComponent.cs b/Content.Server/Tesla/Components/TeslaEnergyBallComponent.cs index 5e1c62f3042..7fc424f9afe 100644 --- a/Content.Server/Tesla/Components/TeslaEnergyBallComponent.cs +++ b/Content.Server/Tesla/Components/TeslaEnergyBallComponent.cs @@ -1,6 +1,8 @@ using Content.Server.Tesla.EntitySystems; using Robust.Shared.Audio; using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; // DeltaV +using Robust.Shared.Timing; // DeltaV namespace Content.Server.Tesla.Components; @@ -8,6 +10,7 @@ namespace Content.Server.Tesla.Components; /// A component that tracks an entity's saturation level from absorbing other creatures by touch, and spawns new entities when the saturation limit is reached. /// [RegisterComponent, Access(typeof(TeslaEnergyBallSystem))] +[AutoGenerateComponentPause] // DeltaV public sealed partial class TeslaEnergyBallComponent : Component { /// @@ -51,4 +54,19 @@ public sealed partial class TeslaEnergyBallComponent : Component /// [DataField, ViewVariables(VVAccess.ReadWrite)] public EntProtoId ConsumeEffectProto = "EffectTeslaSparks"; + + // Begin DeltaV additions + /// + /// The amount of energy drained passively per update. + /// + [DataField] + public float PassiveEnergyDrainRate = 3f; + + /// + /// The timespan of next update. + /// + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] + [AutoPausedField] + public TimeSpan NextUpdateTime = TimeSpan.Zero; + // End DeltaV } diff --git a/Content.Server/Tesla/EntitySystem/TeslaEnergyBallSystem.cs b/Content.Server/Tesla/EntitySystem/TeslaEnergyBallSystem.cs index 606f4615af3..a7ba7301d9e 100644 --- a/Content.Server/Tesla/EntitySystem/TeslaEnergyBallSystem.cs +++ b/Content.Server/Tesla/EntitySystem/TeslaEnergyBallSystem.cs @@ -15,7 +15,7 @@ namespace Content.Server.Tesla.EntitySystems; /// /// A component that tracks an entity's saturation level from absorbing other creatures by touch, and spawns new entities when the saturation limit is reached. /// -public sealed class TeslaEnergyBallSystem : EntitySystem +public sealed partial class TeslaEnergyBallSystem : EntitySystem // DeltaV - Change to partial { [Dependency] private readonly AudioSystem _audio = default!; diff --git a/Content.Server/Thief/Systems/ThiefBeaconSystem.cs b/Content.Server/Thief/Systems/ThiefBeaconSystem.cs index 80471b64279..de1c3d2e6d1 100644 --- a/Content.Server/Thief/Systems/ThiefBeaconSystem.cs +++ b/Content.Server/Thief/Systems/ThiefBeaconSystem.cs @@ -6,6 +6,7 @@ using Content.Shared.Foldable; using Content.Shared.Popups; using Content.Shared.Verbs; +using Content.Shared.Roles; using Robust.Shared.Audio.Systems; namespace Content.Server.Thief.Systems; @@ -18,6 +19,7 @@ public sealed class ThiefBeaconSystem : EntitySystem [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly MindSystem _mind = default!; + [Dependency] private readonly SharedRoleSystem _roles = default!; public override void Initialize() { @@ -37,7 +39,7 @@ private void OnGetInteractionVerbs(Entity beacon, ref GetV return; var mind = _mind.GetMind(args.User); - if (!HasComp(mind)) + if (mind == null || !_roles.MindHasRole(mind.Value)) return; var user = args.User; diff --git a/Content.Server/Traitor/Components/AutoTraitorComponent.cs b/Content.Server/Traitor/Components/AutoTraitorComponent.cs index ab4bee2f267..a4710afd8eb 100644 --- a/Content.Server/Traitor/Components/AutoTraitorComponent.cs +++ b/Content.Server/Traitor/Components/AutoTraitorComponent.cs @@ -1,4 +1,5 @@ using Content.Server.Traitor.Systems; +using Robust.Shared.Prototypes; namespace Content.Server.Traitor.Components; @@ -9,14 +10,8 @@ namespace Content.Server.Traitor.Components; public sealed partial class AutoTraitorComponent : Component { /// - /// Whether to give the traitor an uplink or not. + /// The traitor profile to use /// - [DataField("giveUplink"), ViewVariables(VVAccess.ReadWrite)] - public bool GiveUplink = true; - - /// - /// Whether to give the traitor objectives or not. - /// - [DataField("giveObjectives"), ViewVariables(VVAccess.ReadWrite)] - public bool GiveObjectives = true; + [DataField] + public EntProtoId Profile = "Traitor"; } diff --git a/Content.Server/Traitor/Systems/AutoTraitorSystem.cs b/Content.Server/Traitor/Systems/AutoTraitorSystem.cs index e9307effbc6..d5a4db591a7 100644 --- a/Content.Server/Traitor/Systems/AutoTraitorSystem.cs +++ b/Content.Server/Traitor/Systems/AutoTraitorSystem.cs @@ -12,9 +12,6 @@ public sealed class AutoTraitorSystem : EntitySystem { [Dependency] private readonly AntagSelectionSystem _antag = default!; - [ValidatePrototypeId] - private const string DefaultTraitorRule = "Traitor"; - public override void Initialize() { base.Initialize(); @@ -24,6 +21,6 @@ public override void Initialize() private void OnMindAdded(EntityUid uid, AutoTraitorComponent comp, MindAddedMessage args) { - _antag.ForceMakeAntag(args.Mind.Comp.Session, DefaultTraitorRule); + _antag.ForceMakeAntag(args.Mind.Comp.Session, comp.Profile); } } diff --git a/Content.Server/Traitor/Uplink/UplinkSystem.cs b/Content.Server/Traitor/Uplink/UplinkSystem.cs index ae809dc4d77..4c0a990b148 100644 --- a/Content.Server/Traitor/Uplink/UplinkSystem.cs +++ b/Content.Server/Traitor/Uplink/UplinkSystem.cs @@ -1,97 +1,136 @@ using System.Linq; using Content.Server.Store.Systems; using Content.Server.StoreDiscount.Systems; +using Content.Shared.FixedPoint; using Content.Shared.Hands.EntitySystems; +using Content.Shared.Implants; using Content.Shared.Inventory; using Content.Shared.PDA; -using Content.Shared.FixedPoint; using Content.Shared.Store; using Content.Shared.Store.Components; +using Robust.Shared.Prototypes; + +namespace Content.Server.Traitor.Uplink; -namespace Content.Server.Traitor.Uplink +public sealed class UplinkSystem : EntitySystem { - public sealed class UplinkSystem : EntitySystem + [Dependency] private readonly InventorySystem _inventorySystem = default!; + [Dependency] private readonly SharedHandsSystem _handsSystem = default!; + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly StoreSystem _store = default!; + [Dependency] private readonly SharedSubdermalImplantSystem _subdermalImplant = default!; + + [ValidatePrototypeId] + public const string TelecrystalCurrencyPrototype = "Telecrystal"; + private const string FallbackUplinkImplant = "UplinkImplant"; + private const string FallbackUplinkCatalog = "UplinkUplinkImplanter"; + + /// + /// Adds an uplink to the target + /// + /// The person who is getting the uplink + /// The amount of currency on the uplink. If null, will just use the amount specified in the preset. + /// The entity that will actually have the uplink functionality. Defaults to the PDA if null. + /// Marker that enables discounts for uplink items. + /// Whether or not the uplink was added successfully + public bool AddUplink( + EntityUid user, + FixedPoint2 balance, + EntityUid? uplinkEntity = null, + bool giveDiscounts = false) { - [Dependency] private readonly InventorySystem _inventorySystem = default!; - [Dependency] private readonly SharedHandsSystem _handsSystem = default!; - [Dependency] private readonly StoreSystem _store = default!; - - [ValidatePrototypeId] - public const string TelecrystalCurrencyPrototype = "Telecrystal"; - - /// - /// Adds an uplink to the target - /// - /// The person who is getting the uplink - /// The amount of currency on the uplink. If null, will just use the amount specified in the preset. - /// The entity that will actually have the uplink functionality. Defaults to the PDA if null. - /// Marker that enables discounts for uplink items. - /// Whether or not the uplink was added successfully - public bool AddUplink( - EntityUid user, - FixedPoint2? balance, - EntityUid? uplinkEntity = null, - bool giveDiscounts = false - ) - { - // Try to find target item if none passed - uplinkEntity ??= FindUplinkTarget(user); - if (uplinkEntity == null) - { - return false; - } + // Try to find target item if none passed - EnsureComp(uplinkEntity.Value); - var store = EnsureComp(uplinkEntity.Value); + uplinkEntity ??= FindUplinkTarget(user); - store.AccountOwner = user; - store.Balance.Clear(); - if (balance != null) - { - store.Balance.Clear(); - _store.TryAddCurrency(new Dictionary { { TelecrystalCurrencyPrototype, balance.Value } }, uplinkEntity.Value, store); - } + if (uplinkEntity == null) + return ImplantUplink(user, balance, giveDiscounts); - var uplinkInitializedEvent = new StoreInitializedEvent( - TargetUser: user, - Store: uplinkEntity.Value, - UseDiscounts: giveDiscounts, - Listings: _store.GetAvailableListings(user, uplinkEntity.Value, store) - .ToArray() - ); - RaiseLocalEvent(ref uplinkInitializedEvent); - // TODO add BUI. Currently can't be done outside of yaml -_- - - return true; - } + EnsureComp(uplinkEntity.Value); + + SetUplink(user, uplinkEntity.Value, balance, giveDiscounts); + + // TODO add BUI. Currently can't be done outside of yaml -_- + // ^ What does this even mean? + + return true; + } + + /// + /// Configure TC for the uplink + /// + private void SetUplink(EntityUid user, EntityUid uplink, FixedPoint2 balance, bool giveDiscounts) + { + var store = EnsureComp(uplink); + store.AccountOwner = user; + + store.Balance.Clear(); + _store.TryAddCurrency(new Dictionary { { TelecrystalCurrencyPrototype, balance } }, + uplink, + store); - /// - /// Finds the entity that can hold an uplink for a user. - /// Usually this is a pda in their pda slot, but can also be in their hands. (but not pockets or inside bag, etc.) - /// - public EntityUid? FindUplinkTarget(EntityUid user) + var uplinkInitializedEvent = new StoreInitializedEvent( + TargetUser: user, + Store: uplink, + UseDiscounts: giveDiscounts, + Listings: _store.GetAvailableListings(user, uplink, store) + .ToArray()); + RaiseLocalEvent(ref uplinkInitializedEvent); + } + + /// + /// Implant an uplink as a fallback measure if the traitor had no PDA + /// + private bool ImplantUplink(EntityUid user, FixedPoint2 balance, bool giveDiscounts) + { + var implantProto = new string(FallbackUplinkImplant); + + if (!_proto.TryIndex(FallbackUplinkCatalog, out var catalog)) + return false; + + if (!catalog.Cost.TryGetValue(TelecrystalCurrencyPrototype, out var cost)) + return false; + + if (balance < cost) // Can't use Math functions on FixedPoint2 + balance = 0; + else + balance = balance - cost; + + var implant = _subdermalImplant.AddImplant(user, implantProto); + + if (!HasComp(implant)) + return false; + + SetUplink(user, implant.Value, balance, giveDiscounts); + return true; + } + + /// + /// Finds the entity that can hold an uplink for a user. + /// Usually this is a pda in their pda slot, but can also be in their hands. (but not pockets or inside bag, etc.) + /// + public EntityUid? FindUplinkTarget(EntityUid user) + { + // Try to find PDA in inventory + if (_inventorySystem.TryGetContainerSlotEnumerator(user, out var containerSlotEnumerator)) { - // Try to find PDA in inventory - if (_inventorySystem.TryGetContainerSlotEnumerator(user, out var containerSlotEnumerator)) + while (containerSlotEnumerator.MoveNext(out var pdaUid)) { - while (containerSlotEnumerator.MoveNext(out var pdaUid)) - { - if (!pdaUid.ContainedEntity.HasValue) - continue; - - if (HasComp(pdaUid.ContainedEntity.Value) || HasComp(pdaUid.ContainedEntity.Value)) - return pdaUid.ContainedEntity.Value; - } - } + if (!pdaUid.ContainedEntity.HasValue) + continue; - // Also check hands - foreach (var item in _handsSystem.EnumerateHeld(user)) - { - if (HasComp(item) || HasComp(item)) - return item; + if (HasComp(pdaUid.ContainedEntity.Value) || HasComp(pdaUid.ContainedEntity.Value)) + return pdaUid.ContainedEntity.Value; } + } - return null; + // Also check hands + foreach (var item in _handsSystem.EnumerateHeld(user)) + { + if (HasComp(item) || HasComp(item)) + return item; } + + return null; } } diff --git a/Content.Server/VendingMachines/VendingMachineContrabandWireAction.cs b/Content.Server/VendingMachines/VendingMachineContrabandWireAction.cs index 22a0341fcbe..39231fbe834 100644 --- a/Content.Server/VendingMachines/VendingMachineContrabandWireAction.cs +++ b/Content.Server/VendingMachines/VendingMachineContrabandWireAction.cs @@ -7,11 +7,20 @@ namespace Content.Server.VendingMachines; [DataDefinition] public sealed partial class VendingMachineContrabandWireAction : BaseToggleWireAction { + private VendingMachineSystem _vendingMachineSystem = default!; + public override Color Color { get; set; } = Color.Green; public override string Name { get; set; } = "wire-name-vending-contraband"; public override object? StatusKey { get; } = ContrabandWireKey.StatusKey; public override object? TimeoutKey { get; } = ContrabandWireKey.TimeoutKey; + public override void Initialize() + { + base.Initialize(); + + _vendingMachineSystem = EntityManager.System(); + } + public override StatusLightState? GetLightState(Wire wire) { if (EntityManager.TryGetComponent(wire.Owner, out VendingMachineComponent? vending)) @@ -28,7 +37,7 @@ public override void ToggleValue(EntityUid owner, bool setting) { if (EntityManager.TryGetComponent(owner, out VendingMachineComponent? vending)) { - vending.Contraband = !setting; + _vendingMachineSystem.SetContraband(owner, !vending.Contraband, vending); } } diff --git a/Content.Server/VendingMachines/VendingMachineSystem.cs b/Content.Server/VendingMachines/VendingMachineSystem.cs index a265ce2d431..90fe4cb7d8a 100644 --- a/Content.Server/VendingMachines/VendingMachineSystem.cs +++ b/Content.Server/VendingMachines/VendingMachineSystem.cs @@ -34,10 +34,8 @@ public sealed class VendingMachineSystem : SharedVendingMachineSystem [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly AccessReaderSystem _accessReader = default!; [Dependency] private readonly AppearanceSystem _appearanceSystem = default!; - [Dependency] private readonly SharedActionsSystem _action = default!; [Dependency] private readonly PricingSystem _pricing = default!; [Dependency] private readonly ThrowingSystem _throwingSystem = default!; - [Dependency] private readonly UserInterfaceSystem _userInterfaceSystem = default!; [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly SpeakOnUIClosedSystem _speakOnUIClosed = default!; @@ -47,7 +45,6 @@ public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnComponentMapInit); SubscribeLocalEvent(OnPowerChanged); SubscribeLocalEvent(OnBreak); SubscribeLocalEvent(OnEmagged); @@ -59,7 +56,6 @@ public override void Initialize() Subs.BuiEvents(VendingMachineUiKey.Key, subs => { - subs.Event(OnBoundUIOpened); subs.Event(OnInventoryEjectMessage); }); @@ -70,12 +66,6 @@ public override void Initialize() SubscribeLocalEvent(OnPriceCalculation); } - private void OnComponentMapInit(EntityUid uid, VendingMachineComponent component, MapInitEvent args) - { - _action.AddAction(uid, ref component.ActionEntity, component.Action, uid); - Dirty(uid, component); - } - private void OnVendingPrice(EntityUid uid, VendingMachineComponent component, ref PriceCalculationEvent args) { var price = 0.0; @@ -94,9 +84,9 @@ private void OnVendingPrice(EntityUid uid, VendingMachineComponent component, re args.Price += price; } - protected override void OnComponentInit(EntityUid uid, VendingMachineComponent component, ComponentInit args) + protected override void OnMapInit(EntityUid uid, VendingMachineComponent component, MapInitEvent args) { - base.OnComponentInit(uid, component, args); + base.OnMapInit(uid, component, args); if (HasComp(uid)) { @@ -110,18 +100,6 @@ private void OnActivatableUIOpenAttempt(EntityUid uid, VendingMachineComponent c args.Cancel(); } - private void OnBoundUIOpened(EntityUid uid, VendingMachineComponent component, BoundUIOpenedEvent args) - { - UpdateVendingMachineInterfaceState(uid, component); - } - - private void UpdateVendingMachineInterfaceState(EntityUid uid, VendingMachineComponent component) - { - var state = new VendingMachineInterfaceState(GetAllInventory(uid, component)); - - _userInterfaceSystem.SetUiState(uid, VendingMachineUiKey.Key, state); - } - private void OnInventoryEjectMessage(EntityUid uid, VendingMachineComponent component, VendingMachineEjectMessage args) { if (!this.IsPowered(uid, EntityManager)) @@ -214,6 +192,18 @@ public void SetShooting(EntityUid uid, bool canShoot, VendingMachineComponent? c component.CanShoot = canShoot; } + /// + /// Sets the property of the vending machine. + /// + public void SetContraband(EntityUid uid, bool contraband, VendingMachineComponent? component = null) + { + if (!Resolve(uid, ref component)) + return; + + component.Contraband = contraband; + Dirty(uid, component); + } + public void Deny(EntityUid uid, VendingMachineComponent? vendComponent = null) { if (!Resolve(uid, ref vendComponent)) @@ -297,7 +287,7 @@ public void TryEjectVendorItem(EntityUid uid, InventoryType type, string itemId, _speakOnUIClosed.TrySetFlag((uid, speakComponent)); entry.Amount--; - UpdateVendingMachineInterfaceState(uid, vendComponent); + Dirty(uid, vendComponent); TryUpdateVisualState(uid, vendComponent); Audio.PlayPvs(vendComponent.SoundVend, uid); } @@ -493,7 +483,7 @@ public void TryRestockInventory(EntityUid uid, VendingMachineComponent? vendComp RestockInventoryFromPrototype(uid, vendComponent); - UpdateVendingMachineInterfaceState(uid, vendComponent); + Dirty(uid, vendComponent); TryUpdateVisualState(uid, vendComponent); } diff --git a/Content.Server/VoiceMask/VoiceMaskComponent.cs b/Content.Server/VoiceMask/VoiceMaskComponent.cs index d0c92003006..d3116f94db1 100644 --- a/Content.Server/VoiceMask/VoiceMaskComponent.cs +++ b/Content.Server/VoiceMask/VoiceMaskComponent.cs @@ -3,21 +3,38 @@ namespace Content.Server.VoiceMask; +/// +/// This component is for voice mask items! Adding this component to clothing will give the the voice mask UI +/// and allow the wearer to change their voice and verb at will. +/// +/// +/// DO NOT use this if you do not want the interface. +/// The VoiceOverrideSystem is probably what your looking for (Or you might have to make something similar)! +/// [RegisterComponent] public sealed partial class VoiceMaskComponent : Component { + /// + /// The name that will override an entities default name. If null, it will use the default override. + /// + [DataField] + public string? VoiceMaskName = null; + + /// + /// The speech verb that will override an entities default one. If null, it will use the entities default verb. + /// [DataField] - [ViewVariables(VVAccess.ReadWrite)] - public bool Enabled = true; + public ProtoId? VoiceMaskSpeechVerb; + /// + /// The action that gets displayed when the voice mask is equipped. + /// [DataField] - [ViewVariables(VVAccess.ReadWrite)] - public string VoiceName = "Unknown"; + public EntProtoId Action = "ActionChangeVoiceMask"; /// - /// If EnableSpeechVerbModification is true, overrides the speech verb used when this entity speaks. + /// Reference to the action. /// [DataField] - [ViewVariables(VVAccess.ReadWrite)] - public ProtoId? SpeechVerb; + public EntityUid? ActionEntity; } diff --git a/Content.Server/VoiceMask/VoiceMaskSystem.Equip.cs b/Content.Server/VoiceMask/VoiceMaskSystem.Equip.cs deleted file mode 100644 index b97c47ceefc..00000000000 --- a/Content.Server/VoiceMask/VoiceMaskSystem.Equip.cs +++ /dev/null @@ -1,49 +0,0 @@ -using Content.Server.Actions; -using Content.Shared.Clothing; -using Content.Shared.Inventory; - -namespace Content.Server.VoiceMask; - -// This partial deals with equipment, i.e., the syndicate voice mask. -public sealed partial class VoiceMaskSystem -{ - [Dependency] private readonly InventorySystem _inventory = default!; - [Dependency] private readonly ActionsSystem _actions = default!; - - private const string MaskSlot = "mask"; - - private void OnEquip(EntityUid uid, VoiceMaskerComponent component, ClothingGotEquippedEvent args) - { - var user = args.Wearer; - var comp = EnsureComp(user); - comp.VoiceName = component.LastSetName; - comp.SpeechVerb = component.LastSpeechVerb; - - _actions.AddAction(user, ref component.ActionEntity, component.Action, uid); - } - - private void OnUnequip(EntityUid uid, VoiceMaskerComponent compnent, ClothingGotUnequippedEvent args) - { - RemComp(args.Wearer); - } - - private VoiceMaskerComponent? TryGetMask(EntityUid user) - { - if (!HasComp(user) || !_inventory.TryGetSlotEntity(user, MaskSlot, out var maskEntity)) - return null; - - return CompOrNull(maskEntity); - } - - private void TrySetLastKnownName(EntityUid user, string name) - { - if (TryGetMask(user) is {} comp) - comp.LastSetName = name; - } - - private void TrySetLastSpeechVerb(EntityUid user, string? verb) - { - if (TryGetMask(user) is {} comp) - comp.LastSpeechVerb = verb; - } -} diff --git a/Content.Server/VoiceMask/VoiceMaskSystem.cs b/Content.Server/VoiceMask/VoiceMaskSystem.cs index db64ae4ee95..18b83870849 100644 --- a/Content.Server/VoiceMask/VoiceMaskSystem.cs +++ b/Content.Server/VoiceMask/VoiceMaskSystem.cs @@ -1,114 +1,112 @@ -using Content.Server.Administration.Logs; -using Content.Server.Chat.Systems; -using Content.Server.Popups; +using Content.Shared.Actions; +using Content.Shared.Administration.Logs; +using Content.Shared.Chat; using Content.Shared.Clothing; using Content.Shared.Database; +using Content.Shared.Implants; +using Content.Shared.Inventory; using Content.Shared.Popups; using Content.Shared.Preferences; using Content.Shared.Speech; using Content.Shared.VoiceMask; -using Robust.Server.GameObjects; -using Robust.Shared.Player; using Robust.Shared.Prototypes; namespace Content.Server.VoiceMask; public sealed partial class VoiceMaskSystem : EntitySystem { - [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; - [Dependency] private readonly PopupSystem _popupSystem = default!; - [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly SharedUserInterfaceSystem _uiSystem = default!; + [Dependency] private readonly SharedPopupSystem _popupSystem = default!; + [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly SharedActionsSystem _actions = default!; public override void Initialize() { - SubscribeLocalEvent(OnSpeakerNameTransform); + base.Initialize(); + SubscribeLocalEvent>(OnTransformSpeakerName); + SubscribeLocalEvent>(OnTransformSpeakerNameImplant); SubscribeLocalEvent(OnChangeName); SubscribeLocalEvent(OnChangeVerb); - SubscribeLocalEvent(OnMaskToggled); - SubscribeLocalEvent(OnEquip); - SubscribeLocalEvent(OnUnequip); - SubscribeLocalEvent(OnSetName); - // SubscribeLocalEvent>(GetVerbs); + SubscribeLocalEvent(OnEquip); + SubscribeLocalEvent(OpenUI); } - private void OnSetName(VoiceMaskSetNameEvent ev) + private void OnTransformSpeakerName(Entity entity, ref InventoryRelayedEvent args) { - OpenUI(ev.Performer); + args.Args.VoiceName = GetCurrentVoiceName(entity); + args.Args.SpeechVerb = entity.Comp.VoiceMaskSpeechVerb ?? args.Args.SpeechVerb; } - private void OnChangeName(EntityUid uid, VoiceMaskComponent component, VoiceMaskChangeNameMessage message) + // Delta-v specific for implants + private void OnTransformSpeakerNameImplant(Entity entity, ref ImplantRelayEvent args) { - if (message.Name.Length > HumanoidCharacterProfile.MaxNameLength || message.Name.Length <= 0) - { - _popupSystem.PopupEntity(Loc.GetString("voice-mask-popup-failure"), uid, message.Actor, PopupType.SmallCaution); - return; - } - - component.VoiceName = message.Name; - _adminLogger.Add(LogType.Action, LogImpact.Medium, $"{ToPrettyString(message.Actor):player} set voice of {ToPrettyString(uid):mask}: {component.VoiceName}"); - - _popupSystem.PopupEntity(Loc.GetString("voice-mask-popup-success"), uid, message.Actor); - - TrySetLastKnownName(uid, message.Name); - - UpdateUI(uid, component); + args.Event.VoiceName = GetCurrentVoiceName(entity); + args.Event.SpeechVerb = entity.Comp.VoiceMaskSpeechVerb ?? args.Event.SpeechVerb; } - private void OnChangeVerb(Entity ent, ref VoiceMaskChangeVerbMessage msg) + #region User inputs from UI + private void OnChangeVerb(Entity entity, ref VoiceMaskChangeVerbMessage msg) { - if (msg.Verb is {} id && !_proto.HasIndex(id)) + if (msg.Verb is { } id && !_proto.HasIndex(id)) return; - ent.Comp.SpeechVerb = msg.Verb; + entity.Comp.VoiceMaskSpeechVerb = msg.Verb; // verb is only important to metagamers so no need to log as opposed to name - _popupSystem.PopupEntity(Loc.GetString("voice-mask-popup-success"), ent, msg.Actor); - - TrySetLastSpeechVerb(ent, msg.Verb); + _popupSystem.PopupEntity(Loc.GetString("voice-mask-popup-success"), entity, msg.Actor); - UpdateUI(ent, ent.Comp); + UpdateUI(entity); } - private void OnSpeakerNameTransform(EntityUid uid, VoiceMaskComponent component, TransformSpeakerNameEvent args) + private void OnChangeName(Entity entity, ref VoiceMaskChangeNameMessage message) { - if (component.Enabled) + if (message.Name.Length > HumanoidCharacterProfile.MaxNameLength || message.Name.Length <= 0) { - /* - args.Name = _idCard.TryGetIdCard(uid, out var card) && !string.IsNullOrEmpty(card.FullName) - ? card.FullName - : Loc.GetString("voice-mask-unknown"); - */ - - args.Name = component.VoiceName; - if (component.SpeechVerb != null) - args.SpeechVerb = component.SpeechVerb; + _popupSystem.PopupEntity(Loc.GetString("voice-mask-popup-failure"), entity, message.Actor, PopupType.SmallCaution); + return; } + + entity.Comp.VoiceMaskName = message.Name; + _adminLogger.Add(LogType.Action, LogImpact.Medium, $"{ToPrettyString(message.Actor):player} set voice of {ToPrettyString(entity):mask}: {entity.Comp.VoiceMaskName}"); + + _popupSystem.PopupEntity(Loc.GetString("voice-mask-popup-success"), entity, message.Actor); + + UpdateUI(entity); } + #endregion - private void OnMaskToggled(Entity ent, ref WearerMaskToggledEvent args) + #region UI + private void OnEquip(EntityUid uid, VoiceMaskComponent component, ClothingGotEquippedEvent args) { - ent.Comp.Enabled = !args.IsToggled; + _actions.AddAction(args.Wearer, ref component.ActionEntity, component.Action, uid); } - private void OpenUI(EntityUid player) + private void OpenUI(VoiceMaskSetNameEvent ev) { - if (!_uiSystem.HasUi(player, VoiceMaskUIKey.Key)) + var maskEntity = ev.Action.Comp.Container; + + if (!TryComp(maskEntity, out var voiceMaskComp)) + return; + + if (!_uiSystem.HasUi(maskEntity.Value, VoiceMaskUIKey.Key)) return; - _uiSystem.OpenUi(player, VoiceMaskUIKey.Key, player); - UpdateUI(player); + _uiSystem.OpenUi(maskEntity.Value, VoiceMaskUIKey.Key, ev.Performer); + UpdateUI((maskEntity.Value, voiceMaskComp)); } - private void UpdateUI(EntityUid owner, VoiceMaskComponent? component = null) + private void UpdateUI(Entity entity) { - // Delta-V: `logMissing: false` because of syrinx - if (!Resolve(owner, ref component, logMissing: false)) - { - return; - } + if (_uiSystem.HasUi(entity, VoiceMaskUIKey.Key)) + _uiSystem.SetUiState(entity.Owner, VoiceMaskUIKey.Key, new VoiceMaskBuiState(GetCurrentVoiceName(entity), entity.Comp.VoiceMaskSpeechVerb)); + } + #endregion - if (_uiSystem.HasUi(owner, VoiceMaskUIKey.Key)) - _uiSystem.SetUiState(owner, VoiceMaskUIKey.Key, new VoiceMaskBuiState(component.VoiceName, component.SpeechVerb)); + #region Helper functions + private string GetCurrentVoiceName(Entity entity) + { + return entity.Comp.VoiceMaskName ?? Loc.GetString("voice-mask-default-name-override"); } + #endregion } diff --git a/Content.Server/VoiceMask/VoiceMaskerComponent.cs b/Content.Server/VoiceMask/VoiceMaskerComponent.cs deleted file mode 100644 index afea5877df2..00000000000 --- a/Content.Server/VoiceMask/VoiceMaskerComponent.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Content.Shared.Speech; -using Robust.Shared.Prototypes; - -namespace Content.Server.VoiceMask; - -[RegisterComponent] -public sealed partial class VoiceMaskerComponent : Component -{ - [DataField] - public string LastSetName = "Unknown"; - - [DataField] - public ProtoId? LastSpeechVerb; - - [DataField] - public EntProtoId Action = "ActionChangeVoiceMask"; - - [DataField] - public EntityUid? ActionEntity; -} diff --git a/Content.Server/Voting/IVoteHandle.cs b/Content.Server/Voting/IVoteHandle.cs index 869f2017d70..f5c31c5b1eb 100644 --- a/Content.Server/Voting/IVoteHandle.cs +++ b/Content.Server/Voting/IVoteHandle.cs @@ -1,4 +1,4 @@ -using Content.Server.Voting.Managers; +using Content.Server.Voting.Managers; using Robust.Shared.Player; namespace Content.Server.Voting @@ -43,6 +43,11 @@ public interface IVoteHandle /// bool Cancelled { get; } + /// + /// Dictionary of votes cast by players, matching the option's id. + /// + IReadOnlyDictionary CastVotes { get; } + /// /// Current count of votes per option type. /// diff --git a/Content.Server/Voting/Managers/IVoteManager.cs b/Content.Server/Voting/Managers/IVoteManager.cs index d95fac9ae92..03221f5a67b 100644 --- a/Content.Server/Voting/Managers/IVoteManager.cs +++ b/Content.Server/Voting/Managers/IVoteManager.cs @@ -1,4 +1,4 @@ -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using Content.Shared.Voting; using Robust.Shared.Player; @@ -51,7 +51,7 @@ public interface IVoteManager /// If null it is assumed to be an automatic vote by the server. /// /// The type of standard vote to make. - void CreateStandardVote(ICommonSession? initiator, StandardVoteType voteType); + void CreateStandardVote(ICommonSession? initiator, StandardVoteType voteType, string[]? args = null); /// /// Create a non-standard vote with special parameters. diff --git a/Content.Server/Voting/Managers/VoteManager.DefaultVotes.cs b/Content.Server/Voting/Managers/VoteManager.DefaultVotes.cs index c479f749895..736ff48817e 100644 --- a/Content.Server/Voting/Managers/VoteManager.DefaultVotes.cs +++ b/Content.Server/Voting/Managers/VoteManager.DefaultVotes.cs @@ -1,11 +1,19 @@ using System.Linq; +using Content.Server.Administration; +using Content.Server.Administration.Managers; +using Content.Server.Database; +using Content.Server.Discord.WebhookMessages; using Content.Server.GameTicking; using Content.Server.GameTicking.Presets; using Content.Server.Maps; +using Content.Server.Roles; using Content.Server.RoundEnd; using Content.Shared.CCVar; +using Content.Shared.Chat; using Content.Shared.Database; using Content.Shared.Ghost; +using Content.Shared.Players; +using Content.Shared.Players.PlayTimeTracking; using Content.Shared.Voting; using Robust.Shared.Configuration; using Robust.Shared.Enums; @@ -16,20 +24,34 @@ namespace Content.Server.Voting.Managers { public sealed partial class VoteManager { + [Dependency] private readonly IPlayerLocator _locator = default!; + [Dependency] private readonly ILogManager _logManager = default!; + [Dependency] private readonly IBanManager _bans = default!; + [Dependency] private readonly IServerDbManager _dbManager = default!; + [Dependency] private readonly VoteWebhooks _voteWebhooks = default!; + + private VotingSystem? _votingSystem; + private RoleSystem? _roleSystem; + private static readonly Dictionary> _voteTypesToEnableCVars = new() { {StandardVoteType.Restart, CCVars.VoteRestartEnabled}, {StandardVoteType.Preset, CCVars.VotePresetEnabled}, {StandardVoteType.Map, CCVars.VoteMapEnabled}, + {StandardVoteType.Votekick, CCVars.VotekickEnabled} }; - public void CreateStandardVote(ICommonSession? initiator, StandardVoteType voteType) + public void CreateStandardVote(ICommonSession? initiator, StandardVoteType voteType, string[]? args = null) { - if (initiator != null) + if (initiator != null && args == null) _adminLogger.Add(LogType.Vote, LogImpact.Medium, $"{initiator} initiated a {voteType.ToString()} vote"); + else if (initiator != null && args != null) + _adminLogger.Add(LogType.Vote, LogImpact.Extreme, $"{initiator} initiated a {voteType.ToString()} vote with the arguments: {String.Join(",", args)}"); else _adminLogger.Add(LogType.Vote, LogImpact.Medium, $"Initiated a {voteType.ToString()} vote"); + bool timeoutVote = true; + switch (voteType) { case StandardVoteType.Restart: @@ -41,12 +63,17 @@ public void CreateStandardVote(ICommonSession? initiator, StandardVoteType voteT case StandardVoteType.Map: CreateMapVote(initiator); break; + case StandardVoteType.Votekick: + timeoutVote = false; // Allows the timeout to be updated manually in the create method + CreateVotekickVote(initiator, args); + break; default: throw new ArgumentOutOfRangeException(nameof(voteType), voteType, null); } var ticker = _entityManager.EntitySysManager.GetEntitySystem(); ticker.UpdateInfoText(); - TimeoutStandardVote(voteType); + if (timeoutVote) + TimeoutStandardVote(voteType); } private void CreateRestartVote(ICommonSession? initiator) @@ -56,104 +83,127 @@ private void CreateRestartVote(ICommonSession? initiator) var totalPlayers = _playerManager.Sessions.Count(session => session.Status != SessionStatus.Disconnected); var ghostVotePercentageRequirement = _cfg.GetCVar(CCVars.VoteRestartGhostPercentage); - var ghostCount = 0; - - foreach (var player in _playerManager.Sessions) + var ghostVoterPercentage = CalculateEligibleVoterPercentage(VoterEligibility.Ghost); + + if (totalPlayers <= playerVoteMaximum || ghostVoterPercentage >= ghostVotePercentageRequirement) { - _playerManager.UpdateState(player); - if (player.Status != SessionStatus.Disconnected && _entityManager.HasComponent(player.AttachedEntity)) - { - ghostCount++; - } + StartVote(initiator); } - - var ghostPercentage = 0.0; - if (totalPlayers > 0) + else { - ghostPercentage = ((double)ghostCount / totalPlayers) * 100; + NotifyNotEnoughGhostPlayers(ghostVotePercentageRequirement, ghostVoterPercentage); } + } - var roundedGhostPercentage = (int)Math.Round(ghostPercentage); + /// + /// Gives the current percentage of players eligible to vote, rounded to nearest percentage point. + /// + /// The eligibility requirement to vote. + public int CalculateEligibleVoterPercentage(VoterEligibility eligibility) + { + var eligibleCount = CalculateEligibleVoterNumber(eligibility); + var totalPlayers = _playerManager.Sessions.Count(session => session.Status != SessionStatus.Disconnected); - if (totalPlayers <= playerVoteMaximum || roundedGhostPercentage >= ghostVotePercentageRequirement) + var eligiblePercentage = 0.0; + if (totalPlayers > 0) { - StartVote(initiator); + eligiblePercentage = ((double)eligibleCount / totalPlayers) * 100; } - else + + var roundedEligiblePercentage = (int)Math.Round(eligiblePercentage); + + return roundedEligiblePercentage; + } + + /// + /// Gives the current number of players eligible to vote. + /// + /// The eligibility requirement to vote. + public int CalculateEligibleVoterNumber(VoterEligibility eligibility) + { + var eligibleCount = 0; + + foreach (var player in _playerManager.Sessions) { - NotifyNotEnoughGhostPlayers(ghostVotePercentageRequirement, roundedGhostPercentage); + _playerManager.UpdateState(player); + if (player.Status != SessionStatus.Disconnected && CheckVoterEligibility(player, eligibility)) + { + eligibleCount++; + } } + + return eligibleCount; } private void StartVote(ICommonSession? initiator) { var alone = _playerManager.PlayerCount == 1 && initiator != null; - var options = new VoteOptions + var options = new VoteOptions + { + Title = Loc.GetString("ui-vote-restart-title"), + Options = { - Title = Loc.GetString("ui-vote-restart-title"), - Options = - { - (Loc.GetString("ui-vote-restart-yes"), "yes"), - (Loc.GetString("ui-vote-restart-no"), "no"), - (Loc.GetString("ui-vote-restart-abstain"), "abstain") - }, - Duration = alone - ? TimeSpan.FromSeconds(_cfg.GetCVar(CCVars.VoteTimerAlone)) - : TimeSpan.FromSeconds(_cfg.GetCVar(CCVars.VoteTimerRestart)), - InitiatorTimeout = TimeSpan.FromMinutes(5) - }; + (Loc.GetString("ui-vote-restart-yes"), "yes"), + (Loc.GetString("ui-vote-restart-no"), "no"), + (Loc.GetString("ui-vote-restart-abstain"), "abstain") + }, + Duration = alone + ? TimeSpan.FromSeconds(_cfg.GetCVar(CCVars.VoteTimerAlone)) + : TimeSpan.FromSeconds(_cfg.GetCVar(CCVars.VoteTimerRestart)), + InitiatorTimeout = TimeSpan.FromMinutes(5) + }; + + if (alone) + options.InitiatorTimeout = TimeSpan.FromSeconds(10); - if (alone) - options.InitiatorTimeout = TimeSpan.FromSeconds(10); + WirePresetVoteInitiator(options, initiator); - WirePresetVoteInitiator(options, initiator); + var vote = CreateVote(options); - var vote = CreateVote(options); + vote.OnFinished += (_, _) => + { + var votesYes = vote.VotesPerOption["yes"]; + var votesNo = vote.VotesPerOption["no"]; + var total = votesYes + votesNo; - vote.OnFinished += (_, _) => + var ratioRequired = _cfg.GetCVar(CCVars.VoteRestartRequiredRatio); + if (total > 0 && votesYes / (float) total >= ratioRequired) { - var votesYes = vote.VotesPerOption["yes"]; - var votesNo = vote.VotesPerOption["no"]; - var total = votesYes + votesNo; - - var ratioRequired = _cfg.GetCVar(CCVars.VoteRestartRequiredRatio); - if (total > 0 && votesYes / (float) total >= ratioRequired) + // Check if an admin is online, and ignore the passed vote if the cvar is enabled + if (_cfg.GetCVar(CCVars.VoteRestartNotAllowedWhenAdminOnline) && _adminMgr.ActiveAdmins.Count() != 0) { - // Check if an admin is online, and ignore the passed vote if the cvar is enabled - if (_cfg.GetCVar(CCVars.VoteRestartNotAllowedWhenAdminOnline) && _adminMgr.ActiveAdmins.Count() != 0) - { - _adminLogger.Add(LogType.Vote, LogImpact.Medium, $"Restart vote attempted to pass, but an admin was online. {votesYes}/{votesNo}"); - } - else // If the cvar is disabled or there's no admins on, proceed as normal - { - _adminLogger.Add(LogType.Vote, LogImpact.Medium, $"Restart vote succeeded: {votesYes}/{votesNo}"); - _chatManager.DispatchServerAnnouncement(Loc.GetString("ui-vote-restart-succeeded")); - var roundEnd = _entityManager.EntitySysManager.GetEntitySystem(); - roundEnd.EndRound(); - } + _adminLogger.Add(LogType.Vote, LogImpact.Medium, $"Restart vote attempted to pass, but an admin was online. {votesYes}/{votesNo}"); } - else + else // If the cvar is disabled or there's no admins on, proceed as normal { - _adminLogger.Add(LogType.Vote, LogImpact.Medium, $"Restart vote failed: {votesYes}/{votesNo}"); - _chatManager.DispatchServerAnnouncement( - Loc.GetString("ui-vote-restart-failed", ("ratio", ratioRequired))); + _adminLogger.Add(LogType.Vote, LogImpact.Medium, $"Restart vote succeeded: {votesYes}/{votesNo}"); + _chatManager.DispatchServerAnnouncement(Loc.GetString("ui-vote-restart-succeeded")); + var roundEnd = _entityManager.EntitySysManager.GetEntitySystem(); + roundEnd.EndRound(); } - }; - - if (initiator != null) + } + else { - // Cast yes vote if created the vote yourself. - vote.CastVote(initiator, 0); + _adminLogger.Add(LogType.Vote, LogImpact.Medium, $"Restart vote failed: {votesYes}/{votesNo}"); + _chatManager.DispatchServerAnnouncement( + Loc.GetString("ui-vote-restart-failed", ("ratio", ratioRequired))); } + }; - foreach (var player in _playerManager.Sessions) + if (initiator != null) + { + // Cast yes vote if created the vote yourself. + vote.CastVote(initiator, 0); + } + + foreach (var player in _playerManager.Sessions) + { + if (player != initiator) { - if (player != initiator) - { - // Everybody else defaults to an abstain vote to say they don't mind. - vote.CastVote(player, 2); - } + // Everybody else defaults to an abstain vote to say they don't mind. + vote.CastVote(player, 2); } + } } private void NotifyNotEnoughGhostPlayers(int ghostPercentageRequirement, int roundedGhostPercentage) @@ -275,6 +325,243 @@ private void CreateMapVote(ICommonSession? initiator) }; } + private async void CreateVotekickVote(ICommonSession? initiator, string[]? args) + { + if (args == null || args.Length <= 1) + { + return; + } + + if (_roleSystem == null) + _roleSystem = _entityManager.SystemOrNull(); + if (_votingSystem == null) + _votingSystem = _entityManager.SystemOrNull(); + + // Check that the initiator is actually allowed to do a votekick. + if (_votingSystem != null && !await _votingSystem.CheckVotekickInitEligibility(initiator)) + { + _logManager.GetSawmill("admin.votekick").Warning($"User {initiator} attempted a votekick, despite not being eligible to!"); + _adminLogger.Add(LogType.Vote, LogImpact.Extreme, $"Votekick attempted by {initiator}, but they are not eligible to votekick!"); + DirtyCanCallVoteAll(); + return; + } + + var eligibleVoterNumberRequirement = _cfg.GetCVar(CCVars.VotekickEligibleNumberRequirement); + var eligibleVoterNumber = _cfg.GetCVar(CCVars.VotekickVoterGhostRequirement) ? CalculateEligibleVoterNumber(VoterEligibility.GhostMinimumPlaytime) : CalculateEligibleVoterNumber(VoterEligibility.MinimumPlaytime); + + string target = args[0]; + string reason = args[1]; + + // Start by getting all relevant target data + var located = await _locator.LookupIdByNameOrIdAsync(target); + if (located == null) + { + _logManager.GetSawmill("admin.votekick") + .Warning($"Votekick attempted for player {target} but they couldn't be found!"); + _adminLogger.Add(LogType.Vote, LogImpact.Extreme, $"Votekick attempted by {initiator} for player string {target}, but they could not be found!"); + DirtyCanCallVoteAll(); + return; + } + var targetUid = located.UserId; + var targetHWid = located.LastHWId; + if (!_playerManager.TryGetSessionById(located.UserId, out ICommonSession? targetSession)) + { + _logManager.GetSawmill("admin.votekick") + .Warning($"Votekick attempted for player {target} but their session couldn't be found!"); + _adminLogger.Add(LogType.Vote, LogImpact.Extreme, $"Votekick attempted by {initiator} for player string {target}, but they could not be found!"); + DirtyCanCallVoteAll(); + return; + } + + string targetEntityName = located.Username; // Target's player-facing name when voting; uses the player's username as fallback if no entity name is found + if (targetSession.AttachedEntity is { Valid: true } attached && _votingSystem != null) + targetEntityName = _votingSystem.GetPlayerVoteListName(attached); + + var isAntagSafe = false; + var targetMind = targetSession.GetMind(); + var playtime = _playtimeManager.GetPlayTimes(targetSession); + + // Check whether the target is an antag, and if they are, give them protection against the Raider votekick if they have the requisite hours. + if (targetMind != null && + _roleSystem != null && + _roleSystem.MindIsAntagonist(targetMind) && + playtime.TryGetValue(PlayTimeTrackingShared.TrackerOverall, out TimeSpan overallTime) && + overallTime >= TimeSpan.FromHours(_cfg.GetCVar(CCVars.VotekickAntagRaiderProtection))) + { + isAntagSafe = true; + } + + + // Don't let a user votekick themselves + if (initiator == targetSession) + { + _adminLogger.Add(LogType.Vote, LogImpact.Extreme, $"Votekick attempted by {initiator} for themselves? Votekick cancelled."); + DirtyCanCallVoteAll(); + return; + } + + // Cancels the vote if there's not enough voters; only the person initiating the vote gets a return message. + if (eligibleVoterNumber < eligibleVoterNumberRequirement) + { + _adminLogger.Add(LogType.Vote, LogImpact.Extreme, $"Votekick attempted by {initiator} for player {targetSession}, but there were not enough ghost roles! {eligibleVoterNumberRequirement} required, {eligibleVoterNumber} found."); + if (initiator != null) + { + var message = Loc.GetString("ui-vote-votekick-not-enough-eligible", ("voters", eligibleVoterNumber.ToString()), ("requirement", eligibleVoterNumberRequirement.ToString())); + var wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", message)); + _chatManager.ChatMessageToOne(ChatChannel.Server, message, wrappedMessage, default, false, initiator.Channel); + } + DirtyCanCallVoteAll(); + return; + } + + // Check for stuff like the target being an admin. These targets shouldn't show up in the UI, but it's necessary to doublecheck in case someone writes the command in console. + if (_votingSystem != null && !_votingSystem.CheckVotekickTargetEligibility(targetSession)) + { + _adminLogger.Add(LogType.Vote, LogImpact.Extreme, $"Votekick attempted by {initiator} for player {targetSession}, but they are not eligible to be votekicked!"); + DirtyCanCallVoteAll(); + return; + } + + // Create the vote object + + string voteTitle = ""; + NetEntity? targetNetEntity = _entityManager.GetNetEntity(targetSession.AttachedEntity); + var initiatorName = initiator != null ? initiator.Name : Loc.GetString("ui-vote-votekick-unknown-initiator"); + + voteTitle = Loc.GetString("ui-vote-votekick-title", ("initiator", initiatorName), ("targetEntity", targetEntityName), ("reason", reason)); + + var options = new VoteOptions + { + Title = voteTitle, + Options = + { + (Loc.GetString("ui-vote-votekick-yes"), "yes"), + (Loc.GetString("ui-vote-votekick-no"), "no"), + (Loc.GetString("ui-vote-votekick-abstain"), "abstain") + }, + Duration = TimeSpan.FromSeconds(_cfg.GetCVar(CCVars.VotekickTimer)), + InitiatorTimeout = TimeSpan.FromMinutes(_cfg.GetCVar(CCVars.VotekickTimeout)), + VoterEligibility = _cfg.GetCVar(CCVars.VotekickVoterGhostRequirement) ? VoterEligibility.GhostMinimumPlaytime : VoterEligibility.MinimumPlaytime, + DisplayVotes = false, + TargetEntity = targetNetEntity + }; + + WirePresetVoteInitiator(options, initiator); + + var vote = CreateVote(options); + _adminLogger.Add(LogType.Vote, LogImpact.Extreme, $"Votekick for {located.Username} ({targetEntityName}) due to {reason} started, initiated by {initiator}."); + + // Create Discord webhook + var webhookState = _voteWebhooks.CreateWebhookIfConfigured(options, _cfg.GetCVar(CCVars.DiscordVotekickWebhook), Loc.GetString("votekick-webhook-name"), options.Title + "\n" + Loc.GetString("votekick-webhook-description", ("initiator", initiatorName), ("target", targetSession))); + + // Time out the vote now that we know it will happen + TimeoutStandardVote(StandardVoteType.Votekick); + + vote.OnFinished += (_, eventArgs) => + { + + var votesYes = vote.VotesPerOption["yes"]; + var votesNo = vote.VotesPerOption["no"]; + var total = votesYes + votesNo; + + // Get the voters, for logging purposes. + List yesVoters = new(); + List noVoters = new(); + foreach (var (voter, castVote) in vote.CastVotes) + { + if (castVote == 0) + { + yesVoters.Add(voter); + } + if (castVote == 1) + { + noVoters.Add(voter); + } + } + var yesVotersString = string.Join(", ", yesVoters); + var noVotersString = string.Join(", ", noVoters); + + var ratioRequired = _cfg.GetCVar(CCVars.VotekickRequiredRatio); + if (total > 0 && votesYes / (float)total >= ratioRequired) + { + // Some conditions that cancel the vote want to let the vote run its course first and then cancel it + // so we check for that here + + // Check if an admin is online, and ignore the vote if the cvar is enabled + if (_cfg.GetCVar(CCVars.VotekickNotAllowedWhenAdminOnline) && _adminMgr.ActiveAdmins.Count() != 0) + { + _adminLogger.Add(LogType.Vote, LogImpact.Extreme, $"Votekick for {located.Username} attempted to pass, but an admin was online. Yes: {votesYes} / No: {votesNo}. Yes: {yesVotersString} / No: {noVotersString}"); + AnnounceCancelledVotekickForVoters(targetEntityName); + _voteWebhooks.UpdateCancelledWebhookIfConfigured(webhookState, Loc.GetString("votekick-webhook-cancelled-admin-online")); + return; + } + // Check if the target is an antag and the vote reason is raiding (this is to prevent false positives) + else if (isAntagSafe && reason == VotekickReasonType.Raiding.ToString()) + { + _adminLogger.Add(LogType.Vote, LogImpact.Extreme, $"Votekick for {located.Username} due to {reason} finished, created by {initiator}, but was cancelled due to the target being an antagonist."); + AnnounceCancelledVotekickForVoters(targetEntityName); + _voteWebhooks.UpdateCancelledWebhookIfConfigured(webhookState, Loc.GetString("votekick-webhook-cancelled-antag-target")); + return; + } + // Check if the target is an admin/de-admined admin + else if (targetSession.AttachedEntity != null && _adminMgr.IsAdmin(targetSession.AttachedEntity.Value, true)) + { + _adminLogger.Add(LogType.Vote, LogImpact.Extreme, $"Votekick for {located.Username} due to {reason} finished, created by {initiator}, but was cancelled due to the target being a de-admined admin."); + AnnounceCancelledVotekickForVoters(targetEntityName); + _voteWebhooks.UpdateCancelledWebhookIfConfigured(webhookState, Loc.GetString("votekick-webhook-cancelled-admin-target")); + return; + } + else + { + _adminLogger.Add(LogType.Vote, LogImpact.Extreme, $"Votekick for {located.Username} succeeded: Yes: {votesYes} / No: {votesNo}. Yes: {yesVotersString} / No: {noVotersString}"); + _chatManager.DispatchServerAnnouncement(Loc.GetString("ui-vote-votekick-success", ("target", targetEntityName), ("reason", reason))); + + if (!Enum.TryParse(_cfg.GetCVar(CCVars.VotekickBanDefaultSeverity), out NoteSeverity severity)) + { + _logManager.GetSawmill("admin.votekick") + .Warning("Votekick ban severity could not be parsed from config! Defaulting to high."); + severity = NoteSeverity.High; + } + + // Discord webhook, success + _voteWebhooks.UpdateWebhookIfConfigured(webhookState, eventArgs); + + uint minutes = (uint)_cfg.GetCVar(CCVars.VotekickBanDuration); + + _bans.CreateServerBan(targetUid, target, null, null, targetHWid, minutes, severity, reason); + } + } + else + { + + // Discord webhook, failure + _voteWebhooks.UpdateWebhookIfConfigured(webhookState, eventArgs); + + _adminLogger.Add(LogType.Vote, LogImpact.Extreme, $"Votekick failed: Yes: {votesYes} / No: {votesNo}. Yes: {yesVotersString} / No: {noVotersString}"); + _chatManager.DispatchServerAnnouncement(Loc.GetString("ui-vote-votekick-failure", ("target", targetEntityName), ("reason", reason))); + } + }; + + if (initiator != null) + { + // Cast yes vote if created the vote yourself. + vote.CastVote(initiator, 0); + } + } + + private void AnnounceCancelledVotekickForVoters(string target) + { + foreach (var player in _playerManager.Sessions) + { + if (CheckVoterEligibility(player, VoterEligibility.GhostMinimumPlaytime)) + { + var message = Loc.GetString("ui-vote-votekick-server-cancelled", ("target", target)); + var wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", message)); + _chatManager.ChatMessageToOne(ChatChannel.Server, message, wrappedMessage, default, false, player.Channel); + } + } + } + private void TimeoutStandardVote(StandardVoteType type) { var timeout = TimeSpan.FromSeconds(_cfg.GetCVar(CCVars.VoteSameTypeTimeout)); diff --git a/Content.Server/Voting/Managers/VoteManager.cs b/Content.Server/Voting/Managers/VoteManager.cs index edb11f0bdb5..04e31916482 100644 --- a/Content.Server/Voting/Managers/VoteManager.cs +++ b/Content.Server/Voting/Managers/VoteManager.cs @@ -11,6 +11,8 @@ using Content.Shared.Administration; using Content.Shared.CCVar; using Content.Shared.Database; +using Content.Shared.Ghost; +using Content.Shared.Players.PlayTimeTracking; using Content.Shared.Voting; using Robust.Server.Player; using Robust.Shared.Configuration; @@ -38,6 +40,7 @@ public sealed partial class VoteManager : IVoteManager [Dependency] private readonly IGameMapManager _gameMapManager = default!; [Dependency] private readonly IEntityManager _entityManager = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!; + [Dependency] private readonly ISharedPlaytimeManager _playtimeManager = default!; private int _nextVoteId = 1; @@ -209,7 +212,7 @@ public IVoteHandle CreateVote(VoteOptions options) var start = _timing.RealTime; var end = start + options.Duration; var reg = new VoteReg(id, entries, options.Title, options.InitiatorText, - options.InitiatorPlayer, start, end); + options.InitiatorPlayer, start, end, options.VoterEligibility, options.DisplayVotes, options.TargetEntity); var handle = new VoteHandle(this, reg); @@ -245,12 +248,24 @@ private void SendSingleUpdate(VoteReg v, ICommonSession player) msg.VoteId = v.Id; msg.VoteActive = !v.Finished; + if (!CheckVoterEligibility(player, v.VoterEligibility)) + { + msg.VoteActive = false; + player.Channel.SendMessage(msg); + return; + } + if (!v.Finished) { msg.VoteTitle = v.Title; msg.VoteInitiator = v.InitiatorText; msg.StartTime = v.StartTime; msg.EndTime = v.EndTime; + + if (v.TargetEntity != null) + { + msg.TargetEntity = v.TargetEntity.Value.Id; + } } if (v.CastVotes.TryGetValue(player, out var cast)) @@ -266,11 +281,17 @@ private void SendSingleUpdate(VoteReg v, ICommonSession player) } } + // Admin always see the vote count, even if the vote is set to hide it. + if (_adminMgr.HasAdminFlag(player, AdminFlags.Moderator)) + { + msg.DisplayVotes = true; + } + msg.Options = new (ushort votes, string name)[v.Entries.Length]; for (var i = 0; i < msg.Options.Length; i++) { ref var entry = ref v.Entries[i]; - msg.Options[i] = ((ushort) entry.Votes, entry.Text); + msg.Options[i] = (msg.DisplayVotes ? (ushort) entry.Votes : (ushort) 0, entry.Text); } player.Channel.SendMessage(msg); @@ -362,6 +383,16 @@ private void EndVote(VoteReg v) return; } + // Remove ineligible votes that somehow slipped through + foreach (var playerVote in v.CastVotes) + { + if (!CheckVoterEligibility(playerVote.Key, v.VoterEligibility)) + { + v.Entries[playerVote.Value].Votes -= 1; + v.CastVotes.Remove(playerVote.Key); + } + } + // Find winner or stalemate. var winners = v.Entries .GroupBy(e => e.Votes) @@ -395,6 +426,37 @@ private void CancelVote(VoteReg v) DirtyCanCallVoteAll(); } + public bool CheckVoterEligibility(ICommonSession player, VoterEligibility eligibility) + { + if (eligibility == VoterEligibility.All) + return true; + + if (eligibility == VoterEligibility.Ghost || eligibility == VoterEligibility.GhostMinimumPlaytime) + { + if (!_entityManager.TryGetComponent(player.AttachedEntity, out GhostComponent? ghostComp)) + return false; + + if (eligibility == VoterEligibility.GhostMinimumPlaytime) + { + var playtime = _playtimeManager.GetPlayTimes(player); + if (!playtime.TryGetValue(PlayTimeTrackingShared.TrackerOverall, out TimeSpan overallTime) || overallTime < TimeSpan.FromHours(_cfg.GetCVar(CCVars.VotekickEligibleVoterPlaytime))) + return false; + + if ((int)_timing.RealTime.Subtract(ghostComp.TimeOfDeath).TotalSeconds < _cfg.GetCVar(CCVars.VotekickEligibleVoterDeathtime)) + return false; + } + } + + if (eligibility == VoterEligibility.MinimumPlaytime) + { + var playtime = _playtimeManager.GetPlayTimes(player); + if (!playtime.TryGetValue(PlayTimeTrackingShared.TrackerOverall, out TimeSpan overallTime) || overallTime < TimeSpan.FromHours(_cfg.GetCVar(CCVars.VotekickEligibleVoterPlaytime))) + return false; + } + + return true; + } + public IEnumerable ActiveVotes => _voteHandles.Values; public bool TryGetVote(int voteId, [NotNullWhen(true)] out IVoteHandle? vote) @@ -442,6 +504,9 @@ private sealed class VoteReg public readonly TimeSpan StartTime; public readonly TimeSpan EndTime; public readonly HashSet VotesDirty = new(); + public readonly VoterEligibility VoterEligibility; + public readonly bool DisplayVotes; + public readonly NetEntity? TargetEntity; public bool Cancelled; public bool Finished; @@ -452,7 +517,7 @@ private sealed class VoteReg public ICommonSession? Initiator { get; } public VoteReg(int id, VoteEntry[] entries, string title, string initiatorText, - ICommonSession? initiator, TimeSpan start, TimeSpan end) + ICommonSession? initiator, TimeSpan start, TimeSpan end, VoterEligibility voterEligibility, bool displayVotes, NetEntity? targetEntity) { Id = id; Entries = entries; @@ -461,6 +526,9 @@ public VoteReg(int id, VoteEntry[] entries, string title, string initiatorText, Initiator = initiator; StartTime = start; EndTime = end; + VoterEligibility = voterEligibility; + DisplayVotes = displayVotes; + TargetEntity = targetEntity; } } @@ -478,6 +546,14 @@ public VoteEntry(object data, string text) } } + public enum VoterEligibility + { + All, + Ghost, // Player needs to be a ghost + GhostMinimumPlaytime, // Player needs to be a ghost, with a minimum playtime and deathtime as defined by votekick CCvars. + MinimumPlaytime //Player needs to have a minimum playtime and deathtime as defined by votekick CCvars. + } + #endregion #region IVoteHandle API surface @@ -492,6 +568,7 @@ private sealed class VoteHandle : IVoteHandle public string InitiatorText => _reg.InitiatorText; public bool Finished => _reg.Finished; public bool Cancelled => _reg.Cancelled; + public IReadOnlyDictionary CastVotes => _reg.CastVotes; public IReadOnlyDictionary VotesPerOption { get; } diff --git a/Content.Server/Voting/VoteCommands.cs b/Content.Server/Voting/VoteCommands.cs index c5ceccfc11f..d4c236f3945 100644 --- a/Content.Server/Voting/VoteCommands.cs +++ b/Content.Server/Voting/VoteCommands.cs @@ -1,11 +1,8 @@ using System.Linq; -using System.Text.Json; -using System.Text.Json.Nodes; using Content.Server.Administration; using Content.Server.Administration.Logs; using Content.Server.Chat.Managers; -using Content.Server.Discord; -using Content.Server.GameTicking; +using Content.Server.Discord.WebhookMessages; using Content.Server.Voting.Managers; using Content.Shared.Administration; using Content.Shared.CCVar; @@ -29,11 +26,17 @@ public sealed class CreateVoteCommand : IConsoleCommand public void Execute(IConsoleShell shell, string argStr, string[] args) { - if (args.Length != 1) + if (args.Length != 1 && args[0] != StandardVoteType.Votekick.ToString()) { shell.WriteError(Loc.GetString("shell-need-exactly-one-argument")); return; } + if (args.Length != 3 && args[0] == StandardVoteType.Votekick.ToString()) + { + shell.WriteError(Loc.GetString("shell-wrong-arguments-number-need-specific", ("properAmount", 3), ("currentAmount", args.Length))); + return; + } + if (!Enum.TryParse(args[0], ignoreCase: true, out var type)) { @@ -50,7 +53,7 @@ public void Execute(IConsoleShell shell, string argStr, string[] args) return; } - mgr.CreateStandardVote(shell.Player, type); + mgr.CreateStandardVote(shell.Player, type, args.Skip(1).ToArray()); } public CompletionResult GetCompletion(IConsoleShell shell, string[] args) @@ -70,11 +73,9 @@ public sealed class CreateCustomCommand : LocalizedEntityCommands { [Dependency] private readonly IVoteManager _voteManager = default!; [Dependency] private readonly IAdminLogManager _adminLogger = default!; - [Dependency] private readonly IConfigurationManager _cfg = default!; - [Dependency] private readonly DiscordWebhook _discord = default!; - [Dependency] private readonly GameTicker _gameTicker = default!; - [Dependency] private readonly IBaseServer _baseServer = default!; [Dependency] private readonly IChatManager _chatManager = default!; + [Dependency] private readonly VoteWebhooks _voteWebhooks = default!; + [Dependency] private readonly IConfigurationManager _cfg = default!; private ISawmill _sawmill = default!; @@ -114,7 +115,7 @@ public override void Execute(IConsoleShell shell, string argStr, string[] args) var vote = _voteManager.CreateVote(options); - var webhookState = CreateWebhookIfConfigured(options); + var webhookState = _voteWebhooks.CreateWebhookIfConfigured(options, _cfg.GetCVar(CCVars.DiscordVoteWebhook)); vote.OnFinished += (_, eventArgs) => { @@ -130,12 +131,12 @@ public override void Execute(IConsoleShell shell, string argStr, string[] args) _chatManager.DispatchServerAnnouncement(Loc.GetString("cmd-customvote-on-finished-win", ("winner", args[(int) eventArgs.Winner]))); } - UpdateWebhookIfConfigured(webhookState, eventArgs); + _voteWebhooks.UpdateWebhookIfConfigured(webhookState, eventArgs); }; vote.OnCancelled += _ => { - UpdateCancelledWebhookIfConfigured(webhookState); + _voteWebhooks.UpdateCancelledWebhookIfConfigured(webhookState); }; } @@ -150,159 +151,6 @@ public override CompletionResult GetCompletion(IConsoleShell shell, string[] arg var n = args.Length - 1; return CompletionResult.FromHint(Loc.GetString("cmd-customvote-arg-option-n", ("n", n))); } - - private WebhookState? CreateWebhookIfConfigured(VoteOptions voteOptions) - { - // All this webhook code is complete garbage. - // I tried to clean it up somewhat, at least to fix the glaring bugs in it. - // Jesus christ man what is with our code review process. - - var webhookUrl = _cfg.GetCVar(CCVars.DiscordVoteWebhook); - if (string.IsNullOrEmpty(webhookUrl)) - return null; - - // Set up the webhook payload - var serverName = _baseServer.ServerName; - - var fields = new List(); - - foreach (var voteOption in voteOptions.Options) - { - var newVote = new WebhookEmbedField - { - Name = voteOption.text, - Value = Loc.GetString("custom-vote-webhook-option-pending") - }; - fields.Add(newVote); - } - - var runLevel = Loc.GetString($"game-run-level-{_gameTicker.RunLevel}"); - - var payload = new WebhookPayload() - { - Username = Loc.GetString("custom-vote-webhook-name"), - Embeds = new List - { - new() - { - Title = voteOptions.InitiatorText, - Color = 13438992, // #CD1010 - Description = voteOptions.Title, - Footer = new WebhookEmbedFooter - { - Text = Loc.GetString( - "custom-vote-webhook-footer", - ("serverName", serverName), - ("roundId", _gameTicker.RoundId), - ("runLevel", runLevel)), - }, - - Fields = fields, - }, - }, - }; - - var state = new WebhookState - { - WebhookUrl = webhookUrl, - Payload = payload, - }; - - CreateWebhookMessage(state, payload); - - return state; - } - - private void UpdateWebhookIfConfigured(WebhookState? state, VoteFinishedEventArgs finished) - { - if (state == null) - return; - - var embed = state.Payload.Embeds![0]; - embed.Color = 2353993; // #23EB49 - - for (var i = 0; i < finished.Votes.Count; i++) - { - var oldName = embed.Fields[i].Name; - var newValue = finished.Votes[i].ToString(); - embed.Fields[i] = new WebhookEmbedField { Name = oldName, Value = newValue, Inline = true}; - } - - state.Payload.Embeds[0] = embed; - - UpdateWebhookMessage(state, state.Payload, state.MessageId); - } - - private void UpdateCancelledWebhookIfConfigured(WebhookState? state) - { - if (state == null) - return; - - var embed = state.Payload.Embeds![0]; - embed.Color = 13356304; // #CBCD10 - embed.Description += "\n\n" + Loc.GetString("custom-vote-webhook-cancelled"); - - for (var i = 0; i < embed.Fields.Count; i++) - { - var oldName = embed.Fields[i].Name; - embed.Fields[i] = new WebhookEmbedField { Name = oldName, Value = Loc.GetString("custom-vote-webhook-option-cancelled"), Inline = true}; - } - - state.Payload.Embeds[0] = embed; - - UpdateWebhookMessage(state, state.Payload, state.MessageId); - } - - // Sends the payload's message. - private async void CreateWebhookMessage(WebhookState state, WebhookPayload payload) - { - try - { - if (await _discord.GetWebhook(state.WebhookUrl) is not { } identifier) - return; - - state.Identifier = identifier.ToIdentifier(); - - _sawmill.Debug(JsonSerializer.Serialize(payload)); - - var request = await _discord.CreateMessage(identifier.ToIdentifier(), payload); - var content = await request.Content.ReadAsStringAsync(); - state.MessageId = ulong.Parse(JsonNode.Parse(content)?["id"]!.GetValue()!); - } - catch (Exception e) - { - _sawmill.Error($"Error while sending vote webhook to Discord: {e}"); - } - } - - // Edits a pre-existing payload message, given an ID - private async void UpdateWebhookMessage(WebhookState state, WebhookPayload payload, ulong id) - { - if (state.MessageId == 0) - { - _sawmill.Warning("Failed to deliver update to custom vote webhook: message ID was zero. This likely indicates a previous connection error sending the original message."); - return; - } - - DebugTools.Assert(state.Identifier != default); - - try - { - await _discord.EditMessage(state.Identifier, id, payload); - } - catch (Exception e) - { - _sawmill.Error($"Error while updating vote webhook on Discord: {e}"); - } - } - - private sealed class WebhookState - { - public required string WebhookUrl; - public required WebhookPayload Payload; - public WebhookIdentifier Identifier; - public ulong MessageId; - } } [AnyCommand] diff --git a/Content.Server/Voting/VoteOptions.cs b/Content.Server/Voting/VoteOptions.cs index 5475d10d329..e0647fb2d0f 100644 --- a/Content.Server/Voting/VoteOptions.cs +++ b/Content.Server/Voting/VoteOptions.cs @@ -1,6 +1,6 @@ +using Content.Server.Voting.Managers; using Robust.Shared.Player; - namespace Content.Server.Voting { /// @@ -39,6 +39,21 @@ public sealed class VoteOptions /// public List<(string text, object data)> Options { get; set; } = new(); + /// + /// Which sessions may send a vote. Used when only a subset of players should be able to vote. Defaults to all. + /// + public VoteManager.VoterEligibility VoterEligibility = VoteManager.VoterEligibility.All; + + /// + /// Whether the vote should send and display the number of votes to the clients. Being an admin defaults this option to true for your client. + /// + public bool DisplayVotes = true; + + /// + /// Whether the vote should have an entity attached to it, to be used for things like letting ghosts follow it. + /// + public NetEntity? TargetEntity = null; + /// /// Sets and /// by setting the latter to the player's name. diff --git a/Content.Server/Voting/VotingSystem.cs b/Content.Server/Voting/VotingSystem.cs new file mode 100644 index 00000000000..25475c2157a --- /dev/null +++ b/Content.Server/Voting/VotingSystem.cs @@ -0,0 +1,122 @@ +using Content.Server.Administration.Managers; +using Content.Server.Database; +using Content.Server.Ghost; +using Content.Server.Roles.Jobs; +using Content.Shared.CCVar; +using Content.Shared.Ghost; +using Content.Shared.Mind.Components; +using Content.Shared.Voting; +using Robust.Server.Player; +using Robust.Shared.Configuration; +using Robust.Shared.Network; +using Robust.Shared.Player; +using Robust.Shared.Timing; +using System.Threading.Tasks; + +namespace Content.Server.Voting; + +public sealed class VotingSystem : EntitySystem +{ + + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly IAdminManager _adminManager = default!; + [Dependency] private readonly IServerDbManager _dbManager = default!; + [Dependency] private readonly IGameTiming _gameTiming = default!; + [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] private readonly JobSystem _jobs = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeNetworkEvent(OnVotePlayerListRequestEvent); + } + + private async void OnVotePlayerListRequestEvent(VotePlayerListRequestEvent msg, EntitySessionEventArgs args) + { + if (args.SenderSession.AttachedEntity is not { Valid: true } entity + || !await CheckVotekickInitEligibility(args.SenderSession)) + { + var deniedResponse = new VotePlayerListResponseEvent(new (NetUserId, NetEntity, string)[0], true); + RaiseNetworkEvent(deniedResponse, args.SenderSession.Channel); + return; + } + + List<(NetUserId, NetEntity, string)> players = new(); + + foreach (var player in _playerManager.Sessions) + { + if (player.AttachedEntity is not { Valid: true } attached) + continue; + + if (attached == entity) continue; + + if (_adminManager.IsAdmin(player, false)) continue; + + var playerName = GetPlayerVoteListName(attached); + var netEntity = GetNetEntity(attached); + + players.Add((player.UserId, netEntity, playerName)); + } + + var response = new VotePlayerListResponseEvent(players.ToArray(), false); + RaiseNetworkEvent(response, args.SenderSession.Channel); + } + + public string GetPlayerVoteListName(EntityUid attached) + { + TryComp(attached, out var mind); + + var jobName = _jobs.MindTryGetJobName(mind?.Mind); + var playerInfo = $"{Comp(attached).EntityName} ({jobName})"; + + return playerInfo; + } + + /// + /// Used to check whether the player initiating a votekick is allowed to do so serverside. + /// + /// The session initiating the votekick. + public async Task CheckVotekickInitEligibility(ICommonSession? initiator) + { + if (initiator == null) + return false; + + // Being an admin overrides the votekick eligibility + if (initiator.AttachedEntity != null && _adminManager.IsAdmin(initiator.AttachedEntity.Value, false)) + return true; + + if (_cfg.GetCVar(CCVars.VotekickInitiatorGhostRequirement)) + { + // Must be ghost + if (!TryComp(initiator.AttachedEntity, out GhostComponent? ghostComp)) + return false; + + // Must have been dead for x seconds + if ((int)_gameTiming.RealTime.Subtract(ghostComp.TimeOfDeath).TotalSeconds < _cfg.GetCVar(CCVars.VotekickEligibleVoterDeathtime)) + return false; + } + + // Must be whitelisted + if (!await _dbManager.GetWhitelistStatusAsync(initiator.UserId)) + return false; + + return true; + } + + /// + /// Used to check whether the player being targetted for a votekick is a valid target. + /// + /// The session being targetted for a votekick. + public bool CheckVotekickTargetEligibility(ICommonSession? target) + { + if (target == null) + return false; + + // Admins can't be votekicked + if (target.AttachedEntity != null && _adminManager.IsAdmin(target.AttachedEntity.Value)) + return false; + + return true; + } +} diff --git a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs index 190a2d0263e..ec462ae23e8 100644 --- a/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs +++ b/Content.Server/Weapons/Melee/MeleeWeaponSystem.cs @@ -56,8 +56,14 @@ private void OnMeleeExamineDamage(EntityUid uid, MeleeWeaponComponent component, _damageExamine.AddDamageExamine(args.Message, damageSpec, Loc.GetString("damage-melee")); } - protected override bool ArcRaySuccessful(EntityUid targetUid, Vector2 position, Angle angle, Angle arcWidth, float range, MapId mapId, - EntityUid ignore, ICommonSession? session) + protected override bool ArcRaySuccessful(EntityUid targetUid, + Vector2 position, + Angle angle, + Angle arcWidth, + float range, + MapId mapId, + EntityUid ignore, + ICommonSession? session) { // Originally the client didn't predict damage effects so you'd intuit some level of how far // in the future you'd need to predict, but then there was a lot of complaining like "why would you add artifical delay" as if ping is a choice. diff --git a/Content.Server/Worldgen/Systems/Debris/BlobFloorPlanBuilderSystem.cs b/Content.Server/Worldgen/Systems/Debris/BlobFloorPlanBuilderSystem.cs index a09416e5937..ba0a3a7132e 100644 --- a/Content.Server/Worldgen/Systems/Debris/BlobFloorPlanBuilderSystem.cs +++ b/Content.Server/Worldgen/Systems/Debris/BlobFloorPlanBuilderSystem.cs @@ -15,6 +15,7 @@ public sealed class BlobFloorPlanBuilderSystem : BaseWorldSystem [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly ITileDefinitionManager _tileDefinition = default!; [Dependency] private readonly TileSystem _tiles = default!; + [Dependency] private readonly SharedMapSystem _map = default!; /// public override void Initialize() @@ -25,10 +26,10 @@ public override void Initialize() private void OnBlobFloorPlanBuilderStartup(EntityUid uid, BlobFloorPlanBuilderComponent component, ComponentStartup args) { - PlaceFloorplanTiles(component, Comp(uid)); + PlaceFloorplanTiles(uid, component, Comp(uid)); } - private void PlaceFloorplanTiles(BlobFloorPlanBuilderComponent comp, MapGridComponent grid) + private void PlaceFloorplanTiles(EntityUid gridUid, BlobFloorPlanBuilderComponent comp, MapGridComponent grid) { // NO MORE THAN TWO ALLOCATIONS THANK YOU VERY MUCH. // TODO: Just put these on a field instead then? @@ -82,7 +83,7 @@ void PlaceTile(Vector2i point) } } - grid.SetTiles(taken.Select(x => (x.Key, x.Value)).ToList()); + _map.SetTiles(gridUid, grid, taken.Select(x => (x.Key, x.Value)).ToList()); } } diff --git a/Content.Server/Worldgen/Systems/Debris/SimpleFloorPlanPopulatorSystem.cs b/Content.Server/Worldgen/Systems/Debris/SimpleFloorPlanPopulatorSystem.cs index ae1c6b5c006..a575e055ef8 100644 --- a/Content.Server/Worldgen/Systems/Debris/SimpleFloorPlanPopulatorSystem.cs +++ b/Content.Server/Worldgen/Systems/Debris/SimpleFloorPlanPopulatorSystem.cs @@ -13,6 +13,7 @@ public sealed class SimpleFloorPlanPopulatorSystem : BaseWorldSystem { [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly ITileDefinitionManager _tileDefinition = default!; + [Dependency] private readonly SharedMapSystem _map = default!; /// public override void Initialize() @@ -25,7 +26,7 @@ private void OnFloorPlanBuilt(EntityUid uid, SimpleFloorPlanPopulatorComponent c { var placeables = new List(4); var grid = Comp(uid); - var enumerator = grid.GetAllTilesEnumerator(); + var enumerator = _map.GetAllTilesEnumerator(uid, grid); while (enumerator.MoveNext(out var tile)) { var coords = grid.GridTileToLocal(tile.Value.GridIndices); diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/PortalArtifactSystem.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/PortalArtifactSystem.cs index e44ee6baa12..b1a08fb5056 100644 --- a/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/PortalArtifactSystem.cs +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/Effects/Systems/PortalArtifactSystem.cs @@ -2,6 +2,8 @@ using Content.Server.Xenoarchaeology.XenoArtifacts.Events; using Content.Shared.Mind.Components; using Content.Shared.Teleportation.Systems; +using Robust.Shared.Collections; +using Robust.Shared.Containers; using Robust.Shared.Random; namespace Content.Server.Xenoarchaeology.XenoArtifacts.Effects.Systems; @@ -11,6 +13,7 @@ public sealed class PortalArtifactSystem : EntitySystem [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly LinkedEntitySystem _link = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly SharedContainerSystem _container = default!; public override void Initialize() { @@ -21,21 +24,28 @@ public override void Initialize() private void OnActivate(Entity artifact, ref ArtifactActivatedEvent args) { var map = Transform(artifact).MapID; - var firstPortal = Spawn(artifact.Comp.PortalProto, _transform.GetMapCoordinates(artifact)); - - var minds = new List(); - var mindQuery = EntityQueryEnumerator(); - while (mindQuery.MoveNext(out var uid, out var mc, out var xform)) + var validMinds = new ValueList(); + var mindQuery = EntityQueryEnumerator(); + while (mindQuery.MoveNext(out var uid, out var mc, out var xform, out var meta)) { - if (mc.HasMind && xform.MapID == map) - minds.Add(uid); + // check if the MindContainer has a Mind and if the entity is not in a container (this also auto excludes AI) and if they are on the same map + if (mc.HasMind && !_container.IsEntityOrParentInContainer(uid, meta: meta, xform: xform) && xform.MapID == map) + { + validMinds.Add(uid); + } } + //this would only be 0 if there were a station full of AIs and no one else, in that case just stop this function + if (validMinds.Count == 0) + return; + + var firstPortal = Spawn(artifact.Comp.PortalProto, _transform.GetMapCoordinates(artifact)); + + var target = _random.Pick(validMinds); - var target = _random.Pick(minds); var secondPortal = Spawn(artifact.Comp.PortalProto, _transform.GetMapCoordinates(target)); //Manual position swapping, because the portal that opens doesn't trigger a collision, and doesn't teleport targets the first time. - _transform.SwapPositions(target, secondPortal); + _transform.SwapPositions(target, artifact.Owner); _link.TryLink(firstPortal, secondPortal, true); } diff --git a/Content.Server/Zombies/ZombieSystem.Transform.cs b/Content.Server/Zombies/ZombieSystem.Transform.cs index 95d63ab938f..852e3182c3c 100644 --- a/Content.Server/Zombies/ZombieSystem.Transform.cs +++ b/Content.Server/Zombies/ZombieSystem.Transform.cs @@ -12,7 +12,6 @@ using Content.Server.NPC; using Content.Server.NPC.HTN; using Content.Server.NPC.Systems; -using Content.Server.Roles; using Content.Server.Speech.Components; using Content.Server.Temperature.Components; using Content.Shared.Abilities.Psionics; @@ -49,18 +48,18 @@ namespace Content.Server.Zombies; /// public sealed partial class ZombieSystem { - [Dependency] private readonly SharedHandsSystem _hands = default!; - [Dependency] private readonly ServerInventorySystem _inventory = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly IChatManager _chatMan = default!; + [Dependency] private readonly SharedCombatModeSystem _combat = default!; [Dependency] private readonly NpcFactionSystem _faction = default!; - [Dependency] private readonly NPCSystem _npc = default!; + [Dependency] private readonly SharedHandsSystem _hands = default!; [Dependency] private readonly HumanoidAppearanceSystem _humanoidAppearance = default!; [Dependency] private readonly IdentitySystem _identity = default!; - [Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifier = default!; - [Dependency] private readonly SharedCombatModeSystem _combat = default!; - [Dependency] private readonly IChatManager _chatMan = default!; + [Dependency] private readonly ServerInventorySystem _inventory = default!; [Dependency] private readonly MindSystem _mind = default!; + [Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifier = default!; + [Dependency] private readonly NPCSystem _npc = default!; [Dependency] private readonly SharedRoleSystem _roles = default!; - [Dependency] private readonly SharedAudioSystem _audio = default!; /// /// Handles an entity turning into a zombie when they die or go into crit @@ -249,7 +248,7 @@ public void ZombifyEntity(EntityUid target, MobStateComponent? mobState = null) if (hasMind && _mind.TryGetSession(mindId, out var session)) { //Zombie role for player manifest - _roles.MindAddRole(mindId, new ZombieRoleComponent { PrototypeId = zombiecomp.ZombieRoleId }); + _roles.MindAddRole(mindId, "MindRoleZombie", mind: null, silent: true); //Greeting message for new bebe zombers _chatMan.DispatchServerMessage(session, Loc.GetString("zombie-infection-greeting")); diff --git a/Content.Shared/APC/SharedApc.cs b/Content.Shared/APC/SharedApc.cs index bf9fdc9444b..802c06a6ab6 100644 --- a/Content.Shared/APC/SharedApc.cs +++ b/Content.Shared/APC/SharedApc.cs @@ -178,15 +178,13 @@ public enum ApcChargeState : sbyte public sealed class ApcBoundInterfaceState : BoundUserInterfaceState, IEquatable { public readonly bool MainBreaker; - public readonly bool HasAccess; public readonly int Power; public readonly ApcExternalPowerState ApcExternalPower; public readonly float Charge; - public ApcBoundInterfaceState(bool mainBreaker, bool hasAccess, int power, ApcExternalPowerState apcExternalPower, float charge) + public ApcBoundInterfaceState(bool mainBreaker, int power, ApcExternalPowerState apcExternalPower, float charge) { MainBreaker = mainBreaker; - HasAccess = hasAccess; Power = power; ApcExternalPower = apcExternalPower; Charge = charge; @@ -197,7 +195,6 @@ public bool Equals(ApcBoundInterfaceState? other) if (ReferenceEquals(null, other)) return false; if (ReferenceEquals(this, other)) return true; return MainBreaker == other.MainBreaker && - HasAccess == other.HasAccess && Power == other.Power && ApcExternalPower == other.ApcExternalPower && MathHelper.CloseTo(Charge, other.Charge); @@ -210,7 +207,7 @@ public override bool Equals(object? obj) public override int GetHashCode() { - return HashCode.Combine(MainBreaker, HasAccess, Power, (int) ApcExternalPower, Charge); + return HashCode.Combine(MainBreaker, Power, (int) ApcExternalPower, Charge); } } diff --git a/Content.Shared/Access/Components/IdCardComponent.cs b/Content.Shared/Access/Components/IdCardComponent.cs index ccd4cccbe7b..e80ced64643 100644 --- a/Content.Shared/Access/Components/IdCardComponent.cs +++ b/Content.Shared/Access/Components/IdCardComponent.cs @@ -20,7 +20,12 @@ public sealed partial class IdCardComponent : Component [DataField] [AutoNetworkedField] [Access(typeof(SharedIdCardSystem), typeof(SharedPdaSystem), typeof(SharedAgentIdCardSystem), Other = AccessPermissions.ReadWrite)] - public string? JobTitle; + public LocId? JobTitle; + + private string? _jobTitle; + + [Access(typeof(SharedIdCardSystem), typeof(SharedPdaSystem), typeof(SharedAgentIdCardSystem), Other = AccessPermissions.ReadWriteExecute)] + public string? LocalizedJobTitle { set => _jobTitle = value; get => _jobTitle ?? Loc.GetString(JobTitle ?? string.Empty); } /// /// The state of the job icon rsi. diff --git a/Content.Shared/Access/Systems/IdExaminableSystem.cs b/Content.Shared/Access/Systems/IdExaminableSystem.cs index 13359adcba2..807ccc6616d 100644 --- a/Content.Shared/Access/Systems/IdExaminableSystem.cs +++ b/Content.Shared/Access/Systems/IdExaminableSystem.cs @@ -67,7 +67,7 @@ public string GetMessage(EntityUid uid) private string GetNameAndJob(IdCardComponent id) { - var jobSuffix = string.IsNullOrWhiteSpace(id.JobTitle) ? string.Empty : $" ({id.JobTitle})"; + var jobSuffix = string.IsNullOrWhiteSpace(id.LocalizedJobTitle) ? string.Empty : $" ({id.LocalizedJobTitle})"; var val = string.IsNullOrWhiteSpace(id.FullName) ? Loc.GetString(id.NameLocId, diff --git a/Content.Shared/Access/Systems/SharedIdCardSystem.cs b/Content.Shared/Access/Systems/SharedIdCardSystem.cs index 8bdc548e353..a5a37eecbd0 100644 --- a/Content.Shared/Access/Systems/SharedIdCardSystem.cs +++ b/Content.Shared/Access/Systems/SharedIdCardSystem.cs @@ -116,6 +116,7 @@ public bool TryGetIdCard(EntityUid uid, out Entity idCard) /// /// /// If provided with a player's EntityUid to the player parameter, adds the change to the admin logs. + /// Actually works with the LocalizedJobTitle DataField and not with JobTitle. /// public bool TryChangeJobTitle(EntityUid uid, string? jobTitle, IdCardComponent? id = null, EntityUid? player = null) { @@ -134,9 +135,9 @@ public bool TryChangeJobTitle(EntityUid uid, string? jobTitle, IdCardComponent? jobTitle = null; } - if (id.JobTitle == jobTitle) + if (id.LocalizedJobTitle == jobTitle) return true; - id.JobTitle = jobTitle; + id.LocalizedJobTitle = jobTitle; Dirty(uid, id); UpdateEntityName(uid, id); @@ -238,7 +239,7 @@ private void UpdateEntityName(EntityUid uid, IdCardComponent? id = null) if (!Resolve(uid, ref id)) return; - var jobSuffix = string.IsNullOrWhiteSpace(id.JobTitle) ? string.Empty : $" ({id.JobTitle})"; + var jobSuffix = string.IsNullOrWhiteSpace(id.LocalizedJobTitle) ? string.Empty : $" ({id.LocalizedJobTitle})"; var val = string.IsNullOrWhiteSpace(id.FullName) ? Loc.GetString(id.NameLocId, @@ -251,7 +252,7 @@ private void UpdateEntityName(EntityUid uid, IdCardComponent? id = null) private static string ExtractFullTitle(IdCardComponent idCardComponent) { - return $"{idCardComponent.FullName} ({CultureInfo.CurrentCulture.TextInfo.ToTitleCase(idCardComponent.JobTitle ?? string.Empty)})" + return $"{idCardComponent.FullName} ({CultureInfo.CurrentCulture.TextInfo.ToTitleCase(idCardComponent.LocalizedJobTitle ?? string.Empty)})" .Trim(); } } diff --git a/Content.Shared/Actions/BaseActionComponent.cs b/Content.Shared/Actions/BaseActionComponent.cs index 9156f747f5c..01452bdc72e 100644 --- a/Content.Shared/Actions/BaseActionComponent.cs +++ b/Content.Shared/Actions/BaseActionComponent.cs @@ -40,6 +40,16 @@ public abstract partial class BaseActionComponent : Component /// [DataField("iconColor")] public Color IconColor = Color.White; + /// + /// The original this action was. + /// + [DataField] public Color OriginalIconColor; + + /// + /// The color the action should turn to when disabled + /// + [DataField] public Color DisabledIconColor = Color.DimGray; + /// /// Keywords that can be used to search for this action in the action menu. /// @@ -179,6 +189,8 @@ public abstract class BaseActionComponentState : ComponentState public SpriteSpecifier? Icon; public SpriteSpecifier? IconOn; public Color IconColor; + public Color OriginalIconColor; + public Color DisabledIconColor; public HashSet Keywords; public bool Enabled; public bool Toggled; @@ -209,6 +221,8 @@ protected BaseActionComponentState(BaseActionComponent component, IEntityManager Icon = component.Icon; IconOn = component.IconOn; IconColor = component.IconColor; + OriginalIconColor = component.OriginalIconColor; + DisabledIconColor = component.DisabledIconColor; Keywords = component.Keywords; Enabled = component.Enabled; Toggled = component.Toggled; diff --git a/Content.Shared/Actions/SharedActionsSystem.cs b/Content.Shared/Actions/SharedActionsSystem.cs index 27563454282..76b8a1b081b 100644 --- a/Content.Shared/Actions/SharedActionsSystem.cs +++ b/Content.Shared/Actions/SharedActionsSystem.cs @@ -69,8 +69,42 @@ public override void Initialize() SubscribeAllEvent(OnActionRequest); } + public override void Update(float frameTime) + { + base.Update(frameTime); + + var worldActionQuery = EntityQueryEnumerator(); + while (worldActionQuery.MoveNext(out var uid, out var action)) + { + if (IsCooldownActive(action) || !ShouldResetCharges(action)) + continue; + + ResetCharges(uid, dirty: true); + } + + var instantActionQuery = EntityQueryEnumerator(); + while (instantActionQuery.MoveNext(out var uid, out var action)) + { + if (IsCooldownActive(action) || !ShouldResetCharges(action)) + continue; + + ResetCharges(uid, dirty: true); + } + + var entityActionQuery = EntityQueryEnumerator(); + while (entityActionQuery.MoveNext(out var uid, out var action)) + { + if (IsCooldownActive(action) || !ShouldResetCharges(action)) + continue; + + ResetCharges(uid, dirty: true); + } + } + private void OnActionMapInit(EntityUid uid, BaseActionComponent component, MapInitEvent args) { + component.OriginalIconColor = component.IconColor; + if (component.Charges == null) return; @@ -326,14 +360,18 @@ public void RemoveCharges(EntityUid? actionId, int? removeCharges) Dirty(actionId.Value, action); } - public void ResetCharges(EntityUid? actionId) + public void ResetCharges(EntityUid? actionId, bool update = false, bool dirty = false) { if (!TryGetActionData(actionId, out var action)) return; action.Charges = action.MaxCharges; - UpdateAction(actionId, action); - Dirty(actionId.Value, action); + + if (update) + UpdateAction(actionId, action); + + if (dirty) + Dirty(actionId.Value, action); } private void OnActionsGetState(EntityUid uid, ActionsComponent component, ref ComponentGetState args) @@ -386,13 +424,12 @@ private void OnActionRequest(RequestPerformActionEvent ev, EntitySessionEventArg return; var curTime = GameTiming.CurTime; - // TODO: Check for charge recovery timer - if (action.Cooldown.HasValue && action.Cooldown.Value.End > curTime) + if (IsCooldownActive(action, curTime)) return; // TODO: Replace with individual charge recovery when we have the visuals to aid it if (action is { Charges: < 1, RenewCharges: true }) - ResetCharges(actionEnt); + ResetCharges(actionEnt, true, true); BaseActionEvent? performEvent = null; @@ -1072,4 +1109,19 @@ public void SetEntityIcon(EntityUid uid, EntityUid? icon, BaseActionComponent? a action.EntityIcon = icon; Dirty(uid, action); } + + /// + /// Checks if the action has a cooldown and if it's still active + /// + protected bool IsCooldownActive(BaseActionComponent action, TimeSpan? curTime = null) + { + curTime ??= GameTiming.CurTime; + // TODO: Check for charge recovery timer + return action.Cooldown.HasValue && action.Cooldown.Value.End > curTime; + } + + protected bool ShouldResetCharges(BaseActionComponent action) + { + return action is { Charges: < 1, RenewCharges: true }; + } } diff --git a/Content.Shared/Anomaly/SharedAnomalySystem.cs b/Content.Shared/Anomaly/SharedAnomalySystem.cs index 07beb1444d7..00d97c1a46e 100644 --- a/Content.Shared/Anomaly/SharedAnomalySystem.cs +++ b/Content.Shared/Anomaly/SharedAnomalySystem.cs @@ -33,7 +33,6 @@ public abstract class SharedAnomalySystem : EntitySystem [Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] protected readonly SharedPopupSystem Popup = default!; [Dependency] private readonly IPrototypeManager _prototype = default!; - [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; public override void Initialize() @@ -372,7 +371,7 @@ public override void Update(float frameTime) if (tilerefs.Count == 0) break; - var tileref = _random.Pick(tilerefs); + var tileref = Random.Pick(tilerefs); var distance = MathF.Sqrt(MathF.Pow(tileref.X - xform.LocalPosition.X, 2) + MathF.Pow(tileref.Y - xform.LocalPosition.Y, 2)); //cut outer & inner circle diff --git a/Content.Shared/Atmos/Atmospherics.cs b/Content.Shared/Atmos/Atmospherics.cs index 611753d58d9..76444897340 100644 --- a/Content.Shared/Atmos/Atmospherics.cs +++ b/Content.Shared/Atmos/Atmospherics.cs @@ -233,7 +233,7 @@ public static class Atmospherics /// /// 1 mol of Tritium is required per X mol of oxygen. /// - public const float FrezonProductionTritRatio = 50.0f; + public const float FrezonProductionTritRatio = 50.0f; // DeltaV - Change back to 50 /// /// 1 / X of the tritium is converted into Frezon each tick diff --git a/Content.Shared/Atmos/Piping/Unary/VentScrewedDoAfterEvent.cs b/Content.Shared/Atmos/Piping/Unary/VentScrewedDoAfterEvent.cs new file mode 100644 index 00000000000..1fdc69bcf68 --- /dev/null +++ b/Content.Shared/Atmos/Piping/Unary/VentScrewedDoAfterEvent.cs @@ -0,0 +1,9 @@ +using Content.Shared.DoAfter; +using Robust.Shared.Serialization; + +namespace Content.Shared.Atmos.Piping.Unary; + +[Serializable, NetSerializable] +public sealed partial class VentScrewedDoAfterEvent : SimpleDoAfterEvent +{ +} diff --git a/Content.Shared/Bed/Sleep/SleepingSystem.cs b/Content.Shared/Bed/Sleep/SleepingSystem.cs index 0e29fcd98ae..fa3bf704219 100644 --- a/Content.Shared/Bed/Sleep/SleepingSystem.cs +++ b/Content.Shared/Bed/Sleep/SleepingSystem.cs @@ -2,6 +2,7 @@ using Content.Shared.Buckle.Components; using Content.Shared.Damage; using Content.Shared.Damage.ForceSay; +using Content.Shared.Emoting; using Content.Shared.Examine; using Content.Shared.Eye.Blinding.Systems; using Content.Shared.IdentityManagement; @@ -61,6 +62,7 @@ public override void Initialize() SubscribeLocalEvent(OnInit); SubscribeLocalEvent(OnUnbuckleAttempt); + //SubscribeLocalEvent(OnEmoteAttempt); # DeltaV - Reverted "Block emotes for sleeping" (upstream PR #32779) } private void OnUnbuckleAttempt(Entity ent, ref UnbuckleAttemptEvent args) @@ -310,6 +312,14 @@ public bool TryWaking(Entity ent, bool force = false, Entity Wake((ent, ent.Comp)); return true; } + + /// + /// Prevents the use of emote actions while sleeping + /// + public void OnEmoteAttempt(Entity ent, ref EmoteAttemptEvent args) + { + args.Cancel(); + } } diff --git a/Content.Shared/Buckle/Components/BuckleComponent.cs b/Content.Shared/Buckle/Components/BuckleComponent.cs index c4810e8af08..1518ccea9ba 100644 --- a/Content.Shared/Buckle/Components/BuckleComponent.cs +++ b/Content.Shared/Buckle/Components/BuckleComponent.cs @@ -10,7 +10,7 @@ namespace Content.Shared.Buckle.Components; /// /// This component allows an entity to be buckled to an entity with a . /// -[RegisterComponent, NetworkedComponent] +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, AutoGenerateComponentPause] [Access(typeof(SharedBuckleSystem))] public sealed partial class BuckleComponent : Component { @@ -20,7 +20,7 @@ public sealed partial class BuckleComponent : Component /// across a table two tiles away" problem. /// [DataField] - public float Range = SharedInteractionSystem.InteractionRange / 1.4f; + public float Range = SharedInteractionSystem.InteractionRange; /// /// True if the entity is buckled, false otherwise. @@ -31,7 +31,7 @@ public sealed partial class BuckleComponent : Component /// /// Whether or not collisions should be possible with the entity we are strapped to /// - [DataField] + [DataField, AutoNetworkedField] public bool DontCollide; /// @@ -50,13 +50,13 @@ public sealed partial class BuckleComponent : Component /// /// The time that this entity buckled at. /// - [DataField(customTypeSerializer: typeof(TimeOffsetSerializer))] + [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoPausedField, AutoNetworkedField] public TimeSpan? BuckleTime; /// /// The strap that this component is buckled to. /// - [DataField] + [DataField, AutoNetworkedField] public EntityUid? BuckledTo; /// @@ -72,14 +72,6 @@ public sealed partial class BuckleComponent : Component [ViewVariables] public int? OriginalDrawDepth; } -[Serializable, NetSerializable] -public sealed class BuckleState(NetEntity? buckledTo, bool dontCollide, TimeSpan? buckleTime) : ComponentState -{ - public readonly NetEntity? BuckledTo = buckledTo; - public readonly bool DontCollide = dontCollide; - public readonly TimeSpan? BuckleTime = buckleTime; -} - public sealed partial class UnbuckleAlertEvent : BaseAlertEvent; /// diff --git a/Content.Shared/Buckle/Components/StrapComponent.cs b/Content.Shared/Buckle/Components/StrapComponent.cs index 101c388a8bf..ad5031356e5 100644 --- a/Content.Shared/Buckle/Components/StrapComponent.cs +++ b/Content.Shared/Buckle/Components/StrapComponent.cs @@ -15,7 +15,7 @@ public sealed partial class StrapComponent : Component /// /// The entities that are currently buckled to this strap. /// - [ViewVariables] + [DataField, AutoNetworkedField] public HashSet BuckledEntities = new(); /// @@ -61,12 +61,6 @@ public sealed partial class StrapComponent : Component [DataField, AutoNetworkedField] public bool Enabled = true; - /// - /// You can specify the offset the entity will have after unbuckling. - /// - [DataField] - public Vector2 UnbuckleOffset = Vector2.Zero; - /// /// The sound to be played when a mob is buckled /// diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs index 8b35f677f18..1745730647d 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs @@ -58,13 +58,6 @@ private void InitializeBuckle() { BuckleDoafterEarly((uid, comp), ev.Event, ev); }); - - SubscribeLocalEvent(OnGetState); - } - - private void OnGetState(Entity ent, ref ComponentGetState args) - { - args.State = new BuckleState(GetNetEntity(ent.Comp.BuckledTo), ent.Comp.DontCollide, ent.Comp.BuckleTime); } private void OnBuckleComponentShutdown(Entity ent, ref ComponentShutdown args) @@ -196,11 +189,15 @@ public bool IsBuckled(EntityUid uid, BuckleComponent? component = null) protected void SetBuckledTo(Entity buckle, Entity? strap) { if (TryComp(buckle.Comp.BuckledTo, out StrapComponent? old)) + { old.BuckledEntities.Remove(buckle); + Dirty(buckle.Comp.BuckledTo.Value, old); + } if (strap is {} strapEnt && Resolve(strapEnt.Owner, ref strapEnt.Comp)) { strapEnt.Comp.BuckledEntities.Add(buckle); + Dirty(strapEnt); _alerts.ShowAlert(buckle, strapEnt.Comp.BuckledAlertType); } else @@ -463,13 +460,17 @@ private void Unbuckle(Entity buckle, Entity str if (buckleXform.ParentUid == strap.Owner && !Terminating(buckleXform.ParentUid)) { - _container.AttachParentToContainerOrGrid((buckle, buckleXform)); + _transform.PlaceNextTo((buckle, buckleXform), (strap.Owner, oldBuckledXform)); + buckleXform.ActivelyLerping = false; var oldBuckledToWorldRot = _transform.GetWorldRotation(strap); - _transform.SetWorldRotation(buckleXform, oldBuckledToWorldRot); + _transform.SetWorldRotationNoLerp((buckle, buckleXform), oldBuckledToWorldRot); - if (strap.Comp.UnbuckleOffset != Vector2.Zero) - buckleXform.Coordinates = oldBuckledXform.Coordinates.Offset(strap.Comp.UnbuckleOffset); + // TODO: This is doing 4 moveevents this is why I left the warning in, if you're going to remove it make it only do 1 moveevent. + if (strap.Comp.BuckleOffset != Vector2.Zero) + { + buckleXform.Coordinates = oldBuckledXform.Coordinates.Offset(strap.Comp.BuckleOffset); + } } _rotationVisuals.ResetHorizontalAngle(buckle.Owner); diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 44c6e38643c..a8965aa93c4 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -32,6 +32,21 @@ public sealed class CCVars : CVars public static readonly CVarDef DefaultGuide = CVarDef.Create("server.default_guide", "NewPlayer", CVar.REPLICATED | CVar.SERVER); + /// + /// If greater than 0, automatically restart the server after this many minutes of uptime. + /// + /// + /// + /// This is intended to work around various bugs and performance issues caused by long continuous server uptime. + /// + /// + /// This uses the same non-disruptive logic as update restarts, + /// i.e. the game will only restart at round end or when there is nobody connected. + /// + /// + public static readonly CVarDef ServerUptimeRestartMinutes = + CVarDef.Create("server.uptime_restart_minutes", 0, CVar.SERVERONLY); + /* * Ambience */ @@ -430,6 +445,18 @@ public static readonly CVarDef public static readonly CVarDef ContrabandExamine = CVarDef.Create("game.contraband_examine", true, CVar.SERVER | CVar.REPLICATED); + /// + /// Size of the lookup area for adding entities to the context menu + /// + public static readonly CVarDef GameEntityMenuLookup = + CVarDef.Create("game.entity_menu_lookup", 0.25f, CVar.CLIENTONLY | CVar.ARCHIVE); + + /// + /// Should the clients window show the server hostname in the title? + /// + public static readonly CVarDef GameHostnameInTitlebar = + CVarDef.Create("game.hostname_in_titlebar", true, CVar.SERVER | CVar.REPLICATED); + /* * Discord */ @@ -459,6 +486,12 @@ public static readonly CVarDef public static readonly CVarDef DiscordVoteWebhook = CVarDef.Create("discord.vote_webhook", string.Empty, CVar.SERVERONLY); + /// + /// URL of the Discord webhook which will relay all votekick votes. If left empty, disables the webhook. + /// + public static readonly CVarDef DiscordVotekickWebhook = + CVarDef.Create("discord.votekick_webhook", string.Empty, CVar.SERVERONLY); + /// URL of the Discord webhook which will relay round restart messages. /// public static readonly CVarDef DiscordRoundUpdateWebhook = @@ -900,8 +933,8 @@ public static readonly CVarDef /// After the period has passed, the count resets. /// /// - public static readonly CVarDef AhelpRateLimitPeriod = - CVarDef.Create("ahelp.rate_limit_period", 2, CVar.SERVERONLY); + public static readonly CVarDef AhelpRateLimitPeriod = + CVarDef.Create("ahelp.rate_limit_period", 2f, CVar.SERVERONLY); /// /// How many ahelp messages are allowed in a single rate limit period. @@ -1398,7 +1431,6 @@ public static readonly CVarDef public static readonly CVarDef VoteSameTypeTimeout = CVarDef.Create("vote.same_type_timeout", 240f, CVar.SERVERONLY); - /// /// Sets the duration of the map vote timer. /// @@ -1423,6 +1455,87 @@ public static readonly CVarDef public static readonly CVarDef VoteTimerAlone = CVarDef.Create("vote.timeralone", 10, CVar.SERVERONLY); + /* + * VOTEKICK + */ + + /// + /// Allows enabling/disabling player-started votekick for ultimate authority + /// + public static readonly CVarDef VotekickEnabled = + CVarDef.Create("votekick.enabled", true, CVar.SERVERONLY); + + /// + /// Config for when the votekick should be allowed to be called based on number of eligible voters. + /// + public static readonly CVarDef VotekickEligibleNumberRequirement = + CVarDef.Create("votekick.eligible_number", 10, CVar.SERVERONLY); + + /// + /// Whether a votekick initiator must be a ghost or not. + /// + public static readonly CVarDef VotekickInitiatorGhostRequirement = + CVarDef.Create("votekick.initiator_ghost_requirement", true, CVar.SERVERONLY); + + /// + /// Whether a votekick voter must be a ghost or not. + /// + public static readonly CVarDef VotekickVoterGhostRequirement = + CVarDef.Create("votekick.voter_ghost_requirement", true, CVar.SERVERONLY); + + /// + /// Config for how many hours playtime a player must have to be able to vote on a votekick. + /// + public static readonly CVarDef VotekickEligibleVoterPlaytime = + CVarDef.Create("votekick.voter_playtime", 100, CVar.SERVERONLY); + + /// + /// Config for how many seconds a player must have been dead to initiate a votekick / be able to vote on a votekick. + /// + public static readonly CVarDef VotekickEligibleVoterDeathtime = + CVarDef.Create("votekick.voter_deathtime", 180, CVar.REPLICATED | CVar.SERVER); + + /// + /// The required ratio of eligible voters that must agree for a votekick to go through. + /// + public static readonly CVarDef VotekickRequiredRatio = + CVarDef.Create("votekick.required_ratio", 0.6f, CVar.SERVERONLY); + + /// + /// Whether or not to prevent the votekick from having any effect when there is an online admin. + /// + public static readonly CVarDef VotekickNotAllowedWhenAdminOnline = + CVarDef.Create("votekick.not_allowed_when_admin_online", true, CVar.SERVERONLY); + + /// + /// The delay for which two votekicks are allowed to be made by separate people, in seconds. + /// + public static readonly CVarDef VotekickTimeout = + CVarDef.Create("votekick.timeout", 120f, CVar.SERVERONLY); + + /// + /// Sets the duration of the votekick vote timer. + /// + public static readonly CVarDef + VotekickTimer = CVarDef.Create("votekick.timer", 60, CVar.SERVERONLY); + + /// + /// Config for how many hours playtime a player must have to get protection from the Raider votekick type when playing as an antag. + /// + public static readonly CVarDef VotekickAntagRaiderProtection = + CVarDef.Create("votekick.antag_raider_protection", 10, CVar.SERVERONLY); + + /// + /// Default severity for votekick bans + /// + public static readonly CVarDef VotekickBanDefaultSeverity = + CVarDef.Create("votekick.ban_default_severity", "High", CVar.ARCHIVE | CVar.SERVER | CVar.REPLICATED); + + /// + /// Duration of a ban caused by a votekick (in minutes). + /// + public static readonly CVarDef VotekickBanDuration = + CVarDef.Create("votekick.ban_duration", 180, CVar.SERVERONLY); /* * BAN @@ -1754,8 +1867,8 @@ public static readonly CVarDef /// After the period has passed, the count resets. /// /// - public static readonly CVarDef ChatRateLimitPeriod = - CVarDef.Create("chat.rate_limit_period", 2, CVar.SERVERONLY); + public static readonly CVarDef ChatRateLimitPeriod = + CVarDef.Create("chat.rate_limit_period", 2f, CVar.SERVERONLY); /// /// How many chat messages are allowed in a single rate limit period. @@ -1765,19 +1878,12 @@ public static readonly CVarDef /// divided by . /// /// - /// public static readonly CVarDef ChatRateLimitCount = CVarDef.Create("chat.rate_limit_count", 10, CVar.SERVERONLY); /// - /// If true, announce when a player breached chat rate limit to game administrators. - /// - /// - public static readonly CVarDef ChatRateLimitAnnounceAdmins = - CVarDef.Create("chat.rate_limit_announce_admins", true, CVar.SERVERONLY); - - /// - /// Minimum delay (in seconds) between announcements from . + /// Minimum delay (in seconds) between notifying admins about chat message rate limit violations. + /// A negative value disables admin announcements. /// public static readonly CVarDef ChatRateLimitAnnounceAdminsDelay = CVarDef.Create("chat.rate_limit_announce_admins_delay", 15, CVar.SERVERONLY); @@ -1973,6 +2079,34 @@ public static readonly CVarDef public static readonly CVarDef ToggleWalk = CVarDef.Create("control.toggle_walk", false, CVar.CLIENTONLY | CVar.ARCHIVE); + /* + * Interactions + */ + + // The rationale behind the default limit is simply that I can easily get to 7 interactions per second by just + // trying to spam toggle a light switch or lever (though the UseDelay component limits the actual effect of the + // interaction). I don't want to accidentally spam admins with alerts just because somebody is spamming a + // key manually, nor do we want to alert them just because the player is having network issues and the server + // receives multiple interactions at once. But we also want to try catch people with modified clients that spam + // many interactions on the same tick. Hence, a very short period, with a relatively high count. + + /// + /// Maximum number of interactions that a player can perform within seconds + /// + public static readonly CVarDef InteractionRateLimitCount = + CVarDef.Create("interaction.rate_limit_count", 5, CVar.SERVER | CVar.REPLICATED); + + /// + public static readonly CVarDef InteractionRateLimitPeriod = + CVarDef.Create("interaction.rate_limit_period", 0.5f, CVar.SERVER | CVar.REPLICATED); + + /// + /// Minimum delay (in seconds) between notifying admins about interaction rate limit violations. A negative + /// value disables admin announcements. + /// + public static readonly CVarDef InteractionRateLimitAnnounceAdminsDelay = + CVarDef.Create("interaction.rate_limit_announce_admins_delay", 120, CVar.SERVERONLY); + /* * STORAGE */ @@ -2007,7 +2141,7 @@ public static readonly CVarDef /// The time you must spend reading the rules, before the "Request" button is enabled /// public static readonly CVarDef GhostRoleTime = - CVarDef.Create("ghost.role_time", 8f, CVar.REPLICATED | CVar.SERVER); + CVarDef.Create("ghost.role_time", 3f, CVar.REPLICATED | CVar.SERVER); /// /// If ghost role lotteries should be made near-instanteous. diff --git a/Content.Shared/Cargo/Components/PriceGunComponent.cs b/Content.Shared/Cargo/Components/PriceGunComponent.cs new file mode 100644 index 00000000000..7024f1195af --- /dev/null +++ b/Content.Shared/Cargo/Components/PriceGunComponent.cs @@ -0,0 +1,11 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Cargo.Components; + +/// +/// This is used for the price gun, which calculates the price of any object it appraises. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class PriceGunComponent : Component +{ +} diff --git a/Content.Shared/Cargo/SharedPriceGunSystem.cs b/Content.Shared/Cargo/SharedPriceGunSystem.cs new file mode 100644 index 00000000000..779d55055aa --- /dev/null +++ b/Content.Shared/Cargo/SharedPriceGunSystem.cs @@ -0,0 +1,55 @@ +using Content.Shared.Cargo.Components; +using Content.Shared.IdentityManagement; +using Content.Shared.Interaction; +using Content.Shared.Verbs; + +namespace Content.Shared.Cargo.Systems; + +/// +/// The price gun system! If this component is on an entity, you can scan objects (Click or use verb) to see their price. +/// +public abstract class SharedPriceGunSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent>(OnUtilityVerb); + SubscribeLocalEvent(OnAfterInteract); + } + + private void OnUtilityVerb(EntityUid uid, PriceGunComponent component, GetVerbsEvent args) + { + if (!args.CanAccess || !args.CanInteract || args.Using == null) + return; + + var verb = new UtilityVerb() + { + Act = () => + { + GetPriceOrBounty(uid, args.Target, args.User); + }, + Text = Loc.GetString("price-gun-verb-text"), + Message = Loc.GetString("price-gun-verb-message", ("object", Identity.Entity(args.Target, EntityManager))) + }; + + args.Verbs.Add(verb); + } + + private void OnAfterInteract(Entity entity, ref AfterInteractEvent args) + { + if (!args.CanReach || args.Target == null || args.Handled) + return; + + args.Handled |= GetPriceOrBounty(entity, args.Target.Value, args.User); + } + + /// + /// Find the price or confirm if the item is a bounty. Will give a popup of the result to the passed user. + /// + /// + /// + /// This is abstract for prediction. When the bounty system / cargo systems that are necessary are moved to shared, + /// combine all the server, client, and shared stuff into one non abstract file. + /// + protected abstract bool GetPriceOrBounty(EntityUid priceGunUid, EntityUid target, EntityUid user); +} diff --git a/Content.Shared/ChangeNameInContainer/ChangeNameInContainerComponent.cs b/Content.Shared/ChangeNameInContainer/ChangeNameInContainerComponent.cs new file mode 100644 index 00000000000..dca8f5b29b4 --- /dev/null +++ b/Content.Shared/ChangeNameInContainer/ChangeNameInContainerComponent.cs @@ -0,0 +1,18 @@ +using Content.Shared.Whitelist; +using Robust.Shared.GameStates; + +namespace Content.Shared.ChangeNameInContainer; + +/// +/// An entity with this component will get its name and verb chaned to the container it's inside of. E.g, if your a +/// pAI that has this component and are inside a lizard plushie, your name when talking will be "lizard plushie". +/// +[RegisterComponent, NetworkedComponent, Access(typeof(ChangeNameInContainerSystem))] +public sealed partial class ChangeVoiceInContainerComponent : Component +{ + /// + /// A whitelist of containers that will change the name. + /// + [DataField] + public EntityWhitelist? Whitelist; +} diff --git a/Content.Shared/ChangeNameInContainer/ChangeNameInContainerSystem.cs b/Content.Shared/ChangeNameInContainer/ChangeNameInContainerSystem.cs new file mode 100644 index 00000000000..f9abda3ec23 --- /dev/null +++ b/Content.Shared/ChangeNameInContainer/ChangeNameInContainerSystem.cs @@ -0,0 +1,30 @@ +using Content.Shared.Chat; +using Robust.Shared.Containers; +using Content.Shared.Whitelist; +using Content.Shared.Speech; + +namespace Content.Shared.ChangeNameInContainer; + +public sealed partial class ChangeNameInContainerSystem : EntitySystem +{ + [Dependency] private readonly SharedContainerSystem _container = default!; + [Dependency] private readonly EntityWhitelistSystem _whitelist = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnTransformSpeakerName); + } + + private void OnTransformSpeakerName(Entity ent, ref TransformSpeakerNameEvent args) + { + if (!_container.TryGetContainingContainer((ent, null, null), out var container) + || _whitelist.IsWhitelistFail(ent.Comp.Whitelist, container.Owner)) + return; + + args.VoiceName = Name(container.Owner); + if (TryComp(container.Owner, out var speechComp)) + args.SpeechVerb = speechComp.SpeechVerb; + } + +} diff --git a/Content.Shared/Chat/ISharedChatManager.cs b/Content.Shared/Chat/ISharedChatManager.cs new file mode 100644 index 00000000000..39c1d85dd25 --- /dev/null +++ b/Content.Shared/Chat/ISharedChatManager.cs @@ -0,0 +1,8 @@ +namespace Content.Shared.Chat; + +public interface ISharedChatManager +{ + void Initialize(); + void SendAdminAlert(string message); + void SendAdminAlert(EntityUid player, string message); +} diff --git a/Content.Shared/Chat/SharedChatEvents.cs b/Content.Shared/Chat/SharedChatEvents.cs new file mode 100644 index 00000000000..c187fd59a8d --- /dev/null +++ b/Content.Shared/Chat/SharedChatEvents.cs @@ -0,0 +1,24 @@ +using Content.Shared.Speech; +using Robust.Shared.Prototypes; +using Content.Shared.Inventory; + +namespace Content.Shared.Chat; + +/// +/// This event should be sent everytime an entity talks (Radio, local chat, etc...). +/// The event is sent to both the entity itself, and all clothing (For stuff like voice masks). +/// +public sealed class TransformSpeakerNameEvent : EntityEventArgs, IInventoryRelayEvent +{ + public SlotFlags TargetSlots { get; } = SlotFlags.WITHOUT_POCKET; + public EntityUid Sender; + public string VoiceName; + public ProtoId? SpeechVerb; + + public TransformSpeakerNameEvent(EntityUid sender, string name) + { + Sender = sender; + VoiceName = name; + SpeechVerb = null; + } +} diff --git a/Content.Shared/Chat/SharedChatSystem.cs b/Content.Shared/Chat/SharedChatSystem.cs index e5944ec30ae..b96635de963 100644 --- a/Content.Shared/Chat/SharedChatSystem.cs +++ b/Content.Shared/Chat/SharedChatSystem.cs @@ -85,6 +85,35 @@ public SpeechVerbPrototype GetSpeechVerb(EntityUid source, string message, Speec return current ?? _prototypeManager.Index(speech.SpeechVerb); } + /// + /// Splits the input message into a radio prefix part and the rest to preserve it during sanitization. + /// + /// + /// This is primarily for the chat emote sanitizer, which can match against ":b" as an emote, which is a valid radio keycode. + /// + public void GetRadioKeycodePrefix(EntityUid source, + string input, + out string output, + out string prefix) + { + prefix = string.Empty; + output = input; + + // If the string is less than 2, then it's probably supposed to be an emote. + // No one is sending empty radio messages! + if (input.Length <= 2) + return; + + if (!(input.StartsWith(RadioChannelPrefix) || input.StartsWith(RadioChannelAltPrefix))) + return; + + if (!_keyCodes.TryGetValue(char.ToLower(input[1]), out _)) + return; + + prefix = input[..2]; + output = input[2..]; + } + /// /// Attempts to resolve radio prefixes in chat messages (e.g., remove a leading ":e" and resolve the requested /// channel. Returns true if a radio message was attempted, even if the channel is invalid. diff --git a/Content.Shared/Chemistry/InjectOverTimeEvent.cs b/Content.Shared/Chemistry/InjectOverTimeEvent.cs new file mode 100644 index 00000000000..ca5ab4213ff --- /dev/null +++ b/Content.Shared/Chemistry/InjectOverTimeEvent.cs @@ -0,0 +1,13 @@ +namespace Content.Shared.Chemistry.Events; + +/// +/// Raised directed on an entity when it embeds in another entity. +/// +[ByRefEvent] +public readonly record struct InjectOverTimeEvent(EntityUid embeddedIntoUid) +{ + /// + /// Entity that is embedded in. + /// + public readonly EntityUid EmbeddedIntoUid = embeddedIntoUid; +} diff --git a/Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs b/Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs index f5df04037ee..2b10b41fee8 100644 --- a/Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs +++ b/Content.Shared/Clothing/EntitySystems/SharedChameleonClothingSystem.cs @@ -1,5 +1,6 @@ using Content.Shared.Access.Components; using Content.Shared.Clothing.Components; +using Content.Shared.Contraband; using Content.Shared.Inventory; using Content.Shared.Inventory.Events; using Content.Shared.Item; @@ -13,6 +14,7 @@ public abstract class SharedChameleonClothingSystem : EntitySystem [Dependency] private readonly IComponentFactory _factory = default!; [Dependency] private readonly IPrototypeManager _proto = default!; [Dependency] private readonly ClothingSystem _clothingSystem = default!; + [Dependency] private readonly ContrabandSystem _contraband = default!; [Dependency] private readonly MetaDataSystem _metaData = default!; [Dependency] private readonly SharedItemSystem _itemSystem = default!; [Dependency] private readonly TagSystem _tag = default!; @@ -68,6 +70,17 @@ protected void UpdateVisuals(EntityUid uid, ChameleonClothingComponent component { _clothingSystem.CopyVisuals(uid, otherClothing, clothing); } + + // properly mark contraband + if (proto.TryGetComponent("Contraband", out ContrabandComponent? contra)) + { + EnsureComp(uid, out var current); + _contraband.CopyDetails(uid, contra, current); + } + else + { + RemComp(uid); + } } protected virtual void UpdateSprite(EntityUid uid, EntityPrototype proto) { } diff --git a/Content.Shared/Contraband/ContrabandSystem.cs b/Content.Shared/Contraband/ContrabandSystem.cs index 22181ce99ad..e6931f2860a 100644 --- a/Content.Shared/Contraband/ContrabandSystem.cs +++ b/Content.Shared/Contraband/ContrabandSystem.cs @@ -33,6 +33,16 @@ private void SetContrabandExamine(bool val) _contrabandExamineEnabled = val; } + public void CopyDetails(EntityUid uid, ContrabandComponent other, ContrabandComponent? contraband = null) + { + if (!Resolve(uid, ref contraband)) + return; + + contraband.Severity = other.Severity; + contraband.AllowedDepartments = other.AllowedDepartments; + Dirty(uid, contraband); + } + private void OnExamined(Entity ent, ref ExaminedEvent args) { if (!_contrabandExamineEnabled) @@ -45,7 +55,7 @@ private void OnExamined(Entity ent, ref ExaminedEvent args) using (args.PushGroup(nameof(ContrabandComponent))) { var severity = _proto.Index(ent.Comp.Severity); - if (severity.ShowDepartments && ent.Comp is { AllowedDepartments: not null }) + if (severity.ShowDepartments && ent.Comp is { AllowedDepartments: not null }) { // TODO shouldn't department prototypes have a localized name instead of just using the ID for this? var list = ContentLocalizationManager.FormatList(ent.Comp.AllowedDepartments.Select(p => Loc.GetString($"department-{p.Id}")).ToList()); diff --git a/Content.Shared/DeltaV/Addictions/AddictedComponent.cs b/Content.Shared/DeltaV/Addictions/AddictedComponent.cs new file mode 100644 index 00000000000..2f9169a7fb9 --- /dev/null +++ b/Content.Shared/DeltaV/Addictions/AddictedComponent.cs @@ -0,0 +1,37 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; +using Robust.Shared.Timing; + +namespace Content.Shared.DeltaV.Addictions; + +[RegisterComponent, NetworkedComponent, Access(typeof(SharedAddictionSystem))] +[AutoGenerateComponentState, AutoGenerateComponentPause] +public sealed partial class AddictedComponent : Component +{ + /// + /// Whether to suppress pop-ups. + /// + [DataField, AutoNetworkedField] + public bool Suppressed; + + /// + /// The timestamp of last StatusEffect trigger. + /// + [DataField(serverOnly: true, customTypeSerializer: typeof(TimeOffsetSerializer))] + [AutoPausedField] + public TimeSpan? LastMetabolismTime; + + /// + /// The timestamp of the next popup. + /// + [DataField(serverOnly: true, customTypeSerializer: typeof(TimeOffsetSerializer))] + [AutoPausedField] + public TimeSpan? NextEffectTime; + + /// + /// The timestamp of the when the suppression ends + /// + [DataField(serverOnly: true, customTypeSerializer: typeof(TimeOffsetSerializer))] + [AutoPausedField] + public TimeSpan? SuppressionEndTime; +} diff --git a/Content.Shared/DeltaV/Addictions/SharedAddictionSystem.cs b/Content.Shared/DeltaV/Addictions/SharedAddictionSystem.cs new file mode 100644 index 00000000000..f58534592d9 --- /dev/null +++ b/Content.Shared/DeltaV/Addictions/SharedAddictionSystem.cs @@ -0,0 +1,30 @@ +using Content.Shared.StatusEffect; +using Robust.Shared.Prototypes; + +namespace Content.Shared.DeltaV.Addictions; + +public abstract class SharedAddictionSystem : EntitySystem +{ + [Dependency] private readonly StatusEffectsSystem _statusEffects = default!; + + public ProtoId StatusEffectKey = "Addicted"; + + protected abstract void UpdateTime(EntityUid uid); + + public virtual void TryApplyAddiction(EntityUid uid, float addictionTime, StatusEffectsComponent? status = null) + { + if (!Resolve(uid, ref status, false)) + return; + + UpdateTime(uid); + + if (!_statusEffects.HasStatusEffect(uid, StatusEffectKey, status)) + { + _statusEffects.TryAddStatusEffect(uid, StatusEffectKey, TimeSpan.FromSeconds(addictionTime), true, status); + } + else + { + _statusEffects.TryAddTime(uid, StatusEffectKey, TimeSpan.FromSeconds(addictionTime), status); + } + } +} diff --git a/Content.Shared/DeltaV/CCVars/DCCVars.cs b/Content.Shared/DeltaV/CCVars/DCCVars.cs index 88b516e9afc..893cc472f6f 100644 --- a/Content.Shared/DeltaV/CCVars/DCCVars.cs +++ b/Content.Shared/DeltaV/CCVars/DCCVars.cs @@ -16,11 +16,29 @@ public sealed class DCCVars public static readonly CVarDef RoundEndPacifist = CVarDef.Create("game.round_end_pacifist", false, CVar.SERVERONLY); + /// + /// Whether the no EORG popup is enabled. + /// + public static readonly CVarDef RoundEndNoEorgPopup = + CVarDef.Create("game.round_end_eorg_popup_enabled", true, CVar.SERVER | CVar.REPLICATED); + + /// + /// Skip the no EORG popup. + /// + public static readonly CVarDef SkipRoundEndNoEorgPopup = + CVarDef.Create("game.skip_round_end_eorg_popup", false, CVar.CLIENTONLY | CVar.ARCHIVE); + + /// + /// How long to display the EORG popup for. + /// + public static readonly CVarDef RoundEndNoEorgPopupTime = + CVarDef.Create("game.round_end_eorg_popup_time", 5f, CVar.SERVER | CVar.REPLICATED); + /// /// Disables all vision filters for species like Vulpkanin or Harpies. There are good reasons someone might want to disable these. /// public static readonly CVarDef NoVisionFilters = - CVarDef.Create("accessibility.no_vision_filters", false, CVar.CLIENTONLY | CVar.ARCHIVE); + CVarDef.Create("accessibility.no_vision_filters", true, CVar.CLIENTONLY | CVar.ARCHIVE); /// /// Whether the Shipyard is enabled. diff --git a/Content.Shared/DeltaV/CartridgeLoader/Cartridges/MailMetricUiState.cs b/Content.Shared/DeltaV/CartridgeLoader/Cartridges/MailMetricUiState.cs index 69506f5d0c2..0f21e837bbc 100644 --- a/Content.Shared/DeltaV/CartridgeLoader/Cartridges/MailMetricUiState.cs +++ b/Content.Shared/DeltaV/CartridgeLoader/Cartridges/MailMetricUiState.cs @@ -1,4 +1,3 @@ -using Content.Shared.Security; using Robust.Shared.Serialization; namespace Content.Shared.CartridgeLoader.Cartridges; @@ -47,4 +46,4 @@ public readonly double SuccessRate(int unopenedCount) ? Math.Round((double)OpenedCount / totalMail * 100, 2) : 0; } -} \ No newline at end of file +} diff --git a/Content.Shared/DeltaV/CartridgeLoader/Cartridges/StockTradingUiMessageEvent.cs b/Content.Shared/DeltaV/CartridgeLoader/Cartridges/StockTradingUiMessageEvent.cs new file mode 100644 index 00000000000..a80f8c6b8a8 --- /dev/null +++ b/Content.Shared/DeltaV/CartridgeLoader/Cartridges/StockTradingUiMessageEvent.cs @@ -0,0 +1,19 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.CartridgeLoader.Cartridges; + +[Serializable, NetSerializable] +public sealed class StockTradingUiMessageEvent(StockTradingUiAction action, int companyIndex, float amount) + : CartridgeMessageEvent +{ + public readonly StockTradingUiAction Action = action; + public readonly int CompanyIndex = companyIndex; + public readonly float Amount = amount; +} + +[Serializable, NetSerializable] +public enum StockTradingUiAction +{ + Buy, + Sell, +} diff --git a/Content.Shared/DeltaV/CartridgeLoader/Cartridges/StockTradingUiState.cs b/Content.Shared/DeltaV/CartridgeLoader/Cartridges/StockTradingUiState.cs new file mode 100644 index 00000000000..aea4ba5aa1d --- /dev/null +++ b/Content.Shared/DeltaV/CartridgeLoader/Cartridges/StockTradingUiState.cs @@ -0,0 +1,66 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.CartridgeLoader.Cartridges; + +[Serializable, NetSerializable] +public sealed class StockTradingUiState( + List entries, + Dictionary ownedStocks, + float balance) + : BoundUserInterfaceState +{ + public readonly List Entries = entries; + public readonly Dictionary OwnedStocks = ownedStocks; + public readonly float Balance = balance; +} + +// No structure, zero fucks given +[DataDefinition, Serializable] +public partial struct StockCompanyStruct +{ + /// + /// The displayed name of the company shown in the UI. + /// + [DataField(required: true)] + public LocId? DisplayName; + + // Used for runtime-added companies that don't have a localization entry + private string? _displayName; + + /// + /// Gets or sets the display name, using either the localized or direct string value + /// + [Access(Other = AccessPermissions.ReadWriteExecute)] + public string LocalizedDisplayName + { + get => _displayName ?? Loc.GetString(DisplayName ?? string.Empty); + set => _displayName = value; + } + + /// + /// The current price of the company's stock + /// + [DataField(required: true)] + public float CurrentPrice; + + /// + /// The base price of the company's stock + /// + [DataField(required: true)] + public float BasePrice; + + /// + /// The price history of the company's stock + /// + [DataField] + public List? PriceHistory; + + public StockCompanyStruct(string displayName, float currentPrice, float basePrice, List? priceHistory) + { + DisplayName = displayName; + _displayName = null; + CurrentPrice = currentPrice; + BasePrice = basePrice; + PriceHistory = priceHistory ?? []; + } +} diff --git a/Content.Shared/DeltaV/Chapel/SacrificialAltarComponent.cs b/Content.Shared/DeltaV/Chapel/SacrificialAltarComponent.cs new file mode 100644 index 00000000000..54c6ec35618 --- /dev/null +++ b/Content.Shared/DeltaV/Chapel/SacrificialAltarComponent.cs @@ -0,0 +1,47 @@ +using Content.Shared.Destructible.Thresholds; +using Content.Shared.DoAfter; +using Content.Shared.EntityTable; +using Robust.Shared.Audio; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.DeltaV.Chapel; + +/// +/// Altar that lets you sacrifice psionics to lower glimmer by a large amount. +/// +[RegisterComponent, NetworkedComponent, Access(typeof(SharedSacrificialAltarSystem))] +public sealed partial class SacrificialAltarComponent : Component +{ + /// + /// DoAfter for an active sacrifice. + /// + [DataField] + public DoAfterId? DoAfter; + + /// + /// How long it takes to sacrifice someone once they die. + /// This is the window to interrupt a sacrifice if you want glimmer to stay high, or need the psionic to be revived. + /// + [DataField] + public TimeSpan SacrificeTime = TimeSpan.FromSeconds(8.35); + + [DataField] + public SoundSpecifier SacrificeSound = new SoundPathSpecifier("/Audio/DeltaV/Effects/clang2.ogg"); + + [DataField] + public EntityUid? SacrificeStream; + + /// + /// Random amount to reduce glimmer by. + /// + [DataField] + public MinMax GlimmerReduction = new(30, 60); + + [DataField] + public ProtoId RewardPool = "PsionicSacrificeRewards"; +} + +[Serializable, NetSerializable] +public sealed partial class SacrificeDoAfterEvent : SimpleDoAfterEvent; diff --git a/Content.Shared/DeltaV/Chapel/SharedSacrificialAltarSystem.cs b/Content.Shared/DeltaV/Chapel/SharedSacrificialAltarSystem.cs new file mode 100644 index 00000000000..fe647c7d20c --- /dev/null +++ b/Content.Shared/DeltaV/Chapel/SharedSacrificialAltarSystem.cs @@ -0,0 +1,70 @@ +using Content.Shared.Buckle; +using Content.Shared.Buckle.Components; +using Content.Shared.DoAfter; +using Content.Shared.Examine; +using Content.Shared.Verbs; + +namespace Content.Shared.DeltaV.Chapel; + +public abstract class SharedSacrificialAltarSystem : EntitySystem +{ + [Dependency] private readonly SharedBuckleSystem _buckle = default!; + [Dependency] protected readonly SharedDoAfterSystem DoAfter = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnUnstrapped); + SubscribeLocalEvent>(OnGetVerbs); + } + + private void OnExamined(Entity ent, ref ExaminedEvent args) + { + args.PushMarkup(Loc.GetString("altar-examine")); + } + + private void OnUnstrapped(Entity ent, ref UnstrappedEvent args) + { + if (ent.Comp.DoAfter is {} id) + { + DoAfter.Cancel(id); + ent.Comp.DoAfter = null; + } + } + + private void OnGetVerbs(Entity ent, ref GetVerbsEvent args) + { + if (!args.CanAccess || !args.CanInteract || ent.Comp.DoAfter != null) + return; + + if (!TryComp(ent, out var strap)) + return; + + if (GetFirstBuckled(strap) is not {} target) + return; + + var user = args.User; + args.Verbs.Add(new AlternativeVerb() + { + Act = () => AttemptSacrifice(ent, user, target), + Text = Loc.GetString("altar-sacrifice-verb"), + Priority = 2 + }); + } + + private EntityUid? GetFirstBuckled(StrapComponent strap) + { + foreach (var entity in strap.BuckledEntities) + { + return entity; + } + + return null; + } + + protected virtual void AttemptSacrifice(Entity ent, EntityUid user, EntityUid target) + { + } +} diff --git a/Content.Shared/Nyanotrasen/Mail/MailDeliveryPoolPrototype.cs b/Content.Shared/DeltaV/Mail/MailDeliveryPoolPrototype.cs similarity index 88% rename from Content.Shared/Nyanotrasen/Mail/MailDeliveryPoolPrototype.cs rename to Content.Shared/DeltaV/Mail/MailDeliveryPoolPrototype.cs index 544f489d28f..a541bef7ad9 100644 --- a/Content.Shared/Nyanotrasen/Mail/MailDeliveryPoolPrototype.cs +++ b/Content.Shared/DeltaV/Mail/MailDeliveryPoolPrototype.cs @@ -1,6 +1,6 @@ using Robust.Shared.Prototypes; -namespace Content.Shared.Mail; +namespace Content.Shared.DeltaV.Mail; /// /// Generic random weighting dataset to use. @@ -8,7 +8,7 @@ namespace Content.Shared.Mail; [Prototype("mailDeliveryPool")] public sealed class MailDeliveryPoolPrototype : IPrototype { - [IdDataFieldAttribute] public string ID { get; } = default!; + [IdDataField] public string ID { get; } = default!; /// /// Mail that can be sent to everyone. diff --git a/Content.Shared/Nyanotrasen/Mail/MailVisuals.cs b/Content.Shared/DeltaV/Mail/MailVisuals.cs similarity index 90% rename from Content.Shared/Nyanotrasen/Mail/MailVisuals.cs rename to Content.Shared/DeltaV/Mail/MailVisuals.cs index 1e1dc8b8ce7..6ca26f129de 100644 --- a/Content.Shared/Nyanotrasen/Mail/MailVisuals.cs +++ b/Content.Shared/DeltaV/Mail/MailVisuals.cs @@ -1,6 +1,6 @@ using Robust.Shared.Serialization; -namespace Content.Shared.Mail +namespace Content.Shared.DeltaV.Mail { /// /// Stores the visuals for mail. diff --git a/Content.Shared/DeltaV/Mail/SharedMailComponent.cs b/Content.Shared/DeltaV/Mail/SharedMailComponent.cs new file mode 100644 index 00000000000..6f4d7a2278b --- /dev/null +++ b/Content.Shared/DeltaV/Mail/SharedMailComponent.cs @@ -0,0 +1,6 @@ +namespace Content.Shared.DeltaV.Mail +{ + public abstract partial class SharedMailComponent : Component + { + } +} diff --git a/Content.Shared/DeltaV/Recruiter/RecruiterPenComponent.cs b/Content.Shared/DeltaV/Recruiter/RecruiterPenComponent.cs index 654e987320e..b753ffdd9ef 100644 --- a/Content.Shared/DeltaV/Recruiter/RecruiterPenComponent.cs +++ b/Content.Shared/DeltaV/Recruiter/RecruiterPenComponent.cs @@ -1,7 +1,7 @@ -using Content.Shared.FixedPoint; +using Content.Shared.NPC.Prototypes; using Content.Shared.Whitelist; using Robust.Shared.GameStates; -using Robust.Shared.Serialization; +using Robust.Shared.Prototypes; namespace Content.Shared.DeltaV.Recruiter; @@ -45,8 +45,8 @@ public sealed partial class RecruiterPenComponent : Component public EntityWhitelist? Blacklist; /// - /// If the user's mind matches this blacklist they can't use this pen. + /// If the user is in any of these factions they can't use this pen. /// [DataField] - public EntityWhitelist? MindBlacklist; + public List> FactionBlacklist = new(); } diff --git a/Content.Shared/DeltaV/Recruiter/SharedRecruiterPenSystem.cs b/Content.Shared/DeltaV/Recruiter/SharedRecruiterPenSystem.cs index cdd8a1ddd4f..9ac22df2920 100644 --- a/Content.Shared/DeltaV/Recruiter/SharedRecruiterPenSystem.cs +++ b/Content.Shared/DeltaV/Recruiter/SharedRecruiterPenSystem.cs @@ -6,8 +6,11 @@ using Content.Shared.Interaction.Events; using Content.Shared.Mind; using Content.Shared.Mindshield.Components; +using Content.Shared.NPC.Systems; using Content.Shared.Popups; +using Content.Shared.Roles; using Content.Shared.Whitelist; +using Robust.Shared.Timing; namespace Content.Shared.DeltaV.Recruiter; @@ -17,8 +20,11 @@ namespace Content.Shared.DeltaV.Recruiter; public abstract class SharedRecruiterPenSystem : EntitySystem { [Dependency] private readonly EntityWhitelistSystem _whitelist = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly NpcFactionSystem _faction = default!; [Dependency] protected readonly SharedMindSystem Mind = default!; [Dependency] protected readonly SharedPopupSystem Popup = default!; + [Dependency] private readonly SharedRoleSystem _role = default!; [Dependency] private readonly SharedSolutionContainerSystem _solution = default!; private EntityQuery _shieldQuery; @@ -45,7 +51,7 @@ private void OnHandSelected(Entity ent, ref HandSelectedE if (!Mind.TryGetMind(user, out var mind, out _)) return; - if (!HasComp(mind)) + if (!_role.MindHasRole(mind)) return; Popup.PopupEntity(Loc.GetString("recruiter-pen-bound", ("pen", uid)), user, user); @@ -77,7 +83,7 @@ private void OnPrick(Entity ent, ref UseInHandEvent args) private void OnSignAttempt(Entity ent, ref SignAttemptEvent args) { var (uid, comp) = ent; - if (args.Cancelled) + if (args.Cancelled || !_timing.IsFirstTimePredicted) return; args.Cancelled = true; @@ -88,7 +94,7 @@ private void OnSignAttempt(Entity ent, ref SignAttemptEve var user = args.User; if (!comp.Bound) { - Popup.PopupEntity(Loc.GetString("recruiter-pen-locked", ("pen", uid)), user, user); + Popup.PopupClient(Loc.GetString("recruiter-pen-locked", ("pen", uid)), user, user); return; } @@ -97,7 +103,7 @@ private void OnSignAttempt(Entity ent, ref SignAttemptEve if (blood.Value.Comp.Solution.AvailableVolume > 0) { - Popup.PopupEntity(Loc.GetString("recruiter-pen-empty", ("pen", uid)), user, user); + Popup.PopupClient(Loc.GetString("recruiter-pen-empty", ("pen", uid)), user, user); return; } @@ -110,11 +116,8 @@ private void OnSignAttempt(Entity ent, ref SignAttemptEve private bool CheckBlacklist(Entity ent, EntityUid user, string action) { - if (!Mind.TryGetMind(user, out var mind, out _)) - return false; // mindless nt drone... - var (uid, comp) = ent; - if (_whitelist.IsBlacklistPass(comp.Blacklist, user) || _whitelist.IsBlacklistPass(comp.MindBlacklist, mind)) + if (_whitelist.IsBlacklistPass(comp.Blacklist, user) || _faction.IsMemberOfAny(user, ent.Comp.FactionBlacklist)) { Popup.PopupPredicted(Loc.GetString($"recruiter-pen-{action}-forbidden", ("pen", uid)), user, user); return true; diff --git a/Content.Shared/DeltaV/Roles/FugitiveRoleComponent.cs b/Content.Shared/DeltaV/Roles/FugitiveRoleComponent.cs new file mode 100644 index 00000000000..6e081a72b93 --- /dev/null +++ b/Content.Shared/DeltaV/Roles/FugitiveRoleComponent.cs @@ -0,0 +1,6 @@ +using Content.Shared.Roles; + +namespace Content.Shared.DeltaV.Roles; + +[RegisterComponent] +public sealed partial class FugitiveRoleComponent : BaseMindRoleComponent; diff --git a/Content.Shared/DeltaV/Roles/ListeningPostRoleComponent.cs b/Content.Shared/DeltaV/Roles/ListeningPostRoleComponent.cs index f244e0176bb..4d94a7c1ed6 100644 --- a/Content.Shared/DeltaV/Roles/ListeningPostRoleComponent.cs +++ b/Content.Shared/DeltaV/Roles/ListeningPostRoleComponent.cs @@ -2,5 +2,5 @@ namespace Content.Shared.DeltaV.Roles; -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class ListeningPostRoleComponent : AntagonistRoleComponent; +[RegisterComponent] +public sealed partial class ListeningPostRoleComponent : BaseMindRoleComponent; diff --git a/Content.Shared/DeltaV/Roles/ParadoxAnomalyRole.cs b/Content.Shared/DeltaV/Roles/ParadoxAnomalyRole.cs index dfafb7341f7..9f2e4902d3c 100644 --- a/Content.Shared/DeltaV/Roles/ParadoxAnomalyRole.cs +++ b/Content.Shared/DeltaV/Roles/ParadoxAnomalyRole.cs @@ -2,5 +2,5 @@ namespace Content.Shared.DeltaV.Roles; -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class ParadoxAnomalyRoleComponent : AntagonistRoleComponent; +[RegisterComponent] +public sealed partial class ParadoxAnomalyRoleComponent : BaseMindRoleComponent; diff --git a/Content.Shared/DeltaV/Roles/RecruiterRole.cs b/Content.Shared/DeltaV/Roles/RecruiterRole.cs index 62603885023..d85ff85fa12 100644 --- a/Content.Shared/DeltaV/Roles/RecruiterRole.cs +++ b/Content.Shared/DeltaV/Roles/RecruiterRole.cs @@ -2,5 +2,5 @@ namespace Content.Shared.DeltaV.Roles; -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class RecruiterRoleComponent : AntagonistRoleComponent; +[RegisterComponent] +public sealed partial class RecruiterRoleComponent : BaseMindRoleComponent; diff --git a/Content.Shared/DeltaV/Roles/SharedRoleSystem.DeltaV.cs b/Content.Shared/DeltaV/Roles/SharedRoleSystem.DeltaV.cs deleted file mode 100644 index c4de921543f..00000000000 --- a/Content.Shared/DeltaV/Roles/SharedRoleSystem.DeltaV.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Content.Shared.DeltaV.Roles; - -namespace Content.Shared.Roles; - -public abstract partial class SharedRoleSystem -{ - private void InitializeDeltaV() - { - SubscribeAntagEvents(); - SubscribeAntagEvents(); - SubscribeAntagEvents(); - SubscribeAntagEvents(); - } -} diff --git a/Content.Shared/DeltaV/Roles/SynthesisRole.cs b/Content.Shared/DeltaV/Roles/SynthesisRole.cs index 16a680a3497..b850ac6e44c 100644 --- a/Content.Shared/DeltaV/Roles/SynthesisRole.cs +++ b/Content.Shared/DeltaV/Roles/SynthesisRole.cs @@ -2,5 +2,5 @@ namespace Content.Shared.DeltaV.Roles; -[RegisterComponent, ExclusiveAntagonist] -public sealed partial class SynthesisRoleComponent : AntagonistRoleComponent; +[RegisterComponent] +public sealed partial class SynthesisRoleComponent : BaseMindRoleComponent; diff --git a/Content.Shared/DeltaV/Speech/HushedComponent.cs b/Content.Shared/DeltaV/Speech/HushedComponent.cs new file mode 100644 index 00000000000..db13e31438d --- /dev/null +++ b/Content.Shared/DeltaV/Speech/HushedComponent.cs @@ -0,0 +1,6 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Speech.Hushing; + +[RegisterComponent, NetworkedComponent] +public sealed partial class HushedComponent : Component; diff --git a/Content.Shared/Doors/Components/AirlockComponent.cs b/Content.Shared/Doors/Components/AirlockComponent.cs index 6577b1942ac..6b3fcfad7e4 100644 --- a/Content.Shared/Doors/Components/AirlockComponent.cs +++ b/Content.Shared/Doors/Components/AirlockComponent.cs @@ -1,5 +1,6 @@ using Content.Shared.DeviceLinking; using Content.Shared.Doors.Systems; +using Robust.Shared.Audio; using Robust.Shared.GameStates; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; @@ -23,6 +24,18 @@ public sealed partial class AirlockComponent : Component [ViewVariables(VVAccess.ReadWrite)] [DataField, AutoNetworkedField] public bool EmergencyAccess = false; + + /// + /// Sound to play when the airlock emergency access is turned on. + /// + [DataField] + public SoundSpecifier EmergencyOnSound = new SoundPathSpecifier("/Audio/Machines/airlock_emergencyon.ogg"); + + /// + /// Sound to play when the airlock emergency access is turned off. + /// + [DataField] + public SoundSpecifier EmergencyOffSound = new SoundPathSpecifier("/Audio/Machines/airlock_emergencyoff.ogg"); /// /// Pry modifier for a powered airlock. diff --git a/Content.Shared/Doors/Systems/SharedAirlockSystem.cs b/Content.Shared/Doors/Systems/SharedAirlockSystem.cs index c0c274207b6..e404a91bdd7 100644 --- a/Content.Shared/Doors/Systems/SharedAirlockSystem.cs +++ b/Content.Shared/Doors/Systems/SharedAirlockSystem.cs @@ -1,16 +1,20 @@ using Content.Shared.Doors.Components; +using Robust.Shared.Audio.Systems; using Content.Shared.Popups; using Content.Shared.Prying.Components; using Content.Shared.Wires; +using Robust.Shared.Timing; namespace Content.Shared.Doors.Systems; public abstract class SharedAirlockSystem : EntitySystem { + [Dependency] private readonly IGameTiming _timing = default!; [Dependency] protected readonly SharedAppearanceSystem Appearance = default!; + [Dependency] protected readonly SharedAudioSystem Audio = default!; [Dependency] protected readonly SharedDoorSystem DoorSystem = default!; [Dependency] protected readonly SharedPopupSystem Popup = default!; - [Dependency] private readonly SharedWiresSystem _wiresSystem = default!; + [Dependency] private readonly SharedWiresSystem _wiresSystem = default!; public override void Initialize() { @@ -46,6 +50,10 @@ private void OnBeforeDoorClosed(EntityUid uid, AirlockComponent airlock, BeforeD private void OnStateChanged(EntityUid uid, AirlockComponent component, DoorStateChangedEvent args) { + // This is here so we don't accidentally bulldoze state values and mispredict. + if (_timing.ApplyingState) + return; + // Only show the maintenance panel if the airlock is closed if (TryComp(uid, out var wiresPanel)) { @@ -126,11 +134,23 @@ public void UpdateEmergencyLightStatus(EntityUid uid, AirlockComponent component Appearance.SetData(uid, DoorVisuals.EmergencyLights, component.EmergencyAccess); } - public void ToggleEmergencyAccess(EntityUid uid, AirlockComponent component) + public void SetEmergencyAccess(Entity ent, bool value, EntityUid? user = null, bool predicted = false) { - component.EmergencyAccess = !component.EmergencyAccess; - Dirty(uid, component); // This only runs on the server apparently so we need this. - UpdateEmergencyLightStatus(uid, component); + if(!ent.Comp.Powered) + return; + + if (ent.Comp.EmergencyAccess == value) + return; + + ent.Comp.EmergencyAccess = value; + Dirty(ent, ent.Comp); // This only runs on the server apparently so we need this. + UpdateEmergencyLightStatus(ent, ent.Comp); + + var sound = ent.Comp.EmergencyAccess ? ent.Comp.EmergencyOnSound : ent.Comp.EmergencyOffSound; + if (predicted) + Audio.PlayPredicted(sound, ent, user: user); + else + Audio.PlayPvs(sound, ent); } public void SetAutoCloseDelayModifier(AirlockComponent component, float value) diff --git a/Content.Shared/Doors/Systems/SharedDoorSystem.Bolts.cs b/Content.Shared/Doors/Systems/SharedDoorSystem.Bolts.cs index 35681bfd822..13050616e1b 100644 --- a/Content.Shared/Doors/Systems/SharedDoorSystem.Bolts.cs +++ b/Content.Shared/Doors/Systems/SharedDoorSystem.Bolts.cs @@ -77,8 +77,20 @@ public void SetBoltLightsEnabled(Entity ent, bool value) public void SetBoltsDown(Entity ent, bool value, EntityUid? user = null, bool predicted = false) { + TrySetBoltDown(ent, value, user, predicted); + } + + public bool TrySetBoltDown( + Entity ent, + bool value, + EntityUid? user = null, + bool predicted = false + ) + { + if (!_powerReceiver.IsPowered(ent.Owner)) + return false; if (ent.Comp.BoltsDown == value) - return; + return false; ent.Comp.BoltsDown = value; Dirty(ent, ent.Comp); @@ -89,6 +101,7 @@ public void SetBoltsDown(Entity ent, bool value, EntityUid? u Audio.PlayPredicted(sound, ent, user: user); else Audio.PlayPvs(sound, ent); + return true; } private void OnStateChanged(Entity entity, ref DoorStateChangedEvent args) diff --git a/Content.Shared/Doors/Systems/SharedDoorSystem.cs b/Content.Shared/Doors/Systems/SharedDoorSystem.cs index 2319d5e916b..80e7ff96698 100644 --- a/Content.Shared/Doors/Systems/SharedDoorSystem.cs +++ b/Content.Shared/Doors/Systems/SharedDoorSystem.cs @@ -9,6 +9,7 @@ using Content.Shared.Interaction; using Content.Shared.Physics; using Content.Shared.Popups; +using Content.Shared.Power.EntitySystems; using Content.Shared.Prying.Components; using Content.Shared.Prying.Systems; using Content.Shared.Stunnable; @@ -22,6 +23,7 @@ using Robust.Shared.Audio.Systems; using Robust.Shared.Network; using Robust.Shared.Map.Components; +using Robust.Shared.Physics; namespace Content.Shared.Doors.Systems; @@ -42,26 +44,19 @@ public abstract partial class SharedDoorSystem : EntitySystem [Dependency] private readonly PryingSystem _pryingSystem = default!; [Dependency] protected readonly SharedPopupSystem Popup = default!; [Dependency] private readonly SharedMapSystem _mapSystem = default!; + [Dependency] private readonly SharedPowerReceiverSystem _powerReceiver = default!; [ValidatePrototypeId] public const string DoorBumpTag = "DoorBumpOpener"; - /// - /// A body must have an intersection percentage larger than this in order to be considered as colliding with a - /// door. Used for safety close-blocking and crushing. - /// - /// - /// The intersection percentage relies on WORLD AABBs. So if this is too small, and the grid is rotated 45 - /// degrees, then an entity outside of the airlock may be crushed. - /// - public const float IntersectPercentage = 0.2f; - /// /// A set of doors that are currently opening, closing, or just queued to open/close after some delay. /// private readonly HashSet> _activeDoors = new(); + private readonly HashSet> _doorIntersecting = new(); + public override void Initialize() { base.Initialize(); @@ -161,7 +156,6 @@ private void OnHandleState(Entity ent, ref AfterAutoHandleStateEv _activeDoors.Add(ent); RaiseLocalEvent(ent, new DoorStateChangedEvent(door.State)); - AppearanceSystem.SetData(ent, DoorVisuals.State, door.State); } protected bool SetState(EntityUid uid, DoorState state, DoorComponent? door = null) @@ -209,6 +203,7 @@ protected bool SetState(EntityUid uid, DoorState state, DoorComponent? door = nu door.State = state; Dirty(uid, door); RaiseLocalEvent(uid, new DoorStateChangedEvent(state)); + AppearanceSystem.SetData(uid, DoorVisuals.State, door.State); return true; } @@ -555,20 +550,24 @@ public IEnumerable GetColliding(EntityUid uid, PhysicsComponent? phys if (!TryComp(xform.GridUid, out var mapGridComp)) yield break; var tileRef = _mapSystem.GetTileRef(xform.GridUid.Value, mapGridComp, xform.Coordinates); - var doorWorldBounds = _entityLookup.GetWorldBounds(tileRef); + + _doorIntersecting.Clear(); + _entityLookup.GetLocalEntitiesIntersecting(xform.GridUid.Value, tileRef.GridIndices, _doorIntersecting, gridComp: mapGridComp, flags: (LookupFlags.All & ~LookupFlags.Sensors)); // TODO SLOTH fix electro's code. // ReSharper disable once InconsistentNaming - var doorAABB = _entityLookup.GetWorldAABB(uid); - foreach (var otherPhysics in PhysicsSystem.GetCollidingEntities(Transform(uid).MapID, doorWorldBounds)) + foreach (var otherPhysics in _doorIntersecting) { if (otherPhysics.Comp == physics) continue; + if (!otherPhysics.Comp.CanCollide) + continue; + //TODO: Make only shutters ignore these objects upon colliding instead of all airlocks // Excludes Glasslayer for windows, GlassAirlockLayer for windoors, TableLayer for tables - if (!otherPhysics.Comp.CanCollide || otherPhysics.Comp.CollisionLayer == (int) CollisionGroup.GlassLayer || otherPhysics.Comp.CollisionLayer == (int) CollisionGroup.GlassAirlockLayer || otherPhysics.Comp.CollisionLayer == (int) CollisionGroup.TableLayer) + if (otherPhysics.Comp.CollisionLayer == (int) CollisionGroup.GlassLayer || otherPhysics.Comp.CollisionLayer == (int) CollisionGroup.GlassAirlockLayer || otherPhysics.Comp.CollisionLayer == (int) CollisionGroup.TableLayer) continue; //If the colliding entity is a slippable item ignore it by the airlock @@ -582,9 +581,6 @@ public IEnumerable GetColliding(EntityUid uid, PhysicsComponent? phys if ((physics.CollisionMask & otherPhysics.Comp.CollisionLayer) == 0 && (otherPhysics.Comp.CollisionMask & physics.CollisionLayer) == 0) continue; - if (_entityLookup.GetWorldAABB(otherPhysics.Owner).IntersectPercentage(doorAABB) < IntersectPercentage) - continue; - yield return otherPhysics.Owner; } } @@ -612,7 +608,7 @@ private void HandleCollide(EntityUid uid, DoorComponent door, ref StartCollideEv var otherUid = args.OtherEntity; if (Tags.HasTag(otherUid, DoorBumpTag)) - TryOpen(uid, door, otherUid, quiet: door.State == DoorState.Denying); + TryOpen(uid, door, otherUid, quiet: door.State == DoorState.Denying, predicted: true); } #endregion @@ -712,7 +708,7 @@ protected void CheckDoorBump(Entity ent) var (uid, door, physics) = ent; if (door.BumpOpen) { - foreach (var other in PhysicsSystem.GetContactingEntities(uid, physics, approximate: true)) + foreach (var other in PhysicsSystem.GetContactingEntities(uid, physics)) { if (Tags.HasTag(other, DoorBumpTag) && TryOpen(uid, door, other, quiet: true)) break; diff --git a/Content.Server/Electrocution/Components/ElectrifiedComponent.cs b/Content.Shared/Electrocution/Components/ElectrifiedComponent.cs similarity index 65% rename from Content.Server/Electrocution/Components/ElectrifiedComponent.cs rename to Content.Shared/Electrocution/Components/ElectrifiedComponent.cs index 5755e98091b..52eb76ca541 100644 --- a/Content.Server/Electrocution/Components/ElectrifiedComponent.cs +++ b/Content.Shared/Electrocution/Components/ElectrifiedComponent.cs @@ -1,121 +1,131 @@ +using Robust.Shared.GameStates; using Robust.Shared.Audio; -namespace Content.Server.Electrocution; +namespace Content.Shared.Electrocution; /// /// Component for things that shock users on touch. /// -[RegisterComponent] +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] public sealed partial class ElectrifiedComponent : Component { - [DataField("enabled")] + [DataField, AutoNetworkedField] public bool Enabled = true; /// /// Should player get damage on collide /// - [DataField("onBump")] + [DataField, AutoNetworkedField] public bool OnBump = true; /// /// Should player get damage on attack /// - [DataField("onAttacked")] + [DataField, AutoNetworkedField] public bool OnAttacked = true; /// /// When true - disables power if a window is present in the same tile /// - [DataField("noWindowInTile")] + [DataField, AutoNetworkedField] public bool NoWindowInTile = false; /// /// Should player get damage on interact with empty hand /// - [DataField("onHandInteract")] + [DataField, AutoNetworkedField] public bool OnHandInteract = true; /// /// Should player get damage on interact while holding an object in their hand /// - [DataField("onInteractUsing")] + [DataField, AutoNetworkedField] public bool OnInteractUsing = true; /// /// Indicates if the entity requires power to function /// - [DataField("requirePower")] + [DataField, AutoNetworkedField] public bool RequirePower = true; /// /// Indicates if the entity uses APC power /// - [DataField("usesApcPower")] + [DataField, AutoNetworkedField] public bool UsesApcPower = false; /// /// Identifier for the high voltage node. /// - [DataField("highVoltageNode")] + [DataField, AutoNetworkedField] public string? HighVoltageNode; /// /// Identifier for the medium voltage node. /// - [DataField("mediumVoltageNode")] + [DataField, AutoNetworkedField] public string? MediumVoltageNode; /// /// Identifier for the low voltage node. /// - [DataField("lowVoltageNode")] + [DataField, AutoNetworkedField] public string? LowVoltageNode; /// /// Damage multiplier for HV electrocution /// - [DataField] + [DataField, AutoNetworkedField] public float HighVoltageDamageMultiplier = 3f; /// /// Shock time multiplier for HV electrocution /// - [DataField] + [DataField, AutoNetworkedField] public float HighVoltageTimeMultiplier = 1.5f; /// /// Damage multiplier for MV electrocution /// - [DataField] + [DataField, AutoNetworkedField] public float MediumVoltageDamageMultiplier = 2f; /// /// Shock time multiplier for MV electrocution /// - [DataField] + [DataField, AutoNetworkedField] public float MediumVoltageTimeMultiplier = 1.25f; - [DataField("shockDamage")] + [DataField, AutoNetworkedField] public float ShockDamage = 7.5f; /// /// Shock time, in seconds. /// - [DataField("shockTime")] + [DataField, AutoNetworkedField] public float ShockTime = 8f; - [DataField("siemensCoefficient")] + [DataField, AutoNetworkedField] public float SiemensCoefficient = 1f; - [DataField("shockNoises")] + [DataField, AutoNetworkedField] public SoundSpecifier ShockNoises = new SoundCollectionSpecifier("sparks"); - [DataField("playSoundOnShock")] + [DataField, AutoNetworkedField] + public SoundPathSpecifier AirlockElectrifyDisabled = new("/Audio/Machines/airlock_electrify_on.ogg"); + + [DataField, AutoNetworkedField] + public SoundPathSpecifier AirlockElectrifyEnabled = new("/Audio/Machines/airlock_electrify_off.ogg"); + + [DataField, AutoNetworkedField] public bool PlaySoundOnShock = true; - [DataField("shockVolume")] + [DataField, AutoNetworkedField] public float ShockVolume = 20; - [DataField] + [DataField, AutoNetworkedField] public float Probability = 1f; + + [DataField, AutoNetworkedField] + public bool IsWireCut = false; } diff --git a/Content.Shared/Electrocution/SharedElectrocutionSystem.cs b/Content.Shared/Electrocution/SharedElectrocutionSystem.cs index b228a987af4..e36e4a804b7 100644 --- a/Content.Shared/Electrocution/SharedElectrocutionSystem.cs +++ b/Content.Shared/Electrocution/SharedElectrocutionSystem.cs @@ -23,6 +23,20 @@ public void SetInsulatedSiemensCoefficient(EntityUid uid, float siemensCoefficie Dirty(uid, insulated); } + /// + /// Sets electrified value of component and marks dirty if required. + /// + public void SetElectrified(Entity ent, bool value) + { + if (ent.Comp.Enabled == value) + { + return; + } + + ent.Comp.Enabled = value; + Dirty(ent, ent.Comp); + } + /// Entity being electrocuted. /// Source entity of the electrocution. /// How much shock damage the entity takes. diff --git a/Content.Shared/Ensnaring/Components/EnsnareableComponent.cs b/Content.Shared/Ensnaring/Components/EnsnareableComponent.cs index cd7824bb960..307a5e19863 100644 --- a/Content.Shared/Ensnaring/Components/EnsnareableComponent.cs +++ b/Content.Shared/Ensnaring/Components/EnsnareableComponent.cs @@ -2,34 +2,30 @@ using Robust.Shared.Containers; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; -using Robust.Shared.Serialization; namespace Content.Shared.Ensnaring.Components; /// /// Use this on an entity that you would like to be ensnared by anything that has the /// -[RegisterComponent, NetworkedComponent] +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)] public sealed partial class EnsnareableComponent : Component { /// /// How much should this slow down the entities walk? /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("walkSpeed")] + [DataField] public float WalkSpeed = 1.0f; /// /// How much should this slow down the entities sprint? /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("sprintSpeed")] + [DataField] public float SprintSpeed = 1.0f; /// /// Is this entity currently ensnared? /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("isEnsnared")] + [DataField, AutoNetworkedField] public bool IsEnsnared; /// @@ -37,10 +33,10 @@ public sealed partial class EnsnareableComponent : Component /// public Container Container = default!; - [DataField("sprite")] + [DataField] public string? Sprite; - [DataField("state")] + [DataField] public string? State; [DataField] @@ -49,17 +45,6 @@ public sealed partial class EnsnareableComponent : Component public sealed partial class RemoveEnsnareAlertEvent : BaseAlertEvent; -[Serializable, NetSerializable] -public sealed class EnsnareableComponentState : ComponentState -{ - public readonly bool IsEnsnared; - - public EnsnareableComponentState(bool isEnsnared) - { - IsEnsnared = isEnsnared; - } -} - public sealed class EnsnaredChangedEvent : EntityEventArgs { public readonly bool IsEnsnared; diff --git a/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs b/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs index 6e1f3077f30..f900d863c2a 100644 --- a/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs +++ b/Content.Shared/Ensnaring/Components/EnsnaringComponent.cs @@ -1,4 +1,4 @@ -using System.Threading; +using Robust.Shared.Audio; using Robust.Shared.GameStates; namespace Content.Shared.Ensnaring.Components; @@ -11,59 +11,53 @@ public sealed partial class EnsnaringComponent : Component /// /// How long it should take to free someone else. /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("freeTime")] + [DataField] public float FreeTime = 3.5f; /// /// How long it should take for an entity to free themselves. /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("breakoutTime")] + [DataField] public float BreakoutTime = 30.0f; /// /// How much should this slow down the entities walk? /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("walkSpeed")] + [DataField] public float WalkSpeed = 0.9f; /// /// How much should this slow down the entities sprint? /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("sprintSpeed")] + [DataField] public float SprintSpeed = 0.9f; /// /// How much stamina does the ensnare sap /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("staminaDamage")] + [DataField] public float StaminaDamage = 55f; /// /// Should this ensnare someone when thrown? /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("canThrowTrigger")] + [DataField] public bool CanThrowTrigger; /// /// What is ensnared? /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("ensnared")] + [DataField] public EntityUid? Ensnared; /// /// Should breaking out be possible when moving? /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("canMoveBreakout")] + [DataField] public bool CanMoveBreakout; + [DataField] + public SoundSpecifier? EnsnareSound = new SoundPathSpecifier("/Audio/Effects/snap.ogg"); } /// @@ -95,29 +89,3 @@ public EnsnareRemoveEvent(float walkSpeed, float sprintSpeed) SprintSpeed = sprintSpeed; } } - -/// -/// Used for the do after event to free the entity that owns the -/// -public sealed class FreeEnsnareDoAfterComplete : EntityEventArgs -{ - public readonly EntityUid EnsnaringEntity; - - public FreeEnsnareDoAfterComplete(EntityUid ensnaringEntity) - { - EnsnaringEntity = ensnaringEntity; - } -} - -/// -/// Used for the do after event when it fails to free the entity that owns the -/// -public sealed class FreeEnsnareDoAfterCancel : EntityEventArgs -{ - public readonly EntityUid EnsnaringEntity; - - public FreeEnsnareDoAfterCancel(EntityUid ensnaringEntity) - { - EnsnaringEntity = ensnaringEntity; - } -} diff --git a/Content.Shared/Ensnaring/SharedEnsnareableSystem.cs b/Content.Shared/Ensnaring/SharedEnsnareableSystem.cs index 4f35dc583a1..551c76ff8d5 100644 --- a/Content.Shared/Ensnaring/SharedEnsnareableSystem.cs +++ b/Content.Shared/Ensnaring/SharedEnsnareableSystem.cs @@ -1,7 +1,21 @@ +using System.Linq; +using Content.Shared.Alert; +using Content.Shared.Body.Part; +using Content.Shared.Body.Systems; +using Content.Shared.CombatMode.Pacification; +using Content.Shared.Damage.Components; +using Content.Shared.Damage.Systems; using Content.Shared.DoAfter; using Content.Shared.Ensnaring.Components; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.IdentityManagement; using Content.Shared.Movement.Systems; -using Robust.Shared.GameStates; +using Content.Shared.Popups; +using Content.Shared.StepTrigger.Systems; +using Content.Shared.Strip.Components; +using Content.Shared.Throwing; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Containers; using Robust.Shared.Serialization; namespace Content.Shared.Ensnaring; @@ -13,36 +27,82 @@ public sealed partial class EnsnareableDoAfterEvent : SimpleDoAfterEvent public abstract class SharedEnsnareableSystem : EntitySystem { - [Dependency] private readonly MovementSpeedModifierSystem _speedModifier = default!; + [Dependency] private readonly AlertsSystem _alerts = default!; + [Dependency] private readonly MovementSpeedModifierSystem _speedModifier = default!; [Dependency] protected readonly SharedAppearanceSystem Appearance = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedBodySystem _body = default!; + [Dependency] protected readonly SharedContainerSystem Container = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfter = default!; + [Dependency] private readonly SharedHandsSystem _hands = default!; + [Dependency] protected readonly SharedPopupSystem Popup = default!; + [Dependency] private readonly StaminaSystem _stamina = default!; public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(OnEnsnareInit); SubscribeLocalEvent(MovementSpeedModify); SubscribeLocalEvent(OnEnsnare); SubscribeLocalEvent(OnEnsnareRemove); SubscribeLocalEvent(OnEnsnareChange); - SubscribeLocalEvent(OnGetState); - SubscribeLocalEvent(OnHandleState); + SubscribeLocalEvent(OnHandleState); + SubscribeLocalEvent(OnStripEnsnareMessage); + SubscribeLocalEvent(OnRemoveEnsnareAlert); + SubscribeLocalEvent(OnDoAfter); + + SubscribeLocalEvent(OnComponentRemove); + SubscribeLocalEvent(AttemptStepTrigger); + SubscribeLocalEvent(OnStepTrigger); + SubscribeLocalEvent(OnThrowHit); + SubscribeLocalEvent(OnAttemptPacifiedThrow); } - private void OnHandleState(EntityUid uid, EnsnareableComponent component, ref ComponentHandleState args) + protected virtual void OnEnsnareInit(Entity ent, ref ComponentInit args) { - if (args.Current is not EnsnareableComponentState state) - return; - - if (state.IsEnsnared == component.IsEnsnared) - return; + ent.Comp.Container = Container.EnsureContainer(ent.Owner, "ensnare"); + } - component.IsEnsnared = state.IsEnsnared; + private void OnHandleState(EntityUid uid, EnsnareableComponent component, ref AfterAutoHandleStateEvent args) + { RaiseLocalEvent(uid, new EnsnaredChangedEvent(component.IsEnsnared)); } - private void OnGetState(EntityUid uid, EnsnareableComponent component, ref ComponentGetState args) + private void OnDoAfter(EntityUid uid, EnsnareableComponent component, DoAfterEvent args) { - args.State = new EnsnareableComponentState(component.IsEnsnared); + if (args.Args.Target == null) + return; + + if (args.Handled || !TryComp(args.Args.Used, out var ensnaring)) + return; + + if (args.Cancelled || !Container.Remove(args.Args.Used.Value, component.Container)) + { + if (args.User == args.Target) + Popup.PopupPredicted(Loc.GetString("ensnare-component-try-free-fail", ("ensnare", args.Args.Used)), uid, args.User, PopupType.MediumCaution); + else if (args.Target != null) + Popup.PopupPredicted(Loc.GetString("ensnare-component-try-free-fail-other", ("ensnare", args.Args.Used), ("user", args.Target)), uid, args.User, PopupType.MediumCaution); + + return; + } + + component.IsEnsnared = component.Container.ContainedEntities.Count > 0; + Dirty(uid, component); + ensnaring.Ensnared = null; + + _hands.PickupOrDrop(args.Args.User, args.Args.Used.Value); + + if (args.User == args.Target) + Popup.PopupPredicted(Loc.GetString("ensnare-component-try-free-complete", ("ensnare", args.Args.Used)), uid, args.User, PopupType.Medium); + else if (args.Target != null) + Popup.PopupPredicted(Loc.GetString("ensnare-component-try-free-complete-other", ("ensnare", args.Args.Used), ("user", args.Target)), uid, args.User, PopupType.Medium); + + UpdateAlert(args.Args.Target.Value, component); + var ev = new EnsnareRemoveEvent(ensnaring.WalkSpeed, ensnaring.SprintSpeed); + RaiseLocalEvent(uid, ev); + + args.Handled = true; } private void OnEnsnare(EntityUid uid, EnsnareableComponent component, EnsnareEvent args) @@ -85,4 +145,178 @@ private void MovementSpeedModify(EntityUid uid, EnsnareableComponent component, args.ModifySpeed(component.WalkSpeed, component.SprintSpeed); } + + /// + /// Used where you want to try to free an entity with the + /// + /// The entity that will be freed + /// The entity that is freeing the target + /// The entity used to ensnare + /// The ensnaring component + public void TryFree(EntityUid target, EntityUid user, EntityUid ensnare, EnsnaringComponent component) + { + // Don't do anything if they don't have the ensnareable component. + if (!HasComp(target)) + return; + + var freeTime = user == target ? component.BreakoutTime : component.FreeTime; + var breakOnMove = !component.CanMoveBreakout; + + var doAfterEventArgs = new DoAfterArgs(EntityManager, user, freeTime, new EnsnareableDoAfterEvent(), target, target: target, used: ensnare) + { + BreakOnMove = breakOnMove, + BreakOnDamage = false, + NeedHand = true, + BreakOnDropItem = false, + }; + + if (!_doAfter.TryStartDoAfter(doAfterEventArgs)) + return; + + if (user == target) + Popup.PopupPredicted(Loc.GetString("ensnare-component-try-free", ("ensnare", ensnare)), target, target); + else + Popup.PopupPredicted(Loc.GetString("ensnare-component-try-free-other", ("ensnare", ensnare), ("user", Identity.Entity(target, EntityManager))), user, user); + } + + private void OnStripEnsnareMessage(EntityUid uid, EnsnareableComponent component, StrippingEnsnareButtonPressed args) + { + foreach (var entity in component.Container.ContainedEntities) + { + if (!TryComp(entity, out var ensnaring)) + continue; + + TryFree(uid, args.Actor, entity, ensnaring); + return; + } + } + + private void OnAttemptPacifiedThrow(Entity ent, ref AttemptPacifiedThrowEvent args) + { + args.Cancel("pacified-cannot-throw-snare"); + } + + private void OnRemoveEnsnareAlert(Entity ent, ref RemoveEnsnareAlertEvent args) + { + if (args.Handled) + return; + + foreach (var ensnare in ent.Comp.Container.ContainedEntities) + { + if (!TryComp(ensnare, out var ensnaringComponent)) + continue; + + TryFree(ent, ent, ensnare, ensnaringComponent); + + args.Handled = true; + // Only one snare at a time. + break; + } + } + + private void OnComponentRemove(EntityUid uid, EnsnaringComponent component, ComponentRemove args) + { + if (!TryComp(component.Ensnared, out var ensnared)) + return; + + if (ensnared.IsEnsnared) + ForceFree(uid, component); + } + + private void AttemptStepTrigger(EntityUid uid, EnsnaringComponent component, ref StepTriggerAttemptEvent args) + { + args.Continue = true; + } + + private void OnStepTrigger(EntityUid uid, EnsnaringComponent component, ref StepTriggeredOffEvent args) + { + TryEnsnare(args.Tripper, uid, component); + } + + private void OnThrowHit(EntityUid uid, EnsnaringComponent component, ThrowDoHitEvent args) + { + if (!component.CanThrowTrigger) + return; + + if (TryEnsnare(args.Target, uid, component)) + { + _audio.PlayPvs(component.EnsnareSound, uid); + } + } + + /// + /// Used where you want to try to ensnare an entity with the + /// + /// The entity that will be ensnared + /// The entity that is used to ensnare + /// The ensnaring component + public bool TryEnsnare(EntityUid target, EntityUid ensnare, EnsnaringComponent component) + { + //Don't do anything if they don't have the ensnareable component. + if (!TryComp(target, out var ensnareable)) + return false; + + // Need to insert before free legs check. + Container.Insert(ensnare, ensnareable.Container); + + var legs = _body.GetBodyChildrenOfType(target, BodyPartType.Leg).Count(); + var ensnaredLegs = (2 * ensnareable.Container.ContainedEntities.Count); + var freeLegs = legs - ensnaredLegs; + + if (freeLegs > 0) + return false; + + // Apply stamina damage to target if they weren't ensnared before. + if (ensnareable.IsEnsnared != true) + { + if (TryComp(target, out var stamina)) + { + _stamina.TakeStaminaDamage(target, component.StaminaDamage, with: ensnare, component: stamina); + } + } + + component.Ensnared = target; + ensnareable.IsEnsnared = true; + Dirty(target, ensnareable); + + UpdateAlert(target, ensnareable); + var ev = new EnsnareEvent(component.WalkSpeed, component.SprintSpeed); + RaiseLocalEvent(target, ev); + return true; + } + + /// + /// Used to force free someone for things like if the is removed + /// + public void ForceFree(EntityUid ensnare, EnsnaringComponent component) + { + if (component.Ensnared == null) + return; + + if (!TryComp(component.Ensnared, out var ensnareable)) + return; + + var target = component.Ensnared.Value; + + Container.Remove(ensnare, ensnareable.Container, force: true); + ensnareable.IsEnsnared = ensnareable.Container.ContainedEntities.Count > 0; + Dirty(component.Ensnared.Value, ensnareable); + component.Ensnared = null; + + UpdateAlert(target, ensnareable); + var ev = new EnsnareRemoveEvent(component.WalkSpeed, component.SprintSpeed); + RaiseLocalEvent(ensnare, ev); + } + + /// + /// Update the Ensnared alert for an entity. + /// + /// The entity that has been affected by a snare + public void UpdateAlert(EntityUid target, EnsnareableComponent component) + { + if (!component.IsEnsnared) + _alerts.ClearAlert(target, component.EnsnaredAlert); + else + _alerts.ShowAlert(target, component.EnsnaredAlert); + } } diff --git a/Content.Shared/Execution/SharedExecutionSystem.cs b/Content.Shared/Execution/SharedExecutionSystem.cs index 6489f06a94b..379bd9fcabf 100644 --- a/Content.Shared/Execution/SharedExecutionSystem.cs +++ b/Content.Shared/Execution/SharedExecutionSystem.cs @@ -4,6 +4,7 @@ using Content.Shared.Damage; using Content.Shared.Database; using Content.Shared.DoAfter; +using Content.Shared.IdentityManagement; using Content.Shared.Mobs.Components; using Content.Shared.Mobs.Systems; using Content.Shared.Popups; @@ -159,7 +160,7 @@ private void ShowExecutionInternalPopup(string locString, EntityUid attacker, En if (predict) { _popup.PopupClient( - Loc.GetString(locString, ("attacker", attacker), ("victim", victim), ("weapon", weapon)), + Loc.GetString(locString, ("attacker", Identity.Entity(attacker, EntityManager)), ("victim", Identity.Entity(victim, EntityManager)), ("weapon", weapon)), attacker, attacker, PopupType.MediumCaution @@ -168,7 +169,7 @@ private void ShowExecutionInternalPopup(string locString, EntityUid attacker, En else { _popup.PopupEntity( - Loc.GetString(locString, ("attacker", attacker), ("victim", victim), ("weapon", weapon)), + Loc.GetString(locString, ("attacker", Identity.Entity(attacker, EntityManager)), ("victim", Identity.Entity(victim, EntityManager)), ("weapon", weapon)), attacker, attacker, PopupType.MediumCaution @@ -179,7 +180,7 @@ private void ShowExecutionInternalPopup(string locString, EntityUid attacker, En private void ShowExecutionExternalPopup(string locString, EntityUid attacker, EntityUid victim, EntityUid weapon) { _popup.PopupEntity( - Loc.GetString(locString, ("attacker", attacker), ("victim", victim), ("weapon", weapon)), + Loc.GetString(locString, ("attacker", Identity.Entity(attacker, EntityManager)), ("victim", Identity.Entity(victim, EntityManager)), ("weapon", weapon)), attacker, Filter.PvsExcept(attacker), true, diff --git a/Content.Shared/Fluids/Components/DrainComponent.cs b/Content.Shared/Fluids/Components/DrainComponent.cs index 50cb5f51958..3064721bf3c 100644 --- a/Content.Shared/Fluids/Components/DrainComponent.cs +++ b/Content.Shared/Fluids/Components/DrainComponent.cs @@ -52,7 +52,7 @@ public sealed partial class DrainComponent : Component /// drain puddles from. /// [DataField] - public float Range = 2f; + public float Range = 2.5f; /// /// How often in seconds the drain checks for puddles around it. diff --git a/Content.Shared/Friction/TileFrictionController.cs b/Content.Shared/Friction/TileFrictionController.cs index 930de07dab9..eb109caa426 100644 --- a/Content.Shared/Friction/TileFrictionController.cs +++ b/Content.Shared/Friction/TileFrictionController.cs @@ -22,6 +22,7 @@ public sealed class TileFrictionController : VirtualController [Dependency] private readonly SharedGravitySystem _gravity = default!; [Dependency] private readonly SharedMoverController _mover = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; + [Dependency] private readonly SharedMapSystem _map = default!; private EntityQuery _frictionQuery; private EntityQuery _xformQuery; @@ -185,7 +186,7 @@ private float GetTileFriction( : DefaultFriction; } - var tile = grid.GetTileRef(xform.Coordinates); + var tile = _map.GetTileRef(xform.GridUid.Value, grid, xform.Coordinates); // If it's a map but on an empty tile then just assume it has gravity. if (tile.Tile.IsEmpty && diff --git a/Content.Shared/GPS/Components/HandheldGPSComponent.cs b/Content.Shared/GPS/Components/HandheldGPSComponent.cs new file mode 100644 index 00000000000..a0af0909867 --- /dev/null +++ b/Content.Shared/GPS/Components/HandheldGPSComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.GPS.Components; + +[RegisterComponent, NetworkedComponent] +public sealed partial class HandheldGPSComponent : Component +{ + [DataField] + public float UpdateRate = 1.5f; +} diff --git a/Content.Shared/Ghost/SpectralComponent.cs b/Content.Shared/Ghost/SpectralComponent.cs new file mode 100644 index 00000000000..3799951152e --- /dev/null +++ b/Content.Shared/Ghost/SpectralComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Ghost; + +/// +/// Marker component to identify "ghostly" entities. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class SpectralComponent : Component { } diff --git a/Content.Shared/Hands/Components/HandsComponent.cs b/Content.Shared/Hands/Components/HandsComponent.cs index f218455c0bb..b3cb51ae359 100644 --- a/Content.Shared/Hands/Components/HandsComponent.cs +++ b/Content.Shared/Hands/Components/HandsComponent.cs @@ -80,6 +80,12 @@ public sealed partial class HandsComponent : Component [DataField] public DisplacementData? HandDisplacement; + + /// + /// If false, hands cannot be stripped, and they do not show up in the stripping menu. + /// + [DataField] + public bool CanBeStripped = true; } [Serializable, NetSerializable] diff --git a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs index 76575df2fd8..223c2d4a378 100644 --- a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs +++ b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs @@ -1,4 +1,5 @@ using System.Numerics; +using Content.Shared.Database; using Content.Shared.Hands.Components; using Content.Shared.Interaction; using Content.Shared.Inventory.VirtualItem; @@ -130,7 +131,7 @@ public bool TryDrop(EntityUid uid, Hand hand, EntityCoordinates? targetDropLocat TransformSystem.DropNextTo((entity, itemXform), (uid, userXform)); return true; } - + // drop the item with heavy calculations from their hands and place it at the calculated interaction range position // The DoDrop is handle if there's no drop target DoDrop(uid, hand, doDropInteraction: doDropInteraction, handsComp); @@ -138,7 +139,7 @@ public bool TryDrop(EntityUid uid, Hand hand, EntityCoordinates? targetDropLocat // if there's no drop location stop here if (targetDropLocation == null) return true; - + // otherwise, also move dropped item and rotate it properly according to grid/map var (itemPos, itemRot) = TransformSystem.GetWorldPositionRotation(entity); var origin = new MapCoordinates(itemPos, itemXform.MapID); @@ -197,7 +198,7 @@ private Vector2 GetFinalDropCoordinates(EntityUid user, MapCoordinates origin, M /// /// Removes the contents of a hand from its container. Assumes that the removal is allowed. In general, you should not be calling this directly. /// - public virtual void DoDrop(EntityUid uid, Hand hand, bool doDropInteraction = true, HandsComponent? handsComp = null) + public virtual void DoDrop(EntityUid uid, Hand hand, bool doDropInteraction = true, HandsComponent? handsComp = null, bool log = true) { if (!Resolve(uid, ref handsComp)) return; @@ -221,6 +222,9 @@ public virtual void DoDrop(EntityUid uid, Hand hand, bool doDropInteraction = tr if (doDropInteraction) _interactionSystem.DroppedInteraction(uid, entity); + if (log) + _adminLogger.Add(LogType.Drop, LogImpact.Low, $"{ToPrettyString(uid):user} dropped {ToPrettyString(entity):entity}"); + if (hand == handsComp.ActiveHand) RaiseLocalEvent(entity, new HandDeselectedEvent(uid)); } diff --git a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Interactions.cs b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Interactions.cs index ae22efcd6a5..fc5adfaf15a 100644 --- a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Interactions.cs +++ b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Interactions.cs @@ -178,8 +178,8 @@ public bool TryMoveHeldEntityToActiveHand(EntityUid uid, string handName, bool c if (!CanPickupToHand(uid, entity, handsComp.ActiveHand, checkActionBlocker, handsComp)) return false; - DoDrop(uid, hand, false, handsComp); - DoPickup(uid, handsComp.ActiveHand, entity, handsComp); + DoDrop(uid, hand, false, handsComp, log:false); + DoPickup(uid, handsComp.ActiveHand, entity, handsComp, log: false); return true; } diff --git a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Pickup.cs b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Pickup.cs index 6d619460f4f..7bc0a8025fe 100644 --- a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Pickup.cs +++ b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Pickup.cs @@ -220,7 +220,7 @@ public void PickupOrDrop( /// /// Puts an entity into the player's hand, assumes that the insertion is allowed. In general, you should not be calling this function directly. /// - public virtual void DoPickup(EntityUid uid, Hand hand, EntityUid entity, HandsComponent? hands = null) + public virtual void DoPickup(EntityUid uid, Hand hand, EntityUid entity, HandsComponent? hands = null, bool log = true) { if (!Resolve(uid, ref hands)) return; @@ -235,7 +235,8 @@ public virtual void DoPickup(EntityUid uid, Hand hand, EntityUid entity, HandsCo return; } - _adminLogger.Add(LogType.Pickup, LogImpact.Low, $"{ToPrettyString(uid):user} picked up {ToPrettyString(entity):entity}"); + if (log) + _adminLogger.Add(LogType.Pickup, LogImpact.Low, $"{ToPrettyString(uid):user} picked up {ToPrettyString(entity):entity}"); Dirty(uid, hands); diff --git a/Content.Shared/Implants/SharedSubdermalImplantSystem.cs b/Content.Shared/Implants/SharedSubdermalImplantSystem.cs index 29d74071e88..afdd9196909 100644 --- a/Content.Shared/Implants/SharedSubdermalImplantSystem.cs +++ b/Content.Shared/Implants/SharedSubdermalImplantSystem.cs @@ -1,5 +1,6 @@ using System.Linq; using Content.Shared.Actions; +using Content.Shared.Chat; // Delta-v using Content.Shared.Implants.Components; using Content.Shared.Interaction; using Content.Shared.Interaction.Events; @@ -29,6 +30,7 @@ public override void Initialize() SubscribeLocalEvent(RelayToImplantEvent); SubscribeLocalEvent(RelayToImplantEvent); SubscribeLocalEvent(RelayToImplantEvent); + SubscribeLocalEvent(RelayToImplantEvent); // Delta-v } private void OnInsert(EntityUid uid, SubdermalImplantComponent component, EntGotInsertedIntoContainerMessage args) @@ -97,20 +99,36 @@ private void OnRemove(EntityUid uid, SubdermalImplantComponent component, EntGot /// public void AddImplants(EntityUid uid, IEnumerable implants) { - var coords = Transform(uid).Coordinates; foreach (var id in implants) { - var ent = Spawn(id, coords); - if (TryComp(ent, out var implant)) - { - ForceImplant(uid, ent, implant); - } - else - { - Log.Warning($"Found invalid starting implant '{id}' on {uid} {ToPrettyString(uid):implanted}"); - Del(ent); - } + AddImplant(uid, id); + } + } + + /// + /// Adds a single implant to a person, and returns the implant. + /// Logs any implant ids that don't have . + /// + /// + /// The implant, if it was successfully created. Otherwise, null. + /// > + public EntityUid? AddImplant(EntityUid uid, String implantId) + { + var coords = Transform(uid).Coordinates; + var ent = Spawn(implantId, coords); + + if (TryComp(ent, out var implant)) + { + ForceImplant(uid, ent, implant); + } + else + { + Log.Warning($"Found invalid starting implant '{implantId}' on {uid} {ToPrettyString(uid):implanted}"); + Del(ent); + return null; } + + return ent; } /// diff --git a/Content.Shared/Interaction/Events/ContactInteractionEvent.cs b/Content.Shared/Interaction/Events/ContactInteractionEvent.cs index c9d5fba2ed0..7be1c01c4ad 100644 --- a/Content.Shared/Interaction/Events/ContactInteractionEvent.cs +++ b/Content.Shared/Interaction/Events/ContactInteractionEvent.cs @@ -8,7 +8,7 @@ namespace Content.Shared.Interaction.Events; /// public sealed class ContactInteractionEvent : HandledEntityEventArgs { - public readonly EntityUid Other; + public EntityUid Other; public ContactInteractionEvent(EntityUid other) { diff --git a/Content.Shared/Interaction/Events/InteractionFailureEvent.cs b/Content.Shared/Interaction/Events/InteractionFailureEvent.cs index a820048104d..86701642939 100644 --- a/Content.Shared/Interaction/Events/InteractionFailureEvent.cs +++ b/Content.Shared/Interaction/Events/InteractionFailureEvent.cs @@ -3,5 +3,7 @@ namespace Content.Shared.Interaction.Events; /// /// Raised on the target when failing to pet/hug something. /// +// TODO INTERACTION +// Rename this, or move it to another namespace to make it clearer that this is specific to "petting/hugging" (InteractionPopupSystem) [ByRefEvent] public readonly record struct InteractionFailureEvent(EntityUid User); diff --git a/Content.Shared/Interaction/Events/InteractionSuccessEvent.cs b/Content.Shared/Interaction/Events/InteractionSuccessEvent.cs index da4f9e43d7d..9395ddc910c 100644 --- a/Content.Shared/Interaction/Events/InteractionSuccessEvent.cs +++ b/Content.Shared/Interaction/Events/InteractionSuccessEvent.cs @@ -3,5 +3,7 @@ namespace Content.Shared.Interaction.Events; /// /// Raised on the target when successfully petting/hugging something. /// +// TODO INTERACTION +// Rename this, or move it to another namespace to make it clearer that this is specific to "petting/hugging" (InteractionPopupSystem) [ByRefEvent] public readonly record struct InteractionSuccessEvent(EntityUid User); diff --git a/Content.Shared/Interaction/SharedInteractionSystem.cs b/Content.Shared/Interaction/SharedInteractionSystem.cs index 8539b9d282b..7f2ecb50f88 100644 --- a/Content.Shared/Interaction/SharedInteractionSystem.cs +++ b/Content.Shared/Interaction/SharedInteractionSystem.cs @@ -2,6 +2,8 @@ using System.Linq; using Content.Shared.ActionBlocker; using Content.Shared.Administration.Logs; +using Content.Shared.CCVar; +using Content.Shared.Chat; using Content.Shared.CombatMode; using Content.Shared.Database; using Content.Shared.Ghost; @@ -16,8 +18,8 @@ using Content.Shared.Movement.Components; using Content.Shared.Movement.Pulling.Systems; using Content.Shared.Physics; +using Content.Shared.Players.RateLimiting; using Content.Shared.Popups; -using Content.Shared.Silicons.StationAi; using Content.Shared.Storage; using Content.Shared.Tag; using Content.Shared.Timing; @@ -25,6 +27,7 @@ using Content.Shared.Verbs; using Content.Shared.Wall; using JetBrains.Annotations; +using Robust.Shared.Configuration; using Robust.Shared.Containers; using Robust.Shared.Input; using Robust.Shared.Input.Binding; @@ -64,6 +67,9 @@ public abstract partial class SharedInteractionSystem : EntitySystem [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly TagSystem _tagSystem = default!; [Dependency] private readonly SharedUserInterfaceSystem _ui = default!; + [Dependency] private readonly SharedPlayerRateLimitManager _rateLimit = default!; + [Dependency] private readonly IConfigurationManager _cfg = default!; + [Dependency] private readonly ISharedChatManager _chat = default!; private EntityQuery _ignoreUiRangeQuery; private EntityQuery _fixtureQuery; @@ -80,8 +86,8 @@ public abstract partial class SharedInteractionSystem : EntitySystem public const float InteractionRange = 1.5f; public const float InteractionRangeSquared = InteractionRange * InteractionRange; - public const float MaxRaycastRange = 100f; + public const string RateLimitKey = "Interaction"; public delegate bool Ignored(EntityUid entity); @@ -119,9 +125,22 @@ public override void Initialize() new PointerInputCmdHandler(HandleTryPullObject)) .Register(); + _rateLimit.Register(RateLimitKey, + new RateLimitRegistration(CCVars.InteractionRateLimitPeriod, + CCVars.InteractionRateLimitCount, + null, + CCVars.InteractionRateLimitAnnounceAdminsDelay, + RateLimitAlertAdmins) + ); + InitializeBlocking(); } + private void RateLimitAlertAdmins(ICommonSession session) + { + _chat.SendAdminAlert(Loc.GetString("interaction-rate-limit-admin-announcement", ("player", session.Name))); + } + public override void Shutdown() { CommandBinds.Unregister(); @@ -437,8 +456,22 @@ public void UserInteraction( inRangeUnobstructed); } + private bool IsDeleted(EntityUid uid) + { + return TerminatingOrDeleted(uid) || EntityManager.IsQueuedForDeletion(uid); + } + + private bool IsDeleted(EntityUid? uid) + { + //optional / null entities can pass this validation check. I.e., is-deleted returns false for null uids + return uid != null && IsDeleted(uid.Value); + } + public void InteractHand(EntityUid user, EntityUid target) { + if (IsDeleted(user) || IsDeleted(target)) + return; + var complexInteractions = _actionBlockerSystem.CanComplexInteract(user); if (!complexInteractions) { @@ -447,7 +480,8 @@ public void InteractHand(EntityUid user, EntityUid target) checkCanInteract: false, checkUseDelay: true, checkAccess: false, - complexInteractions: complexInteractions); + complexInteractions: complexInteractions, + checkDeletion: false); return; } @@ -460,6 +494,7 @@ public void InteractHand(EntityUid user, EntityUid target) return; } + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(target)); // all interactions should only happen when in range / unobstructed, so no range check is needed var message = new InteractHandEvent(user, target); RaiseLocalEvent(target, message, true); @@ -468,18 +503,23 @@ public void InteractHand(EntityUid user, EntityUid target) if (message.Handled) return; + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(target)); // Else we run Activate. InteractionActivate(user, target, checkCanInteract: false, checkUseDelay: true, checkAccess: false, - complexInteractions: complexInteractions); + complexInteractions: complexInteractions, + checkDeletion: false); } public void InteractUsingRanged(EntityUid user, EntityUid used, EntityUid? target, EntityCoordinates clickLocation, bool inRangeUnobstructed) { + if (IsDeleted(user) || IsDeleted(used) || IsDeleted(target)) + return; + if (target != null) { _adminLogger.Add( @@ -495,9 +535,10 @@ public void InteractUsingRanged(EntityUid user, EntityUid used, EntityUid? targe $"{ToPrettyString(user):user} interacted with *nothing* using {ToPrettyString(used):used}"); } - if (RangedInteractDoBefore(user, used, target, clickLocation, inRangeUnobstructed)) + if (RangedInteractDoBefore(user, used, target, clickLocation, inRangeUnobstructed, checkDeletion: false)) return; + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(used) && !IsDeleted(target)); if (target != null) { var rangedMsg = new RangedInteractEvent(user, used, target.Value, clickLocation); @@ -505,12 +546,12 @@ public void InteractUsingRanged(EntityUid user, EntityUid used, EntityUid? targe // We contact the USED entity, but not the target. DoContactInteraction(user, used, rangedMsg); - if (rangedMsg.Handled) return; } - InteractDoAfter(user, used, target, clickLocation, inRangeUnobstructed); + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(used) && !IsDeleted(target)); + InteractDoAfter(user, used, target, clickLocation, inRangeUnobstructed, checkDeletion: false); } protected bool ValidateInteractAndFace(EntityUid user, EntityCoordinates coordinates) @@ -914,11 +955,18 @@ public bool RangedInteractDoBefore( EntityUid used, EntityUid? target, EntityCoordinates clickLocation, - bool canReach) + bool canReach, + bool checkDeletion = true) { + if (checkDeletion && (IsDeleted(user) || IsDeleted(used) || IsDeleted(target))) + return false; + var ev = new BeforeRangedInteractEvent(user, used, target, clickLocation, canReach); RaiseLocalEvent(used, ev); + if (!ev.Handled) + return false; + // We contact the USED entity, but not the target. DoContactInteraction(user, used, ev); return ev.Handled; @@ -947,6 +995,9 @@ public bool InteractUsing( bool checkCanInteract = true, bool checkCanUse = true) { + if (IsDeleted(user) || IsDeleted(used) || IsDeleted(target)) + return false; + if (checkCanInteract && !_actionBlockerSystem.CanInteract(user, target)) return false; @@ -958,9 +1009,10 @@ public bool InteractUsing( LogImpact.Low, $"{ToPrettyString(user):user} interacted with {ToPrettyString(target):target} using {ToPrettyString(used):used}"); - if (RangedInteractDoBefore(user, used, target, clickLocation, true)) + if (RangedInteractDoBefore(user, used, target, clickLocation, canReach: true, checkDeletion: false)) return true; + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(used) && !IsDeleted(target)); // all interactions should only happen when in range / unobstructed, so no range check is needed var interactUsingEvent = new InteractUsingEvent(user, used, target, clickLocation); RaiseLocalEvent(target, interactUsingEvent, true); @@ -970,8 +1022,10 @@ public bool InteractUsing( if (interactUsingEvent.Handled) return true; - if (InteractDoAfter(user, used, target, clickLocation, canReach: true)) + if (InteractDoAfter(user, used, target, clickLocation, canReach: true, checkDeletion: false)) return true; + + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(used) && !IsDeleted(target)); return false; } @@ -985,11 +1039,14 @@ public bool InteractUsing( /// Whether the is in range of the . /// /// True if the interaction was handled. Otherwise, false. - public bool InteractDoAfter(EntityUid user, EntityUid used, EntityUid? target, EntityCoordinates clickLocation, bool canReach) + public bool InteractDoAfter(EntityUid user, EntityUid used, EntityUid? target, EntityCoordinates clickLocation, bool canReach, bool checkDeletion = true) { if (target is { Valid: false }) target = null; + if (checkDeletion && (IsDeleted(user) || IsDeleted(used) || IsDeleted(target))) + return false; + var afterInteractEvent = new AfterInteractEvent(user, used, target, clickLocation, canReach); RaiseLocalEvent(used, afterInteractEvent); DoContactInteraction(user, used, afterInteractEvent); @@ -1005,6 +1062,7 @@ public bool InteractDoAfter(EntityUid user, EntityUid used, EntityUid? target, E if (target == null) return false; + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(used) && !IsDeleted(target)); var afterInteractUsingEvent = new AfterInteractUsingEvent(user, used, target, clickLocation, canReach); RaiseLocalEvent(target.Value, afterInteractUsingEvent); @@ -1015,9 +1073,7 @@ public bool InteractDoAfter(EntityUid user, EntityUid used, EntityUid? target, E // Contact interactions are currently only used for forensics, so we don't raise used -> target } - if (afterInteractUsingEvent.Handled) - return true; - return false; + return afterInteractUsingEvent.Handled; } #region ActivateItemInWorld @@ -1049,8 +1105,13 @@ public bool InteractionActivate( bool checkCanInteract = true, bool checkUseDelay = true, bool checkAccess = true, - bool? complexInteractions = null) + bool? complexInteractions = null, + bool checkDeletion = true) { + if (checkDeletion && (IsDeleted(user) || IsDeleted(used))) + return false; + + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(used)); _delayQuery.TryComp(used, out var delayComponent); if (checkUseDelay && delayComponent != null && _useDelay.IsDelayed((used, delayComponent))) return false; @@ -1066,21 +1127,32 @@ public bool InteractionActivate( if (checkAccess && !IsAccessible(user, used)) return false; - complexInteractions ??= SupportsComplexInteractions(user); + complexInteractions ??= _actionBlockerSystem.CanComplexInteract(user); var activateMsg = new ActivateInWorldEvent(user, used, complexInteractions.Value); RaiseLocalEvent(used, activateMsg, true); + if (activateMsg.Handled) + { + DoContactInteraction(user, used); + if (!activateMsg.WasLogged) + _adminLogger.Add(LogType.InteractActivate, LogImpact.Low, $"{ToPrettyString(user):user} activated {ToPrettyString(used):used}"); + + if (delayComponent != null) + _useDelay.TryResetDelay(used, component: delayComponent); + return true; + } + + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(used)); var userEv = new UserActivateInWorldEvent(user, used, complexInteractions.Value); RaiseLocalEvent(user, userEv, true); - if (!activateMsg.Handled && !userEv.Handled) + if (!userEv.Handled) return false; - DoContactInteraction(user, used, activateMsg); + DoContactInteraction(user, used); // Still need to call this even without checkUseDelay in case this gets relayed from Activate. if (delayComponent != null) _useDelay.TryResetDelay(used, component: delayComponent); - if (!activateMsg.WasLogged) - _adminLogger.Add(LogType.InteractActivate, LogImpact.Low, $"{ToPrettyString(user):user} activated {ToPrettyString(used):used}"); + _adminLogger.Add(LogType.InteractActivate, LogImpact.Low, $"{ToPrettyString(user):user} activated {ToPrettyString(used):used}"); return true; } #endregion @@ -1099,6 +1171,9 @@ public bool UseInHandInteraction( bool checkCanInteract = true, bool checkUseDelay = true) { + if (IsDeleted(user) || IsDeleted(used)) + return false; + _delayQuery.TryComp(used, out var delayComponent); if (checkUseDelay && delayComponent != null && _useDelay.IsDelayed((used, delayComponent))) return true; // if the item is on cooldown, we consider this handled. @@ -1119,8 +1194,9 @@ public bool UseInHandInteraction( return true; } + DebugTools.Assert(!IsDeleted(user) && !IsDeleted(used)); // else, default to activating the item - return InteractionActivate(user, used, false, false, false); + return InteractionActivate(user, used, false, false, false, checkDeletion: false); } /// @@ -1145,10 +1221,11 @@ public bool AltInteract(EntityUid user, EntityUid target) public void DroppedInteraction(EntityUid user, EntityUid item) { + if (IsDeleted(user) || IsDeleted(item)) + return; + var dropMsg = new DroppedEvent(user); RaiseLocalEvent(item, dropMsg, true); - if (dropMsg.Handled) - _adminLogger.Add(LogType.Drop, LogImpact.Low, $"{ToPrettyString(user):user} dropped {ToPrettyString(item):entity}"); // If the dropper is rotated then use their targetrelativerotation as the drop rotation var rotation = Angle.Zero; @@ -1250,8 +1327,11 @@ public bool CanAccessEquipment(EntityUid user, EntityUid target) return InRangeUnobstructed(user, wearer) && _containerSystem.IsInSameOrParentContainer(user, wearer); } - protected bool ValidateClientInput(ICommonSession? session, EntityCoordinates coords, - EntityUid uid, [NotNullWhen(true)] out EntityUid? userEntity) + protected bool ValidateClientInput( + ICommonSession? session, + EntityCoordinates coords, + EntityUid uid, + [NotNullWhen(true)] out EntityUid? userEntity) { userEntity = null; @@ -1281,7 +1361,7 @@ protected bool ValidateClientInput(ICommonSession? session, EntityCoordinates co return false; } - return true; + return _rateLimit.CountAction(session!, RateLimitKey) == RateLimitStatus.Allowed; } /// @@ -1292,15 +1372,21 @@ public void DoContactInteraction(EntityUid uidA, EntityUid? uidB, HandledEntityE if (uidB == null || args?.Handled == false) return; - // Entities may no longer exist (banana was eaten, or human was exploded)? - if (!Exists(uidA) || !Exists(uidB)) + if (uidA == uidB.Value) return; - if (Paused(uidA) || Paused(uidB.Value)) + if (!TryComp(uidA, out MetaDataComponent? metaA) || metaA.EntityPaused) return; - RaiseLocalEvent(uidA, new ContactInteractionEvent(uidB.Value)); - RaiseLocalEvent(uidB.Value, new ContactInteractionEvent(uidA)); + if (!TryComp(uidB, out MetaDataComponent? metaB) || metaB.EntityPaused) + return ; + + // TODO Struct event + var ev = new ContactInteractionEvent(uidB.Value); + RaiseLocalEvent(uidA, ev); + + ev.Other = uidA; + RaiseLocalEvent(uidB.Value, ev); } diff --git a/Content.Shared/Interaction/SmartEquipSystem.cs b/Content.Shared/Interaction/SmartEquipSystem.cs index 4feb0445f8f..746bc994ee1 100644 --- a/Content.Shared/Interaction/SmartEquipSystem.cs +++ b/Content.Shared/Interaction/SmartEquipSystem.cs @@ -5,6 +5,7 @@ using Content.Shared.Input; using Content.Shared.Inventory; using Content.Shared.Popups; +using Content.Shared.Stacks; using Content.Shared.Storage; using Content.Shared.Storage.EntitySystems; using Content.Shared.Whitelist; @@ -151,8 +152,13 @@ private void HandleSmartEquip(ICommonSession? session, string equipmentSlot) _hands.TryDrop(uid, hands.ActiveHand, handsComp: hands); _storage.Insert(slotItem, handItem.Value, out var stacked, out _); - if (stacked != null) - _hands.TryPickup(uid, stacked.Value, handsComp: hands); + // if the hand item stacked with the things in inventory, but there's no more space left for the rest + // of the stack, place the stack back in hand rather than dropping it on the floor + if (stacked != null && !_storage.CanInsert(slotItem, handItem.Value, out _)) + { + if (TryComp(handItem.Value, out var handStack) && handStack.Count > 0) + _hands.TryPickup(uid, handItem.Value, handsComp: hands); + } return; } diff --git a/Content.Shared/Inventory/InventorySystem.Equip.cs b/Content.Shared/Inventory/InventorySystem.Equip.cs index 762561ed322..1d5d91a9e36 100644 --- a/Content.Shared/Inventory/InventorySystem.Equip.cs +++ b/Content.Shared/Inventory/InventorySystem.Equip.cs @@ -109,8 +109,7 @@ private void OnUseSlot(UseSlotNetworkMessage ev, EntitySessionEventArgs eventArg // before we drop the item, check that it can be equipped in the first place. if (!CanEquip(actor, held.Value, ev.Slot, out var reason)) { - if (_gameTiming.IsFirstTimePredicted) - _popup.PopupCursor(Loc.GetString(reason)); + _popup.PopupCursor(Loc.GetString(reason)); return; } @@ -131,7 +130,7 @@ public bool TryEquip(EntityUid actor, EntityUid target, EntityUid itemUid, strin { if (!Resolve(target, ref inventory, false)) { - if(!silent && _gameTiming.IsFirstTimePredicted) + if(!silent) _popup.PopupCursor(Loc.GetString("inventory-component-can-equip-cannot")); return false; } @@ -142,14 +141,14 @@ public bool TryEquip(EntityUid actor, EntityUid target, EntityUid itemUid, strin if (!TryGetSlotContainer(target, slot, out var slotContainer, out var slotDefinition, inventory)) { - if(!silent && _gameTiming.IsFirstTimePredicted) + if(!silent) _popup.PopupCursor(Loc.GetString("inventory-component-can-equip-cannot")); return false; } if (!force && !CanEquip(actor, target, itemUid, slot, out var reason, slotDefinition, inventory, clothing)) { - if(!silent && _gameTiming.IsFirstTimePredicted) + if(!silent) _popup.PopupCursor(Loc.GetString(reason)); return false; } @@ -179,7 +178,7 @@ public bool TryEquip(EntityUid actor, EntityUid target, EntityUid itemUid, strin if (!_containerSystem.Insert(itemUid, slotContainer)) { - if(!silent && _gameTiming.IsFirstTimePredicted) + if(!silent) _popup.PopupCursor(Loc.GetString("inventory-component-can-unequip-cannot")); return false; } @@ -374,14 +373,14 @@ public bool TryUnequip( if (!Resolve(target, ref inventory, false)) { - if(!silent && _gameTiming.IsFirstTimePredicted) + if(!silent) _popup.PopupCursor(Loc.GetString("inventory-component-can-unequip-cannot")); return false; } if (!TryGetSlotContainer(target, slot, out var slotContainer, out var slotDefinition, inventory)) { - if(!silent && _gameTiming.IsFirstTimePredicted) + if(!silent) _popup.PopupCursor(Loc.GetString("inventory-component-can-unequip-cannot")); return false; } @@ -393,7 +392,7 @@ public bool TryUnequip( if (!force && !CanUnequip(actor, target, slot, out var reason, slotContainer, slotDefinition, inventory)) { - if(!silent && _gameTiming.IsFirstTimePredicted) + if(!silent) _popup.PopupCursor(Loc.GetString(reason)); return false; } diff --git a/Content.Shared/Inventory/InventorySystem.Relay.cs b/Content.Shared/Inventory/InventorySystem.Relay.cs index fc300b24afe..c910a9ae772 100644 --- a/Content.Shared/Inventory/InventorySystem.Relay.cs +++ b/Content.Shared/Inventory/InventorySystem.Relay.cs @@ -15,6 +15,7 @@ using Content.Shared.Strip.Components; using Content.Shared.Temperature; using Content.Shared.Verbs; +using Content.Shared.Chat; namespace Content.Shared.Inventory; @@ -31,6 +32,7 @@ public void InitializeRelay() SubscribeLocalEvent(RelayInventoryEvent); SubscribeLocalEvent(RelayInventoryEvent); SubscribeLocalEvent(RelayInventoryEvent); + SubscribeLocalEvent(RelayInventoryEvent); // by-ref events SubscribeLocalEvent(RefRelayInventoryEvent); diff --git a/Content.Shared/Item/ItemToggle/ItemToggleSystem.cs b/Content.Shared/Item/ItemToggle/ItemToggleSystem.cs index 98029f97d5f..d5bbaac12c3 100644 --- a/Content.Shared/Item/ItemToggle/ItemToggleSystem.cs +++ b/Content.Shared/Item/ItemToggle/ItemToggleSystem.cs @@ -71,7 +71,7 @@ private void OnUseInHand(Entity ent, ref UseInHandEvent arg private void OnActivateVerb(Entity ent, ref GetVerbsEvent args) { - if (!args.CanAccess || !args.CanInteract) + if (!args.CanAccess || !args.CanInteract || !ent.Comp.OnActivate) return; var user = args.User; diff --git a/Content.Shared/Localizations/ContentLocalizationManager.cs b/Content.Shared/Localizations/ContentLocalizationManager.cs index ad8890ae0fd..e60ca74a37f 100644 --- a/Content.Shared/Localizations/ContentLocalizationManager.cs +++ b/Content.Shared/Localizations/ContentLocalizationManager.cs @@ -36,6 +36,7 @@ public void Initialize() _loc.AddFunction(culture, "LOC", FormatLoc); _loc.AddFunction(culture, "NATURALFIXED", FormatNaturalFixed); _loc.AddFunction(culture, "NATURALPERCENT", FormatNaturalPercent); + _loc.AddFunction(culture, "PLAYTIME", FormatPlaytime); /* @@ -141,6 +142,16 @@ public static string FormatDirection(Direction dir) return Loc.GetString($"zzzz-fmt-direction-{dir.ToString()}"); } + /// + /// Formats playtime as hours and minutes. + /// + public static string FormatPlaytime(TimeSpan time) + { + var hours = (int)time.TotalHours; + var minutes = time.Minutes; + return Loc.GetString($"zzzz-fmt-playtime", ("hours", hours), ("minutes", minutes)); + } + private static ILocValue FormatLoc(LocArgs args) { var id = ((LocValueString) args.Args[0]).Value; @@ -229,5 +240,15 @@ private static ILocValue FormatUnits(LocArgs args) return new LocValueString(res); } + + private static ILocValue FormatPlaytime(LocArgs args) + { + var time = TimeSpan.Zero; + if (args.Args is { Count: > 0 } && args.Args[0].Value is TimeSpan timeArg) + { + time = timeArg; + } + return new LocValueString(FormatPlaytime(time)); + } } } diff --git a/Content.Shared/Materials/SharedMaterialStorageSystem.cs b/Content.Shared/Materials/SharedMaterialStorageSystem.cs index dc4858fd745..01539936b95 100644 --- a/Content.Shared/Materials/SharedMaterialStorageSystem.cs +++ b/Content.Shared/Materials/SharedMaterialStorageSystem.cs @@ -8,6 +8,7 @@ using Robust.Shared.Prototypes; using Robust.Shared.Timing; using Robust.Shared.Utility; +using Content.Shared.Research.Components; namespace Content.Shared.Materials; @@ -34,6 +35,7 @@ public override void Initialize() SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnInteractUsing); + SubscribeLocalEvent(OnDatabaseModified); } public override void Update(float frameTime) @@ -312,6 +314,11 @@ private void OnInteractUsing(EntityUid uid, MaterialStorageComponent component, args.Handled = TryInsertMaterialEntity(args.User, args.Used, uid, component); } + private void OnDatabaseModified(Entity ent, ref TechnologyDatabaseModifiedEvent args) + { + UpdateMaterialWhitelist(ent); + } + public int GetSheetVolume(MaterialPrototype material) { if (material.StackEntity == null) diff --git a/Content.Shared/Mind/Components/MindContainerComponent.cs b/Content.Shared/Mind/Components/MindContainerComponent.cs index 380d30ca143..760f5026fad 100644 --- a/Content.Shared/Mind/Components/MindContainerComponent.cs +++ b/Content.Shared/Mind/Components/MindContainerComponent.cs @@ -14,7 +14,6 @@ public sealed partial class MindContainerComponent : Component /// The mind controlling this mob. Can be null. /// [DataField, AutoNetworkedField] - [Access(typeof(SharedMindSystem), Other = AccessPermissions.ReadWriteExecute)] // FIXME Friends public EntityUid? Mind { get; set; } /// @@ -35,7 +34,6 @@ public sealed partial class MindContainerComponent : Component /// [ViewVariables(VVAccess.ReadWrite)] [DataField("ghostOnShutdown")] - [Access(typeof(SharedMindSystem), Other = AccessPermissions.ReadWriteExecute)] // FIXME Friends public bool GhostOnShutdown { get; set; } = true; } diff --git a/Content.Shared/Mind/MindComponent.cs b/Content.Shared/Mind/MindComponent.cs index d603102682b..a0812be8f74 100644 --- a/Content.Shared/Mind/MindComponent.cs +++ b/Content.Shared/Mind/MindComponent.cs @@ -1,4 +1,3 @@ -using Content.Shared.Actions; using Content.Shared.GameTicking; using Content.Shared.Mind.Components; using Robust.Shared.GameStates; @@ -87,17 +86,21 @@ public sealed partial class MindComponent : Component /// /// Prevents user from ghosting out /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("preventGhosting")] + [DataField] public bool PreventGhosting { get; set; } /// /// Prevents user from suiciding /// - [ViewVariables(VVAccess.ReadWrite)] - [DataField("preventSuicide")] + [DataField] public bool PreventSuicide { get; set; } + /// + /// Mind Role Entities belonging to this Mind + /// + [DataField, AutoNetworkedField] + public List MindRoles = new List(); + /// /// The session of the player owning this mind. /// Can be null, in which case the player is currently not logged in. diff --git a/Content.Shared/Mind/SharedMindSystem.cs b/Content.Shared/Mind/SharedMindSystem.cs index 162bca495ca..bf0b5f650ad 100644 --- a/Content.Shared/Mind/SharedMindSystem.cs +++ b/Content.Shared/Mind/SharedMindSystem.cs @@ -483,19 +483,6 @@ public bool TryGetMind( return false; } - /// - /// Gets a role component from a player's mind. - /// - /// Whether a role was found - public bool TryGetRole(EntityUid user, [NotNullWhen(true)] out T? role) where T : IComponent - { - role = default; - if (!TryComp(user, out var mindContainer) || mindContainer.Mind == null) - return false; - - return TryComp(mindContainer.Mind, out role); - } - /// /// Sets the Mind's UserId, Session, and updates the player's PlayerData. This should have no direct effect on the /// entity that any mind is connected to, except as a side effect of the fact that it may change a player's diff --git a/Content.Shared/NPC/Systems/NpcFactionSystem.cs b/Content.Shared/NPC/Systems/NpcFactionSystem.cs index 5e9dbbbf6d4..0d684de80b9 100644 --- a/Content.Shared/NPC/Systems/NpcFactionSystem.cs +++ b/Content.Shared/NPC/Systems/NpcFactionSystem.cs @@ -8,7 +8,6 @@ namespace Content.Shared.NPC.Systems; /// /// Outlines faction relationships with each other. -/// part of psionics rework was making this a partial class. Should've already been handled upstream, based on the linter. /// public sealed partial class NpcFactionSystem : EntitySystem { @@ -82,6 +81,24 @@ public bool IsMember(Entity ent, string faction) return ent.Comp.Factions.Contains(faction); } + /// + /// Returns whether an entity is a member of any listed faction. + /// If the list is empty this returns false. + /// + public bool IsMemberOfAny(Entity ent, IEnumerable> factions) + { + if (!Resolve(ent, ref ent.Comp, false)) + return false; + + foreach (var faction in factions) + { + if (ent.Comp.Factions.Contains(faction)) + return true; + } + + return false; + } + /// /// Adds this entity to the particular faction. /// diff --git a/Content.Shared/Nyanotrasen/Abilities/Psionics/Items/HeadCageComponent.cs b/Content.Shared/Nyanotrasen/Abilities/Psionics/Items/HeadCageComponent.cs deleted file mode 100644 index acaa832860f..00000000000 --- a/Content.Shared/Nyanotrasen/Abilities/Psionics/Items/HeadCageComponent.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Threading; -using Robust.Shared.Audio; - -namespace Content.Shared.Abilities.Psionics -{ - [RegisterComponent] - public sealed partial class HeadCageComponent : Component - { - public CancellationTokenSource? CancelToken; - public bool IsActive = false; - - [DataField("startBreakoutSound")] - public SoundSpecifier StartBreakoutSound { get; set; } = new SoundPathSpecifier("/Audio/Items/Handcuffs/cuff_breakout_start.ogg"); - - [DataField("startUncageSound")] - public SoundSpecifier StartUncageSound { get; set; } = new SoundPathSpecifier("/Audio/Items/Handcuffs/cuff_takeoff_start.ogg"); - - [DataField("endUncageSound")] - public SoundSpecifier EndUncageSound { get; set; } = new SoundPathSpecifier("/Audio/Items/Handcuffs/cuff_takeoff_end.ogg"); - - [DataField("startCageSound")] - public SoundSpecifier StartCageSound { get; set; } = new SoundPathSpecifier("/Audio/Items/Handcuffs/cuff_start.ogg"); - - [DataField("endCageSound")] - public SoundSpecifier EndCageSound { get; set; } = new SoundPathSpecifier("/Audio/Items/Handcuffs/cuff_end.ogg"); - - } -} diff --git a/Content.Shared/Nyanotrasen/Abilities/Psionics/Items/HeadCagedComponent.cs b/Content.Shared/Nyanotrasen/Abilities/Psionics/Items/HeadCagedComponent.cs deleted file mode 100644 index f8af46b8878..00000000000 --- a/Content.Shared/Nyanotrasen/Abilities/Psionics/Items/HeadCagedComponent.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Content.Shared.Abilities.Psionics -{ - [RegisterComponent] - /// - /// Tracking comp so we can subscribe to alt verbs - /// - public sealed partial class HeadCagedComponent : Component - {} -} diff --git a/Content.Shared/Nyanotrasen/Mail/SharedMailComponent.cs b/Content.Shared/Nyanotrasen/Mail/SharedMailComponent.cs deleted file mode 100644 index e6ef9c8422c..00000000000 --- a/Content.Shared/Nyanotrasen/Mail/SharedMailComponent.cs +++ /dev/null @@ -1,4 +0,0 @@ -namespace Content.Shared.Mail -{ - public partial class SharedMailComponent : Component {} -} diff --git a/Content.Shared/Paper/PaperSystem.cs b/Content.Shared/Paper/PaperSystem.cs index 0f4bfef983d..211eb7eba81 100644 --- a/Content.Shared/Paper/PaperSystem.cs +++ b/Content.Shared/Paper/PaperSystem.cs @@ -201,7 +201,7 @@ public bool TryStamp(Entity entity, StampDisplayInfo stampInfo, public void SetContent(Entity entity, string content) { - entity.Comp.Content = content + '\n'; + entity.Comp.Content = content; Dirty(entity); UpdateUserInterface(entity); diff --git a/Content.Shared/Pinpointer/NavMapComponent.cs b/Content.Shared/Pinpointer/NavMapComponent.cs index d77169d32ed..b876cb20fe2 100644 --- a/Content.Shared/Pinpointer/NavMapComponent.cs +++ b/Content.Shared/Pinpointer/NavMapComponent.cs @@ -27,6 +27,50 @@ public sealed partial class NavMapComponent : Component /// [ViewVariables] public Dictionary Beacons = new(); + + /// + /// Describes the properties of a region on the station. + /// It is indexed by the entity assigned as the region owner. + /// + [ViewVariables(VVAccess.ReadOnly)] + public Dictionary RegionProperties = new(); + + /// + /// All flood filled regions, ready for display on a NavMapControl. + /// It is indexed by the entity assigned as the region owner. + /// + /// + /// For client use only + /// + [ViewVariables(VVAccess.ReadOnly)] + public Dictionary RegionOverlays = new(); + + /// + /// A queue of all region owners that are waiting their associated regions to be floodfilled. + /// + /// + /// For client use only + /// + [ViewVariables(VVAccess.ReadOnly)] + public Queue QueuedRegionsToFlood = new(); + + /// + /// A look up table to get a list of region owners associated with a flood filled chunk. + /// + /// + /// For client use only + /// + [ViewVariables(VVAccess.ReadOnly)] + public Dictionary> ChunkToRegionOwnerTable = new(); + + /// + /// A look up table to find flood filled chunks associated with a given region owner. + /// + /// + /// For client use only + /// + [ViewVariables(VVAccess.ReadOnly)] + public Dictionary> RegionOwnerToChunkTable = new(); } [Serializable, NetSerializable] @@ -51,10 +95,30 @@ public sealed class NavMapChunk(Vector2i origin) public GameTick LastUpdate; } +[Serializable, NetSerializable] +public sealed class NavMapRegionOverlay(Enum uiKey, List<(Vector2i, Vector2i)> gridCoords) +{ + /// + /// The key to the UI that will be displaying this region on its navmap + /// + public Enum UiKey = uiKey; + + /// + /// The local grid coordinates of the rectangles that make up the region + /// Item1 is the top left corner, Item2 is the bottom right corner + /// + public List<(Vector2i, Vector2i)> GridCoords = gridCoords; + + /// + /// Color of the region + /// + public Color Color = Color.White; +} + public enum NavMapChunkType : byte { // Values represent bit shift offsets when retrieving data in the tile array. - Invalid = byte.MaxValue, + Invalid = byte.MaxValue, Floor = 0, // I believe floors have directional information for diagonal tiles? Wall = SharedNavMapSystem.Directions, Airlock = 2 * SharedNavMapSystem.Directions, diff --git a/Content.Shared/Pinpointer/SharedNavMapSystem.cs b/Content.Shared/Pinpointer/SharedNavMapSystem.cs index 3ced5f3c9ed..37d60dec28a 100644 --- a/Content.Shared/Pinpointer/SharedNavMapSystem.cs +++ b/Content.Shared/Pinpointer/SharedNavMapSystem.cs @@ -3,10 +3,9 @@ using System.Runtime.CompilerServices; using Content.Shared.Tag; using Robust.Shared.GameStates; +using Robust.Shared.Network; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using Robust.Shared.Timing; -using Robust.Shared.Utility; namespace Content.Shared.Pinpointer; @@ -16,7 +15,7 @@ public abstract class SharedNavMapSystem : EntitySystem public const int Directions = 4; // Not directly tied to number of atmos directions public const int ChunkSize = 8; - public const int ArraySize = ChunkSize* ChunkSize; + public const int ArraySize = ChunkSize * ChunkSize; public const int AllDirMask = (1 << Directions) - 1; public const int AirlockMask = AllDirMask << (int) NavMapChunkType.Airlock; @@ -24,6 +23,7 @@ public abstract class SharedNavMapSystem : EntitySystem public const int FloorMask = AllDirMask << (int) NavMapChunkType.Floor; [Robust.Shared.IoC.Dependency] private readonly TagSystem _tagSystem = default!; + [Robust.Shared.IoC.Dependency] private readonly INetManager _net = default!; private static readonly ProtoId[] WallTags = {"Wall", "Window"}; private EntityQuery _doorQuery; @@ -57,7 +57,7 @@ public static Vector2i GetTileFromIndex(int index) public NavMapChunkType GetEntityType(EntityUid uid) { if (_doorQuery.HasComp(uid)) - return NavMapChunkType.Airlock; + return NavMapChunkType.Airlock; if (_tagSystem.HasAnyTag(uid, WallTags)) return NavMapChunkType.Wall; @@ -81,6 +81,57 @@ protected bool TryCreateNavMapBeaconData(EntityUid uid, NavMapBeaconComponent co return true; } + public void AddOrUpdateNavMapRegion(EntityUid uid, NavMapComponent component, NetEntity regionOwner, NavMapRegionProperties regionProperties) + { + // Check if a new region has been added or an existing one has been altered + var isDirty = !component.RegionProperties.TryGetValue(regionOwner, out var oldProperties) || oldProperties != regionProperties; + + if (isDirty) + { + component.RegionProperties[regionOwner] = regionProperties; + + if (_net.IsServer) + Dirty(uid, component); + } + } + + public void RemoveNavMapRegion(EntityUid uid, NavMapComponent component, NetEntity regionOwner) + { + bool regionOwnerRemoved = component.RegionProperties.Remove(regionOwner) | component.RegionOverlays.Remove(regionOwner); + + if (regionOwnerRemoved) + { + if (component.RegionOwnerToChunkTable.TryGetValue(regionOwner, out var affectedChunks)) + { + foreach (var affectedChunk in affectedChunks) + { + if (component.ChunkToRegionOwnerTable.TryGetValue(affectedChunk, out var regionOwners)) + regionOwners.Remove(regionOwner); + } + + component.RegionOwnerToChunkTable.Remove(regionOwner); + } + + if (_net.IsServer) + Dirty(uid, component); + } + } + + public Dictionary GetNavMapRegionOverlays(EntityUid uid, NavMapComponent component, Enum uiKey) + { + var regionOverlays = new Dictionary(); + + foreach (var (regionOwner, regionOverlay) in component.RegionOverlays) + { + if (!regionOverlay.UiKey.Equals(uiKey)) + continue; + + regionOverlays.Add(regionOwner, regionOverlay); + } + + return regionOverlays; + } + #region: Event handling private void OnGetState(EntityUid uid, NavMapComponent component, ref ComponentGetState args) @@ -97,7 +148,7 @@ private void OnGetState(EntityUid uid, NavMapComponent component, ref ComponentG chunks.Add(origin, chunk.TileData); } - args.State = new NavMapState(chunks, component.Beacons); + args.State = new NavMapState(chunks, component.Beacons, component.RegionProperties); return; } @@ -110,7 +161,7 @@ private void OnGetState(EntityUid uid, NavMapComponent component, ref ComponentG chunks.Add(origin, chunk.TileData); } - args.State = new NavMapDeltaState(chunks, component.Beacons, new(component.Chunks.Keys)); + args.State = new NavMapDeltaState(chunks, component.Beacons, component.RegionProperties, new(component.Chunks.Keys)); } #endregion @@ -120,22 +171,26 @@ private void OnGetState(EntityUid uid, NavMapComponent component, ref ComponentG [Serializable, NetSerializable] protected sealed class NavMapState( Dictionary chunks, - Dictionary beacons) + Dictionary beacons, + Dictionary regions) : ComponentState { public Dictionary Chunks = chunks; public Dictionary Beacons = beacons; + public Dictionary Regions = regions; } [Serializable, NetSerializable] protected sealed class NavMapDeltaState( Dictionary modifiedChunks, Dictionary beacons, + Dictionary regions, HashSet allChunks) : ComponentState, IComponentDeltaState { public Dictionary ModifiedChunks = modifiedChunks; public Dictionary Beacons = beacons; + public Dictionary Regions = regions; public HashSet AllChunks = allChunks; public void ApplyToFullState(NavMapState state) @@ -159,11 +214,18 @@ public void ApplyToFullState(NavMapState state) { state.Beacons.Add(nuid, beacon); } + + state.Regions.Clear(); + foreach (var (nuid, region) in Regions) + { + state.Regions.Add(nuid, region); + } } public NavMapState CreateNewFullState(NavMapState state) { var chunks = new Dictionary(state.Chunks.Count); + foreach (var (index, data) in state.Chunks) { if (!AllChunks!.Contains(index)) @@ -177,12 +239,25 @@ public NavMapState CreateNewFullState(NavMapState state) Array.Copy(newData, data, ArraySize); } - return new NavMapState(chunks, new(Beacons)); + return new NavMapState(chunks, new(Beacons), new(Regions)); } } [Serializable, NetSerializable] public record struct NavMapBeacon(NetEntity NetEnt, Color Color, string Text, Vector2 Position); + [Serializable, NetSerializable] + public record struct NavMapRegionProperties(NetEntity Owner, Enum UiKey, HashSet Seeds) + { + // Server defined color for the region + public Color Color = Color.White; + + // The maximum number of tiles that can be assigned to this region + public int MaxArea = 625; + + // The maximum distance this region can propagate from its seeds + public int MaxRadius = 25; + } + #endregion } diff --git a/Content.Shared/Players/RateLimiting/RateLimitRegistration.cs b/Content.Shared/Players/RateLimiting/RateLimitRegistration.cs new file mode 100644 index 00000000000..6bcf15d30b6 --- /dev/null +++ b/Content.Shared/Players/RateLimiting/RateLimitRegistration.cs @@ -0,0 +1,76 @@ +using Content.Shared.Database; +using Robust.Shared.Configuration; +using Robust.Shared.Player; + +namespace Content.Shared.Players.RateLimiting; + +/// +/// Contains all data necessary to register a rate limit with . +/// +public sealed class RateLimitRegistration( + CVarDef cVarLimitPeriodLength, + CVarDef cVarLimitCount, + Action? playerLimitedAction, + CVarDef? cVarAdminAnnounceDelay = null, + Action? adminAnnounceAction = null, + LogType adminLogType = LogType.RateLimited) +{ + /// + /// CVar that controls the period over which the rate limit is counted, measured in seconds. + /// + public readonly CVarDef CVarLimitPeriodLength = cVarLimitPeriodLength; + + /// + /// CVar that controls how many actions are allowed in a single rate limit period. + /// + public readonly CVarDef CVarLimitCount = cVarLimitCount; + + /// + /// An action that gets invoked when this rate limit has been breached by a player. + /// + /// + /// This can be used for informing players or taking administrative action. + /// + public readonly Action? PlayerLimitedAction = playerLimitedAction; + + /// + /// CVar that controls the minimum delay between admin notifications, measured in seconds. + /// This can be omitted to have no admin notification system. + /// If the cvar is set to 0, there every breach will be reported. + /// If the cvar is set to a negative number, admin announcements are disabled. + /// + /// + /// If set, must be set too. + /// + public readonly CVarDef? CVarAdminAnnounceDelay = cVarAdminAnnounceDelay; + + /// + /// An action that gets invoked when a rate limit was breached and admins should be notified. + /// + /// + /// If set, must be set too. + /// + public readonly Action? AdminAnnounceAction = adminAnnounceAction; + + /// + /// Log type used to log rate limit violations to the admin logs system. + /// + public readonly LogType AdminLogType = adminLogType; +} + +/// +/// Result of a rate-limited operation. +/// +/// +public enum RateLimitStatus : byte +{ + /// + /// The action was not blocked by the rate limit. + /// + Allowed, + + /// + /// The action was blocked by the rate limit. + /// + Blocked, +} diff --git a/Content.Shared/Players/RateLimiting/SharedPlayerRateLimitManager.cs b/Content.Shared/Players/RateLimiting/SharedPlayerRateLimitManager.cs new file mode 100644 index 00000000000..addb1dee373 --- /dev/null +++ b/Content.Shared/Players/RateLimiting/SharedPlayerRateLimitManager.cs @@ -0,0 +1,55 @@ +using Robust.Shared.Player; + +namespace Content.Shared.Players.RateLimiting; + +/// +/// General-purpose system to rate limit actions taken by clients, such as chat messages. +/// +/// +/// +/// Different categories of rate limits must be registered ahead of time by calling . +/// Once registered, you can simply call to count a rate-limited action for a player. +/// +/// +/// This system is intended for rate limiting player actions over short periods, +/// to ward against spam that can cause technical issues such as admin client load. +/// It should not be used for in-game actions or similar. +/// +/// +/// Rate limits are reset when a client reconnects. +/// This should not be an issue for the reasonably short rate limit periods this system is intended for. +/// +/// +/// +public abstract class SharedPlayerRateLimitManager +{ + /// + /// Count and validate an action performed by a player against rate limits. + /// + /// The player performing the action. + /// The key string that was previously used to register a rate limit category. + /// Whether the action counted should be blocked due to surpassing rate limits or not. + /// + /// is not a connected player + /// OR is not a registered rate limit category. + /// + /// + public abstract RateLimitStatus CountAction(ICommonSession player, string key); + + /// + /// Register a new rate limit category. + /// + /// + /// The key string that will be referred to later with . + /// Must be unique and should probably just be a constant somewhere. + /// + /// The data specifying the rate limit's parameters. + /// has already been registered. + /// is invalid. + public abstract void Register(string key, RateLimitRegistration registration); + + /// + /// Initialize the manager's functionality at game startup. + /// + public abstract void Initialize(); +} diff --git a/Content.Shared/Power/EntitySystems/SharedPowerReceiverSystem.cs b/Content.Shared/Power/EntitySystems/SharedPowerReceiverSystem.cs index 2bc2af78314..b7ba2a31c5d 100644 --- a/Content.Shared/Power/EntitySystems/SharedPowerReceiverSystem.cs +++ b/Content.Shared/Power/EntitySystems/SharedPowerReceiverSystem.cs @@ -1,5 +1,4 @@ using System.Diagnostics.CodeAnalysis; -using Content.Shared.Examine; using Content.Shared.Power.Components; namespace Content.Shared.Power.EntitySystems; @@ -8,6 +7,9 @@ public abstract class SharedPowerReceiverSystem : EntitySystem { public abstract bool ResolveApc(EntityUid entity, [NotNullWhen(true)] ref SharedApcPowerReceiverComponent? component); + /// + /// Checks if entity is APC-powered device, and if it have power. + /// public bool IsPowered(Entity entity) { if (!ResolveApc(entity.Owner, ref entity.Comp)) diff --git a/Content.Shared/Power/Generator/ActiveGeneratorRevvingComponent.cs b/Content.Shared/Power/Generator/ActiveGeneratorRevvingComponent.cs index 25f97dc15a0..fde0319a37d 100644 --- a/Content.Shared/Power/Generator/ActiveGeneratorRevvingComponent.cs +++ b/Content.Shared/Power/Generator/ActiveGeneratorRevvingComponent.cs @@ -3,7 +3,7 @@ namespace Content.Shared.Power.Generator; [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] -public sealed partial class ActiveGeneratorRevvingComponent: Component +public sealed partial class ActiveGeneratorRevvingComponent : Component { [DataField, ViewVariables(VVAccess.ReadOnly), AutoNetworkedField] public TimeSpan CurrentTime = TimeSpan.Zero; diff --git a/Content.Shared/Power/Generator/ActiveGeneratorRevvingSystem.cs b/Content.Shared/Power/Generator/ActiveGeneratorRevvingSystem.cs index 9cd11ae6045..459b2fd78de 100644 --- a/Content.Shared/Power/Generator/ActiveGeneratorRevvingSystem.cs +++ b/Content.Shared/Power/Generator/ActiveGeneratorRevvingSystem.cs @@ -1,6 +1,6 @@ namespace Content.Shared.Power.Generator; -public sealed class ActiveGeneratorRevvingSystem: EntitySystem +public sealed class ActiveGeneratorRevvingSystem : EntitySystem { public override void Initialize() { @@ -25,7 +25,7 @@ private void OnAnchorStateChanged(EntityUid uid, ActiveGeneratorRevvingComponent /// ActiveGeneratorRevvingComponent of the generator entity. public void StartAutoRevving(EntityUid uid, ActiveGeneratorRevvingComponent? component = null) { - if (Resolve(uid, ref component)) + if (Resolve(uid, ref component, false)) { // reset the revving component.CurrentTime = TimeSpan.FromSeconds(0); diff --git a/Content.Shared/Projectiles/EmbeddableProjectileComponent.cs b/Content.Shared/Projectiles/EmbeddableProjectileComponent.cs index 008b7c2ced4..e4125945d26 100644 --- a/Content.Shared/Projectiles/EmbeddableProjectileComponent.cs +++ b/Content.Shared/Projectiles/EmbeddableProjectileComponent.cs @@ -13,37 +13,43 @@ public sealed partial class EmbeddableProjectileComponent : Component /// /// Minimum speed of the projectile to embed. /// - [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] + [DataField, AutoNetworkedField] public float MinimumSpeed = 5f; /// /// Delete the entity on embedded removal? /// Does nothing if there's no RemovalTime. /// - [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] + [DataField, AutoNetworkedField] public bool DeleteOnRemove; /// /// How long it takes to remove the embedded object. /// - [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] + [DataField, AutoNetworkedField] public float? RemovalTime = 3f; /// /// Whether this entity will embed when thrown, or only when shot as a projectile. /// - [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] + [DataField, AutoNetworkedField] public bool EmbedOnThrow = true; /// /// How far into the entity should we offset (0 is wherever we collided). /// - [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] + [DataField, AutoNetworkedField] public Vector2 Offset = Vector2.Zero; /// /// Sound to play after embedding into a hit target. /// - [ViewVariables(VVAccess.ReadWrite), DataField, AutoNetworkedField] + [DataField, AutoNetworkedField] public SoundSpecifier? Sound; + + /// + /// Uid of the entity the projectile is embed into. + /// + [DataField, AutoNetworkedField] + public EntityUid? EmbeddedIntoUid; } diff --git a/Content.Shared/Projectiles/SharedProjectileSystem.cs b/Content.Shared/Projectiles/SharedProjectileSystem.cs index 1b7d6d6f991..85e75d6d291 100644 --- a/Content.Shared/Projectiles/SharedProjectileSystem.cs +++ b/Content.Shared/Projectiles/SharedProjectileSystem.cs @@ -71,6 +71,8 @@ private void OnEmbedRemove(EntityUid uid, EmbeddableProjectileComponent componen TryComp(uid, out var physics); _physics.SetBodyType(uid, BodyType.Dynamic, body: physics, xform: xform); _transform.AttachToGridOrMap(uid, xform); + component.EmbeddedIntoUid = null; + Dirty(uid, component); // Reset whether the projectile has damaged anything if it successfully was removed if (TryComp(uid, out var projectile)) @@ -127,8 +129,10 @@ private void Embed(EntityUid uid, EntityUid target, EntityUid? user, EmbeddableP } _audio.PlayPredicted(component.Sound, uid, null); + component.EmbeddedIntoUid = target; var ev = new EmbedEvent(user, target); RaiseLocalEvent(uid, ref ev); + Dirty(uid, component); } private void PreventCollision(EntityUid uid, ProjectileComponent component, ref PreventCollideEvent args) diff --git a/Content.Shared/Radio/EntitySystems/SharedJammerSystem.cs b/Content.Shared/Radio/EntitySystems/SharedJammerSystem.cs index 8c5baf93f5d..67af4cc900a 100644 --- a/Content.Shared/Radio/EntitySystems/SharedJammerSystem.cs +++ b/Content.Shared/Radio/EntitySystems/SharedJammerSystem.cs @@ -42,10 +42,12 @@ private void OnGetVerb(Entity entity, ref GetVerbsEvent))] - public string? PrototypeId; -} - -/// -/// Mark the antagonist role component as being exclusive -/// IE by default other antagonists should refuse to select the same entity for a different antag role -/// -[AttributeUsage(AttributeTargets.Class, Inherited = false)] -[BaseTypeRequired(typeof(AntagonistRoleComponent))] -public sealed partial class ExclusiveAntagonistAttribute : Attribute -{ -} diff --git a/Content.Shared/Roles/JobRequirement/AgeRequirement.cs b/Content.Shared/Roles/JobRequirement/AgeRequirement.cs index 3ef36c89791..bbc377de048 100644 --- a/Content.Shared/Roles/JobRequirement/AgeRequirement.cs +++ b/Content.Shared/Roles/JobRequirement/AgeRequirement.cs @@ -31,7 +31,7 @@ public override bool Check(IEntityManager entManager, if (!Inverted) { - reason = FormattedMessage.FromMarkupPermissive(Loc.GetString("role-timer-age-to-young", + reason = FormattedMessage.FromMarkupPermissive(Loc.GetString("role-timer-age-too-young", ("age", RequiredAge))); if (profile.Age < RequiredAge) @@ -39,7 +39,7 @@ public override bool Check(IEntityManager entManager, } else { - reason = FormattedMessage.FromMarkupPermissive(Loc.GetString("role-timer-age-to-old", + reason = FormattedMessage.FromMarkupPermissive(Loc.GetString("role-timer-age-too-old", ("age", RequiredAge))); if (profile.Age > RequiredAge) diff --git a/Content.Shared/Roles/JobRequirement/DepartmentTimeRequirement.cs b/Content.Shared/Roles/JobRequirement/DepartmentTimeRequirement.cs index 6d045d80344..86a64d10989 100644 --- a/Content.Shared/Roles/JobRequirement/DepartmentTimeRequirement.cs +++ b/Content.Shared/Roles/JobRequirement/DepartmentTimeRequirement.cs @@ -1,4 +1,5 @@ using System.Diagnostics.CodeAnalysis; +using Content.Shared.Localizations; using Content.Shared.Preferences; using JetBrains.Annotations; using Robust.Shared.Prototypes; @@ -15,7 +16,7 @@ public sealed partial class DepartmentTimeRequirement : JobRequirement /// Which department needs the required amount of time. /// [DataField(required: true)] - public ProtoId Department = default!; + public ProtoId Department; /// /// How long (in seconds) this requirement is. @@ -48,7 +49,9 @@ public override bool Check(IEntityManager entManager, playtime += otherTime; } - var deptDiff = Time.TotalMinutes - playtime.TotalMinutes; + var deptDiffSpan = Time - playtime; + var deptDiff = deptDiffSpan.TotalMinutes; + var formattedDeptDiff = ContentLocalizationManager.FormatPlaytime(deptDiffSpan); var nameDepartment = "role-timer-department-unknown"; if (protoManager.TryIndex(Department, out var departmentIndexed)) @@ -63,7 +66,7 @@ public override bool Check(IEntityManager entManager, reason = FormattedMessage.FromMarkupPermissive(Loc.GetString( "role-timer-department-insufficient", - ("time", Math.Ceiling(deptDiff)), + ("time", formattedDeptDiff), ("department", Loc.GetString(nameDepartment)), ("departmentColor", department.Color.ToHex()))); return false; @@ -73,7 +76,7 @@ public override bool Check(IEntityManager entManager, { reason = FormattedMessage.FromMarkupPermissive(Loc.GetString( "role-timer-department-too-high", - ("time", -deptDiff), + ("time", formattedDeptDiff), ("department", Loc.GetString(nameDepartment)), ("departmentColor", department.Color.ToHex()))); return false; diff --git a/Content.Shared/Roles/JobRequirement/OverallPlaytimeRequirement.cs b/Content.Shared/Roles/JobRequirement/OverallPlaytimeRequirement.cs index 62b3ecd1244..d08c3176547 100644 --- a/Content.Shared/Roles/JobRequirement/OverallPlaytimeRequirement.cs +++ b/Content.Shared/Roles/JobRequirement/OverallPlaytimeRequirement.cs @@ -1,4 +1,5 @@ using System.Diagnostics.CodeAnalysis; +using Content.Shared.Localizations; using Content.Shared.Players.PlayTimeTracking; using Content.Shared.Preferences; using JetBrains.Annotations; @@ -26,7 +27,9 @@ public override bool Check(IEntityManager entManager, reason = new FormattedMessage(); var overallTime = playTimes.GetValueOrDefault(PlayTimeTrackingShared.TrackerOverall); - var overallDiff = Time.TotalMinutes - overallTime.TotalMinutes; + var overallDiffSpan = Time - overallTime; + var overallDiff = overallDiffSpan.TotalMinutes; + var formattedOverallDiff = ContentLocalizationManager.FormatPlaytime(overallDiffSpan); if (!Inverted) { @@ -35,14 +38,14 @@ public override bool Check(IEntityManager entManager, reason = FormattedMessage.FromMarkupPermissive(Loc.GetString( "role-timer-overall-insufficient", - ("time", Math.Ceiling(overallDiff)))); + ("time", formattedOverallDiff))); return false; } if (overallDiff <= 0 || overallTime >= Time) { reason = FormattedMessage.FromMarkupPermissive(Loc.GetString("role-timer-overall-too-high", - ("time", -overallDiff))); + ("time", formattedOverallDiff))); return false; } diff --git a/Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs b/Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs index 4529f93bee8..6fd4c0b564b 100644 --- a/Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs +++ b/Content.Shared/Roles/JobRequirement/RoleTimeRequirement.cs @@ -1,4 +1,5 @@ using System.Diagnostics.CodeAnalysis; +using Content.Shared.Localizations; using Content.Shared.Players.PlayTimeTracking; using Content.Shared.Preferences; using Content.Shared.Roles.Jobs; @@ -17,7 +18,7 @@ public sealed partial class RoleTimeRequirement : JobRequirement /// What particular role they need the time requirement with. /// [DataField(required: true)] - public ProtoId Role = default!; + public ProtoId Role; /// [DataField(required: true)] @@ -35,7 +36,9 @@ public override bool Check(IEntityManager entManager, string proto = Role; playTimes.TryGetValue(proto, out var roleTime); - var roleDiff = Time.TotalMinutes - roleTime.TotalMinutes; + var roleDiffSpan = Time - roleTime; + var roleDiff = roleDiffSpan.TotalMinutes; + var formattedRoleDiff = ContentLocalizationManager.FormatPlaytime(roleDiffSpan); var departmentColor = Color.Yellow; if (entManager.EntitySysManager.TryGetEntitySystem(out SharedJobSystem? jobSystem)) @@ -53,7 +56,7 @@ public override bool Check(IEntityManager entManager, reason = FormattedMessage.FromMarkupPermissive(Loc.GetString( "role-timer-role-insufficient", - ("time", Math.Ceiling(roleDiff)), + ("time", formattedRoleDiff), ("job", Loc.GetString(proto)), ("departmentColor", departmentColor.ToHex()))); return false; @@ -63,7 +66,7 @@ public override bool Check(IEntityManager entManager, { reason = FormattedMessage.FromMarkupPermissive(Loc.GetString( "role-timer-role-too-high", - ("time", -roleDiff), + ("time", formattedRoleDiff), ("job", Loc.GetString(proto)), ("departmentColor", departmentColor.ToHex()))); return false; diff --git a/Content.Shared/Roles/Jobs/JobComponent.cs b/Content.Shared/Roles/Jobs/JobComponent.cs deleted file mode 100644 index b7df34cb9f5..00000000000 --- a/Content.Shared/Roles/Jobs/JobComponent.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Content.Shared.Chat.V2.Repository; -using Robust.Shared.GameStates; -using Robust.Shared.Prototypes; - -namespace Content.Shared.Roles.Jobs; - -/// -/// Added to mind entities to hold the data for the player's current job. -/// -[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] -public sealed partial class JobComponent : Component -{ - [DataField(required: true), AutoNetworkedField] - public ProtoId? Prototype; -} diff --git a/Content.Shared/Roles/Jobs/JobRoleComponent.cs b/Content.Shared/Roles/Jobs/JobRoleComponent.cs new file mode 100644 index 00000000000..dbaf12beec4 --- /dev/null +++ b/Content.Shared/Roles/Jobs/JobRoleComponent.cs @@ -0,0 +1,12 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Roles.Jobs; + +/// +/// Added to mind role entities to mark them as a job role entity. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class JobRoleComponent : BaseMindRoleComponent +{ + +} diff --git a/Content.Shared/Roles/Jobs/SharedJobSystem.cs b/Content.Shared/Roles/Jobs/SharedJobSystem.cs index ce4428d9fea..8a4733c8340 100644 --- a/Content.Shared/Roles/Jobs/SharedJobSystem.cs +++ b/Content.Shared/Roles/Jobs/SharedJobSystem.cs @@ -13,10 +13,10 @@ namespace Content.Shared.Roles.Jobs; /// public abstract class SharedJobSystem : EntitySystem { - [Dependency] private readonly IPrototypeManager _prototypes = default!; [Dependency] private readonly SharedPlayerSystem _playerSystem = default!; + [Dependency] private readonly IPrototypeManager _prototypes = default!; + [Dependency] private readonly SharedRoleSystem _roles = default!; - [Dependency] private readonly IPrototypeManager _protoManager = default!; private readonly Dictionary _inverseTrackerLookup = new(); public override void Initialize() @@ -37,7 +37,7 @@ private void SetupTrackerLookup() _inverseTrackerLookup.Clear(); // This breaks if you have N trackers to 1 JobId but future concern. - foreach (var job in _protoManager.EnumeratePrototypes()) + foreach (var job in _prototypes.EnumeratePrototypes()) { _inverseTrackerLookup.Add(job.PlayTimeTracker, job.ID); } @@ -50,7 +50,7 @@ private void SetupTrackerLookup() /// public string GetJobPrototype(string trackerProto) { - DebugTools.Assert(_protoManager.HasIndex(trackerProto)); + DebugTools.Assert(_prototypes.HasIndex(trackerProto)); return _inverseTrackerLookup[trackerProto]; } @@ -60,7 +60,7 @@ public string GetJobPrototype(string trackerProto) public bool TryGetDepartment(string jobProto, [NotNullWhen(true)] out DepartmentPrototype? departmentPrototype) { // Not that many departments so we can just eat the cost instead of storing the inverse lookup. - var departmentProtos = _protoManager.EnumeratePrototypes().ToList(); + var departmentProtos = _prototypes.EnumeratePrototypes().ToList(); departmentProtos.Sort((x, y) => string.Compare(x.ID, y.ID, StringComparison.Ordinal)); foreach (var department in departmentProtos) @@ -85,7 +85,7 @@ public bool TryGetPrimaryDepartment(string jobProto, [NotNullWhen(true)] out Dep { // not sorting it since there should only be 1 primary department for a job. // this is enforced by the job tests. - var departmentProtos = _protoManager.EnumeratePrototypes(); + var departmentProtos = _prototypes.EnumeratePrototypes(); foreach (var department in departmentProtos) { @@ -102,32 +102,41 @@ public bool TryGetPrimaryDepartment(string jobProto, [NotNullWhen(true)] out Dep public bool MindHasJobWithId(EntityUid? mindId, string prototypeId) { - return CompOrNull(mindId)?.Prototype == prototypeId; + + if (mindId is null) + return false; + + _roles.MindHasRole(mindId.Value, out var role); + + if (role is null) + return false; + + return role.Value.Comp1.JobPrototype == prototypeId; } public bool MindTryGetJob( [NotNullWhen(true)] EntityUid? mindId, - [NotNullWhen(true)] out JobComponent? comp, [NotNullWhen(true)] out JobPrototype? prototype) { - comp = null; prototype = null; + MindTryGetJobId(mindId, out var protoId); - return TryComp(mindId, out comp) && - comp.Prototype != null && - _prototypes.TryIndex(comp.Prototype, out prototype); + return _prototypes.TryIndex(protoId, out prototype) || prototype is not null; } - public bool MindTryGetJobId([NotNullWhen(true)] EntityUid? mindId, out ProtoId? job) + public bool MindTryGetJobId( + [NotNullWhen(true)] EntityUid? mindId, + out ProtoId? job) { - if (!TryComp(mindId, out JobComponent? comp)) - { - job = null; + job = null; + + if (mindId is null) return false; - } - job = comp.Prototype; - return true; + if (_roles.MindHasRole(mindId.Value, out var role)) + job = role.Value.Comp1.JobPrototype; + + return job is not null; } /// @@ -136,7 +145,7 @@ public bool MindTryGetJobId([NotNullWhen(true)] EntityUid? mindId, out ProtoId public bool MindTryGetJobName([NotNullWhen(true)] EntityUid? mindId, out string name) { - if (MindTryGetJob(mindId, out _, out var prototype)) + if (MindTryGetJob(mindId, out var prototype)) { name = prototype.LocalizedName; return true; @@ -163,7 +172,7 @@ public bool CanBeAntag(ICommonSession player) if (_playerSystem.ContentData(player) is not { Mind: { } mindId }) return true; - if (!MindTryGetJob(mindId, out _, out var prototype)) + if (!MindTryGetJob(mindId, out var prototype)) return true; return prototype.CanBeAntag; diff --git a/Content.Shared/Roles/MindGetAllRolesEvent.cs b/Content.Shared/Roles/MindGetAllRoleInfoEvent.cs similarity index 79% rename from Content.Shared/Roles/MindGetAllRolesEvent.cs rename to Content.Shared/Roles/MindGetAllRoleInfoEvent.cs index 69878739084..a2f2820b5c3 100644 --- a/Content.Shared/Roles/MindGetAllRolesEvent.cs +++ b/Content.Shared/Roles/MindGetAllRoleInfoEvent.cs @@ -7,7 +7,7 @@ namespace Content.Shared.Roles; /// /// The list of roles on the player. [ByRefEvent] -public readonly record struct MindGetAllRolesEvent(List Roles); +public readonly record struct MindGetAllRoleInfoEvent(List Roles); /// /// Returned by to give some information about a player's role. @@ -17,4 +17,4 @@ namespace Content.Shared.Roles; /// Whether or not this role makes this player an antagonist. /// The id associated with the role. /// The prototype ID of the role -public readonly record struct RoleInfo(Component Component, string Name, bool Antagonist, string? PlayTimeTrackerId, string Prototype); +public readonly record struct RoleInfo(string Name, bool Antagonist, string? PlayTimeTrackerId, string Prototype); diff --git a/Content.Shared/Roles/MindRoleComponent.cs b/Content.Shared/Roles/MindRoleComponent.cs new file mode 100644 index 00000000000..a3dd0b3bc6d --- /dev/null +++ b/Content.Shared/Roles/MindRoleComponent.cs @@ -0,0 +1,50 @@ +using Content.Shared.Mind; +using JetBrains.Annotations; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.Roles; + +/// +/// This holds data for, and indicates, a Mind Role entity +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class MindRoleComponent : BaseMindRoleComponent +{ + /// + /// Marks this Mind Role as Antagonist + /// A single antag Mind Role is enough to make the owner mind count as Antagonist. + /// + [DataField] + public bool Antag { get; set; } = false; + + /// + /// True if this mindrole is an exclusive antagonist. Antag setting is not checked if this is True. + /// + [DataField] + public bool ExclusiveAntag { get; set; } = false; + + /// + /// The Mind that this role belongs to + /// + public Entity Mind { get; set; } + + /// + /// The Antagonist prototype of this role + /// + [DataField] + public ProtoId? AntagPrototype { get; set; } + + /// + /// The Job prototype of this role + /// + [DataField] + public ProtoId? JobPrototype { get; set; } +} + +// Why does this base component actually exist? It does make auto-categorization easy, but before that it was useless? +[EntityCategory("Roles")] +public abstract partial class BaseMindRoleComponent : Component +{ + +} diff --git a/Content.Shared/Roles/SharedRoleSystem.cs b/Content.Shared/Roles/SharedRoleSystem.cs index 90e2025cb97..00271693abe 100644 --- a/Content.Shared/Roles/SharedRoleSystem.cs +++ b/Content.Shared/Roles/SharedRoleSystem.cs @@ -1,36 +1,33 @@ +using System.Diagnostics.CodeAnalysis; using Content.Shared.Administration.Logs; using Content.Shared.CCVar; using Content.Shared.Database; -using Content.Shared.Ghost.Roles; +using Content.Shared.GameTicking; using Content.Shared.Mind; using Content.Shared.Roles.Jobs; using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Configuration; +using Robust.Shared.Map; using Robust.Shared.Prototypes; using Robust.Shared.Utility; namespace Content.Shared.Roles; -public abstract partial class SharedRoleSystem : EntitySystem // DeltaV - make it partial +public abstract class SharedRoleSystem : EntitySystem { [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; - [Dependency] private readonly IPrototypeManager _prototypes = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; - [Dependency] private readonly SharedMindSystem _minds = default!; [Dependency] private readonly IConfigurationManager _cfg = default!; - - // TODO please lord make role entities - private readonly HashSet _antagTypes = new(); + [Dependency] private readonly IEntityManager _entityManager = default!; + [Dependency] private readonly SharedGameTicker _gameTicker = default!; + [Dependency] private readonly IPrototypeManager _prototypes = default!; private JobRequirementOverridePrototype? _requirementOverride; public override void Initialize() { - // TODO make roles entities - SubscribeLocalEvent(OnJobGetAllRoles); Subs.CVar(_cfg, CCVars.GameRoleTimerOverride, SetRequirementOverride, true); - InitializeDeltaV(); // DeltaV } private void SetRequirementOverride(string value) @@ -45,62 +42,118 @@ private void SetRequirementOverride(string value) Log.Error($"Unknown JobRequirementOverridePrototype: {value}"); } - private void OnJobGetAllRoles(EntityUid uid, JobComponent component, ref MindGetAllRolesEvent args) + /// + /// Adds multiple mind roles to a mind + /// + /// The mind entity to add the role to + /// The list of mind roles to add + /// If the mind component is provided, it will be checked if it belongs to the mind entity + /// If true, no briefing will be generated upon receiving the mind role + public void MindAddRoles(EntityUid mindId, + List>? roles, + MindComponent? mind = null, + bool silent = false) { - var name = "game-ticker-unknown-role"; - var prototype = ""; - string? playTimeTracker = null; - if (component.Prototype != null && _prototypes.TryIndex(component.Prototype, out JobPrototype? job)) + if (roles is null || roles.Count == 0) + return; + + foreach (var proto in roles) { - name = job.Name; - prototype = job.ID; - playTimeTracker = job.PlayTimeTracker; + MindAddRole(mindId, proto, mind, silent); } + } - name = Loc.GetString(name); - - args.Roles.Add(new RoleInfo(component, name, false, playTimeTracker, prototype)); + /// + /// Adds a mind role to a mind + /// + /// The mind entity to add the role to + /// The mind role to add + /// If the mind component is provided, it will be checked if it belongs to the mind entity + /// If true, no briefing will be generated upon receiving the mind role + public void MindAddRole(EntityUid mindId, + ProtoId protoId, + MindComponent? mind = null, + bool silent = false) + { + if (protoId == "MindRoleJob") + MindAddJobRole(mindId, mind, silent, ""); + else + MindAddRoleDo(mindId, protoId, mind, silent); } - protected void SubscribeAntagEvents() where T : AntagonistRoleComponent + /// + /// Adds a Job mind role with the specified job prototype + /// + /// /// The mind entity to add the job role to + /// If the mind component is provided, it will be checked if it belongs to the mind entity + /// If true, no briefing will be generated upon receiving the mind role + /// The Job prototype for the new role + public void MindAddJobRole(EntityUid mindId, + MindComponent? mind = null, + bool silent = false, + string? jobPrototype = null) { - SubscribeLocalEvent((EntityUid _, T component, ref MindGetAllRolesEvent args) => - { - var name = "game-ticker-unknown-role"; - var prototype = ""; - if (component.PrototypeId != null && _prototypes.TryIndex(component.PrototypeId, out AntagPrototype? antag)) - { - name = antag.Name; - prototype = antag.ID; - } - name = Loc.GetString(name); + if (!Resolve(mindId, ref mind)) + return; - args.Roles.Add(new RoleInfo(component, name, true, null, prototype)); - }); + // Can't have someone get paid for two jobs now, can we + if (MindHasRole((mindId, mind), out var jobRole) + && jobRole.Value.Comp1.JobPrototype != jobPrototype) + { + _adminLogger.Add(LogType.Mind, + LogImpact.Low, + $"Job Role of {ToPrettyString(mind.OwnedEntity)} changed from '{jobRole.Value.Comp1.JobPrototype}' to '{jobPrototype}'"); - SubscribeLocalEvent((EntityUid _, T _, ref MindIsAntagonistEvent args) => { args.IsAntagonist = true; args.IsExclusiveAntagonist |= typeof(T).TryGetCustomAttribute(out _); }); - _antagTypes.Add(typeof(T)); + jobRole.Value.Comp1.JobPrototype = jobPrototype; + } + else + MindAddRoleDo(mindId, "MindRoleJob", mind, silent, jobPrototype); } - public void MindAddRoles(EntityUid mindId, ComponentRegistry components, MindComponent? mind = null, bool silent = false) + /// + /// Creates a Mind Role + /// + private void MindAddRoleDo(EntityUid mindId, + ProtoId protoId, + MindComponent? mind = null, + bool silent = false, + string? jobPrototype = null) { if (!Resolve(mindId, ref mind)) + { + Log.Error($"Failed to add role {protoId} to mind {mindId} : Mind does not match provided mind component"); return; + } - EntityManager.AddComponents(mindId, components); var antagonist = false; - foreach (var compReg in components.Values) + + if (!_prototypes.TryIndex(protoId, out var protoEnt)) { - var compType = compReg.Component.GetType(); + Log.Error($"Failed to add role {protoId} to mind {mindId} : Role prototype does not exist"); + return; + } - var comp = EntityManager.ComponentFactory.GetComponent(compType); - if (IsAntagonistRole(comp.GetType())) - { - antagonist = true; - break; - } + //TODO don't let a prototype being added a second time + //If that was somehow to occur, a second mindrole for that comp would be created + //Meaning any mind role checks could return wrong results, since they just return the first match they find + + var mindRoleId = Spawn(protoId, MapCoordinates.Nullspace); + EnsureComp(mindRoleId); + var mindRoleComp = Comp(mindRoleId); + + mindRoleComp.Mind = (mindId,mind); + if (jobPrototype is not null) + { + mindRoleComp.JobPrototype = jobPrototype; + EnsureComp(mindRoleId); + DebugTools.AssertNull(mindRoleComp.AntagPrototype); + DebugTools.Assert(!mindRoleComp.Antag); + DebugTools.Assert(!mindRoleComp.ExclusiveAntag); } + antagonist |= mindRoleComp.Antag; + mind.MindRoles.Add(mindRoleId); + var mindEv = new MindRoleAddedEvent(silent); RaiseLocalEvent(mindId, ref mindEv); @@ -110,157 +163,320 @@ public void MindAddRoles(EntityUid mindId, ComponentRegistry components, MindCom RaiseLocalEvent(mind.OwnedEntity.Value, message, true); } - _adminLogger.Add(LogType.Mind, LogImpact.Low, - $"Role components {string.Join(components.Keys.ToString(), ", ")} added to mind of {_minds.MindOwnerLoggingString(mind)}"); + var name = Loc.GetString(protoEnt.Name); + if (mind.OwnedEntity is not null) + { + _adminLogger.Add(LogType.Mind, + LogImpact.Low, + $"{name} added to mind of {ToPrettyString(mind.OwnedEntity)}"); + } + else + { + //TODO: This is not tied to the player on the Admin Log filters. + //Probably only happens when Job Role is added on initial spawn, before the mind entity is put in a mob + _adminLogger.Add(LogType.Mind, + LogImpact.Low, + $"{name} added to {ToPrettyString(mindId)}"); + } } - public void MindAddRole(EntityUid mindId, Component component, MindComponent? mind = null, bool silent = false) + /// + /// Removes all instances of a specific role from this mind. + /// + /// The mind to remove the role from. + /// The type of the role to remove. + /// Returns false if the role did not exist. True if successful> + public bool MindRemoveRole(Entity mind) where T : IComponent { - if (!Resolve(mindId, ref mind)) - return; + if (typeof(T) == typeof(MindRoleComponent)) + throw new InvalidOperationException(); + + if (!Resolve(mind.Owner, ref mind.Comp)) + return false; - if (HasComp(mindId, component.GetType())) + var found = false; + var antagonist = false; + var delete = new List(); + foreach (var role in mind.Comp.MindRoles) { - throw new ArgumentException($"We already have this role: {component}"); + if (!HasComp(role)) + continue; + + if (!TryComp(role, out MindRoleComponent? roleComp)) + { + Log.Error($"Encountered mind role entity {ToPrettyString(role)} without a {nameof(MindRoleComponent)}"); + continue; + } + + antagonist |= roleComp.Antag | roleComp.ExclusiveAntag; + _entityManager.DeleteEntity(role); + delete.Add(role); + found = true; } - EntityManager.AddComponent(mindId, component); - var antagonist = IsAntagonistRole(component.GetType()); + if (!found) + return false; - var mindEv = new MindRoleAddedEvent(silent); - RaiseLocalEvent(mindId, ref mindEv); + foreach (var role in delete) + { + mind.Comp.MindRoles.Remove(role); + } - var message = new RoleAddedEvent(mindId, mind, antagonist, silent); - if (mind.OwnedEntity != null) + if (mind.Comp.OwnedEntity != null) { - RaiseLocalEvent(mind.OwnedEntity.Value, message, true); + var message = new RoleRemovedEvent(mind.Owner, mind.Comp, antagonist); + RaiseLocalEvent(mind.Comp.OwnedEntity.Value, message, true); } - _adminLogger.Add(LogType.Mind, LogImpact.Low, - $"'Role {component}' added to mind of {_minds.MindOwnerLoggingString(mind)}"); + _adminLogger.Add(LogType.Mind, + LogImpact.Low, + $"All roles of type '{typeof(T).Name}' removed from mind of {ToPrettyString(mind.Comp.OwnedEntity)}"); + + return true; } /// - /// Gives this mind a new role. + /// Finds and removes all mind roles of a specific type /// - /// The mind to add the role to. - /// The role instance to add. - /// The role type to add. - /// Whether or not the role should be added silently - /// The instance of the role. - /// - /// Thrown if we already have a role with this type. - /// - public void MindAddRole(EntityUid mindId, T component, MindComponent? mind = null, bool silent = false) where T : IComponent, new() + /// The mind entity + /// The type of the role to remove. + /// True if the role existed and was removed + public bool MindTryRemoveRole(EntityUid mindId) where T : IComponent { - if (!Resolve(mindId, ref mind)) - return; + if (typeof(T) == typeof(MindRoleComponent)) + return false; - if (HasComp(mindId)) - { - throw new ArgumentException($"We already have this role: {typeof(T)}"); - } + if (MindRemoveRole(mindId)) + return true; - AddComp(mindId, component); - var antagonist = IsAntagonistRole(); + Log.Warning($"Failed to remove role {typeof(T)} from {ToPrettyString(mindId)} : mind does not have role "); + return false; + } - var mindEv = new MindRoleAddedEvent(silent); - RaiseLocalEvent(mindId, ref mindEv); + /// + /// Finds the first mind role of a specific T type on a mind entity. + /// Outputs entity components for the mind role's MindRoleComponent and for T + /// + /// The mind entity + /// The type of the role to find. + /// The Mind Role entity component + /// The Mind Role's entity component for T + /// True if the role is found + public bool MindHasRole(Entity mind, + [NotNullWhen(true)] out Entity? role) where T : IComponent + { + role = null; + if (!Resolve(mind.Owner, ref mind.Comp)) + return false; - var message = new RoleAddedEvent(mindId, mind, antagonist, silent); - if (mind.OwnedEntity != null) + foreach (var roleEnt in mind.Comp.MindRoles) { - RaiseLocalEvent(mind.OwnedEntity.Value, message, true); + if (!TryComp(roleEnt, out T? tcomp)) + continue; + + if (!TryComp(roleEnt, out MindRoleComponent? roleComp)) + { + Log.Error($"Encountered mind role entity {ToPrettyString(roleEnt)} without a {nameof(MindRoleComponent)}"); + continue; + } + + role = (roleEnt, roleComp, tcomp); + return true; } - _adminLogger.Add(LogType.Mind, LogImpact.Low, - $"'Role {typeof(T).Name}' added to mind of {_minds.MindOwnerLoggingString(mind)}"); + return false; } /// - /// Removes a role from this mind. + /// Finds the first mind role of a specific type on a mind entity. + /// Outputs an entity component for the mind role's MindRoleComponent /// - /// The mind to remove the role from. - /// The type of the role to remove. - /// - /// Thrown if we do not have this role. - /// - public void MindRemoveRole(EntityUid mindId) where T : IComponent + /// The mind entity + /// The Type to look for + /// The output role + /// True if the role is found + public bool MindHasRole(EntityUid mindId, + Type type, + [NotNullWhen(true)] out Entity? role) { - if (!RemComp(mindId)) + role = null; + // All MindRoles have this component, it would just return the first one. + // Order might not be what is expected. + // Better to report null + if (type == Type.GetType("MindRoleComponent")) { - throw new ArgumentException($"We do not have this role: {typeof(T)}"); + Log.Error($"Something attempted to query mind role 'MindRoleComponent' on mind {mindId}. This component is present on every single mind role."); + return false; } - var mind = Comp(mindId); - var antagonist = IsAntagonistRole(); - var message = new RoleRemovedEvent(mindId, mind, antagonist); + if (!TryComp(mindId, out var mind)) + return false; - if (mind.OwnedEntity != null) + var found = false; + + foreach (var roleEnt in mind.MindRoles) { - RaiseLocalEvent(mind.OwnedEntity.Value, message, true); + if (!HasComp(roleEnt, type)) + continue; + + if (!TryComp(roleEnt, out MindRoleComponent? roleComp)) + { + Log.Error($"Encountered mind role entity {ToPrettyString(roleEnt)} without a {nameof(MindRoleComponent)}"); + continue; + } + + role = (roleEnt, roleComp); + found = true; + break; } - _adminLogger.Add(LogType.Mind, LogImpact.Low, - $"'Role {typeof(T).Name}' removed from mind of {_minds.MindOwnerLoggingString(mind)}"); + + return found; } - public bool MindTryRemoveRole(EntityUid mindId) where T : IComponent + /// + /// Finds the first mind role of a specific type on a mind entity. + /// + /// The mind entity + /// The type of the role to find. + /// True if the role is found + public bool MindHasRole(EntityUid mindId) where T : IComponent { - if (!MindHasRole(mindId)) - return false; - - MindRemoveRole(mindId); - return true; + return MindHasRole(mindId, out _); } - public bool MindHasRole(EntityUid mindId) where T : IComponent + //TODO: Delete this later + /// + /// Returns the first mind role of a specific type + /// + /// The mind entity + /// Entity Component of the mind role + [Obsolete("Use MindHasRole's output value")] + public Entity? MindGetRole(EntityUid mindId) where T : IComponent { - DebugTools.Assert(HasComp(mindId)); - return HasComp(mindId); + Entity? result = null; + + var mind = Comp(mindId); + + foreach (var uid in mind.MindRoles) + { + if (HasComp(uid) && TryComp(uid, out var comp)) + result = (uid,comp); + } + return result; } - public List MindGetAllRoles(EntityUid mindId) + /// + /// Reads all Roles of a mind Entity and returns their data as RoleInfo + /// + /// The mind entity + /// RoleInfo list + public List MindGetAllRoleInfo(Entity mind) { - DebugTools.Assert(HasComp(mindId)); - var ev = new MindGetAllRolesEvent(new List()); - RaiseLocalEvent(mindId, ref ev); - return ev.Roles; + var roleInfo = new List(); + + if (!Resolve(mind.Owner, ref mind.Comp)) + return roleInfo; + + foreach (var role in mind.Comp.MindRoles) + { + var valid = false; + var name = "game-ticker-unknown-role"; + var prototype = ""; + string? playTimeTracker = null; + + if (!TryComp(role, out MindRoleComponent? comp)) + { + Log.Error($"Encountered mind role entity {ToPrettyString(role)} without a {nameof(MindRoleComponent)}"); + continue; + } + + if (comp.AntagPrototype is not null) + prototype = comp.AntagPrototype; + + if (comp.JobPrototype is not null && comp.AntagPrototype is null) + { + prototype = comp.JobPrototype; + if (_prototypes.TryIndex(comp.JobPrototype, out var job)) + { + playTimeTracker = job.PlayTimeTracker; + name = job.Name; + valid = true; + } + else + { + Log.Error($" Mind Role Prototype '{role.Id}' contains invalid Job prototype: '{comp.JobPrototype}'"); + } + } + else if (comp.AntagPrototype is not null && comp.JobPrototype is null) + { + prototype = comp.AntagPrototype; + if (_prototypes.TryIndex(comp.AntagPrototype, out var antag)) + { + name = antag.Name; + valid = true; + } + else + { + Log.Error($" Mind Role Prototype '{role.Id}' contains invalid Antagonist prototype: '{comp.AntagPrototype}'"); + } + } + else if (comp.JobPrototype is not null && comp.AntagPrototype is not null) + { + Log.Error($" Mind Role Prototype '{role.Id}' contains both Job and Antagonist prototypes"); + } + + if (valid) + roleInfo.Add(new RoleInfo(name, comp.Antag, playTimeTracker, prototype)); + } + return roleInfo; } + /// + /// Does this mind possess an antagonist role + /// + /// The mind entity + /// True if the mind possesses any antag roles public bool MindIsAntagonist(EntityUid? mindId) { - if (mindId == null) + if (mindId is null) return false; - DebugTools.Assert(HasComp(mindId)); - var ev = new MindIsAntagonistEvent(); - RaiseLocalEvent(mindId.Value, ref ev); - return ev.IsAntagonist; + return CheckAntagonistStatus(mindId.Value).Antag; } /// /// Does this mind possess an exclusive antagonist role /// /// The mind entity - /// True if the mind possesses an exclusive antag role + /// True if the mind possesses any exclusive antag roles public bool MindIsExclusiveAntagonist(EntityUid? mindId) { - if (mindId == null) + if (mindId is null) return false; - var ev = new MindIsAntagonistEvent(); - RaiseLocalEvent(mindId.Value, ref ev); - return ev.IsExclusiveAntagonist; + return CheckAntagonistStatus(mindId.Value).ExclusiveAntag; } - public bool IsAntagonistRole() - { - return _antagTypes.Contains(typeof(T)); - } + public (bool Antag, bool ExclusiveAntag) CheckAntagonistStatus(Entity mind) + { + if (!Resolve(mind.Owner, ref mind.Comp)) + return (false, false); - public bool IsAntagonistRole(Type component) - { - return _antagTypes.Contains(component); + var antagonist = false; + var exclusiveAntag = false; + foreach (var role in mind.Comp.MindRoles) + { + if (!TryComp(role, out var roleComp)) + { + Log.Error($"Mind Role Entity {ToPrettyString(role)} does not have a MindRoleComponent, despite being listed as a role belonging to {ToPrettyString(mind)}|"); + continue; + } + + antagonist |= roleComp.Antag; + exclusiveAntag |= roleComp.ExclusiveAntag; + } + + return (antagonist, exclusiveAntag); } /// @@ -273,6 +489,9 @@ public void MindPlaySound(EntityUid mindId, SoundSpecifier? sound, MindComponent _audio.PlayGlobal(sound, mind.Session); } + // TODO ROLES Change to readonly. + // Passing around a reference to a prototype's hashset makes me uncomfortable because it might be accidentally + // mutated. public HashSet? GetJobRequirement(JobPrototype job) { if (_requirementOverride != null && _requirementOverride.Jobs.TryGetValue(job.ID, out var req)) @@ -281,6 +500,7 @@ public void MindPlaySound(EntityUid mindId, SoundSpecifier? sound, MindComponent return job.Requirements; } + // TODO ROLES Change to readonly. public HashSet? GetJobRequirement(ProtoId job) { if (_requirementOverride != null && _requirementOverride.Jobs.TryGetValue(job, out var req)) @@ -289,6 +509,7 @@ public void MindPlaySound(EntityUid mindId, SoundSpecifier? sound, MindComponent return _prototypes.Index(job).Requirements; } + // TODO ROLES Change to readonly. public HashSet? GetAntagRequirement(ProtoId antag) { if (_requirementOverride != null && _requirementOverride.Antags.TryGetValue(antag, out var req)) @@ -297,6 +518,7 @@ public void MindPlaySound(EntityUid mindId, SoundSpecifier? sound, MindComponent return _prototypes.Index(antag).Requirements; } + // TODO ROLES Change to readonly. public HashSet? GetAntagRequirement(AntagPrototype antag) { if (_requirementOverride != null && _requirementOverride.Antags.TryGetValue(antag.ID, out var req)) diff --git a/Content.Shared/Silicons/Borgs/Components/BorgModuleIconComponent.cs b/Content.Shared/Silicons/Borgs/Components/BorgModuleIconComponent.cs new file mode 100644 index 00000000000..ff38a40f487 --- /dev/null +++ b/Content.Shared/Silicons/Borgs/Components/BorgModuleIconComponent.cs @@ -0,0 +1,20 @@ +//using Robust.Shared.GameObjects; +using Robust.Shared.GameStates; +using Robust.Shared.Utility; + +namespace Content.Shared.Silicons.Borgs.Components; + +/// +/// This is used to override the action icon for cyborg actions. +/// Without this component the no-action state will be used. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class BorgModuleIconComponent : Component +{ + /// + /// The action icon for this module + /// + [DataField] + public SpriteSpecifier.Rsi Icon = default!; + +} \ No newline at end of file diff --git a/Content.Shared/Silicons/Laws/Components/SiliconLawProviderComponent.cs b/Content.Shared/Silicons/Laws/Components/SiliconLawProviderComponent.cs index 4800aa0c59d..1c54938b8a4 100644 --- a/Content.Shared/Silicons/Laws/Components/SiliconLawProviderComponent.cs +++ b/Content.Shared/Silicons/Laws/Components/SiliconLawProviderComponent.cs @@ -1,4 +1,5 @@ using Robust.Shared.Prototypes; +using Robust.Shared.Audio; namespace Content.Shared.Silicons.Laws.Components; @@ -20,4 +21,12 @@ public sealed partial class SiliconLawProviderComponent : Component /// [DataField, ViewVariables(VVAccess.ReadWrite)] public SiliconLawset? Lawset; + + /// + /// The sound that plays for the Silicon player + /// when the particular lawboard has been inserted. + /// + [DataField] + public SoundSpecifier? LawUploadSound = new SoundPathSpecifier("/Audio/Misc/cryo_warning.ogg"); + } diff --git a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Airlock.cs b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Airlock.cs index ff6fc1ece07..37e5cd6e6ae 100644 --- a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Airlock.cs +++ b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Airlock.cs @@ -1,5 +1,6 @@ using Content.Shared.Doors.Components; using Robust.Shared.Serialization; +using Content.Shared.Electrocution; namespace Content.Shared.Silicons.StationAi; @@ -10,16 +11,84 @@ public abstract partial class SharedStationAiSystem private void InitializeAirlock() { SubscribeLocalEvent(OnAirlockBolt); + SubscribeLocalEvent(OnAirlockEmergencyAccess); + SubscribeLocalEvent(OnElectrified); } + /// + /// Attempts to bolt door. If wire was cut (AI or for bolts) or its not powered - notifies AI and does nothing. + /// private void OnAirlockBolt(EntityUid ent, DoorBoltComponent component, StationAiBoltEvent args) { - _doors.SetBoltsDown((ent, component), args.Bolted, args.User, predicted: true); + if (component.BoltWireCut) + { + ShowDeviceNotRespondingPopup(args.User); + return; + } + + var setResult = _doors.TrySetBoltDown((ent, component), args.Bolted, args.User, predicted: true); + if (!setResult) + { + ShowDeviceNotRespondingPopup(args.User); + } + } + + /// + /// Attempts to bolt door. If wire was cut (AI) or its not powered - notifies AI and does nothing. + /// + private void OnAirlockEmergencyAccess(EntityUid ent, AirlockComponent component, StationAiEmergencyAccessEvent args) + { + if (!PowerReceiver.IsPowered(ent)) + { + ShowDeviceNotRespondingPopup(args.User); + return; + } + + _airlocks.SetEmergencyAccess((ent, component), args.EmergencyAccess, args.User, predicted: true); + } + + /// + /// Attempts to bolt door. If wire was cut (AI or for one of power-wires) or its not powered - notifies AI and does nothing. + /// + private void OnElectrified(EntityUid ent, ElectrifiedComponent component, StationAiElectrifiedEvent args) + { + if ( + component.IsWireCut + || !PowerReceiver.IsPowered(ent) + ) + { + ShowDeviceNotRespondingPopup(args.User); + return; + } + + _electrify.SetElectrified((ent, component), args.Electrified); + var soundToPlay = component.Enabled + ? component.AirlockElectrifyDisabled + : component.AirlockElectrifyEnabled; + _audio.PlayLocal(soundToPlay, ent, args.User); } } +/// Event for StationAI attempt at bolting/unbolting door. [Serializable, NetSerializable] public sealed class StationAiBoltEvent : BaseStationAiAction { + /// Marker, should be door bolted or unbolted. public bool Bolted; } + +/// Event for StationAI attempt at setting emergency access for door on/off. +[Serializable, NetSerializable] +public sealed class StationAiEmergencyAccessEvent : BaseStationAiAction +{ + /// Marker, should door have emergency access on or off. + public bool EmergencyAccess; +} + +/// Event for StationAI attempt at electrifying/de-electrifying door. +[Serializable, NetSerializable] +public sealed class StationAiElectrifiedEvent : BaseStationAiAction +{ + /// Marker, should door be electrified or no. + public bool Electrified; +} diff --git a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Held.cs b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Held.cs index c59c4723079..e067cf3efad 100644 --- a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Held.cs +++ b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Held.cs @@ -2,6 +2,7 @@ using Content.Shared.Actions.Events; using Content.Shared.IdentityManagement; using Content.Shared.Interaction.Events; +using Content.Shared.Popups; using Content.Shared.Verbs; using Robust.Shared.Serialization; using Robust.Shared.Utility; @@ -13,9 +14,9 @@ public abstract partial class SharedStationAiSystem /* * Added when an entity is inserted into a StationAiCore. */ - - //TODO: Fix this, please - private const string JobNameLocId = "job-name-station-ai"; + + //TODO: Fix this, please + private const string JobNameLocId = "job-name-station-ai"; private void InitializeHeld() { @@ -26,10 +27,10 @@ private void InitializeHeld() SubscribeLocalEvent(OnHeldInteraction); SubscribeLocalEvent(OnHeldRelay); SubscribeLocalEvent(OnCoreJump); - SubscribeLocalEvent(OnTryGetIdentityShortInfo); + SubscribeLocalEvent(OnTryGetIdentityShortInfo); } - - private void OnTryGetIdentityShortInfo(TryGetIdentityShortInfoEvent args) + + private void OnTryGetIdentityShortInfo(TryGetIdentityShortInfoEvent args) { if (args.Handled) { @@ -40,7 +41,7 @@ private void OnTryGetIdentityShortInfo(TryGetIdentityShortInfoEvent args) { return; } - args.Title = $"{Name(args.ForActor)} ({Loc.GetString(JobNameLocId)})"; + args.Title = $"{Name(args.ForActor)} ({Loc.GetString(JobNameLocId)})"; args.Handled = true; } @@ -108,41 +109,56 @@ private void OnMessageAttempt(BoundUserInterfaceMessageAttempt ev) return; if (TryComp(ev.Actor, out StationAiHeldComponent? aiComp) && - (!ValidateAi((ev.Actor, aiComp)) || - !HasComp(ev.Target))) + (!TryComp(ev.Target, out StationAiWhitelistComponent? whitelistComponent) || + !ValidateAi((ev.Actor, aiComp)))) { + if (whitelistComponent is { Enabled: false }) + { + ShowDeviceNotRespondingPopup(ev.Actor); + } ev.Cancel(); } } private void OnHeldInteraction(Entity ent, ref InteractionAttemptEvent args) { - // Cancel if it's not us or something with a whitelist. - args.Cancelled = ent.Owner != args.Target && - args.Target != null && - (!TryComp(args.Target, out StationAiWhitelistComponent? whitelist) || !whitelist.Enabled); + // Cancel if it's not us or something with a whitelist, or whitelist is disabled. + args.Cancelled = (!TryComp(args.Target, out StationAiWhitelistComponent? whitelistComponent) + || !whitelistComponent.Enabled) + && ent.Owner != args.Target + && args.Target != null; + if (whitelistComponent is { Enabled: false }) + { + ShowDeviceNotRespondingPopup(ent.Owner); + } } private void OnTargetVerbs(Entity ent, ref GetVerbsEvent args) { - if (!args.CanComplexInteract || - !ent.Comp.Enabled || - !HasComp(args.User) || - !HasComp(args.Target)) + if (!args.CanComplexInteract + || !HasComp(args.User)) { return; } var user = args.User; + var target = args.Target; var isOpen = _uiSystem.IsUiOpen(target, AiUi.Key, user); - args.Verbs.Add(new AlternativeVerb() + var verb = new AlternativeVerb { Text = isOpen ? Loc.GetString("ai-close") : Loc.GetString("ai-open"), - Act = () => + Act = () => { + // no need to show menu if device is not powered. + if (!PowerReceiver.IsPowered(ent.Owner)) + { + ShowDeviceNotRespondingPopup(user); + return; + } + if (isOpen) { _uiSystem.CloseUi(ent.Owner, AiUi.Key, user); @@ -152,7 +168,13 @@ private void OnTargetVerbs(Entity ent, ref GetVerbs _uiSystem.OpenUi(ent.Owner, AiUi.Key, user); } } - }); + }; + args.Verbs.Add(verb); + } + + private void ShowDeviceNotRespondingPopup(EntityUid toEntity) + { + _popup.PopupClient(Loc.GetString("ai-device-not-responding"), toEntity, PopupType.MediumCaution); } } diff --git a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs index 17c592879c8..7eef20cebd8 100644 --- a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs +++ b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs @@ -4,14 +4,18 @@ using Content.Shared.Containers.ItemSlots; using Content.Shared.Database; using Content.Shared.Doors.Systems; +using Content.Shared.Electrocution; using Content.Shared.Interaction; using Content.Shared.Item.ItemToggle; using Content.Shared.Mind; using Content.Shared.Movement.Components; using Content.Shared.Movement.Systems; +using Content.Shared.Popups; using Content.Shared.Power; +using Content.Shared.Power.EntitySystems; using Content.Shared.StationAi; using Content.Shared.Verbs; +using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; using Robust.Shared.Map.Components; using Robust.Shared.Network; @@ -24,23 +28,28 @@ namespace Content.Shared.Silicons.StationAi; public abstract partial class SharedStationAiSystem : EntitySystem { - [Dependency] private readonly ISharedAdminManager _admin = default!; - [Dependency] private readonly IGameTiming _timing = default!; - [Dependency] private readonly INetManager _net = default!; - [Dependency] private readonly ItemSlotsSystem _slots = default!; - [Dependency] private readonly ItemToggleSystem _toggles = default!; - [Dependency] private readonly ActionBlockerSystem _blocker = default!; - [Dependency] private readonly MetaDataSystem _metadata = default!; - [Dependency] private readonly SharedAppearanceSystem _appearance = default!; - [Dependency] private readonly SharedContainerSystem _containers = default!; - [Dependency] private readonly SharedDoorSystem _doors = default!; - [Dependency] private readonly SharedEyeSystem _eye = default!; + [Dependency] private readonly ISharedAdminManager _admin = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly INetManager _net = default!; + [Dependency] private readonly ItemSlotsSystem _slots = default!; + [Dependency] private readonly ItemToggleSystem _toggles = default!; + [Dependency] private readonly ActionBlockerSystem _blocker = default!; + [Dependency] private readonly MetaDataSystem _metadata = default!; + [Dependency] private readonly SharedAirlockSystem _airlocks = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedContainerSystem _containers = default!; + [Dependency] private readonly SharedDoorSystem _doors = default!; + [Dependency] private readonly SharedElectrocutionSystem _electrify = default!; + [Dependency] private readonly SharedEyeSystem _eye = default!; [Dependency] protected readonly SharedMapSystem Maps = default!; - [Dependency] private readonly SharedMindSystem _mind = default!; - [Dependency] private readonly SharedMoverController _mover = default!; - [Dependency] private readonly SharedTransformSystem _xforms = default!; - [Dependency] private readonly SharedUserInterfaceSystem _uiSystem = default!; - [Dependency] private readonly StationAiVisionSystem _vision = default!; + [Dependency] private readonly SharedMindSystem _mind = default!; + [Dependency] private readonly SharedMoverController _mover = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedPowerReceiverSystem PowerReceiver = default!; + [Dependency] private readonly SharedTransformSystem _xforms = default!; + [Dependency] private readonly SharedUserInterfaceSystem _uiSystem = default!; + [Dependency] private readonly StationAiVisionSystem _vision = default!; // StationAiHeld is added to anything inside of an AI core. // StationAiHolder indicates it can hold an AI positronic brain (e.g. holocard / core). @@ -276,6 +285,8 @@ private void OnAiMapInit(Entity ent, ref MapInitEvent ar private bool SetupEye(Entity ent) { + if (_net.IsClient) + return false; if (ent.Comp.RemoteEntity != null) return false; @@ -290,8 +301,11 @@ private bool SetupEye(Entity ent) private void ClearEye(Entity ent) { + if (_net.IsClient) + return; QueueDel(ent.Comp.RemoteEntity); ent.Comp.RemoteEntity = null; + Dirty(ent); } private void AttachEye(Entity ent) @@ -321,6 +335,8 @@ private void OnAiInsert(Entity ent, ref EntInsertedIntoC if (_timing.ApplyingState) return; + SetupEye(ent); + // Just so text and the likes works properly _metadata.SetEntityName(ent.Owner, MetaData(args.Entity).EntityName); @@ -342,6 +358,7 @@ private void OnAiRemove(Entity ent, ref EntRemovedFromCo { _eye.SetTarget(args.Entity, null, eyeComp); } + ClearEye(ent); } private void UpdateAppearance(Entity entity) diff --git a/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs b/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs index a979a6ec50e..65848cb5e57 100644 --- a/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs +++ b/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs @@ -1,3 +1,4 @@ +using Content.Shared.Whitelist; using Robust.Shared.GameStates; namespace Content.Shared.Sound.Components; @@ -8,4 +9,9 @@ namespace Content.Shared.Sound.Components; [RegisterComponent, NetworkedComponent] public sealed partial class EmitSoundOnUIOpenComponent : BaseEmitSoundComponent { + /// + /// Blacklist for making the sound not play if certain entities open the UI + /// + [DataField] + public EntityWhitelist Blacklist = new(); } diff --git a/Content.Shared/Sound/SharedEmitSoundSystem.cs b/Content.Shared/Sound/SharedEmitSoundSystem.cs index 8733edf485d..3e051fff317 100644 --- a/Content.Shared/Sound/SharedEmitSoundSystem.cs +++ b/Content.Shared/Sound/SharedEmitSoundSystem.cs @@ -35,6 +35,7 @@ public abstract class SharedEmitSoundSystem : EntitySystem [Dependency] private readonly SharedAmbientSoundSystem _ambient = default!; [Dependency] private readonly SharedAudioSystem _audioSystem = default!; [Dependency] protected readonly SharedPopupSystem Popup = default!; + [Dependency] private readonly SharedMapSystem _map = default!; [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; public override void Initialize() @@ -57,7 +58,10 @@ public override void Initialize() private void HandleEmitSoundOnUIOpen(EntityUid uid, EmitSoundOnUIOpenComponent component, AfterActivatableUIOpenEvent args) { - TryEmitSound(uid, component, args.User); + if (_whitelistSystem.IsBlacklistFail(component.Blacklist, args.User)) + { + TryEmitSound(uid, component, args.User); + } } private void OnMobState(Entity entity, ref MobStateChangedEvent args) @@ -86,7 +90,7 @@ private void OnEmitSoundOnLand(EntityUid uid, BaseEmitSoundComponent component, return; } - var tile = grid.GetTileRef(xform.Coordinates); + var tile = _map.GetTileRef(xform.GridUid.Value, grid, xform.Coordinates); // Handle maps being grids (we'll still emit the sound). if (xform.GridUid != xform.MapUid && tile.IsSpace(_tileDefMan)) diff --git a/Content.Shared/Station/SharedStationSpawningSystem.cs b/Content.Shared/Station/SharedStationSpawningSystem.cs index 102c967a223..03bfd3e3663 100644 --- a/Content.Shared/Station/SharedStationSpawningSystem.cs +++ b/Content.Shared/Station/SharedStationSpawningSystem.cs @@ -150,6 +150,7 @@ public void EquipStartingGear(EntityUid entity, IEquipmentLoadout? startingGear, foreach (var (slot, entProtos) in startingGear.Storage) { + ents.Clear(); if (entProtos.Count == 0) continue; diff --git a/Content.Shared/Storage/Components/SecretStashComponent.cs b/Content.Shared/Storage/Components/SecretStashComponent.cs index 3bf8e2e871b..f8fff4c1949 100644 --- a/Content.Shared/Storage/Components/SecretStashComponent.cs +++ b/Content.Shared/Storage/Components/SecretStashComponent.cs @@ -8,6 +8,7 @@ using Content.Shared.DoAfter; using Robust.Shared.Serialization; using Robust.Shared.Audio; +using Content.Shared.Whitelist; namespace Content.Shared.Storage.Components { @@ -26,6 +27,12 @@ public sealed partial class SecretStashComponent : Component [DataField("maxItemSize")] public ProtoId MaxItemSize = "Small"; + /// + /// Entity blacklist for secret stashes. + /// + [DataField] + public EntityWhitelist? Blacklist; + /// /// This sound will be played when you try to insert an item in the stash. /// The sound will be played whether or not the item is actually inserted. diff --git a/Content.Shared/Storage/EntitySystems/SecretStashSystem.cs b/Content.Shared/Storage/EntitySystems/SecretStashSystem.cs index 901d744df5f..af9b768e98b 100644 --- a/Content.Shared/Storage/EntitySystems/SecretStashSystem.cs +++ b/Content.Shared/Storage/EntitySystems/SecretStashSystem.cs @@ -13,6 +13,9 @@ using Content.Shared.Verbs; using Content.Shared.IdentityManagement; using Content.Shared.Tools.EntitySystems; +using Content.Shared.Whitelist; +using Content.Shared.Materials; +using Robust.Shared.Map; namespace Content.Shared.Storage.EntitySystems; @@ -27,13 +30,14 @@ public sealed class SecretStashSystem : EntitySystem [Dependency] private readonly SharedItemSystem _item = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; [Dependency] private readonly ToolOpenableSystem _toolOpenableSystem = default!; - + [Dependency] private readonly EntityWhitelistSystem _whitelistSystem = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnInit); SubscribeLocalEvent(OnDestroyed); + SubscribeLocalEvent(OnReclaimed); SubscribeLocalEvent(OnInteractUsing, after: new[] { typeof(ToolOpenableSystem) }); SubscribeLocalEvent(OnInteractHand); SubscribeLocalEvent>(OnGetVerb); @@ -46,12 +50,12 @@ private void OnInit(Entity entity, ref ComponentInit args) private void OnDestroyed(Entity entity, ref DestructionEventArgs args) { - var storedInside = _containerSystem.EmptyContainer(entity.Comp.ItemContainer); - if (storedInside != null && storedInside.Count >= 1) - { - var popup = Loc.GetString("comp-secret-stash-on-destroyed-popup", ("stashname", GetStashName(entity))); - _popupSystem.PopupEntity(popup, storedInside[0], PopupType.MediumCaution); - } + DropContentsAndAlert(entity); + } + + private void OnReclaimed(Entity entity, ref GotReclaimedEvent args) + { + DropContentsAndAlert(entity, args.ReclaimerCoordinates); } private void OnInteractUsing(Entity entity, ref InteractUsingEvent args) @@ -90,8 +94,9 @@ private bool TryStashItem(Entity entity, EntityUid userUid return false; } - // check if item is too big to fit into secret stash - if (_item.GetSizePrototype(itemComp.Size) > _item.GetSizePrototype(entity.Comp.MaxItemSize)) + // check if item is too big to fit into secret stash or is in the blacklist + if (_item.GetSizePrototype(itemComp.Size) > _item.GetSizePrototype(entity.Comp.MaxItemSize) || + _whitelistSystem.IsBlacklistPass(entity.Comp.Blacklist, itemToHideUid)) { var msg = Loc.GetString("comp-secret-stash-action-hide-item-too-big", ("item", itemToHideUid), ("stashname", GetStashName(entity))); @@ -209,5 +214,18 @@ private bool HasItemInside(Entity entity) return entity.Comp.ItemContainer.ContainedEntity != null; } + /// + /// Drop the item stored in the stash and alert all nearby players with a popup. + /// + private void DropContentsAndAlert(Entity entity, EntityCoordinates? cords = null) + { + var storedInside = _containerSystem.EmptyContainer(entity.Comp.ItemContainer, true, cords); + if (storedInside != null && storedInside.Count >= 1) + { + var popup = Loc.GetString("comp-secret-stash-on-destroyed-popup", ("stashname", GetStashName(entity))); + _popupSystem.PopupPredicted(popup, storedInside[0], null, PopupType.MediumCaution); + } + } + #endregion } diff --git a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs index 3d7ff2edb73..68825425e61 100644 --- a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs +++ b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs @@ -454,7 +454,7 @@ private void AfterInteract(EntityUid uid, StorageComponent storageComp, AfterInt } //If there's only one then let's be generous - if (_entList.Count > 1) + if (_entList.Count >= 1) { var doAfterArgs = new DoAfterArgs(EntityManager, args.User, delay, new AreaPickupDoAfterEvent(GetNetEntityList(_entList)), uid, target: uid) { @@ -548,7 +548,7 @@ private void OnDoAfter(EntityUid uid, StorageComponent component, AreaPickupDoAf var angle = targetXform.LocalRotation; - if (PlayerInsertEntityInWorld((uid, component), args.Args.User, entity)) + if (PlayerInsertEntityInWorld((uid, component), args.Args.User, entity, playSound: false)) { successfullyInserted.Add(entity); successfullyInsertedPositions.Add(position); @@ -667,7 +667,7 @@ private void OnInsertItemIntoLocation(StorageInsertItemIntoLocationEvent msg, En private void OnSaveItemLocation(StorageSaveItemLocationEvent msg, EntitySessionEventArgs args) { - if (!ValidateInput(args, msg.Storage, msg.Item, out var player, out var storage, out var item, held: true)) + if (!ValidateInput(args, msg.Storage, msg.Item, out var player, out var storage, out var item)) return; SaveItemLocation(storage!, item.Owner); @@ -1044,12 +1044,12 @@ public bool PlayerInsertHeldEntity(Entity ent, EntityThe player to insert an entity with /// /// true if inserted, false otherwise - public bool PlayerInsertEntityInWorld(Entity uid, EntityUid player, EntityUid toInsert) + public bool PlayerInsertEntityInWorld(Entity uid, EntityUid player, EntityUid toInsert, bool playSound = true) { if (!Resolve(uid, ref uid.Comp) || !_interactionSystem.InRangeUnobstructed(player, uid.Owner)) return false; - if (!Insert(uid, toInsert, out _, user: player, uid.Comp)) + if (!Insert(uid, toInsert, out _, user: player, uid.Comp, playSound: playSound)) { _popupSystem.PopupClient(Loc.GetString("comp-storage-cant-insert"), uid, player); return false; diff --git a/Content.Shared/Strip/SharedStrippableSystem.cs b/Content.Shared/Strip/SharedStrippableSystem.cs index 935dc33540e..7afe503275a 100644 --- a/Content.Shared/Strip/SharedStrippableSystem.cs +++ b/Content.Shared/Strip/SharedStrippableSystem.cs @@ -1,8 +1,22 @@ +using System.Linq; +using Content.Shared.Administration.Logs; using Content.Shared.CombatMode; +using Content.Shared.Cuffs; +using Content.Shared.Cuffs.Components; +using Content.Shared.Database; +using Content.Shared.DoAfter; using Content.Shared.DragDrop; using Content.Shared.Hands.Components; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.IdentityManagement; using Content.Shared.Interaction; +using Content.Shared.Interaction.Events; +using Content.Shared.Inventory; +using Content.Shared.Inventory.VirtualItem; +using Content.Shared.Popups; using Content.Shared.Strip.Components; +using Content.Shared.Verbs; +using Robust.Shared.Utility; namespace Content.Shared.Strip; @@ -10,15 +24,577 @@ public abstract class SharedStrippableSystem : EntitySystem { [Dependency] private readonly SharedUserInterfaceSystem _ui = default!; + [Dependency] private readonly InventorySystem _inventorySystem = default!; + + [Dependency] private readonly SharedCuffableSystem _cuffableSystem = default!; + [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!; + [Dependency] private readonly SharedHandsSystem _handsSystem = default!; + [Dependency] private readonly SharedPopupSystem _popupSystem = default!; + + [Dependency] private readonly ISharedAdminLogManager _adminLogger = default!; + public override void Initialize() { base.Initialize(); + + SubscribeLocalEvent>(AddStripVerb); + SubscribeLocalEvent>(AddStripExamineVerb); + + // BUI + SubscribeLocalEvent(OnStripButtonPressed); + + // DoAfters + SubscribeLocalEvent>(OnStrippableDoAfterRunning); + SubscribeLocalEvent(OnStrippableDoAfterFinished); + SubscribeLocalEvent(OnCanDropOn); SubscribeLocalEvent(OnCanDrop); SubscribeLocalEvent(OnDragDrop); SubscribeLocalEvent(OnActivateInWorld); } + private void AddStripVerb(EntityUid uid, StrippableComponent component, GetVerbsEvent args) + { + if (args.Hands == null || !args.CanAccess || !args.CanInteract || args.Target == args.User) + return; + + Verb verb = new() + { + Text = Loc.GetString("strip-verb-get-data-text"), + Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/outfit.svg.192dpi.png")), + Act = () => TryOpenStrippingUi(args.User, (uid, component), true), + }; + + args.Verbs.Add(verb); + } + + private void AddStripExamineVerb(EntityUid uid, StrippableComponent component, GetVerbsEvent args) + { + if (args.Hands == null || !args.CanAccess || !args.CanInteract || args.Target == args.User) + return; + + ExamineVerb verb = new() + { + Text = Loc.GetString("strip-verb-get-data-text"), + Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/outfit.svg.192dpi.png")), + Act = () => TryOpenStrippingUi(args.User, (uid, component), true), + Category = VerbCategory.Examine, + }; + + args.Verbs.Add(verb); + } + + private void OnStripButtonPressed(Entity strippable, ref StrippingSlotButtonPressed args) + { + if (args.Actor is not { Valid: true } user || + !TryComp(user, out var userHands)) + return; + + if (args.IsHand) + { + StripHand((user, userHands), (strippable.Owner, null), args.Slot, strippable); + return; + } + + if (!TryComp(strippable, out var inventory)) + return; + + var hasEnt = _inventorySystem.TryGetSlotEntity(strippable, args.Slot, out var held, inventory); + + if (userHands.ActiveHandEntity != null && !hasEnt) + StartStripInsertInventory((user, userHands), strippable.Owner, userHands.ActiveHandEntity.Value, args.Slot); + else if (hasEnt) + StartStripRemoveInventory(user, strippable.Owner, held!.Value, args.Slot); + } + + private void StripHand( + Entity user, + Entity target, + string handId, + StrippableComponent? targetStrippable) + { + if (!Resolve(user, ref user.Comp) || + !Resolve(target, ref target.Comp) || + !Resolve(target, ref targetStrippable)) + return; + + if (!target.Comp.CanBeStripped) + return; + + if (!_handsSystem.TryGetHand(target.Owner, handId, out var handSlot)) + return; + + // Is the target a handcuff? + if (TryComp(handSlot.HeldEntity, out var virtualItem) && + TryComp(target.Owner, out var cuffable) && + _cuffableSystem.GetAllCuffs(cuffable).Contains(virtualItem.BlockingEntity)) + { + _cuffableSystem.TryUncuff(target.Owner, user, virtualItem.BlockingEntity, cuffable); + return; + } + + if (user.Comp.ActiveHandEntity != null && handSlot.HeldEntity == null) + StartStripInsertHand(user, target, user.Comp.ActiveHandEntity.Value, handId, targetStrippable); + else if (handSlot.HeldEntity != null) + StartStripRemoveHand(user, target, handSlot.HeldEntity.Value, handId, targetStrippable); + } + + /// + /// Checks whether the item is in a user's active hand and whether it can be inserted into the inventory slot. + /// + private bool CanStripInsertInventory( + Entity user, + EntityUid target, + EntityUid held, + string slot) + { + if (!Resolve(user, ref user.Comp)) + return false; + + if (user.Comp.ActiveHand == null) + return false; + + if (user.Comp.ActiveHandEntity == null) + return false; + + if (user.Comp.ActiveHandEntity != held) + return false; + + if (!_handsSystem.CanDropHeld(user, user.Comp.ActiveHand)) + { + _popupSystem.PopupCursor(Loc.GetString("strippable-component-cannot-drop")); + return false; + } + + if (_inventorySystem.TryGetSlotEntity(target, slot, out _)) + { + _popupSystem.PopupCursor(Loc.GetString("strippable-component-item-slot-occupied", ("owner", target))); + return false; + } + + if (!_inventorySystem.CanEquip(user, target, held, slot, out _)) + { + _popupSystem.PopupCursor(Loc.GetString("strippable-component-cannot-equip-message", ("owner", target))); + return false; + } + + return true; + } + + /// + /// Begins a DoAfter to insert the item in the user's active hand into the inventory slot. + /// + private void StartStripInsertInventory( + Entity user, + EntityUid target, + EntityUid held, + string slot) + { + if (!Resolve(user, ref user.Comp)) + return; + + if (!CanStripInsertInventory(user, target, held, slot)) + return; + + if (!_inventorySystem.TryGetSlot(target, slot, out var slotDef)) + { + Log.Error($"{ToPrettyString(user)} attempted to place an item in a non-existent inventory slot ({slot}) on {ToPrettyString(target)}"); + return; + } + + var (time, stealth) = GetStripTimeModifiers(user, target, held, slotDef.StripTime); + + if (!stealth) + _popupSystem.PopupEntity(Loc.GetString("strippable-component-alert-owner-insert", ("user", Identity.Entity(user, EntityManager)), ("item", user.Comp.ActiveHandEntity!.Value)), target, target, PopupType.Large); + + var prefix = stealth ? "stealthily " : ""; + _adminLogger.Add(LogType.Stripping, LogImpact.Low, $"{ToPrettyString(user):actor} is trying to {prefix}place the item {ToPrettyString(held):item} in {ToPrettyString(target):target}'s {slot} slot"); + + var doAfterArgs = new DoAfterArgs(EntityManager, user, time, new StrippableDoAfterEvent(true, true, slot), user, target, held) + { + Hidden = stealth, + AttemptFrequency = AttemptFrequency.EveryTick, + BreakOnDamage = true, + BreakOnMove = true, + NeedHand = true, + DuplicateCondition = DuplicateConditions.SameTool + }; + + _doAfterSystem.TryStartDoAfter(doAfterArgs); + } + + /// + /// Inserts the item in the user's active hand into the inventory slot. + /// + private void StripInsertInventory( + Entity user, + EntityUid target, + EntityUid held, + string slot) + { + if (!Resolve(user, ref user.Comp)) + return; + + if (!CanStripInsertInventory(user, target, held, slot)) + return; + + if (!_handsSystem.TryDrop(user, handsComp: user.Comp)) + return; + + _inventorySystem.TryEquip(user, target, held, slot); + _adminLogger.Add(LogType.Stripping, LogImpact.Medium, $"{ToPrettyString(user):actor} has placed the item {ToPrettyString(held):item} in {ToPrettyString(target):target}'s {slot} slot"); + } + + /// + /// Checks whether the item can be removed from the target's inventory. + /// + private bool CanStripRemoveInventory( + EntityUid user, + EntityUid target, + EntityUid item, + string slot) + { + if (!_inventorySystem.TryGetSlotEntity(target, slot, out var slotItem)) + { + _popupSystem.PopupCursor(Loc.GetString("strippable-component-item-slot-free-message", ("owner", target))); + return false; + } + + if (slotItem != item) + return false; + + if (!_inventorySystem.CanUnequip(user, target, slot, out var reason)) + { + _popupSystem.PopupCursor(Loc.GetString(reason)); + return false; + } + + return true; + } + + /// + /// Begins a DoAfter to remove the item from the target's inventory and insert it in the user's active hand. + /// + private void StartStripRemoveInventory( + EntityUid user, + EntityUid target, + EntityUid item, + string slot) + { + if (!CanStripRemoveInventory(user, target, item, slot)) + return; + + if (!_inventorySystem.TryGetSlot(target, slot, out var slotDef)) + { + Log.Error($"{ToPrettyString(user)} attempted to take an item from a non-existent inventory slot ({slot}) on {ToPrettyString(target)}"); + return; + } + + var (time, stealth) = GetStripTimeModifiers(user, target, item, slotDef.StripTime); + + if (!stealth) + { + if (slotDef.StripHidden) + _popupSystem.PopupEntity(Loc.GetString("strippable-component-alert-owner-hidden", ("slot", slot)), target, target, PopupType.Large); + else + _popupSystem.PopupEntity(Loc.GetString("strippable-component-alert-owner", ("user", Identity.Entity(user, EntityManager)), ("item", item)), target, target, PopupType.Large); + } + + var prefix = stealth ? "stealthily " : ""; + _adminLogger.Add(LogType.Stripping, LogImpact.Low, $"{ToPrettyString(user):actor} is trying to {prefix}strip the item {ToPrettyString(item):item} from {ToPrettyString(target):target}'s {slot} slot"); + + var doAfterArgs = new DoAfterArgs(EntityManager, user, time, new StrippableDoAfterEvent(false, true, slot), user, target, item) + { + Hidden = stealth, + AttemptFrequency = AttemptFrequency.EveryTick, + BreakOnDamage = true, + BreakOnMove = true, + NeedHand = true, + BreakOnHandChange = false, // Allow simultaneously removing multiple items. + DuplicateCondition = DuplicateConditions.SameTool + }; + + _doAfterSystem.TryStartDoAfter(doAfterArgs); + } + + /// + /// Removes the item from the target's inventory and inserts it in the user's active hand. + /// + private void StripRemoveInventory( + EntityUid user, + EntityUid target, + EntityUid item, + string slot, + bool stealth) + { + if (!CanStripRemoveInventory(user, target, item, slot)) + return; + + if (!_inventorySystem.TryUnequip(user, target, slot)) + return; + + RaiseLocalEvent(item, new DroppedEvent(user), true); // Gas tank internals etc. + + _handsSystem.PickupOrDrop(user, item, animateUser: stealth, animate: !stealth); + _adminLogger.Add(LogType.Stripping, LogImpact.Medium, $"{ToPrettyString(user):actor} has stripped the item {ToPrettyString(item):item} from {ToPrettyString(target):target}'s {slot} slot"); + } + + /// + /// Checks whether the item in the user's active hand can be inserted into one of the target's hands. + /// + private bool CanStripInsertHand( + Entity user, + Entity target, + EntityUid held, + string handName) + { + if (!Resolve(user, ref user.Comp) || + !Resolve(target, ref target.Comp)) + return false; + + if (!target.Comp.CanBeStripped) + return false; + + if (user.Comp.ActiveHand == null) + return false; + + if (user.Comp.ActiveHandEntity == null) + return false; + + if (user.Comp.ActiveHandEntity != held) + return false; + + if (!_handsSystem.CanDropHeld(user, user.Comp.ActiveHand)) + { + _popupSystem.PopupCursor(Loc.GetString("strippable-component-cannot-drop")); + return false; + } + + if (!_handsSystem.TryGetHand(target, handName, out var handSlot, target.Comp) || + !_handsSystem.CanPickupToHand(target, user.Comp.ActiveHandEntity.Value, handSlot, checkActionBlocker: false, target.Comp)) + { + _popupSystem.PopupCursor(Loc.GetString("strippable-component-cannot-put-message", ("owner", target))); + return false; + } + + return true; + } + + /// + /// Begins a DoAfter to insert the item in the user's active hand into one of the target's hands. + /// + private void StartStripInsertHand( + Entity user, + Entity target, + EntityUid held, + string handName, + StrippableComponent? targetStrippable = null) + { + if (!Resolve(user, ref user.Comp) || + !Resolve(target, ref target.Comp) || + !Resolve(target, ref targetStrippable)) + return; + + if (!CanStripInsertHand(user, target, held, handName)) + return; + + var (time, stealth) = GetStripTimeModifiers(user, target, null, targetStrippable.HandStripDelay); + + if (!stealth) + _popupSystem.PopupEntity(Loc.GetString("strippable-component-alert-owner-insert-hand", ("user", Identity.Entity(user, EntityManager)), ("item", user.Comp.ActiveHandEntity!.Value)), target, target, PopupType.Large); + + var prefix = stealth ? "stealthily " : ""; + _adminLogger.Add(LogType.Stripping, LogImpact.Low, $"{ToPrettyString(user):actor} is trying to {prefix}place the item {ToPrettyString(held):item} in {ToPrettyString(target):target}'s hands"); + + var doAfterArgs = new DoAfterArgs(EntityManager, user, time, new StrippableDoAfterEvent(true, false, handName), user, target, held) + { + Hidden = stealth, + AttemptFrequency = AttemptFrequency.EveryTick, + BreakOnDamage = true, + BreakOnMove = true, + NeedHand = true, + DuplicateCondition = DuplicateConditions.SameTool + }; + + _doAfterSystem.TryStartDoAfter(doAfterArgs); + } + + /// + /// Places the item in the user's active hand into one of the target's hands. + /// + private void StripInsertHand( + Entity user, + Entity target, + EntityUid held, + string handName, + bool stealth) + { + if (!Resolve(user, ref user.Comp) || + !Resolve(target, ref target.Comp)) + return; + + if (!CanStripInsertHand(user, target, held, handName)) + return; + + _handsSystem.TryDrop(user, checkActionBlocker: false, handsComp: user.Comp); + _handsSystem.TryPickup(target, held, handName, checkActionBlocker: false, animateUser: stealth, animate: !stealth, handsComp: target.Comp); + _adminLogger.Add(LogType.Stripping, LogImpact.Medium, $"{ToPrettyString(user):actor} has placed the item {ToPrettyString(held):item} in {ToPrettyString(target):target}'s hands"); + + // Hand update will trigger strippable update. + } + + /// + /// Checks whether the item is in the target's hand and whether it can be dropped. + /// + private bool CanStripRemoveHand( + EntityUid user, + Entity target, + EntityUid item, + string handName) + { + if (!Resolve(target, ref target.Comp)) + return false; + + if (!target.Comp.CanBeStripped) + return false; + + if (!_handsSystem.TryGetHand(target, handName, out var handSlot, target.Comp)) + { + _popupSystem.PopupCursor(Loc.GetString("strippable-component-item-slot-free-message", ("owner", Identity.Name(target, EntityManager, user)))); + return false; + } + + if (HasComp(handSlot.HeldEntity)) + return false; + + if (handSlot.HeldEntity == null) + return false; + + if (handSlot.HeldEntity != item) + return false; + + if (!_handsSystem.CanDropHeld(target, handSlot, false)) + { + _popupSystem.PopupCursor(Loc.GetString("strippable-component-cannot-drop-message", ("owner", Identity.Name(target, EntityManager, user)))); + return false; + } + + return true; + } + + /// + /// Begins a DoAfter to remove the item from the target's hand and insert it in the user's active hand. + /// + private void StartStripRemoveHand( + Entity user, + Entity target, + EntityUid item, + string handName, + StrippableComponent? targetStrippable = null) + { + if (!Resolve(user, ref user.Comp) || + !Resolve(target, ref target.Comp) || + !Resolve(target, ref targetStrippable)) + return; + + if (!CanStripRemoveHand(user, target, item, handName)) + return; + + var (time, stealth) = GetStripTimeModifiers(user, target, null, targetStrippable.HandStripDelay); + + if (!stealth) + _popupSystem.PopupEntity(Loc.GetString("strippable-component-alert-owner", ("user", Identity.Entity(user, EntityManager)), ("item", item)), target, target); + + var prefix = stealth ? "stealthily " : ""; + _adminLogger.Add(LogType.Stripping, LogImpact.Low, $"{ToPrettyString(user):actor} is trying to {prefix}strip the item {ToPrettyString(item):item} from {ToPrettyString(target):target}'s hands"); + + var doAfterArgs = new DoAfterArgs(EntityManager, user, time, new StrippableDoAfterEvent(false, false, handName), user, target, item) + { + Hidden = stealth, + AttemptFrequency = AttemptFrequency.EveryTick, + BreakOnDamage = true, + BreakOnMove = true, + NeedHand = true, + BreakOnHandChange = false, // Allow simultaneously removing multiple items. + DuplicateCondition = DuplicateConditions.SameTool + }; + + _doAfterSystem.TryStartDoAfter(doAfterArgs); + } + + /// + /// Takes the item from the target's hand and inserts it in the user's active hand. + /// + private void StripRemoveHand( + Entity user, + Entity target, + EntityUid item, + string handName, + bool stealth) + { + if (!Resolve(user, ref user.Comp) || + !Resolve(target, ref target.Comp)) + return; + + if (!CanStripRemoveHand(user, target, item, handName)) + return; + + _handsSystem.TryDrop(target, item, checkActionBlocker: false, handsComp: target.Comp); + _handsSystem.PickupOrDrop(user, item, animateUser: stealth, animate: !stealth, handsComp: user.Comp); + _adminLogger.Add(LogType.Stripping, LogImpact.Medium, $"{ToPrettyString(user):actor} has stripped the item {ToPrettyString(item):item} from {ToPrettyString(target):target}'s hands"); + + // Hand update will trigger strippable update. + } + + private void OnStrippableDoAfterRunning(Entity entity, ref DoAfterAttemptEvent ev) + { + var args = ev.DoAfter.Args; + + DebugTools.Assert(entity.Owner == args.User); + DebugTools.Assert(args.Target != null); + DebugTools.Assert(args.Used != null); + DebugTools.Assert(ev.Event.SlotOrHandName != null); + + if (ev.Event.InventoryOrHand) + { + if ( ev.Event.InsertOrRemove && !CanStripInsertInventory((entity.Owner, entity.Comp), args.Target.Value, args.Used.Value, ev.Event.SlotOrHandName) || + !ev.Event.InsertOrRemove && !CanStripRemoveInventory(entity.Owner, args.Target.Value, args.Used.Value, ev.Event.SlotOrHandName)) + ev.Cancel(); + } + else + { + if ( ev.Event.InsertOrRemove && !CanStripInsertHand((entity.Owner, entity.Comp), args.Target.Value, args.Used.Value, ev.Event.SlotOrHandName) || + !ev.Event.InsertOrRemove && !CanStripRemoveHand(entity.Owner, args.Target.Value, args.Used.Value, ev.Event.SlotOrHandName)) + ev.Cancel(); + } + } + + private void OnStrippableDoAfterFinished(Entity entity, ref StrippableDoAfterEvent ev) + { + if (ev.Cancelled) + return; + + DebugTools.Assert(entity.Owner == ev.User); + DebugTools.Assert(ev.Target != null); + DebugTools.Assert(ev.Used != null); + DebugTools.Assert(ev.SlotOrHandName != null); + + if (ev.InventoryOrHand) + { + if (ev.InsertOrRemove) + StripInsertInventory((entity.Owner, entity.Comp), ev.Target.Value, ev.Used.Value, ev.SlotOrHandName); + else + StripRemoveInventory(entity.Owner, ev.Target.Value, ev.Used.Value, ev.SlotOrHandName, ev.Args.Hidden); + } + else + { + if (ev.InsertOrRemove) + StripInsertHand((entity.Owner, entity.Comp), ev.Target.Value, ev.Used.Value, ev.SlotOrHandName, ev.Args.Hidden); + else + StripRemoveHand((entity.Owner, entity.Comp), ev.Target.Value, ev.Used.Value, ev.SlotOrHandName, ev.Args.Hidden); + } + } + private void OnActivateInWorld(EntityUid uid, StrippableComponent component, ActivateInWorldEvent args) { if (args.Handled || !args.Complex || args.Target == args.User) diff --git a/Content.Shared/SubFloor/SharedSubFloorHideSystem.cs b/Content.Shared/SubFloor/SharedSubFloorHideSystem.cs index cebc84ecb93..c90a28a5132 100644 --- a/Content.Shared/SubFloor/SharedSubFloorHideSystem.cs +++ b/Content.Shared/SubFloor/SharedSubFloorHideSystem.cs @@ -17,6 +17,7 @@ public abstract class SharedSubFloorHideSystem : EntitySystem { [Dependency] private readonly ITileDefinitionManager _tileDefinitionManager = default!; [Dependency] private readonly SharedAmbientSoundSystem _ambientSoundSystem = default!; + [Dependency] protected readonly SharedMapSystem Map = default!; [Dependency] protected readonly SharedAppearanceSystem Appearance = default!; public override void Initialize() @@ -92,7 +93,7 @@ private void OnTileChanged(ref TileChangedEvent args) if (args.NewTile.Tile.IsEmpty) return; // Anything that was here will be unanchored anyways. - UpdateTile(Comp(args.NewTile.GridUid), args.NewTile.GridIndices); + UpdateTile(args.NewTile.GridUid, Comp(args.NewTile.GridUid), args.NewTile.GridIndices); } /// @@ -104,25 +105,25 @@ private void UpdateFloorCover(EntityUid uid, SubFloorHideComponent? component = return; if (xform.Anchored && TryComp(xform.GridUid, out var grid)) - component.IsUnderCover = HasFloorCover(grid, grid.TileIndicesFor(xform.Coordinates)); + component.IsUnderCover = HasFloorCover(xform.GridUid.Value, grid, Map.TileIndicesFor(xform.GridUid.Value, grid, xform.Coordinates)); else component.IsUnderCover = false; UpdateAppearance(uid, component); } - public bool HasFloorCover(MapGridComponent grid, Vector2i position) + public bool HasFloorCover(EntityUid gridUid, MapGridComponent grid, Vector2i position) { // TODO Redo this function. Currently wires on an asteroid are always "below the floor" - var tileDef = (ContentTileDefinition) _tileDefinitionManager[grid.GetTileRef(position).Tile.TypeId]; + var tileDef = (ContentTileDefinition) _tileDefinitionManager[Map.GetTileRef(gridUid, grid, position).Tile.TypeId]; return !tileDef.IsSubFloor; } - private void UpdateTile(MapGridComponent grid, Vector2i position) + private void UpdateTile(EntityUid gridUid, MapGridComponent grid, Vector2i position) { - var covered = HasFloorCover(grid, position); + var covered = HasFloorCover(gridUid, grid, position); - foreach (var uid in grid.GetAnchoredEntities(position)) + foreach (var uid in Map.GetAnchoredEntities(gridUid, grid, position)) { if (!TryComp(uid, out SubFloorHideComponent? hideComp)) continue; diff --git a/Content.Shared/Tiles/FloorTileSystem.cs b/Content.Shared/Tiles/FloorTileSystem.cs index f031292f231..3acd5051c9c 100644 --- a/Content.Shared/Tiles/FloorTileSystem.cs +++ b/Content.Shared/Tiles/FloorTileSystem.cs @@ -36,6 +36,7 @@ public sealed class FloorTileSystem : EntitySystem [Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly TileSystem _tile = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!; + [Dependency] private readonly SharedMapSystem _map = default!; private static readonly Vector2 CheckRange = new(1f, 1f); @@ -132,7 +133,7 @@ private void OnAfterInteract(EntityUid uid, FloorTileComponent component, AfterI return; } - var tile = mapGrid.GetTileRef(location); + var tile = _map.GetTileRef(gridUid, mapGrid, location); var baseTurf = (ContentTileDefinition) _tileDefinitionManager[tile.Tile.TypeId]; if (HasBaseTurf(currentTileDefinition, baseTurf.ID)) @@ -176,7 +177,7 @@ private void PlaceAt(EntityUid user, EntityUid gridUid, MapGridComponent mapGrid var random = new System.Random((int) _timing.CurTick.Value); var variant = _tile.PickVariant((ContentTileDefinition) _tileDefinitionManager[tileId], random); - mapGrid.SetTile(location.Offset(new Vector2(offset, offset)), new Tile(tileId, 0, variant)); + _map.SetTile(gridUid, mapGrid,location.Offset(new Vector2(offset, offset)), new Tile(tileId, 0, variant)); _audio.PlayPredicted(placeSound, location, user); } diff --git a/Content.Shared/Tools/Components/SharedHandheldGPSComponent.cs b/Content.Shared/Tools/Components/SharedHandheldGPSComponent.cs deleted file mode 100644 index 3c30738857b..00000000000 --- a/Content.Shared/Tools/Components/SharedHandheldGPSComponent.cs +++ /dev/null @@ -1,9 +0,0 @@ - -namespace Content.Shared.GPS -{ - public abstract partial class SharedHandheldGPSComponent : Component - { - [DataField("updateRate")] - public float UpdateRate = 1.5f; - } -} diff --git a/Content.Shared/Tools/Systems/SharedToolSystem.Welder.cs b/Content.Shared/Tools/Systems/SharedToolSystem.Welder.cs index 60eafce4742..a6c3c4779d2 100644 --- a/Content.Shared/Tools/Systems/SharedToolSystem.Welder.cs +++ b/Content.Shared/Tools/Systems/SharedToolSystem.Welder.cs @@ -55,7 +55,7 @@ public void TurnOff(Entity entity, EntityUid? user) if (!Resolve(uid, ref welder, ref solutionContainer)) return default; - if (!SolutionContainer.TryGetSolution( + if (!SolutionContainerSystem.TryGetSolution( (uid, solutionContainer), welder.FuelSolutionName, out _, diff --git a/Content.Shared/Tools/Systems/SharedToolSystem.cs b/Content.Shared/Tools/Systems/SharedToolSystem.cs index 86b91dcda46..4c7383a38c4 100644 --- a/Content.Shared/Tools/Systems/SharedToolSystem.cs +++ b/Content.Shared/Tools/Systems/SharedToolSystem.cs @@ -31,7 +31,6 @@ public abstract partial class SharedToolSystem : EntitySystem [Dependency] private readonly SharedTransformSystem _transformSystem = default!; [Dependency] private readonly TileSystem _tiles = default!; [Dependency] private readonly TurfSystem _turfs = default!; - [Dependency] protected readonly SharedSolutionContainerSystem SolutionContainer = default!; public const string CutQuality = "Cutting"; public const string PulseQuality = "Pulsing"; diff --git a/Content.Shared/UserInterface/IntrinsicUISystem.cs b/Content.Shared/UserInterface/IntrinsicUISystem.cs index 2d8c5d14801..b16492b8355 100644 --- a/Content.Shared/UserInterface/IntrinsicUISystem.cs +++ b/Content.Shared/UserInterface/IntrinsicUISystem.cs @@ -10,6 +10,7 @@ public sealed class IntrinsicUISystem : EntitySystem public override void Initialize() { SubscribeLocalEvent(InitActions); + SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent(OnActionToggle); } @@ -21,6 +22,15 @@ private void OnActionToggle(EntityUid uid, IntrinsicUIComponent component, Toggl args.Handled = InteractUI(uid, args.Key, component); } + private void OnShutdown(EntityUid uid, IntrinsicUIComponent component, ref ComponentShutdown args) + { + foreach (var actionEntry in component.UIs.Values) + { + var actionId = actionEntry.ToggleActionEntity; + _actionsSystem.RemoveAction(uid, actionId); + } + } + private void InitActions(EntityUid uid, IntrinsicUIComponent component, MapInitEvent args) { foreach (var entry in component.UIs.Values) diff --git a/Content.Shared/VendingMachines/SharedVendingMachineSystem.cs b/Content.Shared/VendingMachines/SharedVendingMachineSystem.cs index 59f8489ac62..94562ce8d1b 100644 --- a/Content.Shared/VendingMachines/SharedVendingMachineSystem.cs +++ b/Content.Shared/VendingMachines/SharedVendingMachineSystem.cs @@ -23,11 +23,11 @@ public abstract partial class SharedVendingMachineSystem : EntitySystem public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnComponentInit); + SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnAfterInteract); } - protected virtual void OnComponentInit(EntityUid uid, VendingMachineComponent component, ComponentInit args) + protected virtual void OnMapInit(EntityUid uid, VendingMachineComponent component, MapInitEvent args) { RestockInventoryFromPrototype(uid, component, component.InitialStockQuality); } @@ -46,6 +46,7 @@ public void RestockInventoryFromPrototype(EntityUid uid, AddInventoryFromPrototype(uid, packPrototype.StartingInventory, InventoryType.Regular, component, restockQuality); AddInventoryFromPrototype(uid, packPrototype.EmaggedInventory, InventoryType.Emagged, component, restockQuality); AddInventoryFromPrototype(uid, packPrototype.ContrabandInventory, InventoryType.Contraband, component, restockQuality); + Dirty(uid, component); } /// diff --git a/Content.Shared/VendingMachines/VendingMachineComponent.cs b/Content.Shared/VendingMachines/VendingMachineComponent.cs index 23130bb8f39..f3fe3a1ecdb 100644 --- a/Content.Shared/VendingMachines/VendingMachineComponent.cs +++ b/Content.Shared/VendingMachines/VendingMachineComponent.cs @@ -8,7 +8,7 @@ namespace Content.Shared.VendingMachines { - [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] + [RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)] public sealed partial class VendingMachineComponent : Component { /// @@ -21,7 +21,7 @@ public sealed partial class VendingMachineComponent : Component /// Used by the server to determine how long the vending machine stays in the "Deny" state. /// Used by the client to determine how long the deny animation should be played. /// - [DataField("denyDelay")] + [DataField] public float DenyDelay = 2.0f; /// @@ -29,18 +29,19 @@ public sealed partial class VendingMachineComponent : Component /// The selected item is dispensed afer this delay. /// Used by the client to determine how long the deny animation should be played. /// - [DataField("ejectDelay")] + [DataField] public float EjectDelay = 1.2f; - [ViewVariables] + [DataField, AutoNetworkedField] public Dictionary Inventory = new(); - [ViewVariables] + [DataField, AutoNetworkedField] public Dictionary EmaggedInventory = new(); - [ViewVariables] + [DataField, AutoNetworkedField] public Dictionary ContrabandInventory = new(); + [DataField, AutoNetworkedField] public bool Contraband; public bool Ejecting; @@ -86,12 +87,13 @@ public sealed partial class VendingMachineComponent : Component /// Sound that plays when ejecting an item /// [DataField("soundVend")] - // Grabbed from: https://github.com/discordia-space/CEV-Eris/blob/f702afa271136d093ddeb415423240a2ceb212f0/sound/machines/vending_drop.ogg + // Grabbed from: https://github.com/tgstation/tgstation/blob/d34047a5ae911735e35cd44a210953c9563caa22/sound/machines/machine_vend.ogg public SoundSpecifier SoundVend = new SoundPathSpecifier("/Audio/Machines/machine_vend.ogg") { Params = new AudioParams { - Volume = -2f + Volume = -4f, + Variation = 0.15f } }; @@ -102,17 +104,6 @@ public sealed partial class VendingMachineComponent : Component // Yoinked from: https://github.com/discordia-space/CEV-Eris/blob/35bbad6764b14e15c03a816e3e89aa1751660ba9/sound/machines/Custom_deny.ogg public SoundSpecifier SoundDeny = new SoundPathSpecifier("/Audio/Machines/custom_deny.ogg"); - /// - /// The action available to the player controlling the vending machine - /// - [DataField("action", customTypeSerializer: typeof(PrototypeIdSerializer))] - [AutoNetworkedField] - public string? Action = "ActionVendingThrow"; - - [DataField("actionEntity")] - [AutoNetworkedField] - public EntityUid? ActionEntity; - public float NonLimitedEjectForce = 7.5f; public float NonLimitedEjectRange = 5f; diff --git a/Content.Shared/VendingMachines/VendingMachineInterfaceState.cs b/Content.Shared/VendingMachines/VendingMachineInterfaceState.cs index 82758b17f60..27651bb1cb4 100644 --- a/Content.Shared/VendingMachines/VendingMachineInterfaceState.cs +++ b/Content.Shared/VendingMachines/VendingMachineInterfaceState.cs @@ -2,17 +2,6 @@ namespace Content.Shared.VendingMachines { - [NetSerializable, Serializable] - public sealed class VendingMachineInterfaceState : BoundUserInterfaceState - { - public List Inventory; - - public VendingMachineInterfaceState(List inventory) - { - Inventory = inventory; - } - } - [Serializable, NetSerializable] public sealed class VendingMachineEjectMessage : BoundUserInterfaceMessage { diff --git a/Content.Shared/Voting/MsgVoteData.cs b/Content.Shared/Voting/MsgVoteData.cs index 49050c3493c..c9d9d49887e 100644 --- a/Content.Shared/Voting/MsgVoteData.cs +++ b/Content.Shared/Voting/MsgVoteData.cs @@ -1,4 +1,4 @@ -using Lidgren.Network; +using Lidgren.Network; using Robust.Shared.Network; using Robust.Shared.Serialization; @@ -17,6 +17,8 @@ public sealed class MsgVoteData : NetMessage public (ushort votes, string name)[] Options = default!; public bool IsYourVoteDirty; public byte? YourVote; + public bool DisplayVotes; + public int TargetEntity; public override void ReadFromBuffer(NetIncomingMessage buffer, IRobustSerializer serializer) { @@ -31,6 +33,8 @@ public override void ReadFromBuffer(NetIncomingMessage buffer, IRobustSerializer VoteInitiator = buffer.ReadString(); StartTime = TimeSpan.FromTicks(buffer.ReadInt64()); EndTime = TimeSpan.FromTicks(buffer.ReadInt64()); + DisplayVotes = buffer.ReadBoolean(); + TargetEntity = buffer.ReadVariableInt32(); Options = new (ushort votes, string name)[buffer.ReadByte()]; for (var i = 0; i < Options.Length; i++) @@ -58,6 +62,8 @@ public override void WriteToBuffer(NetOutgoingMessage buffer, IRobustSerializer buffer.Write(VoteInitiator); buffer.Write(StartTime.Ticks); buffer.Write(EndTime.Ticks); + buffer.Write(DisplayVotes); + buffer.WriteVariableInt32(TargetEntity); buffer.Write((byte) Options.Length); foreach (var (votes, name) in Options) diff --git a/Content.Shared/Voting/StandardVoteType.cs b/Content.Shared/Voting/StandardVoteType.cs index a0b33359acd..b53d9a9df70 100644 --- a/Content.Shared/Voting/StandardVoteType.cs +++ b/Content.Shared/Voting/StandardVoteType.cs @@ -1,23 +1,37 @@ -namespace Content.Shared.Voting +namespace Content.Shared.Voting; + +/// +/// Standard vote types that players can initiate themselves from the escape menu. +/// +public enum StandardVoteType : byte { /// - /// Standard vote types that players can initiate themselves from the escape menu. + /// Vote to restart the round. + /// + Restart, + + /// + /// Vote to change the game preset for next round. /// - public enum StandardVoteType : byte - { - /// - /// Vote to restart the round. - /// - Restart, + Preset, - /// - /// Vote to change the game preset for next round. - /// - Preset, + /// + /// Vote to change the map for the next round. + /// + Map, - /// - /// Vote to change the map for the next round. - /// - Map - } + /// + /// Vote to kick a player. + /// + Votekick +} + +/// +/// Reasons available to initiate a votekick. +/// +public enum VotekickReasonType : byte +{ + Raiding, + Cheating, + Spam } diff --git a/Content.Shared/Voting/VotingEvents.cs b/Content.Shared/Voting/VotingEvents.cs new file mode 100644 index 00000000000..548bb0d5d86 --- /dev/null +++ b/Content.Shared/Voting/VotingEvents.cs @@ -0,0 +1,30 @@ +using Robust.Shared.Network; +using Robust.Shared.Serialization; + +namespace Content.Shared.Voting; + +[Serializable, NetSerializable] +public sealed class VotePlayerListRequestEvent : EntityEventArgs +{ + +} + +[Serializable, NetSerializable] +public sealed class VotePlayerListResponseEvent : EntityEventArgs +{ + public VotePlayerListResponseEvent((NetUserId, NetEntity, string)[] players, bool denied) + { + Players = players; + Denied = denied; + } + + /// + /// The players available to have a votekick started for them. + /// + public (NetUserId, NetEntity, string)[] Players { get; } + + /// + /// Whether the server will allow the user to start a votekick or not. + /// + public bool Denied; +} diff --git a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs index bc19235cd39..767b5c4ef62 100644 --- a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs +++ b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs @@ -435,7 +435,7 @@ private bool AttemptAttack(EntityUid user, EntityUid weaponUid, MeleeWeaponCompo throw new NotImplementedException(); } - DoLungeAnimation(user, weaponUid, weapon.Angle, GetCoordinates(attack.Coordinates).ToMap(EntityManager, TransformSystem), weapon.Range, animation); + DoLungeAnimation(user, weaponUid, weapon.Angle, TransformSystem.ToMapCoordinates(GetCoordinates(attack.Coordinates)), weapon.Range, animation); } var attackEv = new MeleeAttackEvent(weaponUid); @@ -467,12 +467,14 @@ protected virtual void DoLightAttack(EntityUid user, LightAttackEvent ev, Entity // TODO: This needs fixing if (meleeUid == user) { - AdminLogger.Add(LogType.MeleeHit, LogImpact.Low, + AdminLogger.Add(LogType.MeleeHit, + LogImpact.Low, $"{ToPrettyString(user):actor} melee attacked (light) using their hands and missed"); } else { - AdminLogger.Add(LogType.MeleeHit, LogImpact.Low, + AdminLogger.Add(LogType.MeleeHit, + LogImpact.Low, $"{ToPrettyString(user):actor} melee attacked (light) using {ToPrettyString(meleeUid):tool} and missed"); } var missEvent = new MeleeHitEvent(new List(), user, meleeUid, damage, null); @@ -521,12 +523,14 @@ protected virtual void DoLightAttack(EntityUid user, LightAttackEvent ev, Entity if (meleeUid == user) { - AdminLogger.Add(LogType.MeleeHit, LogImpact.Medium, + AdminLogger.Add(LogType.MeleeHit, + LogImpact.Medium, $"{ToPrettyString(user):actor} melee attacked (light) {ToPrettyString(target.Value):subject} using their hands and dealt {damageResult.GetTotal():damage} damage"); } else { - AdminLogger.Add(LogType.MeleeHit, LogImpact.Medium, + AdminLogger.Add(LogType.MeleeHit, + LogImpact.Medium, $"{ToPrettyString(user):actor} melee attacked (light) {ToPrettyString(target.Value):subject} using {ToPrettyString(meleeUid):tool} and dealt {damageResult.GetTotal():damage} damage"); } @@ -548,7 +552,7 @@ private bool DoHeavyAttack(EntityUid user, HeavyAttackEvent ev, EntityUid meleeU if (!TryComp(user, out TransformComponent? userXform)) return false; - var targetMap = GetCoordinates(ev.Coordinates).ToMap(EntityManager, TransformSystem); + var targetMap = TransformSystem.ToMapCoordinates(GetCoordinates(ev.Coordinates)); if (targetMap.MapId != userXform.MapID) return false; @@ -564,12 +568,14 @@ private bool DoHeavyAttack(EntityUid user, HeavyAttackEvent ev, EntityUid meleeU { if (meleeUid == user) { - AdminLogger.Add(LogType.MeleeHit, LogImpact.Low, + AdminLogger.Add(LogType.MeleeHit, + LogImpact.Low, $"{ToPrettyString(user):actor} melee attacked (heavy) using their hands and missed"); } else { - AdminLogger.Add(LogType.MeleeHit, LogImpact.Low, + AdminLogger.Add(LogType.MeleeHit, + LogImpact.Low, $"{ToPrettyString(user):actor} melee attacked (heavy) using {ToPrettyString(meleeUid):tool} and missed"); } var missEvent = new MeleeHitEvent(new List(), user, meleeUid, damage, direction); @@ -590,8 +596,14 @@ private bool DoHeavyAttack(EntityUid user, HeavyAttackEvent ev, EntityUid meleeU // Validate client for (var i = entities.Count - 1; i >= 0; i--) { - if (ArcRaySuccessful(entities[i], userPos, direction.ToWorldAngle(), component.Angle, distance, - userXform.MapID, user, session)) + if (ArcRaySuccessful(entities[i], + userPos, + direction.ToWorldAngle(), + component.Angle, + distance, + userXform.MapID, + user, + session)) { continue; } @@ -658,16 +670,24 @@ private bool DoHeavyAttack(EntityUid user, HeavyAttackEvent ev, EntityUid meleeU if (damageResult != null && damageResult.GetTotal() > FixedPoint2.Zero) { + // If the target has stamina and is taking blunt damage, they should also take stamina damage based on their blunt to stamina factor + if (damageResult.DamageDict.TryGetValue("Blunt", out var bluntDamage)) + { + _stamina.TakeStaminaDamage(entity, (bluntDamage * component.BluntStaminaDamageFactor).Float(), visual: false, source: user, with: meleeUid == user ? null : meleeUid); + } + appliedDamage += damageResult; if (meleeUid == user) { - AdminLogger.Add(LogType.MeleeHit, LogImpact.Medium, + AdminLogger.Add(LogType.MeleeHit, + LogImpact.Medium, $"{ToPrettyString(user):actor} melee attacked (heavy) {ToPrettyString(entity):subject} using their hands and dealt {damageResult.GetTotal():damage} damage"); } else { - AdminLogger.Add(LogType.MeleeHit, LogImpact.Medium, + AdminLogger.Add(LogType.MeleeHit, + LogImpact.Medium, $"{ToPrettyString(user):actor} melee attacked (heavy) {ToPrettyString(entity):subject} using {ToPrettyString(meleeUid):tool} and dealt {damageResult.GetTotal():damage} damage"); } } @@ -701,8 +721,13 @@ protected HashSet ArcRayCast(Vector2 position, Angle angle, Angle arc { var castAngle = new Angle(baseAngle + increment * i); var res = _physics.IntersectRay(mapId, - new CollisionRay(position, castAngle.ToWorldVec(), - AttackMask), range, ignore, false).ToList(); + new CollisionRay(position, + castAngle.ToWorldVec(), + AttackMask), + range, + ignore, + false) + .ToList(); if (res.Count != 0) { @@ -713,8 +738,14 @@ protected HashSet ArcRayCast(Vector2 position, Angle angle, Angle arc return resSet; } - protected virtual bool ArcRaySuccessful(EntityUid targetUid, Vector2 position, Angle angle, Angle arcWidth, float range, - MapId mapId, EntityUid ignore, ICommonSession? session) + protected virtual bool ArcRaySuccessful(EntityUid targetUid, + Vector2 position, + Angle angle, + Angle arcWidth, + float range, + MapId mapId, + EntityUid ignore, + ICommonSession? session) { // Only matters for server. return true; diff --git a/Content.Shared/Weapons/Misc/SharedGrapplingGunSystem.cs b/Content.Shared/Weapons/Misc/SharedGrapplingGunSystem.cs index d2f0333b833..e790973538f 100644 --- a/Content.Shared/Weapons/Misc/SharedGrapplingGunSystem.cs +++ b/Content.Shared/Weapons/Misc/SharedGrapplingGunSystem.cs @@ -114,19 +114,14 @@ private void OnWeightlessMove(ref CanWeightlessMoveEvent ev) private void OnGunActivate(EntityUid uid, GrapplingGunComponent component, ActivateInWorldEvent args) { - if (!Timing.IsFirstTimePredicted || args.Handled || !args.Complex) - return; - - if (Deleted(component.Projectile)) + if (!Timing.IsFirstTimePredicted || args.Handled || !args.Complex || component.Projectile is not {} projectile) return; _audio.PlayPredicted(component.CycleSound, uid, args.User); _appearance.SetData(uid, SharedTetherGunSystem.TetherVisualsStatus.Key, true); if (_netManager.IsServer) - { - QueueDel(component.Projectile.Value); - } + QueueDel(projectile); component.Projectile = null; SetReeling(uid, component, false, args.User); diff --git a/Content.Shared/Whitelist/EntityWhitelist.cs b/Content.Shared/Whitelist/EntityWhitelist.cs index 3e4e2fecb2e..cbe4633360f 100644 --- a/Content.Shared/Whitelist/EntityWhitelist.cs +++ b/Content.Shared/Whitelist/EntityWhitelist.cs @@ -32,6 +32,12 @@ public sealed partial class EntityWhitelist [DataField] public string[]? Components; // TODO yaml validation + /// + /// Mind Role Prototype names that are allowed in the whitelist. + /// + [DataField] public string[]? MindRoles; + // TODO yaml validation + /// /// Item sizes that are allowed in the whitelist. /// diff --git a/Content.Shared/Whitelist/EntityWhitelistSystem.cs b/Content.Shared/Whitelist/EntityWhitelistSystem.cs index 57fdb523dd4..7c78b410a18 100644 --- a/Content.Shared/Whitelist/EntityWhitelistSystem.cs +++ b/Content.Shared/Whitelist/EntityWhitelistSystem.cs @@ -1,5 +1,6 @@ using System.Diagnostics.CodeAnalysis; using Content.Shared.Item; +using Content.Shared.Roles; using Content.Shared.Tag; namespace Content.Shared.Whitelist; @@ -7,6 +8,7 @@ namespace Content.Shared.Whitelist; public sealed class EntityWhitelistSystem : EntitySystem { [Dependency] private readonly IComponentFactory _factory = default!; + [Dependency] private readonly SharedRoleSystem _roles = default!; [Dependency] private readonly TagSystem _tag = default!; private EntityQuery _itemQuery; @@ -46,9 +48,30 @@ public bool CheckBoth([NotNullWhen(true)] EntityUid? uid, EntityWhitelist? black public bool IsValid(EntityWhitelist list, EntityUid uid) { if (list.Components != null) - EnsureRegistrations(list); + { + var regs = StringsToRegs(list.Components); + + list.Registrations ??= new List(); + list.Registrations.AddRange(regs); + } + + if (list.MindRoles != null) + { + var regs = StringsToRegs(list.MindRoles); + + foreach (var role in regs) + { + if ( _roles.MindHasRole(uid, role.Type, out _)) + { + if (!list.RequireAll) + return true; + } + else if (list.RequireAll) + return false; + } + } - if (list.Registrations != null) + if (list.Registrations != null && list.Registrations.Count > 0) { foreach (var reg in list.Registrations) { @@ -153,7 +176,7 @@ public bool IsBlacklistPassOrNull(EntityWhitelist? blacklist, EntityUid uid) return IsWhitelistPassOrNull(blacklist, uid); } - /// + /// /// Helper function to determine if Blacklist is either null or the entity is not on the list /// Duplicate of equivalent Whitelist function /// @@ -162,24 +185,27 @@ public bool IsBlacklistFailOrNull(EntityWhitelist? blacklist, EntityUid uid) return IsWhitelistFailOrNull(blacklist, uid); } - private void EnsureRegistrations(EntityWhitelist list) + private List StringsToRegs(string[]? input) { - if (list.Components == null) - return; + var list = new List(); - list.Registrations = new List(); - foreach (var name in list.Components) + if (input == null || input.Length == 0) + return list; + + foreach (var name in input) { var availability = _factory.GetComponentAvailability(name); if (_factory.TryGetRegistration(name, out var registration) && availability == ComponentAvailability.Available) { - list.Registrations.Add(registration); + list.Add(registration); } else if (availability == ComponentAvailability.Unknown) { - Log.Warning($"Unknown component name {name} passed to EntityWhitelist!"); + Log.Error($"StringsToRegs failed: Unknown component name {name} passed to EntityWhitelist!"); } } + + return list; } } diff --git a/README.md b/README.md index 44f29d2bfc7..501d2f64df2 100644 --- a/README.md +++ b/README.md @@ -26,8 +26,7 @@ We are happy to accept contributions from anybody. Get in Discord if you want to We are currently accepting translations of the game on our main repository. If you would like to translate the game into another language check the #localization channel in our [Discord](https://go.delta-v.org/AtDxv) -If you make any contributions, please make sure to read the markers section in [MARKERS.md](https://github.com/DeltaV-Station/Delta-v/blob/master/MARKERS.md) -Any changes made to files belonging to our upstream should be properly marked in accordance to what is specified there. +Make sure to read [CONTRIBUTING.md](/CONTRIBUTING.md) if you are new to Delta-V! ## Building diff --git a/Resources/Audio/Ambience/Antag/attributions.yml b/Resources/Audio/Ambience/Antag/attributions.yml index 25917a5da2b..0d3d278a627 100644 --- a/Resources/Audio/Ambience/Antag/attributions.yml +++ b/Resources/Audio/Ambience/Antag/attributions.yml @@ -18,3 +18,7 @@ license: "CC-BY-SA-3.0" copyright: "Made by @ps3moira on github" source: https://www.youtube.com/watch?v=4-R-_DiqiLo +- files: ["silicon_lawboard_antimov.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Made by @ps3moira on Discord for SS14" + source: "https://www.youtube.com/watch?v=jf1sYGYVLsw" diff --git a/Resources/Audio/Ambience/Antag/silicon_lawboard_antimov.ogg b/Resources/Audio/Ambience/Antag/silicon_lawboard_antimov.ogg new file mode 100644 index 00000000000..911a34532d6 Binary files /dev/null and b/Resources/Audio/Ambience/Antag/silicon_lawboard_antimov.ogg differ diff --git a/Resources/Audio/DeltaV/Jukebox/Caravan_Palace_Lone_Digger-MONO.ogg b/Resources/Audio/DeltaV/Jukebox/Caravan_Palace_Lone_Digger-MONO.ogg new file mode 100644 index 00000000000..6b40b5e123c Binary files /dev/null and b/Resources/Audio/DeltaV/Jukebox/Caravan_Palace_Lone_Digger-MONO.ogg differ diff --git a/Resources/Audio/DeltaV/Jukebox/attributions.yml b/Resources/Audio/DeltaV/Jukebox/attributions.yml index 67555c54459..3710761cb5e 100644 --- a/Resources/Audio/DeltaV/Jukebox/attributions.yml +++ b/Resources/Audio/DeltaV/Jukebox/attributions.yml @@ -86,3 +86,7 @@ copyright: "Superposition by Amie Waters, converted to mono" source: "https://amiewaters.bandcamp.com/track/superposition-2" +- files: ["Caravan_Palace_Lone_Digger-MONO.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Lone Digger by Caravan Palace, converted to mono" + source: "https://vimeo.com/144736865" diff --git a/Resources/Audio/Machines/airlock_electrify_off.ogg b/Resources/Audio/Machines/airlock_electrify_off.ogg new file mode 100644 index 00000000000..c88d00299e9 Binary files /dev/null and b/Resources/Audio/Machines/airlock_electrify_off.ogg differ diff --git a/Resources/Audio/Machines/airlock_electrify_on.ogg b/Resources/Audio/Machines/airlock_electrify_on.ogg new file mode 100644 index 00000000000..c87b7d3851b Binary files /dev/null and b/Resources/Audio/Machines/airlock_electrify_on.ogg differ diff --git a/Resources/Audio/Machines/airlock_emergencyoff.ogg b/Resources/Audio/Machines/airlock_emergencyoff.ogg new file mode 100644 index 00000000000..5046a75ec20 Binary files /dev/null and b/Resources/Audio/Machines/airlock_emergencyoff.ogg differ diff --git a/Resources/Audio/Machines/airlock_emergencyon.ogg b/Resources/Audio/Machines/airlock_emergencyon.ogg new file mode 100644 index 00000000000..6c8b54a2845 Binary files /dev/null and b/Resources/Audio/Machines/airlock_emergencyon.ogg differ diff --git a/Resources/Audio/Machines/attributions.yml b/Resources/Audio/Machines/attributions.yml index b1f99245468..7675162a04d 100644 --- a/Resources/Audio/Machines/attributions.yml +++ b/Resources/Audio/Machines/attributions.yml @@ -163,6 +163,7 @@ - chime.ogg - buzz-sigh.ogg - buzztwo.ogg + - machine_vend.gg license: "CC-BY-SA-3.0" copyright: "Taken from TG station." source: "https://github.com/tgstation/tgstation/tree/d4f678a1772007ff8d7eddd21cf7218c8e07bfc0" @@ -171,3 +172,12 @@ license: "CC0-1.0" copyright: "by Ko4erga" source: "https://github.com/space-wizards/space-station-14/pull/30431" + +- files: + - airlock_emergencyoff.ogg + - airlock_emergencyon.ogg + - airlock_electrify_off.ogg + - airlock_electrify_on.ogg + license: "CC0-1.0" + copyright: "by ScarKy0" + source: "https://github.com/space-wizards/space-station-14/pull/32012" diff --git a/Resources/Audio/Machines/machine_vend.ogg b/Resources/Audio/Machines/machine_vend.ogg index 8f7c187d0c3..92867a1f3d3 100644 Binary files a/Resources/Audio/Machines/machine_vend.ogg and b/Resources/Audio/Machines/machine_vend.ogg differ diff --git a/Resources/Audio/Misc/attributions.yml b/Resources/Audio/Misc/attributions.yml index 9b3cb64ae73..a7349a445be 100644 --- a/Resources/Audio/Misc/attributions.yml +++ b/Resources/Audio/Misc/attributions.yml @@ -28,6 +28,11 @@ copyright: "Taken from TG station." source: "https://github.com/tgstation/tgstation/blob/2f63c779cb43543cfde76fa7ddaeacfde185fded/sound/effects/ratvar_reveal.ogg" +- files: ["cryo_warning.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from TG station." + source: "https://github.com/tgstation/tgstation/blob/00cf2da5f785c110b9930077b3202f1a4638e1fd/sound/machines/cryo_warning.ogg" + - files: ["epsilon.ogg"] license: "CC-BY-SA-3.0" copyright: "Made by dj-34 (https://github.com/dj-34)" diff --git a/Resources/Audio/Misc/cryo_warning.ogg b/Resources/Audio/Misc/cryo_warning.ogg new file mode 100644 index 00000000000..06cdebc9447 Binary files /dev/null and b/Resources/Audio/Misc/cryo_warning.ogg differ diff --git a/Resources/Audio/Voice/Reptilian/attritbutions.yml b/Resources/Audio/Voice/Reptilian/attritbutions.yml index 7e8b2a0ce39..7fa86b2ebfc 100644 --- a/Resources/Audio/Voice/Reptilian/attritbutions.yml +++ b/Resources/Audio/Voice/Reptilian/attritbutions.yml @@ -2,3 +2,8 @@ copyright: '"scream_lizard.ogg" by Skyrat-SS13' license: source: https://github.com/Skyrat-SS13/Skyrat-tg/pull/892 + +- files: [reptilian_tailthump.ogg] + copyright: "Taken from https://freesound.org/" + license: "CC0-1.0" + source: https://freesound.org/people/TylerAM/sounds/389665/ \ No newline at end of file diff --git a/Resources/Audio/Voice/Reptilian/reptilian_tailthump.ogg b/Resources/Audio/Voice/Reptilian/reptilian_tailthump.ogg new file mode 100644 index 00000000000..e4bf25f7b8d Binary files /dev/null and b/Resources/Audio/Voice/Reptilian/reptilian_tailthump.ogg differ diff --git a/Resources/Audio/Weapons/Guns/Gunshots/attributions.yml b/Resources/Audio/Weapons/Guns/Gunshots/attributions.yml index 7c46974818a..89db045c96d 100644 --- a/Resources/Audio/Weapons/Guns/Gunshots/attributions.yml +++ b/Resources/Audio/Weapons/Guns/Gunshots/attributions.yml @@ -26,4 +26,9 @@ - files: ["ship_duster.ogg", "ship_friendship.ogg", "ship_svalinn.ogg", "ship_perforator.ogg"] license: "CC0-1.0" copyright: "Created by MIXnikita for Space Station 14" - source: "https://github.com/MIXnikita" \ No newline at end of file + source: "https://github.com/MIXnikita" + +- files: ["syringe_gun.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from vgstation" + source: "https://github.com/vgstation-coders/vgstation13/commit/23303188abe6fe31b114a218a1950d7325a23730" \ No newline at end of file diff --git a/Resources/Audio/Weapons/Guns/Gunshots/syringe_gun.ogg b/Resources/Audio/Weapons/Guns/Gunshots/syringe_gun.ogg new file mode 100644 index 00000000000..2132808ecdc Binary files /dev/null and b/Resources/Audio/Weapons/Guns/Gunshots/syringe_gun.ogg differ diff --git a/Resources/Audio/_RMC14/Voice/Xeno/alien_talk1.ogg b/Resources/Audio/_RMC14/Voice/Xeno/alien_talk1.ogg new file mode 100644 index 00000000000..a6cd1d901b6 Binary files /dev/null and b/Resources/Audio/_RMC14/Voice/Xeno/alien_talk1.ogg differ diff --git a/Resources/Audio/_RMC14/Voice/Xeno/alien_talk2.ogg b/Resources/Audio/_RMC14/Voice/Xeno/alien_talk2.ogg new file mode 100644 index 00000000000..8766ef4c887 Binary files /dev/null and b/Resources/Audio/_RMC14/Voice/Xeno/alien_talk2.ogg differ diff --git a/Resources/Audio/_RMC14/Voice/Xeno/alien_talk3.ogg b/Resources/Audio/_RMC14/Voice/Xeno/alien_talk3.ogg new file mode 100644 index 00000000000..d2b4a14ce7d Binary files /dev/null and b/Resources/Audio/_RMC14/Voice/Xeno/alien_talk3.ogg differ diff --git a/Resources/Audio/_RMC14/Voice/Xeno/attributions.yml b/Resources/Audio/_RMC14/Voice/Xeno/attributions.yml new file mode 100644 index 00000000000..b98d9d09eb5 --- /dev/null +++ b/Resources/Audio/_RMC14/Voice/Xeno/attributions.yml @@ -0,0 +1,14 @@ +- files: ["alien_talk1.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/master/sound/voice/alien_talk.ogg" + +- files: ["alien_talk2.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/master/sound/voice/alien_talk2.ogg" + +- files: ["alien_talk3.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from cmss13" + source: "https://github.com/cmss13-devs/cmss13/blob/master/sound/voice/alien_talk3.ogg" diff --git a/Resources/Changelog/Admin.yml b/Resources/Changelog/Admin.yml index 9c9673a6622..f78eec801ea 100644 --- a/Resources/Changelog/Admin.yml +++ b/Resources/Changelog/Admin.yml @@ -544,5 +544,28 @@ Entries: id: 67 time: '2024-09-15T01:55:03.0000000+00:00' url: https://github.com/space-wizards/space-station-14/pull/31654 +- author: ElectroJr + changes: + - message: The `menuvis all` once again makes all entities show up in the right-click + context menu. + type: Fix + id: 68 + time: '2024-09-23T07:28:42.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32395 +- author: SlamBamActionman + changes: + - message: Added admin logging for generated codewords. + type: Add + id: 69 + time: '2024-10-09T11:55:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32531 +- author: IProduceWidgets + changes: + - message: invokeverb should work with smite names now. Find the names in the smite + tab on mouse hover. + type: Fix + id: 70 + time: '2024-10-16T22:24:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32844 Name: Admin Order: 3 diff --git a/Resources/Changelog/Changelog.yml b/Resources/Changelog/Changelog.yml index 2c55f6b5721..c4edb358ab6 100644 --- a/Resources/Changelog/Changelog.yml +++ b/Resources/Changelog/Changelog.yml @@ -1,3892 +1,3929 @@ Entries: -- author: TheShuEd - changes: - - message: Added diamonds ore! - type: Add - - message: Diamonds can now be sold at a bargain price. - type: Add - id: 6915 - time: '2024-07-13T12:15:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/25750 -- author: coffeeware - changes: - - message: Lizards will no longer lose their snouts when equipping head bandanas - type: Fix - id: 6916 - time: '2024-07-14T02:59:45.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29979 -- author: SlamBamActionman +- author: Errant changes: - - message: RGBee and Rainbow Carp plushies now cycle color when held/worn. + - message: Medical Mask sprite now works on vox. type: Fix - id: 6917 - time: '2024-07-14T10:26:34.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30023 -- author: Winkarst-cpu + id: 7052 + time: '2024-08-07T03:41:40.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30702 +- author: Lyroth001 changes: - - message: Now grappling gun is clumsy proof. + - message: Dragons are immune to flashes type: Tweak - id: 6918 - time: '2024-07-14T10:26:56.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29904 -- author: HahayesSiH + id: 7053 + time: '2024-08-07T07:42:00.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30658 +- author: ShadowCommander changes: - - message: It is now possible to pet cyborgs. + - message: Rollerbeds can now be dragged to the player to fold and pick them up. type: Add - - message: Clicking on cyborgs and opening the strip menu no longer unlocks them. - type: Tweak - id: 6919 - time: '2024-07-14T14:09:41.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30037 -- author: deltanedas - changes: - - message: Fixed ninja shoes not working as magboots. - type: Fix - id: 6920 - time: '2024-07-14T15:11:40.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28586 -- author: lzk228 - changes: - - message: Scarves are eatable again. - type: Fix - id: 6921 - time: '2024-07-14T15:12:25.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29959 -- author: Winkarst-cpu + id: 7054 + time: '2024-08-07T09:19:10.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30002 +- author: Errant changes: - - message: Now addgamerule command processes only valid game rules. + - message: Survivors arriving via the Unknown Shuttle event, ERT and CBURN agents, + and Death Squad members are now equipped with the appropriate species-specific + survival gear. type: Fix - id: 6922 - time: '2024-07-15T19:18:33.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29912 -- author: Jezithyr - changes: - - message: Removed the Geras ability from Slimes - type: Remove - id: 6923 - time: '2024-07-16T22:50:17.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29731 -- author: K-Dynamic - changes: - - message: nerfed paraylze timer of all slippable objects (including soaps, water - puddles, and clown-related items) + - message: Unknown Shuttle event can once again spawn vox characters. type: Tweak - id: 6924 - time: '2024-07-16T23:26:02.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/27879 -- author: EmoGarbage404 + id: 7055 + time: '2024-08-07T09:26:40.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29746 +- author: IProduceWidgets changes: - - message: Resprited wall signs. + - message: butter is slippery type: Tweak - id: 6925 - time: '2024-07-17T04:35:19.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29806 -- author: lzk228 - changes: - - message: Added health examine for caustic and cold damage. - type: Add - id: 6926 - time: '2024-07-17T06:19:13.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29989 -- author: lzk228 + id: 7056 + time: '2024-08-07T21:47:03.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29772 +- author: Mervill changes: - - message: Surgery saws now are normal-sized (no more pocket circular saw). + - message: Gas Miners now have detailed examine text type: Tweak - id: 6927 - time: '2024-07-17T06:26:10.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29995 -- author: Winkarst-cpu - changes: - - message: The super door remote is now able to control Syndicate doors. - type: Fix - id: 6928 - time: '2024-07-17T13:50:25.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30033 -- author: Errant + id: 7057 + time: '2024-08-08T02:14:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30480 +- author: BackeTako changes: - - message: Vox are temporarily removed from Space Ninjas and all Unknown Shuttle - ghostroles, until code supports giving them species-specific gear. + - message: "!, \u203D and multiple punctuations now work for Spanish." type: Tweak - id: 6929 - time: '2024-07-17T22:04:51.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30099 -- author: Cojoke-dot - changes: - - message: You can no longer teleport objects that should not be in other objects - into other objects with the Quantum Spin Inverter - type: Fix - id: 6930 - time: '2024-07-18T00:40:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29200 -- author: Plykiya - changes: - - message: Stun batons no longer use up charges when hitting objects without stamina. - type: Fix - id: 6931 - time: '2024-07-18T00:48:09.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30136 -- author: Sh18RW - changes: - - message: Moth can't eat boots with an item more - type: Fix - id: 6932 - time: '2024-07-18T22:34:18.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30019 -- author: portfiend + id: 7058 + time: '2024-08-08T03:08:28.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30551 +- author: strO0pwafel changes: - - message: Reptilians display correct mask sprites in character customization screen. + - message: Fixed inconsistent naming of CentComm. type: Fix - id: 6933 - time: '2024-07-18T22:36:53.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30095 + id: 7059 + time: '2024-08-08T10:04:20.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29217 - author: Plykiya changes: - - message: You no longer deal double damage to your first target when throwing an - item. - type: Fix - id: 6934 - time: '2024-07-19T01:08:52.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30115 -- author: deepdarkdepths - changes: - - message: Removed the description about geras in the Slime guidebook section. - type: Remove - id: 6935 - time: '2024-07-19T09:04:43.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30140 -- author: Blackern5000 - changes: - - message: Nuclear operatives are now able to purchase durable armor which is NOT - space-proof. - type: Add - id: 6936 - time: '2024-07-19T09:38:26.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29845 -- author: Plykiya, slarticodefast - changes: - - message: Explosive pens now correctly embed into their target. - type: Fix - id: 6937 - time: '2024-07-19T09:42:58.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30112 -- author: ThatOneEnby1337 - changes: - - message: News Reporters are now able to use markup tags in their reports without - bricking the PDAs of readers - type: Fix - id: 6938 - time: '2024-07-19T14:18:39.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30169 -- author: themias - changes: - - message: Mailing units are functional again - type: Fix - id: 6939 - time: '2024-07-20T02:31:26.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30174 -- author: Ghagliiarghii - changes: - - message: Nuclear Operatives' Reinforcements now have a PDA! + - message: Buffed the range of EMP implants from a radius of 1.75 tiles to 2.75 + tiles. + type: Tweak + - message: Buffed the range of EMP grenades from a radius of 4 tiles to 5.5 tiles. type: Tweak - id: 6940 - time: '2024-07-20T02:59:31.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28088 + id: 7060 + time: '2024-08-08T10:04:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30660 - author: Plykiya changes: - - message: Chameleon scarves now work again. - type: Fix - id: 6941 - time: '2024-07-20T03:00:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30156 -- author: Aidenkrz - changes: - - message: The mass hallucinations event no longer affects non-humanoids. + - message: You can drop food or drinks from your hands to interrupt eating it, again. type: Fix - id: 6942 - time: '2024-07-20T05:53:58.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28748 -- author: buntobaggins - changes: - - message: Increased light radius on the Spationaut Hardsuit + - message: Barber scissors are now interrupted if the item is dropped or if the + user changes hands. type: Tweak - id: 6943 - time: '2024-07-21T03:29:21.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30049 -- author: EmoGarbage404 - changes: - - message: Fixed wires not updating UI on the Particle Accelerator. - type: Fix - id: 6944 - time: '2024-07-21T05:27:18.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28750 -- author: CroilBird - changes: - - message: 6-pack of cola displays correctly when not being handled - type: Fix - id: 6945 - time: '2024-07-21T05:49:48.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29309 -- author: metalgearsloth + id: 7061 + time: '2024-08-08T11:39:47.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30361 +- author: TheShuEd changes: - - message: Fix muzzle flashes not tracking properly. + - message: Add "thieving beacon" to Thief antag - a device that counts objects within + a radius of itself as stolen. + type: Add + - message: Return thief structures stealing objectives. + type: Add + - message: Animal theft objectives can no longer appear if the animals are not on + the station. type: Fix - id: 6946 - time: '2024-07-21T06:09:17.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30163 -- author: metalgearsloth + id: 7062 + time: '2024-08-08T13:17:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29997 +- author: lzk228 changes: - - message: Fix being able to throw items while your cursor is off-screen. - type: Fix - id: 6947 - time: '2024-07-21T06:13:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30164 -- author: metalgearsloth + - message: RD labcoat added in RD's dresser. + type: Add + id: 7063 + time: '2024-08-08T22:50:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30671 +- author: SlamBamActionman changes: - - message: Reset the scroll bar in the ghost warp menu whenever you search for a - role. Previously it remained at your previous position and you would have to - scroll up to see the first entry. + - message: Animal DNA now shows up as "unknown DNA" in the Forensic Scanner. type: Tweak - id: 6948 - time: '2024-07-21T06:38:45.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30159 -- author: Blackern5000 - changes: - - message: The syndicate agent's cyborg weapons module now uses syndicate weaponry - rather than NT weaponry. + - message: Forensic Scanner can now scan fluid containers for DNA in reagents. type: Tweak - id: 6949 - time: '2024-07-21T07:04:33.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/26947 -- author: Winkarst-cpu - changes: - - message: Added ambience to the camera routers and telecommunication servers. - type: Add - - message: Now server's and router's ambience stops once they are unpowered. + - message: Fluids keep their DNA data when moved. type: Fix - id: 6950 - time: '2024-07-21T07:22:02.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30091 -- author: Scott Dimeling + - message: Fluids now stain containers they're in with DNA. Make sure to scrub your + blood bucket after use! + type: Add + - message: Vomit now includes DNA! + type: Add + id: 7064 + time: '2024-08-08T23:27:28.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26699 +- author: themias changes: - - message: Reduced the number of botanists in some stations, for optimal _workflow_ + - message: Butter can be sliced, cookie and toast recipes now use butter slices. type: Tweak - id: 6951 - time: '2024-07-21T07:23:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29581 -- author: metalgearsloth - changes: - - message: Escape pods won't show up on shuttle map anymore. + - message: Chefvend butter reduced from 4 to 3. type: Tweak - id: 6952 - time: '2024-07-21T07:23:44.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29758 -- author: IProduceWidgets - changes: - - message: an arabian lamp! - type: Add - id: 6953 - time: '2024-07-21T07:24:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/27270 -- author: osjarw - changes: - - message: NPCs no longer get stuck trying to pick up anchored pipes. - type: Fix - id: 6954 - time: '2024-07-21T07:28:37.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30061 -- author: The Hands Leader - JoJo cat + id: 7065 + time: '2024-08-08T23:32:42.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30789 +- author: EmoGarbage404 changes: - - message: Train map is back into rotation + - message: You should have significantly less friction when moving in space. type: Tweak - id: 6955 - time: '2024-07-21T07:44:18.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30145 + id: 7066 + time: '2024-08-09T04:52:25.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29383 - author: Plykiya changes: - - message: Syndicate traitor reinforcements are now specialized to be medics, spies, - or thieves. + - message: Hardsuits and EVA suits now count as protection for unscrewing lightbulbs. type: Add - - message: Reinforcement radios with options now have a radial menu, similar to - RCDs. - type: Tweak - id: 6956 - time: '2024-07-21T10:32:25.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29853 -- author: Cojoke-dot + - message: More gloves were given the ability to unscrew light bulbs. + type: Add + - message: Behonkers no longer hurt you when melee attacking them or interacting + with them. + type: Remove + id: 7067 + time: '2024-08-09T05:32:41.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30244 +- author: Ian321 changes: - - message: Dead Space Dragons no long despawn - type: Fix - id: 6957 - time: '2024-07-21T10:46:33.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29842 + - message: The warden is now an important job. + type: Tweak + id: 7068 + time: '2024-08-09T05:45:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30745 - author: slarticodefast changes: - - message: Fixed microwave construction. - type: Fix - id: 6958 - time: '2024-07-21T16:20:09.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30232 -- author: Sphiral&Kezu - changes: - - message: 'Added a variety of new wall based storages: Shelfs! Build some today!' + - message: Added tooltips to the agent ID job icons type: Add - id: 6959 - time: '2024-07-21T17:16:58.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/27858 -- author: valquaint, slarticodefast + id: 7069 + time: '2024-08-09T06:14:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/28575 +- author: stalengd changes: - - message: Fixed borgs being unable to state laws with an activated flashlight. + - message: Head bandana no longer blocks food eating. type: Fix - id: 6960 - time: '2024-07-22T03:55:35.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30183 -- author: Lank + id: 7070 + time: '2024-08-09T06:17:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/28910 +- author: Ubaser changes: - - message: Darts can now pop balloons. Keep them away from any monkeys. + - message: Oxygen and nitrogen canisters now have new sprites when worn. type: Add - id: 6961 - time: '2024-07-22T05:38:56.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30088 + id: 7071 + time: '2024-08-09T10:32:55.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30809 - author: Plykiya changes: - - message: You can now eat or drink and swap hands without it being interrupted. - type: Tweak - id: 6962 - time: '2024-07-22T09:17:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30060 -- author: IProduceWidgets - changes: - - message: Zookeepers can now possess Nonlethal shotguns according to spacelaw. + - message: Buckling someone now triggers a short do-after. type: Tweak - id: 6963 - time: '2024-07-22T09:33:03.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30237 -- author: Plykiya + id: 7072 + time: '2024-08-09T15:43:02.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29621 +- author: Ubaser changes: - - message: Bag sounds can now only be heard from half the distance and is quieter - in general. + - message: Normal crowbars cannot be placed in pockets, but can now fit in belts. type: Tweak - id: 6964 - time: '2024-07-22T09:54:15.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30225 -- author: osjarw - changes: - - message: Syringes are now 0.5 seconds faster. + - message: Depending on where you obtained the crowbars, they will now have different + colours. type: Tweak - id: 6965 - time: '2024-07-22T10:20:36.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29825 -- author: Errant + id: 7073 + time: '2024-08-09T19:29:00.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/28988 +- author: lzk228 changes: - - message: Replay observers now always spawn on the station. + - message: Hotplate works again. type: Fix - id: 6966 - time: '2024-07-22T19:32:30.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30252 -- author: Cojoke-dot + id: 7074 + time: '2024-08-10T01:10:39.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30830 +- author: EmoGarbage404 changes: - - message: You can now read the volume of a gas tank in its examine text + - message: Maintenance closets have more variety in what they can contain. type: Tweak - id: 6967 - time: '2024-07-22T21:41:42.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29771 -- author: Cojoke-dot + id: 7075 + time: '2024-08-10T02:12:40.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30579 +- author: Ko4erga changes: - - message: Throwing a jetpack mid-flight will no longer freeze your character - type: Fix - id: 6968 - time: '2024-07-22T22:24:26.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30223 -- author: Flareguy + - message: Changed chemistry airlock color. + type: Tweak + id: 7076 + time: '2024-08-10T03:23:47.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30666 +- author: Blackern5000 changes: - - message: Added vox sprites for a few headwear items, including radiation suits - and the paramedic helmet. - type: Add - id: 6969 - time: '2024-07-23T02:18:33.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30150 -- author: Cojoke-dot + - message: Bent pipes now deal 8 thrown damage instead of 3. + type: Tweak + id: 7077 + time: '2024-08-10T03:30:43.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30634 +- author: shampunj changes: - - message: You can no longer use telescreens and televisions while blind or asleep. - type: Fix - id: 6970 - time: '2024-07-23T02:33:41.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30260 -- author: Cojoke-dot - changes: - - message: Fix one of the QSI popups - type: Fix - id: 6971 - time: '2024-07-23T03:23:04.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30265 -- author: Errant + - message: Rat king can now wideswing + type: Tweak + id: 7078 + time: '2024-08-10T12:47:55.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30808 +- author: BackeTako changes: - - message: Players are now notified when trying to insert an incompatible magazine - into a gun. + - message: Added a suitskirt for the psychologist type: Add - id: 6972 - time: '2024-07-23T06:36:06.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29046 -- author: TheKittehJesus - changes: - - message: The Syndicate Assault Borg can now wield their double esword - type: Fix - id: 6973 - time: '2024-07-23T08:13:18.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30229 -- author: Scribbles0 + id: 7079 + time: '2024-08-10T12:51:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30709 +- author: Unkn0wnGh0st333 changes: - - message: Handless mobs can no longer wipe devices like positronic brains or pAIs. + - message: ERT Chaplain starting gear was fixed and will no longer give the ERT + Engineer gear type: Fix - id: 6974 - time: '2024-07-23T17:47:08.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30149 -- author: Quantus + id: 7080 + time: '2024-08-10T12:55:20.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30855 +- author: Ubaser changes: - - message: Reagent grinders can no longer auto-grind when unpowered. - type: Fix - id: 6975 - time: '2024-07-23T21:02:07.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30267 -- author: BombasterDS + - message: Light tube structures now have new sprites. + type: Tweak + id: 7081 + time: '2024-08-10T15:00:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29091 +- author: lzk228 changes: - - message: Fixed items disappearing after shelfs and mannequin disassembling - type: Fix - id: 6976 - time: '2024-07-24T08:57:03.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30313 -- author: Cojoke-dot + - message: Standartized some clothing recipes. + type: Tweak + id: 7082 + time: '2024-08-10T18:16:56.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29315 +- author: TheShuEd changes: - - message: Fix infinite QSI linking range - type: Fix - id: 6977 - time: '2024-07-24T20:57:45.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30332 -- author: deltanedas + - message: You cat cut burger bun into two halfs, and make custom burgers now! + type: Add + id: 7083 + time: '2024-08-10T19:31:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30755 +- author: thetolbean changes: - - message: Borgs can no longer unlock the robotics console or other borgs. + - message: Updated Core's boxing ring beacon label to be correct type: Tweak - id: 6978 - time: '2024-07-25T03:54:52.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/27888 -- author: themias + id: 7084 + time: '2024-08-10T19:50:08.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30800 +- author: Flareguy changes: - - message: Fixed the ripley control panel not loading - type: Fix - id: 6979 - time: '2024-07-25T05:23:53.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30325 -- author: Timur2011 + - message: Added vox sprites for most of the remaining common mask items. + type: Add + id: 7085 + time: '2024-08-10T21:06:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30838 +- author: Scribbles0, Plykiya, nikthechampiongr changes: - - message: Space adders are now butcherable. + - message: You can now execute incapacitated/cuffed entities or yourself with certain + sharp weapons. Executions require a do-after, deal 9x the damage of a normal + attack, and ignore damage resistances. type: Add - - message: Snakes now drop snake meat when butchered. - type: Fix - - message: Snakes now appear lying when in critical state. - type: Tweak - id: 6980 - time: '2024-07-25T10:52:18.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29629 + id: 7086 + time: '2024-08-11T03:05:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30104 - author: Plykiya changes: - - message: You can now build atmos gas pipes through things like walls. + - message: Cooking shelves have been renamed to Kitchen shelves, you can now put + more drinks and cutlery in them. type: Tweak - id: 6981 - time: '2024-07-25T23:26:06.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28707 -- author: Ilya246 + id: 7087 + time: '2024-08-11T06:21:34.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30858 +- author: BombasterDS changes: - - message: Nuclear operative reinforcements now come with full nuclear operative - gear (and a toy carp) at no additional cost. - type: Tweak - - message: Nuclear operative reinforcements now get nuclear operative names. + - message: You can now change the suit's sensors on incapacitated people without + taking it off type: Tweak - id: 6982 - time: '2024-07-25T23:37:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30173 -- author: Cojoke-dot + id: 7088 + time: '2024-08-11T09:04:43.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29668 +- author: lzk228 changes: - - message: Engineering goggles and other similar-looking eyewear now help block - identity. + - message: RCD UI can be activated only in hand. type: Tweak - - message: Radiation suit's hood now blocks identity. - type: Fix - id: 6983 - time: '2024-07-26T05:26:05.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30305 -- author: Moomoobeef + id: 7089 + time: '2024-08-11T09:15:28.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30861 +- author: TokenStyle changes: - - message: Some radio channel colors have been tweaked in order to be more easily - distinguishable. + - message: Pax reagent now refresh pacified. type: Tweak - id: 6984 - time: '2024-07-26T06:47:20.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30133 -- author: Errant - changes: - - message: Replay ghosts now actually spawn on the proper station, take two. - type: Fix - id: 6985 - time: '2024-07-26T12:59:43.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30273 -- author: themias - changes: - - message: Arcade machines are functional again - type: Fix - id: 6986 - time: '2024-07-26T17:30:50.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30376 -- author: themias + - message: Pax reagent pacified duration has been changed from 2 seconds to 4 seconds. + type: Tweak + id: 7090 + time: '2024-08-11T09:19:01.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30778 +- author: osjarw changes: - - message: Zombies now get uncuffed upon transformation + - message: You can once again pull and buckle pets. type: Fix - id: 6987 - time: '2024-07-26T18:48:03.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30321 -- author: metalgearsloth + id: 7091 + time: '2024-08-11T09:22:46.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30066 +- author: slarticodefast changes: - - message: Fix grid labels getting spammed from VGRoid. - type: Fix - id: 6988 - time: '2024-07-27T01:54:38.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29946 -- author: GoldenCan + - message: The sentient plant mutation can no longer be propagated to other trays + via seeds or swabs. It has also been made more rare. + type: Tweak + id: 7092 + time: '2024-08-11T09:23:14.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29133 +- author: Moomoobeef changes: - - message: Added a Security Clown Mask which is obtainable by hacking a SecDrobe. + - message: Added The Throngler (Plushie) to the grand lottery!! type: Add - id: 6989 - time: '2024-07-27T04:09:24.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30249 + id: 7093 + time: '2024-08-11T10:26:37.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29978 - author: Plykiya changes: - - message: Thief game rule now properly selects more than one thief. - type: Fix - id: 6990 - time: '2024-07-27T07:27:21.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30393 -- author: BombasterDS - changes: - - message: Added new plant mutations for apple, sugarcane and galaxythistle + - message: Energy sword weapons are now execution-capable. type: Add - id: 6991 - time: '2024-07-27T15:08:49.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28993 -- author: Spessmann + id: 7094 + time: '2024-08-11T22:12:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30909 +- author: Blackern5000 changes: - - message: Thief objectives for figurines and stamps now require less items + - message: Added diamond-tipped mining drills, a science printed item found under + T2 industrial. + type: Add + - message: Standard mining drills now attack faster and break rocks in two hits. type: Tweak - id: 6992 - time: '2024-07-27T23:11:27.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30390 -- author: metalgearsloth - changes: - - message: Moved VGRoid from 1,000m away to ~500m. + - message: Moved ore bags of holding to T2 industrial tech. type: Tweak - id: 6993 - time: '2024-07-28T03:14:18.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29943 -- author: lzk228 - changes: - - message: Fixed pancakes stacks. Before it, splitting not default pancakes stacks - would give you default pancakes. - type: Fix - id: 6994 - time: '2024-07-28T03:49:06.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30270 -- author: Plykiya - changes: - - message: Fixed the client mispredicting people slipping with their magboots turned - on - type: Fix - id: 6995 - time: '2024-07-28T06:17:06.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30425 -- author: Katzenminer - changes: - - message: Pun and similar pets are no longer firemune - type: Fix - id: 6996 - time: '2024-07-28T08:32:27.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30424 -- author: lzk228 - changes: - - message: Fixed permanent absence of the approver string in cargo invoice. - type: Fix - id: 6997 - time: '2024-07-29T06:19:43.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29690 -- author: JIPDawg - changes: - - message: F9 is correctly bound to the Round End Summary window by default now. - type: Fix - id: 6998 - time: '2024-07-29T06:49:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30438 -- author: githubuser508 + - message: Grappling guns are now researched with Salvage Equipment. + type: Tweak + - message: Diamonds are now worth 2,000 spesos each. + type: Tweak + id: 7095 + time: '2024-08-12T01:49:09.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30814 +- author: mirrorcult changes: - - message: Candles crate and the ability for Cargo to order it. + - message: With space law being overhauled, you can now examine items to see their + contraband status, and whether with your current access you'd be accosted by + Security for owning it. This will also clearly show non-stealth syndicate items. type: Add - id: 6999 - time: '2024-07-29T08:29:27.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29736 -- author: Blackern5000 + id: 7096 + time: '2024-08-12T03:57:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/28688 +- author: DieselMohawk changes: - - message: Emergency oxygen and fire lockers now generally contain more supplies + - message: Resprited Security vest and helmet type: Tweak - id: 7000 - time: '2024-07-29T09:57:04.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29230 -- author: Moomoobeef + id: 7097 + time: '2024-08-12T06:20:56.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30291 +- author: Ubaser changes: - - message: Added the ability to wear lizard plushies on your head! + - message: Mantles are now available in loadouts, requiring 20 hours of that head + of department's time. type: Add - id: 7001 - time: '2024-07-29T12:52:40.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30400 -- author: TurboTrackerss14 - changes: - - message: Reduced Kobold ghostrole chance to mirror Monkey - type: Tweak - id: 7002 - time: '2024-07-29T15:16:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30450 -- author: Ian321 + - message: Mantles are no longer spawned in dressers or able to be printed at uniform + lathes. + type: Remove + id: 7098 + time: '2024-08-12T07:14:46.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30929 +- author: LeoSantich changes: - - message: The Courser now comes with a defibrillator. + - message: Updated 'narsie' and 'ratvar' to 'Nar'Sie' and 'Ratvar' in randomly generated + storybook content. type: Tweak - id: 7003 - time: '2024-07-30T01:05:27.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30471 -- author: slarticodefast - changes: - - message: Fixed puppy Ian not counting as a thief steal target. - type: Fix - id: 7004 - time: '2024-07-30T01:22:17.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30474 -- author: themias + id: 7099 + time: '2024-08-12T23:20:53.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30954 +- author: pigeonpeas changes: - - message: Added envelopes to the PTech and bureaucracy crate + - message: Added non command mantle into the winterdrobe type: Add - id: 7005 - time: '2024-07-30T01:49:05.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30298 -- author: TheKittehJesus + id: 7100 + time: '2024-08-13T09:20:12.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29774 +- author: TheShuEd changes: - - message: The recipe for chow mein, egg-fried rice, and both brownies now use liquid - egg instead of a whole egg. - type: Tweak - - message: Cake batter now also requires 5u of milk + - message: change the way food is sliced - food is now sliced whole after a small + doafter than requires multiple clicks on a single entity type: Tweak - id: 7006 - time: '2024-07-30T02:14:11.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30262 -- author: Plykiya + id: 7101 + time: '2024-08-13T10:54:00.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30824 +- author: Ubaser changes: - - message: Wearing something that covers your head will prevent your hair from being - cut. + - message: Add two gatfruit mutations, one fake and one real capfruit which spawns + cap guns when eaten. type: Add - - message: You now see a popup when your hair is being altered. + id: 7102 + time: '2024-08-13T11:08:40.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30850 +- author: slarticodefast + changes: + - message: Added new keybindings for rotating and flipping objects. The defaults + are R for clockwise, Shift+R for counterclockwise and F for flipping. type: Add - - message: The doafter for altering other people's hair now takes seven seconds. - type: Tweak - id: 7007 - time: '2024-07-30T02:17:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30366 + id: 7103 + time: '2024-08-13T13:36:45.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30540 - author: Cojoke-dot changes: - - message: Hamlet and other ghost rolls can now spin when they enter combat mode - type: Fix - id: 7008 - time: '2024-07-30T02:48:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30478 -- author: themias - changes: - - message: Fixed the ACC wire not appearing in vending machine wire layouts - type: Fix - id: 7009 - time: '2024-07-30T03:04:17.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30453 -- author: Blackern5000 - changes: - - message: The defibrillator has been recolored slightly + - message: Borg's names are now displayed when they make an announcement on the + Communications Console. type: Tweak - id: 7010 - time: '2024-07-30T04:41:21.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29964 -- author: themias + id: 7104 + time: '2024-08-13T18:31:33.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30107 +- author: Spessmann changes: - - message: Fixed victim's fingerprints transferring onto an attacker's weapon - type: Fix - id: 7011 - time: '2024-07-30T08:35:30.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30257 -- author: to4no_fix + - message: Added Cog, a new midpop map based on Cogmap from ss13 + type: Add + id: 7105 + time: '2024-08-13T19:27:25.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30840 +- author: PoorMansDreams changes: - - message: Now engineering access is needed to interact with the particle accelerator + - message: Throngler Plushie looks like a plushie type: Tweak - id: 7012 - time: '2024-07-30T11:29:32.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30394 -- author: Cojoke-dot - changes: - - message: You can no longer get out of a disposal chute or container while knocked - over by trying to walk - type: Fix - id: 7013 - time: '2024-07-30T13:53:44.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30391 -- author: Cojoke-dot - changes: - - message: QSI now swaps the top most valid container instead of QSI when placed - in an anchored container - type: Fix - id: 7014 - time: '2024-07-30T14:07:35.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30241 -- author: TheShuEd + id: 7106 + time: '2024-08-13T20:32:53.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30969 +- author: IProduceWidgets changes: - - message: industrial ore processor can now process diamonds - type: Fix - id: 7015 - time: '2024-07-30T14:41:15.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30499 -- author: PJB3005 - changes: - - message: CLF3 is now called "chlorine trifluoride" - type: Tweak - id: 7016 - time: '2024-07-31T00:14:23.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30510 -- author: slarticodefast - changes: - - message: Fixed the mouse position when it is over a singularity distortion effect - while zoomed in or out. - type: Fix - id: 7017 - time: '2024-07-31T00:14:49.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30509 -- author: metalgearsloth - changes: - - message: Add a button to the lobby so you can export a .png of your characters - type: Add - id: 7018 - time: '2024-07-31T15:14:20.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29874 -- author: slarticodefast - changes: - - message: Skeletons no longer have fingerprints. + - message: shuttle events have been separated from other midround events and can + now happen concurrently. type: Tweak - id: 7019 - time: '2024-07-31T16:08:20.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30530 -- author: themias - changes: - - message: Pens can be clicked cathartically + - message: Cargo Gift events should be less likely. type: Tweak - id: 7020 - time: '2024-07-31T17:57:41.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30531 -- author: Plykiya - changes: - - message: Meteors now leave behind asteroid rocks on impact. - type: Add - id: 7021 - time: '2024-08-01T02:55:02.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30419 -- author: PixelTheAertist - changes: - - message: The Social Anxiety trait is now renamed to "Stutter" + - message: meteors have been changed to be more responsive to player count. type: Tweak - id: 7022 - time: '2024-08-01T02:58:16.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29898 -- author: Plykiya - changes: - - message: Adds hand labelers to the PTech, ChemDrobe, and LawDrobe. + - message: 'Game mode: Kessler syndrome - What if survival but also the apocalypse?' type: Add - id: 7023 - time: '2024-08-01T02:59:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29958 -- author: Ko4erga - changes: - - message: Added a cutter machine for crafting patterned steel tiles, concrete and - wooden tiles. + - message: 'Game mode: Zombeteors - Zombies and a meteor shower all at once!' type: Add - - message: After rip off patterned tiles you get current pattern, not just steel - tile. - type: Tweak - id: 7024 - time: '2024-08-01T10:26:32.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30431 -- author: NakataRin + id: 7107 + time: '2024-08-14T05:21:02.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29320 +- author: Blackern5000 changes: - - message: Added paramedic to the train station. + - message: Combat medical kits now contain saline syringes. type: Add - id: 7025 - time: '2024-08-01T19:59:43.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30556 -- author: marbow + id: 7108 + time: '2024-08-14T06:25:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29954 +- author: TheShuEd changes: - - message: Rejoice, detectives! Hand labeler has been added to your closet! + - message: added morbilliard variants of procedural tacos and kebabs type: Add - id: 7026 - time: '2024-08-01T20:01:05.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30501 -- author: metalgearsloth - changes: - - message: Fix some popups playing twice. - type: Fix - id: 7027 - time: '2024-08-02T01:33:20.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30452 -- author: WarMechanic - changes: - - message: Adjusted meteors to have less lethal blast fragments. + - message: removed all microwave taco and kebabs recipes (except for the taco shell + itself) + type: Remove + - message: you can fight with a skewer (even if it has food on it) type: Tweak - id: 7028 - time: '2024-08-02T05:43:41.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29199 -- author: slarticodefast + - message: now you can't put more than 10 layers on a burger. (20 before) + type: Tweak + id: 7109 + time: '2024-08-14T13:04:00.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30905 +- author: themias changes: - - message: Fixed borgs not being able to state laws or open other UIs without an - active module. + - message: Fixed lizards being unable to eat custom burgers type: Fix - id: 7029 - time: '2024-08-02T05:44:59.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30299 -- author: TropicalHibi + id: 7110 + time: '2024-08-14T19:47:04.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31005 +- author: Erisfiregamer1 changes: - - message: Now fs (for sure) and wru (where are you) are changed to their full version - in text + - message: New chemical, Sedin. It restores seeds on plants 20% of the time with + other adverse effects included. type: Add - id: 7030 - time: '2024-08-02T05:57:50.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30508 -- author: Plykiya + id: 7111 + time: '2024-08-15T00:38:24.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/27110 +- author: PoorMansDreams changes: - - message: Rechargers now show the percent charged of the item it is charging. + - message: Added Star sticker in loadouts for Secoffs type: Add - id: 7031 - time: '2024-08-02T06:05:38.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28500 -- author: ShadowCommander + id: 7112 + time: '2024-08-15T01:50:55.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29767 +- author: FATFSAAM2 changes: - - message: Rollerbeds now deploy when holding them in hand and clicking on the ground. + - message: added 7 new figurine voice lines. type: Add - id: 7032 - time: '2024-08-02T07:05:12.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30000 -- author: slarticodefast - changes: - - message: The digital audio workstation can now be rotated. - type: Tweak - id: 7033 - time: '2024-08-02T10:02:16.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30571 -- author: slarticodefast + - message: changed a hos figurine voice line to not include a typo. + type: Fix + id: 7113 + time: '2024-08-15T12:34:41.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30865 +- author: to4no_fix changes: - - message: Added potassium iodide. It gives you short term radiation protection - and can be found in radiation treatment kits. + - message: Added a new electropack that shocks when a trigger is triggered type: Add - - message: Added haloperidol. It removes most stimulating/hallucinogenic drugs from - the body and makes you drowsy. + - message: Added a new shock collar that shocks when a trigger is triggered type: Add - - message: Added the drowsiness status effect. It blurs your vision and makes you - randomly fall asleep. Drink some coffee or cola to remove it. + - message: Two shock collars and two remote signallers added to the warden's locker type: Add - - message: Chloral hydrate now makes you drowsy instead of forcing you to sleep - instantly. - type: Tweak - id: 7034 - time: '2024-08-02T17:12:08.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/27454 -- author: Blackern5000 - changes: - - message: Winter boots no longer have ugly outlines - type: Tweak - id: 7035 - time: '2024-08-02T23:05:19.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30350 -- author: lzk228 - changes: - - message: Figurines will say phrases on activation. + - message: Shock collar added as a new target for the thief type: Add - id: 7036 - time: '2024-08-03T14:06:04.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30455 -- author: JoelZimmerman - changes: - - message: Dank pizza is now cooked with cannabis leaves instead of ambrosia vulgaris. - type: Tweak - id: 7037 - time: '2024-08-03T14:07:21.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30430 -- author: Ian321 - changes: - - message: Help menus now include the linked guides. - type: Fix - id: 7038 - time: '2024-08-04T03:32:10.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30462 -- author: DrSmugleaf - changes: - - message: The Toggle Internals verb no longer shows up in the context menu if no - breathing tool is equipped and internals are off. - type: Tweak - id: 7039 - time: '2024-08-04T03:34:56.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30622 + - message: A new Special Means technology has been added to the Arsenal research + branch at the 1st research level. Its research opens up the possibility of producing + electropacks at security techfab. The cost of technology research is 5000 + type: Add + id: 7114 + time: '2024-08-15T14:30:39.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30529 - author: Mervill changes: - - message: Rotten Meat can be collected in trash bags and deleted by the recycler + - message: The Gas Analyzer won't spuriously shut down for seemly no reason. type: Tweak - id: 7040 - time: '2024-08-04T10:13:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30594 -- author: DrSmugleaf - changes: - - message: Fixed the client sometimes falsely showing the red color flash effect - when attacking something that they can't, like allied xenonids. + - message: The Gas Analyzer will always switch to the device tab when a new object + is scanned. + type: Tweak + - message: The Gas Analyzer's interaction range is now equal to the standard interaction + range type: Fix - id: 7041 - time: '2024-08-05T03:14:01.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30661 -- author: Killerqu00 + - message: Clicking the Gas Analyzer when it's in your hand has proper enable/disable + behavior. + type: Fix + id: 7115 + time: '2024-08-15T14:45:13.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30763 +- author: Nimfar11 changes: - - message: Sleeper agents event no longer occurs when evacuation is called. - type: Tweak - id: 7042 - time: '2024-08-05T03:17:53.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30646 -- author: Cojoke-dot + - message: Adds a gold toilet + type: Add + - message: Adds a target for the Thief to steal the golden toilet + type: Add + - message: Corrected the sprite image for the normal toilet. + type: Fix + id: 7116 + time: '2024-08-15T19:23:59.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31049 +- author: themias changes: - - message: Mice can now use combat mode with a 0 damage attack + - message: Raw meat cutlets can be cooked on a grill type: Tweak - id: 7043 - time: '2024-08-05T03:26:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30487 -- author: TheShuEd + id: 7117 + time: '2024-08-15T19:30:09.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31048 +- author: IProduceWidgets changes: - - message: Nanotrasen has introduced recruitment rules. Characters under the age - of 20 are no longer allowed to take on the role of head. + - message: Meteor dust should more consistently happen instead of meteors. type: Tweak - id: 7044 - time: '2024-08-05T04:25:49.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30347 -- author: foboscheshir + id: 7118 + time: '2024-08-15T19:33:17.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31018 +- author: Emisse changes: - - message: added missing mime mask sprites for Vox - scared and sad. - type: Add - id: 7045 - time: '2024-08-05T06:09:35.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30607 -- author: SlamBamActionman, PolarTundra + - message: Atlas, Cluster, Europa, & Saltern removed from the game. + type: Remove + id: 7119 + time: '2024-08-15T21:10:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31058 +- author: Emisse changes: - - message: Thief's Syndie Kit now comes with a Radio Jammer, a lighter and a Syndicate - codeword. - type: Add - - message: Thief's Agent ID has been moved from the Syndie Kit to the Chameleon - Kit. - type: Tweak - - message: The Syndicate pAI has been removed from the Thief's Syndie Kit. + - message: Origin removed from the game. type: Remove - id: 7046 - time: '2024-08-05T08:03:24.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30446 -- author: EmoGarbage404 + id: 7120 + time: '2024-08-15T22:22:02.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31059 +- author: Psychpsyo changes: - - message: Being cold now slows down your character. + - message: You can now be German on ze space station! (added German accent) type: Add - id: 7047 - time: '2024-08-05T08:07:02.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29692 + id: 7121 + time: '2024-08-15T23:30:21.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30541 - author: EmoGarbage404 changes: - - message: The biogenerator has been recolored and renamed to the "biocube fabricator." + - message: Reduced the amount of ore on the mining asteroid and expeditions. type: Tweak - id: 7048 - time: '2024-08-06T10:51:33.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30696 -- author: Errant - changes: - - message: Vox can be nukies and ninjas again. + - message: Increased the amount of ore on magnet asteroids. type: Tweak - id: 7049 - time: '2024-08-06T10:58:29.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29783 -- author: slarticodefast + - message: Each piece of ore now only has enough material to create 1 sheet. + type: Tweak + - message: The salvage magnet now accurately reports the contents of asteroids. + type: Fix + id: 7122 + time: '2024-08-16T01:43:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30920 +- author: metalgearsloth changes: - - message: Fixed borgs, animals and aghosts being able to enter cryosleep. + - message: Fix mains light on wires not being lit. type: Fix - id: 7050 - time: '2024-08-06T11:00:15.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30574 -- author: Flareguy + id: 7123 + time: '2024-08-16T03:59:46.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31066 +- author: IgorAnt028 changes: - - message: Most hats are now automatically displaced on vox to look more fitting. - type: Tweak - id: 7051 - time: '2024-08-06T13:12:14.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30699 -- author: Errant + - message: The dead and knocked down now stop holding objects + type: Fix + id: 7124 + time: '2024-08-16T04:53:34.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31009 +- author: SlamBamActionman changes: - - message: Medical Mask sprite now works on vox. + - message: Nar'Sie is satiated; moppable blood will no longer duplicate. type: Fix - id: 7052 - time: '2024-08-07T03:41:40.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30702 -- author: Lyroth001 + id: 7125 + time: '2024-08-16T10:47:53.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30983 +- author: Blackern5000 changes: - - message: Dragons are immune to flashes - type: Tweak - id: 7053 - time: '2024-08-07T07:42:00.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30658 -- author: ShadowCommander + - message: Disabler SMGs no longer fit in combat boots + type: Fix + id: 7126 + time: '2024-08-17T01:00:21.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31110 +- author: Mervill changes: - - message: Rollerbeds can now be dragged to the player to fold and pick them up. + - message: Fixed suffocation alerts not appearing. + type: Fix + id: 7127 + time: '2024-08-17T02:02:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31115 +- author: TokenStyle + changes: + - message: Plant's scream mutation now have 10+ scream varieties. type: Add - id: 7054 - time: '2024-08-07T09:19:10.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30002 -- author: Errant + id: 7128 + time: '2024-08-17T02:09:25.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30862 +- author: Boaz1111 changes: - - message: Survivors arriving via the Unknown Shuttle event, ERT and CBURN agents, - and Death Squad members are now equipped with the appropriate species-specific - survival gear. + - message: Phlogiston now also ignites people who consume it. + type: Add + id: 7129 + time: '2024-08-17T02:49:11.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30955 +- author: slarticodefast + changes: + - message: Fixed borgs brains being teleported outside their chassis and PAIs outside + a PDA or pocket by the bluespace anomaly. type: Fix - - message: Unknown Shuttle event can once again spawn vox characters. - type: Tweak - id: 7055 - time: '2024-08-07T09:26:40.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29746 -- author: IProduceWidgets + id: 7130 + time: '2024-08-17T04:58:23.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30744 +- author: EmoGarbage404 changes: - - message: butter is slippery + - message: You can no longer see wreck names in the salvage magnet UI. type: Tweak - id: 7056 - time: '2024-08-07T21:47:03.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29772 -- author: Mervill + id: 7131 + time: '2024-08-17T05:09:21.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31087 +- author: EmoGarbage404 changes: - - message: Gas Miners now have detailed examine text - type: Tweak - id: 7057 - time: '2024-08-08T02:14:31.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30480 -- author: BackeTako + - message: You can now smelt ores in intervals smaller than 30. + type: Add + id: 7132 + time: '2024-08-17T05:12:55.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31074 +- author: themias changes: - - message: "!, \u203D and multiple punctuations now work for Spanish." - type: Tweak - id: 7058 - time: '2024-08-08T03:08:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30551 -- author: strO0pwafel + - message: Added a recipe for croissants + type: Add + id: 7133 + time: '2024-08-17T14:09:42.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30825 +- author: Ubaser changes: - - message: Fixed inconsistent naming of CentComm. + - message: Red crowbars no longer fit in pockets. type: Fix - id: 7059 - time: '2024-08-08T10:04:20.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29217 -- author: Plykiya - changes: - - message: Buffed the range of EMP implants from a radius of 1.75 tiles to 2.75 - tiles. - type: Tweak - - message: Buffed the range of EMP grenades from a radius of 4 tiles to 5.5 tiles. - type: Tweak - id: 7060 - time: '2024-08-08T10:04:50.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30660 -- author: Plykiya + id: 7134 + time: '2024-08-17T14:32:04.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30939 +- author: iztokbajcar changes: - - message: You can drop food or drinks from your hands to interrupt eating it, again. + - message: Fixed some typos in the guidebook. type: Fix - - message: Barber scissors are now interrupted if the item is dropped or if the - user changes hands. - type: Tweak - id: 7061 - time: '2024-08-08T11:39:47.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30361 -- author: TheShuEd + id: 7135 + time: '2024-08-18T15:31:48.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31159 +- author: Unkn0wnGh0st333 changes: - - message: Add "thieving beacon" to Thief antag - a device that counts objects within - a radius of itself as stolen. - type: Add - - message: Return thief structures stealing objectives. - type: Add - - message: Animal theft objectives can no longer appear if the animals are not on - the station. - type: Fix - id: 7062 - time: '2024-08-08T13:17:50.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29997 -- author: lzk228 + - message: changed human male coughing + type: Tweak + id: 7136 + time: '2024-08-18T16:00:42.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30893 +- author: EmoGarbage404 changes: - - message: RD labcoat added in RD's dresser. + - message: Legends tell of horrifying Goliaths that roam the mining asteroid. type: Add - id: 7063 - time: '2024-08-08T22:50:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30671 -- author: SlamBamActionman + id: 7137 + time: '2024-08-18T16:22:36.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30839 +- author: Beck Thompson changes: - - message: Animal DNA now shows up as "unknown DNA" in the Forensic Scanner. - type: Tweak - - message: Forensic Scanner can now scan fluid containers for DNA in reagents. + - message: Cutting food now moves the sliced pieces a small amount! type: Tweak - - message: Fluids keep their DNA data when moved. - type: Fix - - message: Fluids now stain containers they're in with DNA. Make sure to scrub your - blood bucket after use! - type: Add - - message: Vomit now includes DNA! - type: Add - id: 7064 - time: '2024-08-08T23:27:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/26699 -- author: themias + id: 7138 + time: '2024-08-18T21:18:20.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31166 +- author: lzk228 changes: - - message: Butter can be sliced, cookie and toast recipes now use butter slices. + - message: Pizza and pizza box now have 3x2 size in inventory. type: Tweak - - message: Chefvend butter reduced from 4 to 3. + - message: Pizze box is 4x2 inside and always will have a pizza with a knife inside. type: Tweak - id: 7065 - time: '2024-08-08T23:32:42.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30789 -- author: EmoGarbage404 - changes: - - message: You should have significantly less friction when moving in space. + - message: Pizza box have whitelist for utensils and pizza. type: Tweak - id: 7066 - time: '2024-08-09T04:52:25.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29383 -- author: Plykiya - changes: - - message: Hardsuits and EVA suits now count as protection for unscrewing lightbulbs. - type: Add - - message: More gloves were given the ability to unscrew light bulbs. - type: Add - - message: Behonkers no longer hurt you when melee attacking them or interacting - with them. - type: Remove - id: 7067 - time: '2024-08-09T05:32:41.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30244 -- author: Ian321 + id: 7139 + time: '2024-08-18T21:55:42.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31171 +- author: Deatherd changes: - - message: The warden is now an important job. + - message: Sharks Go RAWR! type: Tweak - id: 7068 - time: '2024-08-09T05:45:51.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30745 + id: 7140 + time: '2024-08-18T22:18:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31142 - author: slarticodefast changes: - - message: Added tooltips to the agent ID job icons + - message: Fixed the radiation collector warning light thresholds. + type: Fix + id: 7141 + time: '2024-08-18T22:25:02.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31175 +- author: Potato1234_x + changes: + - message: Added tea plants that can be dried and ground to make tea powder which + can then be used to make tea. type: Add - id: 7069 - time: '2024-08-09T06:14:07.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28575 -- author: stalengd + - message: Added blue pumpkins. Currently useless but recipe uses are coming soon. + type: Add + id: 7142 + time: '2024-08-18T22:28:18.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/25092 +- author: deltanedas changes: - - message: Head bandana no longer blocks food eating. - type: Fix - id: 7070 - time: '2024-08-09T06:17:51.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28910 -- author: Ubaser + - message: Added Memory Cells for storing logic signals persistently. + type: Add + id: 7143 + time: '2024-08-18T22:34:43.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/24983 +- author: Psychpsyo changes: - - message: Oxygen and nitrogen canisters now have new sprites when worn. + - message: The random sentience event is back and can no longer pick things that + aren't even on the station. type: Add - id: 7071 - time: '2024-08-09T10:32:55.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30809 -- author: Plykiya + id: 7144 + time: '2024-08-18T23:41:12.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29123 +- author: EmoGarbage404 changes: - - message: Buckling someone now triggers a short do-after. + - message: Ore can no longer be destroyed by explosions. Happy blast mining. type: Tweak - id: 7072 - time: '2024-08-09T15:43:02.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29621 -- author: Ubaser + id: 7145 + time: '2024-08-19T01:55:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31182 +- author: slarticodefast changes: - - message: Normal crowbars cannot be placed in pockets, but can now fit in belts. - type: Tweak - - message: Depending on where you obtained the crowbars, they will now have different - colours. - type: Tweak - id: 7073 - time: '2024-08-09T19:29:00.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28988 -- author: lzk228 + - message: Mobs without hands can no longer toggle other players' suit pieces. + type: Fix + id: 7146 + time: '2024-08-19T02:41:27.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31152 +- author: Goldminermac changes: - - message: Hotplate works again. + - message: Chocolate-chip and blueberry pancakes can now be in stacks of up to nine + for consistency. type: Fix - id: 7074 - time: '2024-08-10T01:10:39.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30830 -- author: EmoGarbage404 + id: 7147 + time: '2024-08-19T02:42:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31123 +- author: tosatur changes: - - message: Maintenance closets have more variety in what they can contain. + - message: Made hydroponics alert light more orange type: Tweak - id: 7075 - time: '2024-08-10T02:12:40.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30579 -- author: Ko4erga + id: 7148 + time: '2024-08-19T02:48:47.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31088 +- author: redmushie changes: - - message: Changed chemistry airlock color. - type: Tweak - id: 7076 - time: '2024-08-10T03:23:47.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30666 -- author: Blackern5000 + - message: News management console now checks for Service ID card access instead + of the manifest + type: Fix + id: 7149 + time: '2024-08-19T02:55:44.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31160 +- author: Moomoobeef changes: - - message: Bent pipes now deal 8 thrown damage instead of 3. - type: Tweak - id: 7077 - time: '2024-08-10T03:30:43.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30634 -- author: shampunj - changes: - - message: Rat king can now wideswing - type: Tweak - id: 7078 - time: '2024-08-10T12:47:55.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30808 -- author: BackeTako + - message: Added pitchers for the chef who wants to serve beverages too. + type: Add + id: 7150 + time: '2024-08-19T03:01:26.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31105 +- author: EmoGarbage404 changes: - - message: Added a suitskirt for the psychologist + - message: Space carp and Sharkminnows now drop teeth when butchered. type: Add - id: 7079 - time: '2024-08-10T12:51:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30709 -- author: Unkn0wnGh0st333 + - message: Added new bounties for carp and shark teeth. + type: Add + id: 7151 + time: '2024-08-19T03:04:59.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31070 +- author: to4no_fix changes: - - message: ERT Chaplain starting gear was fixed and will no longer give the ERT - Engineer gear - type: Fix - id: 7080 - time: '2024-08-10T12:55:20.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30855 -- author: Ubaser + - message: Now it takes 5 seconds to take off or put on a muzzle + type: Tweak + - message: Now it takes 5 seconds to take off or put on a blindfold + type: Tweak + - message: Added a recipe for producing a straitjacket, it opens when researching + the Special Means technology, it can be produced at the security techfab + type: Add + id: 7152 + time: '2024-08-19T03:05:25.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31095 +- author: Magicalus changes: - - message: Light tube structures now have new sprites. + - message: Suit sensors, borgs, and PDAs can no longer be saved to device-lists. type: Tweak - id: 7081 - time: '2024-08-10T15:00:22.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29091 -- author: lzk228 + id: 7153 + time: '2024-08-19T03:13:04.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30997 +- author: UBlueberry changes: - - message: Standartized some clothing recipes. + - message: The guidebook entries for all antagonists have been revised. type: Tweak - id: 7082 - time: '2024-08-10T18:16:56.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29315 -- author: TheShuEd + id: 7154 + time: '2024-08-19T03:16:05.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31075 +- author: TheWaffleJesus changes: - - message: You cat cut burger bun into two halfs, and make custom burgers now! - type: Add - id: 7083 - time: '2024-08-10T19:31:32.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30755 -- author: thetolbean + - message: ERT Chaplains now have blessings to use their bible. + type: Fix + id: 7155 + time: '2024-08-19T03:19:19.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30993 +- author: DieselMohawk changes: - - message: Updated Core's boxing ring beacon label to be correct + - message: Reshaped the Security Helmet type: Tweak - id: 7084 - time: '2024-08-10T19:50:08.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30800 + id: 7156 + time: '2024-08-19T03:21:44.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30961 +- author: EmoGarbage404 + changes: + - message: Increased the sell prices of most materials + type: Tweak + - message: Increased the price of ordering material crates from cargo. + type: Tweak + - message: Decreased the amount of plasma in one plasma crate from 3 stacks to 1 + stack. + type: Tweak + id: 7157 + time: '2024-08-19T03:28:46.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30869 - author: Flareguy changes: - - message: Added vox sprites for most of the remaining common mask items. + - message: Added 2 new vox customization options for both hair & facial hair. type: Add - id: 7085 - time: '2024-08-10T21:06:50.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30838 -- author: Scribbles0, Plykiya, nikthechampiongr + - message: Vox Long Braids no longer incorrectly uses the Vox Afro sprite. + type: Fix + id: 7158 + time: '2024-08-19T03:32:16.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30815 +- author: EmoGarbage404 changes: - - message: You can now execute incapacitated/cuffed entities or yourself with certain - sharp weapons. Executions require a do-after, deal 9x the damage of a normal - attack, and ignore damage resistances. + - message: The recycler can now be broken down and repaired. type: Add - id: 7086 - time: '2024-08-11T03:05:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30104 -- author: Plykiya - changes: - - message: Cooking shelves have been renamed to Kitchen shelves, you can now put - more drinks and cutlery in them. + - message: Breaking the recycler now removes the EMAG effect. + type: Add + - message: The material-reclaiming efficiency of the recycler has been increased. type: Tweak - id: 7087 - time: '2024-08-11T06:21:34.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30858 -- author: BombasterDS + - message: Fixed a bug where inaccessible solutions could be extracted from entities + via the recycler. + type: Fix + - message: Removed the material reclaimer. + type: Remove + id: 7159 + time: '2024-08-19T03:39:00.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30802 +- author: lzk228 changes: - - message: You can now change the suit's sensors on incapacitated people without - taking it off + - message: Cheese wheel now Normal sized and slices in 4 slices instead of 3. type: Tweak - id: 7088 - time: '2024-08-11T09:04:43.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29668 -- author: lzk228 + id: 7160 + time: '2024-08-19T07:54:35.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31168 +- author: Beck Thompson changes: - - message: RCD UI can be activated only in hand. + - message: Slightly increased the price of the seed restock. type: Tweak - id: 7089 - time: '2024-08-11T09:15:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30861 -- author: TokenStyle + id: 7161 + time: '2024-08-19T10:33:41.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31185 +- author: tosatur changes: - - message: Pax reagent now refresh pacified. + - message: Added more words to chat sanitisation type: Tweak - - message: Pax reagent pacified duration has been changed from 2 seconds to 4 seconds. + id: 7163 + time: '2024-08-19T14:03:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31085 +- author: tosatur + changes: + - message: Changed text for ghost visibility toggle type: Tweak - id: 7090 - time: '2024-08-11T09:19:01.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30778 -- author: osjarw + id: 7164 + time: '2024-08-19T17:51:55.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30998 +- author: themias changes: - - message: You can once again pull and buckle pets. + - message: Lizards can now eat meat dumplings. type: Fix - id: 7091 - time: '2024-08-11T09:22:46.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30066 -- author: slarticodefast + id: 7165 + time: '2024-08-19T18:17:28.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31212 +- author: themias changes: - - message: The sentient plant mutation can no longer be propagated to other trays - via seeds or swabs. It has also been made more rare. + - message: Added the Combat Bakery Kit to the syndicate uplink. Includes a deadly + edible baguette sword and throwing star croissants for 3 TC. + type: Add + - message: Baguettes can be worn on the belt and normal ones do one blunt damage. type: Tweak - id: 7092 - time: '2024-08-11T09:23:14.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29133 -- author: Moomoobeef + - message: Mimes have a baguette instead of an MRE in their survival kits. + type: Tweak + id: 7167 + time: '2024-08-19T18:57:30.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31179 +- author: metalgearsloth changes: - - message: Added The Throngler (Plushie) to the grand lottery!! - type: Add - id: 7093 - time: '2024-08-11T10:26:37.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29978 -- author: Plykiya + - message: Fix wire sounds not playing. + type: Fix + id: 7168 + time: '2024-08-19T19:50:03.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31067 +- author: redmushie changes: - - message: Energy sword weapons are now execution-capable. + - message: Communications console buttons now have descriptive tooltips type: Add - id: 7094 - time: '2024-08-11T22:12:31.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30909 -- author: Blackern5000 + id: 7169 + time: '2024-08-19T20:36:36.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31217 +- author: Mephisto72 changes: - - message: Added diamond-tipped mining drills, a science printed item found under - T2 industrial. - type: Add - - message: Standard mining drills now attack faster and break rocks in two hits. - type: Tweak - - message: Moved ore bags of holding to T2 industrial tech. - type: Tweak - - message: Grappling guns are now researched with Salvage Equipment. - type: Tweak - - message: Diamonds are now worth 2,000 spesos each. + - message: The Detective can now access Externals and Cryogenics like their Officer + counterpart. type: Tweak - id: 7095 - time: '2024-08-12T01:49:09.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30814 -- author: mirrorcult + id: 7170 + time: '2024-08-19T23:44:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30203 +- author: Vermidia changes: - - message: With space law being overhauled, you can now examine items to see their - contraband status, and whether with your current access you'd be accosted by - Security for owning it. This will also clearly show non-stealth syndicate items. + - message: Mothroaches can now wear anything hamlet can wear type: Add - id: 7096 - time: '2024-08-12T03:57:50.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28688 -- author: DieselMohawk + id: 7171 + time: '2024-08-20T04:20:12.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/28956 +- author: Cojoke-dot changes: - - message: Resprited Security vest and helmet + - message: Devouring bodies now reduces bleed for Space Dragons. type: Tweak - id: 7097 - time: '2024-08-12T06:20:56.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30291 -- author: Ubaser - changes: - - message: Mantles are now available in loadouts, requiring 20 hours of that head - of department's time. - type: Add - - message: Mantles are no longer spawned in dressers or able to be printed at uniform - lathes. - type: Remove - id: 7098 - time: '2024-08-12T07:14:46.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30929 -- author: LeoSantich + id: 7172 + time: '2024-08-20T10:57:06.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29661 +- author: cranberriez changes: - - message: Updated 'narsie' and 'ratvar' to 'Nar'Sie' and 'Ratvar' in randomly generated - storybook content. + - message: Added Discord webhook error logging! type: Tweak - id: 7099 - time: '2024-08-12T23:20:53.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30954 -- author: pigeonpeas + id: 7173 + time: '2024-08-20T21:12:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30835 +- author: Repo changes: - - message: Added non command mantle into the winterdrobe + - message: Added copy to clipboard button for connection failure UI. type: Add - id: 7100 - time: '2024-08-13T09:20:12.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29774 -- author: TheShuEd + id: 7174 + time: '2024-08-20T21:31:10.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30760 +- author: EmoGarbage404 changes: - - message: change the way food is sliced - food is now sliced whole after a small - doafter than requires multiple clicks on a single entity + - message: Increased the view range on the handheld mass scanner and decreased the + power draw. type: Tweak - id: 7101 - time: '2024-08-13T10:54:00.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30824 -- author: Ubaser + - message: Handheld radars no longer spin with the player while moving. + type: Fix + id: 7176 + time: '2024-08-21T18:33:01.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31284 +- author: Beck Thompson changes: - - message: Add two gatfruit mutations, one fake and one real capfruit which spawns - cap guns when eaten. + - message: Nuclear authentication code folder that spawns the nuclear authentication + codes when opened. type: Add - id: 7102 - time: '2024-08-13T11:08:40.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30850 -- author: slarticodefast + id: 7177 + time: '2024-08-21T18:53:04.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31272 +- author: Brandon-Huu changes: - - message: Added new keybindings for rotating and flipping objects. The defaults - are R for clockwise, Shift+R for counterclockwise and F for flipping. + - message: Nukie shuttle now spawns with the nuclear authentication code folder. + This fixes the issue where the nuclear codes would only ever have the codes + for the nuclear operatives nuke and not the stations. + type: Fix + id: 7178 + time: '2024-08-21T18:55:18.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31273 +- author: Winkarst-cpu + changes: + - message: Now getting creamed will not reveal a person's identity. + type: Fix + id: 7179 + time: '2024-08-21T21:50:34.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31291 +- author: Sarahon + changes: + - message: Now can add head(top) cosmetics to humanoids and dwarfs. type: Add - id: 7103 - time: '2024-08-13T13:36:45.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30540 -- author: Cojoke-dot + - message: Added "long ears" for human and dwarf head(top) cosmetic. + type: Add + id: 7180 + time: '2024-08-21T23:44:43.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30490 +- author: Winkarst-cpu changes: - - message: Borg's names are now displayed when they make an announcement on the - Communications Console. - type: Tweak - id: 7104 - time: '2024-08-13T18:31:33.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30107 -- author: Spessmann + - message: Now vending machines show valid icons. + type: Fix + id: 7181 + time: '2024-08-22T14:40:39.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30064 +- author: EmoGarbage404 changes: - - message: Added Cog, a new midpop map based on Cogmap from ss13 + - message: Jackboots now reduce slowness from injuries by 50%. type: Add - id: 7105 - time: '2024-08-13T19:27:25.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30840 -- author: PoorMansDreams + - message: Removed combat boots from the security loadout. + type: Remove + id: 7182 + time: '2024-08-22T14:56:47.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30586 +- author: metalgearsloth changes: - - message: Throngler Plushie looks like a plushie - type: Tweak - id: 7106 - time: '2024-08-13T20:32:53.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30969 -- author: IProduceWidgets + - message: Fix the inventory GUI being visible when you don't have an inventory. + type: Fix + id: 7183 + time: '2024-08-22T17:05:17.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31306 +- author: EmoGarbage404 changes: - - message: shuttle events have been separated from other midround events and can - now happen concurrently. + - message: Moved the mining asteroid slightly closer to the station. type: Tweak - - message: Cargo Gift events should be less likely. + - message: Things pulled in by the salvage magnet should spawn closer to the station + at a more consistent distance. type: Tweak - - message: meteors have been changed to be more responsive to player count. + id: 7184 + time: '2024-08-22T19:29:56.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31296 +- author: lzk228 + changes: + - message: Removed names from implanters. No more meta. (You still can see which + implant is inside via examining or holding implanter in hand). type: Tweak - - message: 'Game mode: Kessler syndrome - What if survival but also the apocalypse?' - type: Add - - message: 'Game mode: Zombeteors - Zombies and a meteor shower all at once!' + id: 7185 + time: '2024-08-23T00:11:28.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31045 +- author: lzk228 + changes: + - message: Added second jester suit and hat in clown loadouts. type: Add - id: 7107 - time: '2024-08-14T05:21:02.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29320 -- author: Blackern5000 + id: 7186 + time: '2024-08-23T01:29:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30673 +- author: Dutch-VanDerLinde changes: - - message: Combat medical kits now contain saline syringes. + - message: Added the clown skirt type: Add - id: 7108 - time: '2024-08-14T06:25:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29954 -- author: TheShuEd + id: 7187 + time: '2024-08-23T04:59:18.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31207 +- author: Aquif changes: - - message: added morbilliard variants of procedural tacos and kebabs + - message: Boiling Vox blood results in ammonia. type: Add - - message: removed all microwave taco and kebabs recipes (except for the taco shell - itself) - type: Remove - - message: you can fight with a skewer (even if it has food on it) - type: Tweak - - message: now you can't put more than 10 layers on a burger. (20 before) - type: Tweak - id: 7109 - time: '2024-08-14T13:04:00.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30905 -- author: themias + id: 7188 + time: '2024-08-23T05:05:46.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30749 +- author: Sarahon changes: - - message: Fixed lizards being unable to eat custom burgers - type: Fix - id: 7110 - time: '2024-08-14T19:47:04.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31005 -- author: Erisfiregamer1 + - message: Brand new emote sprites and colours to the Y menu. + type: Add + id: 7189 + time: '2024-08-23T05:08:10.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30887 +- author: jimmy12or changes: - - message: New chemical, Sedin. It restores seeds on plants 20% of the time with - other adverse effects included. + - message: Added a recipe for cream. Heat some milk and shake some air into it. type: Add - id: 7111 - time: '2024-08-15T00:38:24.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/27110 -- author: PoorMansDreams + id: 7190 + time: '2024-08-23T05:13:14.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30503 +- author: SlamBamActionman changes: - - message: Added Star sticker in loadouts for Secoffs + - message: Codewords are now highlighted for traitors. type: Add - id: 7112 - time: '2024-08-15T01:50:55.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29767 + id: 7191 + time: '2024-08-23T09:14:38.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30092 +- author: SlamBamActionman + changes: + - message: Janitor's galoshes now apply slowdown over slippery surfaces, and has + a max slowdown cap over sticky surfaces. + type: Tweak + id: 7192 + time: '2024-08-23T09:59:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30967 +- author: coolsurf6 + changes: + - message: Increased the maximum number of reptilian chest markings to 3. + type: Tweak + id: 7193 + time: '2024-08-23T14:24:06.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30786 - author: FATFSAAM2 changes: - - message: added 7 new figurine voice lines. + - message: Added 3 new voicelines for the boxer figurine. type: Add - - message: changed a hos figurine voice line to not include a typo. + id: 7194 + time: '2024-08-24T00:10:10.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31382 +- author: Winkarst-cpu + changes: + - message: The damage dealt by the folded chair can now be inspected. type: Fix - id: 7113 - time: '2024-08-15T12:34:41.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30865 -- author: to4no_fix + id: 7195 + time: '2024-08-24T00:16:26.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31378 +- author: EmoGarbage404 changes: - - message: Added a new electropack that shocks when a trigger is triggered - type: Add - - message: Added a new shock collar that shocks when a trigger is triggered - type: Add - - message: Two shock collars and two remote signallers added to the warden's locker - type: Add - - message: Shock collar added as a new target for the thief + - message: The mining asteroid dungeons now spawn with more equipment, scrap, and + treasure in them. type: Add - - message: A new Special Means technology has been added to the Arsenal research - branch at the 1st research level. Its research opens up the possibility of producing - electropacks at security techfab. The cost of technology research is 5000 + id: 7196 + time: '2024-08-24T02:06:38.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31290 +- author: EmoGarbage404 + changes: + - message: The salvage magnet can now pull in large chunks of space debris. Be wary + of space carp infestations! type: Add - id: 7114 - time: '2024-08-15T14:30:39.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30529 -- author: Mervill + - message: The small asteroids and pieces of debris that generated around the station + have been removed. + type: Remove + - message: The salvage magnet now randomly picks what type of pulls will be offered + instead of always having a consistent number of each. + type: Tweak + id: 7197 + time: '2024-08-24T02:09:36.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31113 +- author: Winkarst-cpu changes: - - message: The Gas Analyzer won't spuriously shut down for seemly no reason. + - message: Now you can move the pointer in chat by holding down the arrow keys. + type: Fix + id: 7198 + time: '2024-08-24T09:37:30.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31380 +- author: erohrs2 + changes: + - message: Dinnerware Vending Machine access changed from "Service" to "Kitchen". type: Tweak - - message: The Gas Analyzer will always switch to the device tab when a new object - is scanned. + id: 7199 + time: '2024-08-24T15:56:44.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31225 +- author: DevilishMilk + changes: + - message: Moths and mothroaches are now able to eat bandanas. type: Tweak - - message: The Gas Analyzer's interaction range is now equal to the standard interaction - range + id: 7200 + time: '2024-08-24T23:30:33.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31405 +- author: PJB3005 + changes: + - message: Fix the ChemVend jug names again type: Fix - - message: Clicking the Gas Analyzer when it's in your hand has proper enable/disable - behavior. + id: 7201 + time: '2024-08-25T02:02:34.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31398 +- author: metalgearsloth + changes: + - message: Fix grids sometimes overlapping on roundstart. type: Fix - id: 7115 - time: '2024-08-15T14:45:13.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30763 -- author: Nimfar11 + id: 7202 + time: '2024-08-25T04:48:29.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31413 +- author: themias changes: - - message: Adds a gold toilet + - message: Thin firelocks now respect rotation when built + type: Fix + id: 7203 + time: '2024-08-25T04:57:37.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31371 +- author: PopGamer46 + changes: + - message: Security cadets now spawn with jackboots instead of combat boots + type: Tweak + id: 7205 + time: '2024-08-25T06:58:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31419 +- author: ArtisticRoomba + changes: + - message: Added the greytide stamp. This stamp can be rarely found in maints lockers. type: Add - - message: Adds a target for the Thief to steal the golden toilet + id: 7206 + time: '2024-08-25T10:35:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30189 +- author: EmoGarbage404 + changes: + - message: Added blueprints! These can be found by salvagers and inserted into an + autolathe in order to unlock new recipes. type: Add - - message: Corrected the sprite image for the normal toilet. + id: 7207 + time: '2024-08-25T12:06:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31138 +- author: deltanedas + changes: + - message: Fixed borgs losing access when they run out of power. type: Fix - id: 7116 - time: '2024-08-15T19:23:59.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31049 -- author: themias + id: 7208 + time: '2024-08-25T12:17:03.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31392 +- author: metalgearsloth changes: - - message: Raw meat cutlets can be cooked on a grill + - message: Actions now activate on key-down, not key-up. type: Tweak - id: 7117 - time: '2024-08-15T19:30:09.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31048 -- author: IProduceWidgets + id: 7209 + time: '2024-08-25T12:36:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31191 +- author: PJB3005 changes: - - message: Meteor dust should more consistently happen instead of meteors. + - message: PACMAN and SUPERPACMAN now ramp their power output significantly faster. type: Tweak - id: 7118 - time: '2024-08-15T19:33:17.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31018 -- author: Emisse + id: 7210 + time: '2024-08-25T16:11:27.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31403 +- author: Blackern5000 changes: - - message: Atlas, Cluster, Europa, & Saltern removed from the game. - type: Remove - id: 7119 - time: '2024-08-15T21:10:07.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31058 -- author: Emisse + - message: Space scanning technology is now T1 industrial, this includes cyborg + GPS modules and handheld mass scanners. + type: Tweak + id: 7211 + time: '2024-08-25T16:47:11.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31321 +- author: ShadowCommander changes: - - message: Origin removed from the game. + - message: Rollerbeds no longer buckle yourself when clicked on. type: Remove - id: 7120 - time: '2024-08-15T22:22:02.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31059 -- author: Psychpsyo + id: 7212 + time: '2024-08-25T17:09:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30001 +- author: lzk228 changes: - - message: You can now be German on ze space station! (added German accent) + - message: Cotton dough added to the game! Check the guidebook for new recipes. type: Add - id: 7121 - time: '2024-08-15T23:30:21.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30541 -- author: EmoGarbage404 + id: 7213 + time: '2024-08-26T02:46:16.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30668 +- author: Moomoobeef changes: - - message: Reduced the amount of ore on the mining asteroid and expeditions. - type: Tweak - - message: Increased the amount of ore on magnet asteroids. - type: Tweak - - message: Each piece of ore now only has enough material to create 1 sheet. - type: Tweak - - message: The salvage magnet now accurately reports the contents of asteroids. + - message: Silicons like medbots, janibots, and honkbots now make sound when speaking. type: Fix - id: 7122 - time: '2024-08-16T01:43:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30920 -- author: metalgearsloth + id: 7214 + time: '2024-08-26T09:09:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31471 +- author: Winkarst-cpu changes: - - message: Fix mains light on wires not being lit. + - message: The color of the science radio channel was changed. + type: Tweak + id: 7215 + time: '2024-08-26T12:02:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31319 +- author: slarticodefast + changes: + - message: Fixed energy sword visuals. type: Fix - id: 7123 - time: '2024-08-16T03:59:46.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31066 -- author: IgorAnt028 + id: 7216 + time: '2024-08-26T13:00:52.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31478 +- author: CuteBoi changes: - - message: The dead and knocked down now stop holding objects + - message: Replaced small fans on most shuttles with directional fans. type: Fix - id: 7124 - time: '2024-08-16T04:53:34.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31009 -- author: SlamBamActionman + id: 7217 + time: '2024-08-26T22:24:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31495 +- author: 12rabbits changes: - - message: Nar'Sie is satiated; moppable blood will no longer duplicate. + - message: The guidebook now remembers where you left off when re-opened. + type: Tweak + id: 7218 + time: '2024-08-26T23:06:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31375 +- author: Dimastra + changes: + - message: Fixed meat kudzu not dealing damage. type: Fix - id: 7125 - time: '2024-08-16T10:47:53.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30983 -- author: Blackern5000 + id: 7219 + time: '2024-08-27T00:30:42.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31494 +- author: JIPDawg changes: - - message: Disabler SMGs no longer fit in combat boots + - message: Gas miners are now indestructible, can be pulled and only anchored. + type: Tweak + id: 7220 + time: '2024-08-27T00:48:04.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31370 +- author: SaphireLattice + changes: + - message: Safety Moth poster graphics for hardhats and pipes are no longer swapped + around type: Fix - id: 7126 - time: '2024-08-17T01:00:21.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31110 -- author: Mervill + id: 7221 + time: '2024-08-27T11:32:53.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31507 +- author: Winkarst-cpu changes: - - message: Fixed suffocation alerts not appearing. + - message: Explosive ammunition is now marked as a contraband. type: Fix - id: 7127 - time: '2024-08-17T02:02:51.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31115 -- author: TokenStyle + id: 7222 + time: '2024-08-27T11:37:20.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31508 +- author: Winkarst-cpu changes: - - message: Plant's scream mutation now have 10+ scream varieties. - type: Add - id: 7128 - time: '2024-08-17T02:09:25.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30862 -- author: Boaz1111 + - message: Now the syndicate raid helmet is marked as a Syndicate contraband. + type: Fix + id: 7223 + time: '2024-08-27T13:01:09.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31512 +- author: Winkarst-cpu changes: - - message: Phlogiston now also ignites people who consume it. + - message: The explorer gas mask is now restricted to the cargo. + type: Fix + id: 7224 + time: '2024-08-27T13:19:38.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31514 +- author: Aeshus + changes: + - message: The Health Analyzer now displays the patient's picture, species, and + current status. type: Add - id: 7129 - time: '2024-08-17T02:49:11.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30955 -- author: slarticodefast + id: 7225 + time: '2024-08-27T14:57:36.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30834 +- author: Aeshus changes: - - message: Fixed borgs brains being teleported outside their chassis and PAIs outside - a PDA or pocket by the bluespace anomaly. + - message: Cryosleep no longer gives arrival shuttle directions. type: Fix - id: 7130 - time: '2024-08-17T04:58:23.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30744 -- author: EmoGarbage404 + id: 7226 + time: '2024-08-27T15:02:21.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30888 +- author: Winkarst-cpu changes: - - message: You can no longer see wreck names in the salvage magnet UI. - type: Tweak - id: 7131 - time: '2024-08-17T05:09:21.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31087 -- author: EmoGarbage404 + - message: Nukie plushie is now not a contraband item. + type: Fix + id: 7227 + time: '2024-08-27T16:49:17.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31516 +- author: Winkarst-cpu changes: - - message: You can now smelt ores in intervals smaller than 30. - type: Add - id: 7132 - time: '2024-08-17T05:12:55.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31074 -- author: themias + - message: Now AKMS is restricted to the security department. + type: Fix + id: 7228 + time: '2024-08-27T16:54:48.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31519 +- author: metalgearsloth changes: - - message: Added a recipe for croissants + - message: Added warp points for AI. type: Add - id: 7133 - time: '2024-08-17T14:09:42.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30825 -- author: Ubaser + id: 7229 + time: '2024-08-28T05:58:27.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31559 +- author: metalgearsloth changes: - - message: Red crowbars no longer fit in pockets. + - message: Fix AI being ejectable. type: Fix - id: 7134 - time: '2024-08-17T14:32:04.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30939 -- author: iztokbajcar + id: 7230 + time: '2024-08-28T07:09:05.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31561 +- author: metalgearsloth changes: - - message: Fixed some typos in the guidebook. + - message: Fix whitelist type: Fix - id: 7135 - time: '2024-08-18T15:31:48.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31159 -- author: Unkn0wnGh0st333 + id: 7231 + time: '2024-08-28T07:11:25.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31563 +- author: metalgearsloth changes: - - message: changed human male coughing + - message: Add shutters, windoors, etc to AI interaction whitelist. type: Tweak - id: 7136 - time: '2024-08-18T16:00:42.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30893 -- author: EmoGarbage404 - changes: - - message: Legends tell of horrifying Goliaths that roam the mining asteroid. - type: Add - id: 7137 - time: '2024-08-18T16:22:36.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30839 -- author: Beck Thompson + id: 7232 + time: '2024-08-28T07:39:36.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31564 +- author: lunarcomets changes: - - message: Cutting food now moves the sliced pieces a small amount! + - message: updated AI job icon type: Tweak - id: 7138 - time: '2024-08-18T21:18:20.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31166 + id: 7233 + time: '2024-08-28T08:18:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31565 - author: lzk228 changes: - - message: Pizza and pizza box now have 3x2 size in inventory. - type: Tweak - - message: Pizze box is 4x2 inside and always will have a pizza with a knife inside. - type: Tweak - - message: Pizza box have whitelist for utensils and pizza. - type: Tweak - id: 7139 - time: '2024-08-18T21:55:42.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31171 -- author: Deatherd - changes: - - message: Sharks Go RAWR! - type: Tweak - id: 7140 - time: '2024-08-18T22:18:07.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31142 -- author: slarticodefast + - message: Added black suspenders for mime. + type: Add + id: 7234 + time: '2024-08-28T09:43:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29055 +- author: saintmuntzer changes: - - message: Fixed the radiation collector warning light thresholds. + - message: Riot helmet now matches security helmet colors. type: Fix - id: 7141 - time: '2024-08-18T22:25:02.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31175 -- author: Potato1234_x + id: 7235 + time: '2024-08-28T11:27:09.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31530 +- author: coolboy911 changes: - - message: Added tea plants that can be dried and ground to make tea powder which - can then be used to make tea. - type: Add - - message: Added blue pumpkins. Currently useless but recipe uses are coming soon. + - message: wide-spectrum anomaly locator is now included in cyborg's anomaly module type: Add - id: 7142 - time: '2024-08-18T22:28:18.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/25092 + id: 7236 + time: '2024-08-28T12:36:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31427 - author: deltanedas changes: - - message: Added Memory Cells for storing logic signals persistently. - type: Add - id: 7143 - time: '2024-08-18T22:34:43.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/24983 -- author: Psychpsyo - changes: - - message: The random sentience event is back and can no longer pick things that - aren't even on the station. + - message: You can now build carp statues with luxury materials. type: Add - id: 7144 - time: '2024-08-18T23:41:12.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29123 -- author: EmoGarbage404 - changes: - - message: Ore can no longer be destroyed by explosions. Happy blast mining. - type: Tweak - id: 7145 - time: '2024-08-19T01:55:49.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31182 -- author: slarticodefast + id: 7237 + time: '2024-08-28T13:08:55.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31261 +- author: PopGamer46 changes: - - message: Mobs without hands can no longer toggle other players' suit pieces. + - message: Fixed shuttles not being able to FTL onto the station type: Fix - id: 7146 - time: '2024-08-19T02:41:27.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31152 -- author: Goldminermac + id: 7238 + time: '2024-08-28T13:22:21.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31569 +- author: themias changes: - - message: Chocolate-chip and blueberry pancakes can now be in stacks of up to nine - for consistency. + - message: Defibs batteries no longer drain when switched off type: Fix - id: 7147 - time: '2024-08-19T02:42:58.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31123 -- author: tosatur - changes: - - message: Made hydroponics alert light more orange - type: Tweak - id: 7148 - time: '2024-08-19T02:48:47.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31088 -- author: redmushie + id: 7239 + time: '2024-08-28T17:31:47.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31593 +- author: themias changes: - - message: News management console now checks for Service ID card access instead - of the manifest + - message: Fixed the nuke disk being marked 'left behind' when escaping with it + on the shuttle type: Fix - id: 7149 - time: '2024-08-19T02:55:44.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31160 -- author: Moomoobeef + id: 7240 + time: '2024-08-28T20:05:05.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31602 +- author: Beck Thompson changes: - - message: Added pitchers for the chef who wants to serve beverages too. + - message: Gold and silver ring, gold and silver diamond ring, gold and silver gem + ring. They all can be obtained in salvage loot pools. type: Add - id: 7150 - time: '2024-08-19T03:01:26.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31105 -- author: EmoGarbage404 + id: 7241 + time: '2024-08-28T20:48:46.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31372 +- author: RumiTiger changes: - - message: Space carp and Sharkminnows now drop teeth when butchered. + - message: Cherry has been added to the game! type: Add - - message: Added new bounties for carp and shark teeth. + - message: The recipe for cherry pie has been reintroduced to the game! type: Add - id: 7151 - time: '2024-08-19T03:04:59.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31070 -- author: to4no_fix + id: 7242 + time: '2024-08-29T01:30:59.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/28962 +- author: SlamBamActionman, Graded changes: - - message: Now it takes 5 seconds to take off or put on a muzzle - type: Tweak - - message: Now it takes 5 seconds to take off or put on a blindfold - type: Tweak - - message: Added a recipe for producing a straitjacket, it opens when researching - the Special Means technology, it can be produced at the security techfab + - message: Added administration glasses to Captain and HoP lockers! type: Add - id: 7152 - time: '2024-08-19T03:05:25.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31095 -- author: Magicalus + id: 7243 + time: '2024-08-29T01:58:16.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30447 +- author: osjarw changes: - - message: Suit sensors, borgs, and PDAs can no longer be saved to device-lists. - type: Tweak - id: 7153 - time: '2024-08-19T03:13:04.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30997 -- author: UBlueberry + - message: Fix air alarms not checking sensor states upon power returning. + type: Fix + id: 7244 + time: '2024-08-29T02:43:27.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29857 +- author: Winkarst-cpu changes: - - message: The guidebook entries for all antagonists have been revised. + - message: Now railings render over tables. type: Tweak - id: 7154 - time: '2024-08-19T03:16:05.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31075 -- author: TheWaffleJesus + id: 7245 + time: '2024-08-29T03:04:43.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31589 +- author: metalgearsloth changes: - - message: ERT Chaplains now have blessings to use their bible. + - message: Fix storage UI being buggy. type: Fix - id: 7155 - time: '2024-08-19T03:19:19.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30993 -- author: DieselMohawk - changes: - - message: Reshaped the Security Helmet - type: Tweak - id: 7156 - time: '2024-08-19T03:21:44.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30961 -- author: EmoGarbage404 + id: 7246 + time: '2024-08-29T03:23:37.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31616 +- author: MisterMecky changes: - - message: Increased the sell prices of most materials - type: Tweak - - message: Increased the price of ordering material crates from cargo. - type: Tweak - - message: Decreased the amount of plasma in one plasma crate from 3 stacks to 1 - stack. + - message: Changed strange pill possible reagents. They are no longer mostly composed + of amatoxin and space mirage. type: Tweak - id: 7157 - time: '2024-08-19T03:28:46.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30869 -- author: Flareguy + id: 7247 + time: '2024-08-29T13:21:06.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30524 +- author: slarticodefast changes: - - message: Added 2 new vox customization options for both hair & facial hair. - type: Add - - message: Vox Long Braids no longer incorrectly uses the Vox Afro sprite. + - message: Fixed energy shield visuals. type: Fix - id: 7158 - time: '2024-08-19T03:32:16.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30815 -- author: EmoGarbage404 + id: 7248 + time: '2024-08-30T01:43:34.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31619 +- author: DieselMohawk changes: - - message: The recycler can now be broken down and repaired. - type: Add - - message: Breaking the recycler now removes the EMAG effect. - type: Add - - message: The material-reclaiming efficiency of the recycler has been increased. - type: Tweak - - message: Fixed a bug where inaccessible solutions could be extracted from entities - via the recycler. + - message: Added Armband to back of Security Jumpsuit type: Fix - - message: Removed the material reclaimer. - type: Remove - id: 7159 - time: '2024-08-19T03:39:00.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30802 -- author: lzk228 - changes: - - message: Cheese wheel now Normal sized and slices in 4 slices instead of 3. - type: Tweak - id: 7160 - time: '2024-08-19T07:54:35.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31168 -- author: Beck Thompson - changes: - - message: Slightly increased the price of the seed restock. - type: Tweak - id: 7161 - time: '2024-08-19T10:33:41.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31185 -- author: tosatur + id: 7249 + time: '2024-08-30T01:46:46.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31635 +- author: Winkarst-cpu changes: - - message: Added more words to chat sanitisation + - message: Potted plants now fade their sprites, just like trees. type: Tweak - id: 7163 - time: '2024-08-19T14:03:07.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31085 -- author: tosatur + id: 7250 + time: '2024-08-30T10:34:25.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31628 +- author: AutoOtter changes: - - message: Changed text for ghost visibility toggle + - message: Greatly reduced meteorite wall health for easier cleanup and repair. type: Tweak - id: 7164 - time: '2024-08-19T17:51:55.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30998 -- author: themias + id: 7251 + time: '2024-08-30T23:24:13.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31651 +- author: slarticodefast changes: - - message: Lizards can now eat meat dumplings. + - message: The revenant can now fly through walls again. type: Fix - id: 7165 - time: '2024-08-19T18:17:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31212 -- author: themias - changes: - - message: Added the Combat Bakery Kit to the syndicate uplink. Includes a deadly - edible baguette sword and throwing star croissants for 3 TC. - type: Add - - message: Baguettes can be worn on the belt and normal ones do one blunt damage. - type: Tweak - - message: Mimes have a baguette instead of an MRE in their survival kits. - type: Tweak - id: 7167 - time: '2024-08-19T18:57:30.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31179 + id: 7252 + time: '2024-08-31T03:02:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31670 - author: metalgearsloth changes: - - message: Fix wire sounds not playing. + - message: Fix AI eye getting deleted by singulo. type: Fix - id: 7168 - time: '2024-08-19T19:50:03.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31067 -- author: redmushie + id: 7253 + time: '2024-08-31T08:24:12.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31556 +- author: slarticodefast changes: - - message: Communications console buttons now have descriptive tooltips + - message: Fixed toggleable pointlights for the toy sword, lighters, welders and + arabian lamp. + type: Fix + id: 7254 + time: '2024-08-31T08:28:36.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31655 +- author: juliangiebel + changes: + - message: Adds the station anchor. It anchors stations in space and prevents them + from moving. type: Add - id: 7169 - time: '2024-08-19T20:36:36.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31217 -- author: Mephisto72 + id: 7255 + time: '2024-08-31T14:40:28.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26098 +- author: Moomoobeef changes: - - message: The Detective can now access Externals and Cryogenics like their Officer - counterpart. + - message: medibelts are found in the medidrobe instead of in lockers. type: Tweak - id: 7170 - time: '2024-08-19T23:44:51.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30203 -- author: Vermidia + id: 7256 + time: '2024-08-31T23:22:06.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31470 +- author: EmoGarbage404 changes: - - message: Mothroaches can now wear anything hamlet can wear + - message: Removed the reclaimer shuttle. + type: Remove + - message: Removed fultons and fulton beacons from the autolathe + type: Remove + - message: Adjusted equipment inside salvage lockers and vendors. + type: Tweak + id: 7257 + time: '2024-08-31T23:39:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31333 +- author: Moomoobeef + changes: + - message: Added flavors to an array of previously indescribable things. type: Add - id: 7171 - time: '2024-08-20T04:20:12.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28956 -- author: Cojoke-dot + id: 7258 + time: '2024-09-01T00:03:30.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31685 +- author: Ilya246 changes: - - message: Devouring bodies now reduces bleed for Space Dragons. - type: Tweak - id: 7172 - time: '2024-08-20T10:57:06.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29661 -- author: cranberriez + - message: Fixed tip 26 being misinformation about the tesla. It now displays truthful + information. + type: Fix + id: 7259 + time: '2024-09-01T11:03:23.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31705 +- author: yuitop changes: - - message: Added Discord webhook error logging! + - message: space dragon fire breath ability now has cursor indicator type: Tweak - id: 7173 - time: '2024-08-20T21:12:31.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30835 -- author: Repo + id: 7260 + time: '2024-09-01T19:28:12.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31725 +- author: EmoGarbage404 changes: - - message: Added copy to clipboard button for connection failure UI. + - message: The grappling gun is now available inside the salvage vendor. Additional + ones can be scavenged in space. type: Add - id: 7174 - time: '2024-08-20T21:31:10.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30760 + - message: Removed the grappling gun from science research and lathes. + type: Remove + - message: Fixed issue that made the rope from the grappling gun not appear. + type: Fix + id: 7261 + time: '2024-09-02T04:33:25.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31737 +- author: yuitop + changes: + - message: added in-hand sprite for Smile the Slime + type: Add + id: 7262 + time: '2024-09-02T04:36:05.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31731 - author: EmoGarbage404 changes: - - message: Increased the view range on the handheld mass scanner and decreased the - power draw. + - message: Space Carp and Sharkminnows are a bit weaker overall. type: Tweak - - message: Handheld radars no longer spin with the player while moving. - type: Fix - id: 7176 - time: '2024-08-21T18:33:01.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31284 -- author: Beck Thompson - changes: - - message: Nuclear authentication code folder that spawns the nuclear authentication - codes when opened. - type: Add - id: 7177 - time: '2024-08-21T18:53:04.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31272 -- author: Brandon-Huu - changes: - - message: Nukie shuttle now spawns with the nuclear authentication code folder. - This fixes the issue where the nuclear codes would only ever have the codes - for the nuclear operatives nuke and not the stations. - type: Fix - id: 7178 - time: '2024-08-21T18:55:18.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31273 -- author: Winkarst-cpu + - message: The magnet now pulls in debris a bit closer. + type: Tweak + - message: Space debris now has slightly better loot. + type: Tweak + id: 7263 + time: '2024-09-02T04:36:28.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31726 +- author: Errant changes: - - message: Now getting creamed will not reveal a person's identity. + - message: Replacement Crew Monitor Servers, as well as the Crew Monitor Server + on the dev map, now work properly. type: Fix - id: 7179 - time: '2024-08-21T21:50:34.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31291 -- author: Sarahon + id: 7264 + time: '2024-09-02T04:37:17.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31677 +- author: poeMota changes: - - message: Now can add head(top) cosmetics to humanoids and dwarfs. - type: Add - - message: Added "long ears" for human and dwarf head(top) cosmetic. - type: Add - id: 7180 - time: '2024-08-21T23:44:43.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30490 -- author: Winkarst-cpu + - message: Now the time played on ERT roles and midround borgs will be saved to + the player's stats + type: Tweak + id: 7265 + time: '2024-09-02T05:32:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31629 +- author: themias changes: - - message: Now vending machines show valid icons. - type: Fix - id: 7181 - time: '2024-08-22T14:40:39.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30064 -- author: EmoGarbage404 + - message: The Donk Co. microwave can cook baguette swords and throwing croissants. + type: Tweak + - message: The Combat Bakery Kit now has a Donk Co. microwave board and costs 6 + TC. + type: Tweak + id: 7266 + time: '2024-09-02T13:49:01.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31239 +- author: yuitop changes: - - message: Jackboots now reduce slowness from injuries by 50%. - type: Add - - message: Removed combat boots from the security loadout. - type: Remove - id: 7182 - time: '2024-08-22T14:56:47.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30586 -- author: metalgearsloth + - message: actions bar now resize dynamically + type: Tweak + id: 7267 + time: '2024-09-02T19:12:11.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31759 +- author: yuitop changes: - - message: Fix the inventory GUI being visible when you don't have an inventory. + - message: space ninja throwing star ability now spawns a throwing star type: Fix - id: 7183 - time: '2024-08-22T17:05:17.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31306 -- author: EmoGarbage404 - changes: - - message: Moved the mining asteroid slightly closer to the station. - type: Tweak - - message: Things pulled in by the salvage magnet should spawn closer to the station - at a more consistent distance. - type: Tweak - id: 7184 - time: '2024-08-22T19:29:56.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31296 -- author: lzk228 + id: 7268 + time: '2024-09-03T00:50:34.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31684 +- author: Errant changes: - - message: Removed names from implanters. No more meta. (You still can see which - implant is inside via examining or holding implanter in hand). + - message: Vox sounds are now less unbearable. type: Tweak - id: 7185 - time: '2024-08-23T00:11:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31045 -- author: lzk228 + id: 7269 + time: '2024-09-03T07:23:09.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31679 +- author: Just_Art changes: - - message: Added second jester suit and hat in clown loadouts. + - message: Added Classic Long 2 and Classic Long 3 hairstyles! type: Add - id: 7186 - time: '2024-08-23T01:29:51.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30673 -- author: Dutch-VanDerLinde + id: 7270 + time: '2024-09-03T08:29:24.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30963 +- author: ScarKy0 changes: - - message: Added the clown skirt + - message: Plenty of old silicon laws can now be rolled as ion laws. type: Add - id: 7187 - time: '2024-08-23T04:59:18.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31207 -- author: Aquif + id: 7271 + time: '2024-09-03T09:45:46.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31664 +- author: IProduceWidgets changes: - - message: Boiling Vox blood results in ammonia. + - message: Escargot and snails! Hopefully you don't encounter that one snail... type: Add - id: 7188 - time: '2024-08-23T05:05:46.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30749 -- author: Sarahon + id: 7272 + time: '2024-09-03T10:33:44.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30765 +- author: Fildrance changes: - - message: Brand new emote sprites and colours to the Y menu. + - message: When research is unlocked in console the approver of the research is + named. type: Add - id: 7189 - time: '2024-08-23T05:08:10.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30887 -- author: jimmy12or - changes: - - message: Added a recipe for cream. Heat some milk and shake some air into it. + - message: Borgs door access is getting logged now (and is accessible in Log Probe + Cartridge) type: Add - id: 7190 - time: '2024-08-23T05:13:14.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30503 -- author: SlamBamActionman - changes: - - message: Codewords are now highlighted for traitors. + - message: e-magged research and cargo consoles are not radio-ing any messages on + research/buy confimation (for anyone) type: Add - id: 7191 - time: '2024-08-23T09:14:38.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30092 -- author: SlamBamActionman - changes: - - message: Janitor's galoshes now apply slowdown over slippery surfaces, and has - a max slowdown cap over sticky surfaces. - type: Tweak - id: 7192 - time: '2024-08-23T09:59:51.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30967 -- author: coolsurf6 + id: 7273 + time: '2024-09-03T13:01:38.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31170 +- author: Lyroth001 changes: - - message: Increased the maximum number of reptilian chest markings to 3. - type: Tweak - id: 7193 - time: '2024-08-23T14:24:06.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30786 -- author: FATFSAAM2 + - message: added a new artifact node for medical chems + type: Add + id: 7274 + time: '2024-09-03T15:11:34.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30873 +- author: DieselMohawk changes: - - message: Added 3 new voicelines for the boxer figurine. + - message: Added Red Neck Gaiter to Secdrobe type: Add - id: 7194 - time: '2024-08-24T00:10:10.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31382 -- author: Winkarst-cpu + id: 7275 + time: '2024-09-03T15:16:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30106 +- author: ScarKy0 changes: - - message: The damage dealt by the folded chair can now be inspected. + - message: Fixed typos in antimov. type: Fix - id: 7195 - time: '2024-08-24T00:16:26.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31378 -- author: EmoGarbage404 - changes: - - message: The mining asteroid dungeons now spawn with more equipment, scrap, and - treasure in them. - type: Add - id: 7196 - time: '2024-08-24T02:06:38.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31290 -- author: EmoGarbage404 + id: 7276 + time: '2024-09-03T21:56:34.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31811 +- author: ScarKy0 changes: - - message: The salvage magnet can now pull in large chunks of space debris. Be wary - of space carp infestations! - type: Add - - message: The small asteroids and pieces of debris that generated around the station - have been removed. - type: Remove - - message: The salvage magnet now randomly picks what type of pulls will be offered - instead of always having a consistent number of each. - type: Tweak - id: 7197 - time: '2024-08-24T02:09:36.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31113 -- author: Winkarst-cpu + - message: Station AI's name now correctly displays in announcements. + type: Fix + id: 7277 + time: '2024-09-03T22:05:02.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31802 +- author: Ilya246 changes: - - message: Now you can move the pointer in chat by holding down the arrow keys. + - message: Fixed many entities not taking structural damage, including girders, + firelocks, and machines. type: Fix - id: 7198 - time: '2024-08-24T09:37:30.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31380 -- author: erohrs2 + id: 7278 + time: '2024-09-04T13:37:06.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30790 +- author: lzk228 changes: - - message: Dinnerware Vending Machine access changed from "Service" to "Kitchen". + - message: Reduced walk speed of some small mobs (mice, cockroaches, bees etc.) type: Tweak - id: 7199 - time: '2024-08-24T15:56:44.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31225 -- author: DevilishMilk + id: 7279 + time: '2024-09-04T14:10:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31360 +- author: qwerltaz changes: - - message: Moths and mothroaches are now able to eat bandanas. + - message: Made tesla a lot brighter. type: Tweak - id: 7200 - time: '2024-08-24T23:30:33.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31405 -- author: PJB3005 + id: 7280 + time: '2024-09-04T14:47:41.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31357 +- author: Allen changes: - - message: Fix the ChemVend jug names again + - message: Magboots and Science Magboots are no longer contraband. Advanced Magboots + and Blood-Red Magboots now have appropriate contraband types (Grand Theft and + Syndie Contraband respectively) type: Fix - id: 7201 - time: '2024-08-25T02:02:34.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31398 -- author: metalgearsloth + id: 7281 + time: '2024-09-04T15:04:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30960 +- author: Blackern5000 changes: - - message: Fix grids sometimes overlapping on roundstart. - type: Fix - id: 7202 - time: '2024-08-25T04:48:29.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31413 -- author: themias + - message: Zombie outbreaks are now SIGNIFICANTLY rarer + type: Tweak + id: 7282 + time: '2024-09-04T15:57:42.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30266 +- author: yuitop changes: - - message: Thin firelocks now respect rotation when built + - message: Going into portals while pulling no more crashes the game type: Fix - id: 7203 - time: '2024-08-25T04:57:37.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31371 -- author: PopGamer46 + id: 7283 + time: '2024-09-04T16:44:10.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31787 +- author: Ilya246 changes: - - message: Security cadets now spawn with jackboots instead of combat boots + - message: The syndicate stealth box will no longer make a loud sound upon being + opened. type: Tweak - id: 7205 - time: '2024-08-25T06:58:51.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31419 -- author: ArtisticRoomba + id: 7284 + time: '2024-09-04T22:42:15.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30741 +- author: chromiumboy changes: - - message: Added the greytide stamp. This stamp can be rarely found in maints lockers. + - message: The atmospheric alert computers are now functional! Use them to locate + active air and fire alarms on the station. type: Add - id: 7206 - time: '2024-08-25T10:35:22.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30189 -- author: EmoGarbage404 + id: 7285 + time: '2024-09-05T01:13:17.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/25938 +- author: ScarKy0 changes: - - message: Added blueprints! These can be found by salvagers and inserted into an - autolathe in order to unlock new recipes. + - message: A lot more electronics can now be used by the AI. type: Add - id: 7207 - time: '2024-08-25T12:06:50.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31138 -- author: deltanedas - changes: - - message: Fixed borgs losing access when they run out of power. - type: Fix - id: 7208 - time: '2024-08-25T12:17:03.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31392 -- author: metalgearsloth - changes: - - message: Actions now activate on key-down, not key-up. - type: Tweak - id: 7209 - time: '2024-08-25T12:36:22.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31191 -- author: PJB3005 + id: 7286 + time: '2024-09-05T09:31:03.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31730 +- author: Fildrance changes: - - message: PACMAN and SUPERPACMAN now ramp their power output significantly faster. - type: Tweak - id: 7210 - time: '2024-08-25T16:11:27.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31403 -- author: Blackern5000 + - message: random uplink discounts for traitors + type: Add + id: 7287 + time: '2024-09-05T12:12:39.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/26297 +- author: ScarKy0 changes: - - message: Space scanning technology is now T1 industrial, this includes cyborg - GPS modules and handheld mass scanners. - type: Tweak - id: 7211 - time: '2024-08-25T16:47:11.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31321 -- author: ShadowCommander + - message: AI Actions now work. + type: Fix + id: 7288 + time: '2024-09-05T12:49:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31823 +- author: ScarKy0 changes: - - message: Rollerbeds no longer buckle yourself when clicked on. - type: Remove - id: 7212 - time: '2024-08-25T17:09:51.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30001 -- author: lzk228 + - message: Station AI now has updated icons on the HUD. + type: Add + id: 7289 + time: '2024-09-05T12:52:26.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31799 +- author: drakewill-CRL changes: - - message: Cotton dough added to the game! Check the guidebook for new recipes. + - message: Botanists can now learn basic chemistry with the Agrichem Is Fun! kit + in the Nutrimax vendor. type: Add - id: 7213 - time: '2024-08-26T02:46:16.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30668 -- author: Moomoobeef + id: 7290 + time: '2024-09-05T16:43:00.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31738 +- author: Nimfar11 changes: - - message: Silicons like medbots, janibots, and honkbots now make sound when speaking. - type: Fix - id: 7214 - time: '2024-08-26T09:09:49.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31471 -- author: Winkarst-cpu + - message: Added a board for the AI upload console. + type: Add + id: 7291 + time: '2024-09-05T18:20:41.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31867 +- author: PJB3005 changes: - - message: The color of the science radio channel was changed. + - message: Changed the sprites for the N2 locker and "vox area" sign. type: Tweak - id: 7215 - time: '2024-08-26T12:02:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31319 -- author: slarticodefast - changes: - - message: Fixed energy sword visuals. - type: Fix - id: 7216 - time: '2024-08-26T13:00:52.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31478 -- author: CuteBoi - changes: - - message: Replaced small fans on most shuttles with directional fans. - type: Fix - id: 7217 - time: '2024-08-26T22:24:22.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31495 -- author: 12rabbits + id: 7292 + time: '2024-09-06T05:26:27.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31845 +- author: Ekkosangen changes: - - message: The guidebook now remembers where you left off when re-opened. + - message: Pizza crates and parties can now sometimes contain cotton pizza type: Tweak - id: 7218 - time: '2024-08-26T23:06:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31375 -- author: Dimastra + id: 7293 + time: '2024-09-06T06:04:28.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31883 +- author: TheShuEd, Jaraten changes: - - message: Fixed meat kudzu not dealing damage. - type: Fix - id: 7219 - time: '2024-08-27T00:30:42.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31494 -- author: JIPDawg + - message: New Tech anomaly added to the game! it can bind devices ports, activate + them, and when supercrit, it can even emag some devices. + type: Add + id: 7294 + time: '2024-09-06T07:24:17.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31764 +- author: EmoGarbage404 changes: - - message: Gas miners are now indestructible, can be pulled and only anchored. - type: Tweak - id: 7220 - time: '2024-08-27T00:48:04.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31370 -- author: SaphireLattice + - message: Added mineral scanners! When held in your hand or pocket, these will + periodically show nearby ores. Unlock them through science today! + type: Add + id: 7295 + time: '2024-09-06T14:05:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31390 +- author: lzk228 changes: - - message: Safety Moth poster graphics for hardhats and pipes are no longer swapped - around + - message: You can no longer insert any item in AI upload console. type: Fix - id: 7221 - time: '2024-08-27T11:32:53.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31507 -- author: Winkarst-cpu + id: 7296 + time: '2024-09-06T19:07:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31900 +- author: ps3moira changes: - - message: Explosive ammunition is now marked as a contraband. + - message: Fixed pump shotgun inhand sprites type: Fix - id: 7222 - time: '2024-08-27T11:37:20.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31508 -- author: Winkarst-cpu + id: 7297 + time: '2024-09-06T23:26:46.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31885 +- author: yuitop changes: - - message: Now the syndicate raid helmet is marked as a Syndicate contraband. + - message: break pull when fall asleep type: Fix - id: 7223 - time: '2024-08-27T13:01:09.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31512 -- author: Winkarst-cpu + id: 7298 + time: '2024-09-06T23:30:24.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31893 +- author: Boaz1111 changes: - - message: The explorer gas mask is now restricted to the cargo. - type: Fix - id: 7224 - time: '2024-08-27T13:19:38.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31514 -- author: Aeshus + - message: Energy Shotgun's narrow fire mode's projectiles now deal 13 heat dmg + each, for a total of 52. The energy shotgun additionally no longer self recharges + and has received some minor buffs. + type: Tweak + id: 7299 + time: '2024-09-07T00:35:01.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31235 +- author: themias changes: - - message: The Health Analyzer now displays the patient's picture, species, and - current status. + - message: Added the justice helm to the secdrobe type: Add - id: 7225 - time: '2024-08-27T14:57:36.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30834 -- author: Aeshus + - message: Added a crafting recipe for the justice helm + type: Add + id: 7300 + time: '2024-09-07T03:04:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31905 +- author: Futuristic changes: - - message: Cryosleep no longer gives arrival shuttle directions. - type: Fix - id: 7226 - time: '2024-08-27T15:02:21.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30888 -- author: Winkarst-cpu + - message: Remove binary encryption key from RD lockers + type: Remove + id: 7301 + time: '2024-09-07T05:30:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31909 +- author: EmoGarbage404 changes: - - message: Nukie plushie is now not a contraband item. - type: Fix - id: 7227 - time: '2024-08-27T16:49:17.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31516 -- author: Winkarst-cpu + - message: Firesuits are now worse at keeping in heat and winter clothes make you + get warmer quicker. + type: Tweak + id: 7302 + time: '2024-09-07T05:37:17.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30662 +- author: Boaz1111 changes: - - message: Now AKMS is restricted to the security department. - type: Fix - id: 7228 - time: '2024-08-27T16:54:48.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31519 -- author: metalgearsloth + - message: The maple wing marking for moths now have a secondary color palette. + type: Tweak + id: 7303 + time: '2024-09-07T05:48:40.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31691 +- author: lzk228 changes: - - message: Added warp points for AI. - type: Add - id: 7229 - time: '2024-08-28T05:58:27.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31559 -- author: metalgearsloth + - message: Bottle and syringe names are remade into labels. + type: Tweak + id: 7304 + time: '2024-09-07T05:51:36.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29956 +- author: Ian321 + changes: + - message: The AgriChem kit now links to the botanical chemicals guidebook. + type: Tweak + - message: The botanical chemicals guidebook has been expanded. + type: Tweak + id: 7305 + time: '2024-09-07T06:23:01.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31896 +- author: Lank changes: - - message: Fix AI being ejectable. - type: Fix - id: 7230 - time: '2024-08-28T07:09:05.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31561 -- author: metalgearsloth + - message: The Antimov and Overseer law boards are no longer available roundstart. + type: Remove + id: 7306 + time: '2024-09-07T08:45:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31908 +- author: lzk228 changes: - - message: Fix whitelist + - message: Books cannot longer be inserted in crates as paper labels type: Fix - id: 7231 - time: '2024-08-28T07:11:25.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31563 -- author: metalgearsloth - changes: - - message: Add shutters, windoors, etc to AI interaction whitelist. - type: Tweak - id: 7232 - time: '2024-08-28T07:39:36.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31564 -- author: lunarcomets + id: 7307 + time: '2024-09-07T13:22:11.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31919 +- author: qwerltaz changes: - - message: updated AI job icon + - message: Reduced wall closet range. It's now much easier to not close yourself + inside by accident. type: Tweak - id: 7233 - time: '2024-08-28T08:18:51.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31565 -- author: lzk228 + id: 7308 + time: '2024-09-07T23:44:29.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31933 +- author: Ilya246 changes: - - message: Added black suspenders for mime. - type: Add - id: 7234 - time: '2024-08-28T09:43:31.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29055 -- author: saintmuntzer + - message: Reagents that make you flammable no longer extinguish you. + type: Fix + id: 7309 + time: '2024-09-07T23:44:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31930 +- author: LucasTheDrgn changes: - - message: Riot helmet now matches security helmet colors. + - message: Restored functionality to the Industrial Reagent Grinder type: Fix - id: 7235 - time: '2024-08-28T11:27:09.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31530 -- author: coolboy911 + id: 7310 + time: '2024-09-07T23:47:02.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31903 +- author: EmoGarbage404 changes: - - message: wide-spectrum anomaly locator is now included in cyborg's anomaly module + - message: Added the biogenerator! Botany can use this machine to create various + materials, chemicals, and food items out of the type: Add - id: 7236 - time: '2024-08-28T12:36:31.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31427 -- author: deltanedas + id: 7311 + time: '2024-09-08T05:34:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30694 +- author: TheShuEd changes: - - message: You can now build carp statues with luxury materials. + - message: Returned Taco microwave recipes (people were sad) type: Add - id: 7237 - time: '2024-08-28T13:08:55.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31261 -- author: PopGamer46 + - message: added an alternative method of crafting some burgers, through the correct + assembly sequence of modular food. + type: Add + - message: severely cut back on the number of items you can put on burgers, tacos, + or kebabs. This had poor design, and things need to be separately resprited + by adding them on modular food. + type: Tweak + id: 7312 + time: '2024-09-08T06:22:27.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31012 +- author: metalgearsloth changes: - - message: Fixed shuttles not being able to FTL onto the station + - message: Fix the FTL bubbles sometimes persisting. type: Fix - id: 7238 - time: '2024-08-28T13:22:21.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31569 -- author: themias - changes: - - message: Defibs batteries no longer drain when switched off + - message: Fix AI eye being able to FTL. type: Fix - id: 7239 - time: '2024-08-28T17:31:47.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31593 -- author: themias - changes: - - message: Fixed the nuke disk being marked 'left behind' when escaping with it - on the shuttle + - message: Fix the AI eye being able to be FTL smashed. type: Fix - id: 7240 - time: '2024-08-28T20:05:05.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31602 -- author: Beck Thompson - changes: - - message: Gold and silver ring, gold and silver diamond ring, gold and silver gem - ring. They all can be obtained in salvage loot pools. - type: Add - id: 7241 - time: '2024-08-28T20:48:46.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31372 -- author: RumiTiger + id: 7313 + time: '2024-09-08T08:12:24.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31952 +- author: PopGamer46 changes: - - message: Cherry has been added to the game! - type: Add - - message: The recipe for cherry pie has been reintroduced to the game! - type: Add - id: 7242 - time: '2024-08-29T01:30:59.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28962 -- author: SlamBamActionman, Graded + - message: Fixed being able to craft the justice helmet with a justice helmet + type: Fix + id: 7314 + time: '2024-09-08T10:21:55.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31957 +- author: Killerqu00 changes: - - message: Added administration glasses to Captain and HoP lockers! - type: Add - id: 7243 - time: '2024-08-29T01:58:16.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30447 -- author: osjarw + - message: Seclite is now restricted to security. + type: Tweak + - message: Handcuffs are now restricted to security and command. + type: Tweak + - message: Trench whistle is now minor contraband. + type: Tweak + id: 7315 + time: '2024-09-08T12:06:01.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31956 +- author: Psychpsyo changes: - - message: Fix air alarms not checking sensor states upon power returning. + - message: The random sentience event should now actually happen again. type: Fix - id: 7244 - time: '2024-08-29T02:43:27.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29857 -- author: Winkarst-cpu + id: 7316 + time: '2024-09-08T12:10:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31953 +- author: Beck Thompson changes: - - message: Now railings render over tables. + - message: Gold and silver rings now give a small amount of materials when scrapped. type: Tweak - id: 7245 - time: '2024-08-29T03:04:43.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31589 -- author: metalgearsloth + id: 7317 + time: '2024-09-08T16:10:05.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31847 +- author: K-Dynamic changes: - - message: Fix storage UI being buggy. + - message: added missing missing resistance values for directional plasma and uranium + windows type: Fix - id: 7246 - time: '2024-08-29T03:23:37.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31616 -- author: MisterMecky + id: 7318 + time: '2024-09-08T18:08:06.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31975 +- author: qwerltaz changes: - - message: Changed strange pill possible reagents. They are no longer mostly composed - of amatoxin and space mirage. + - message: Power cables on the ground are now offset and do not obscure each other + or pipes beneath. type: Tweak - id: 7247 - time: '2024-08-29T13:21:06.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30524 + id: 7319 + time: '2024-09-09T10:00:18.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32000 +- author: ArtisticRoomba + changes: + - message: Budget insulated gloves now leave behind yellow frayed insulative fibers + instead of yellow insulative fibers. Detectives, rejoice! + type: Tweak + id: 7320 + time: '2024-09-09T10:30:25.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31886 - author: slarticodefast changes: - - message: Fixed energy shield visuals. + - message: Revenants or other mobs without hands can no longer spill jugs. type: Fix - id: 7248 - time: '2024-08-30T01:43:34.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31619 -- author: DieselMohawk + id: 7321 + time: '2024-09-09T11:02:15.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31438 +- author: PJB3005 changes: - - message: Added Armband to back of Security Jumpsuit - type: Fix - id: 7249 - time: '2024-08-30T01:46:46.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31635 -- author: Winkarst-cpu + - message: The emergency shuttle will now wait at the station longer if it couldn't + dock at evac. + type: Tweak + id: 7322 + time: '2024-09-09T18:10:28.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31496 +- author: Boaz1111 changes: - - message: Potted plants now fade their sprites, just like trees. + - message: Pacifists can now use grapple guns. type: Tweak - id: 7250 - time: '2024-08-30T10:34:25.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31628 -- author: AutoOtter + id: 7323 + time: '2024-09-09T19:15:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32014 +- author: lzk228 changes: - - message: Greatly reduced meteorite wall health for easier cleanup and repair. + - message: All bots are available for disguise with the Chameleon Ppotlight type: Tweak - id: 7251 - time: '2024-08-30T23:24:13.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31651 -- author: slarticodefast + id: 7324 + time: '2024-09-09T19:18:01.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32006 +- author: DieselMohawk changes: - - message: The revenant can now fly through walls again. - type: Fix - id: 7252 - time: '2024-08-31T03:02:58.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31670 -- author: metalgearsloth + - message: Added Security Trooper Uniform + type: Add + id: 7325 + time: '2024-09-09T19:19:16.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31997 +- author: qwerltaz changes: - - message: Fix AI eye getting deleted by singulo. + - message: Dragon ghost role now spawns outside the station. + type: Tweak + - message: Dragon ghost role now spawns where advertised! type: Fix - id: 7253 - time: '2024-08-31T08:24:12.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31556 -- author: slarticodefast + id: 7326 + time: '2024-09-09T19:22:41.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31890 +- author: yuitop changes: - - message: Fixed toggleable pointlights for the toy sword, lighters, welders and - arabian lamp. + - message: Fixed some cases when surveillance camera's red light not turning off + when needed type: Fix - id: 7254 - time: '2024-08-31T08:28:36.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31655 -- author: juliangiebel + id: 7327 + time: '2024-09-09T19:23:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31831 +- author: Blackern5000 changes: - - message: Adds the station anchor. It anchors stations in space and prevents them - from moving. + - message: Normal and reinforced windows have been made directly upgradable using + rods, plasma, uranium, or plasteel. type: Add - id: 7255 - time: '2024-08-31T14:40:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/26098 -- author: Moomoobeef + - message: Reinforced plasma and uranium windows have been made tougher. + type: Tweak + - message: Windows have been made to correctly display their damage visuals. + type: Fix + - message: Reinforced plasma windows have been given the correct amount of hp and + no longer have 12x the amount they should. + type: Fix + id: 7328 + time: '2024-09-09T19:26:10.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31978 +- author: Cojoke-dot changes: - - message: medibelts are found in the medidrobe instead of in lockers. + - message: Nuclear bombs now require the Nuclear Authentification Disk to toggle + anchor. type: Tweak - id: 7256 - time: '2024-08-31T23:22:06.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31470 -- author: EmoGarbage404 + id: 7329 + time: '2024-09-09T19:30:26.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29565 +- author: Hreno changes: - - message: Removed the reclaimer shuttle. - type: Remove - - message: Removed fultons and fulton beacons from the autolathe - type: Remove - - message: Adjusted equipment inside salvage lockers and vendors. + - message: Display agents' jobs in the Round End Summary window. + type: Add + id: 7330 + time: '2024-09-09T19:31:53.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31652 +- author: deltanedas + changes: + - message: Adjusted the costs and production times of all electronics so they're + more consistent with eachother. type: Tweak - id: 7257 - time: '2024-08-31T23:39:32.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31333 -- author: Moomoobeef + id: 7331 + time: '2024-09-09T19:34:18.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31524 +- author: Winkarst-cpu changes: - - message: Added flavors to an array of previously indescribable things. + - message: Now fire axe (the flaming one), and an advanced circular saw are Syndicate + contraband. + type: Fix + - message: Now encryption keys are restricted according to their department. + type: Fix + - message: Now ERT, Deathsquad and Central Command Official items are restricted + to the Central Command. + type: Fix + - message: Now acolyte armor, a thieving beacon and the thief's undetermined toolbox + are minor contraband. + type: Fix + - message: Now bladed flatcaps are not a contraband (stealth item). + type: Fix + - message: Now mercenary clothes, magazines, speedloaders and cartridges are contraband. + type: Fix + - message: Now cleanades are restricted to the Service. + type: Fix + - message: Now metal foam grenades are restricted to the Engineering. + type: Fix + - message: Now flash, smoke, and tear gas grenades are restricted to the Security. + type: Fix + - message: Now combat gloves are restricted to Security and Cargo. + type: Fix + - message: The Central Command restricted contraband group and department were added. type: Add - id: 7258 - time: '2024-09-01T00:03:30.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31685 -- author: Ilya246 + id: 7332 + time: '2024-09-09T19:36:25.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31606 +- author: themias changes: - - message: Fixed tip 26 being misinformation about the tesla. It now displays truthful - information. + - message: Unpublished news article progress is automatically saved + type: Tweak + id: 7333 + time: '2024-09-09T19:38:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31491 +- author: metalgearsloth + changes: + - message: Fix spawn prefs. type: Fix - id: 7259 - time: '2024-09-01T11:03:23.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31705 -- author: yuitop + id: 7334 + time: '2024-09-09T19:39:16.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31892 +- author: lzk228 changes: - - message: space dragon fire breath ability now has cursor indicator + - message: The captain now have special late join message. type: Tweak - id: 7260 - time: '2024-09-01T19:28:12.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31725 -- author: EmoGarbage404 + id: 7335 + time: '2024-09-09T19:57:37.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31991 +- author: Thinbug0 changes: - - message: The grappling gun is now available inside the salvage vendor. Additional - ones can be scavenged in space. + - message: Teal gloves can now be found at the ClothesMate! type: Add - - message: Removed the grappling gun from science research and lathes. - type: Remove - - message: Fixed issue that made the rope from the grappling gun not appear. - type: Fix - id: 7261 - time: '2024-09-02T04:33:25.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31737 -- author: yuitop + id: 7336 + time: '2024-09-09T21:47:53.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31865 +- author: chillyconmor changes: - - message: added in-hand sprite for Smile the Slime + - message: Space Ninjas now have a new intro song. type: Add - id: 7262 - time: '2024-09-02T04:36:05.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31731 -- author: EmoGarbage404 + id: 7337 + time: '2024-09-09T22:12:25.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31055 +- author: DieselMohawk changes: - - message: Space Carp and Sharkminnows are a bit weaker overall. + - message: Made Trooper Uniform accessible for Security Officers in loadouts + type: Fix + id: 7338 + time: '2024-09-09T23:59:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32019 +- author: IProduceWidgets + changes: + - message: Visitors now can have the correct Id cards and PDA! + type: Fix + - message: ghost roles should now attempt to tell you what your antag status is + in a popup when you join the raffle. type: Tweak - - message: The magnet now pulls in debris a bit closer. + - message: ERT chaplains should now be able to use bibles. + type: Fix + - message: Many new unknown shuttle events to make them more unique. + type: Add + - message: Syndicate escape pods will once again appear. + type: Fix + - message: Unknown Shuttle events will be much rarer. type: Tweak - - message: Space debris now has slightly better loot. + id: 7339 + time: '2024-09-10T06:40:00.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/28098 +- author: ScarKy0 + changes: + - message: Renamed Circuit Boards to be Law Boards instead. type: Tweak - id: 7263 - time: '2024-09-02T04:36:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31726 -- author: Errant + id: 7340 + time: '2024-09-10T10:27:42.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31914 +- author: ScarKy0 changes: - - message: Replacement Crew Monitor Servers, as well as the Crew Monitor Server - on the dev map, now work properly. + - message: Arrival Screens now show time again. type: Fix - id: 7264 - time: '2024-09-02T04:37:17.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31677 -- author: poeMota - changes: - - message: Now the time played on ERT roles and midround borgs will be saved to - the player's stats - type: Tweak - id: 7265 - time: '2024-09-02T05:32:49.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31629 + id: 7341 + time: '2024-09-10T19:08:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32037 - author: themias changes: - - message: The Donk Co. microwave can cook baguette swords and throwing croissants. - type: Tweak - - message: The Combat Bakery Kit now has a Donk Co. microwave board and costs 6 - TC. - type: Tweak - id: 7266 - time: '2024-09-02T13:49:01.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31239 -- author: yuitop + - message: The Justice Helm can now only be crafted using a security helmet. + type: Fix + id: 7342 + time: '2024-09-10T19:08:37.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32042 +- author: TurboTrackerss14 changes: - - message: actions bar now resize dynamically + - message: Gas tank explosions ("max caps") have a reduced range on WizDen servers + until they can be reworked into a proper game mechanic. + type: Remove + id: 7343 + time: '2024-09-10T22:05:12.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31437 +- author: Boaz1111 + changes: + - message: Researching Advanced Atmospherics now requires Atmospherics to be researched. type: Tweak - id: 7267 - time: '2024-09-02T19:12:11.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31759 -- author: yuitop + id: 7344 + time: '2024-09-10T22:19:17.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32048 +- author: DiposableCrewmember42 changes: - - message: space ninja throwing star ability now spawns a throwing star + - message: Fixed Revenant ability cost checks. Revenants can no longer spam abilities + without Essence. type: Fix - id: 7268 - time: '2024-09-03T00:50:34.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31684 -- author: Errant + id: 7345 + time: '2024-09-10T23:07:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32050 +- author: ArtisticRoomba changes: - - message: Vox sounds are now less unbearable. + - message: The salvage magnet circuitboard has been added to QM's locker. It can + also be made at the circuit imprinter roundstart. NOW GET BACK TO WORK!!! type: Tweak - id: 7269 - time: '2024-09-03T07:23:09.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31679 -- author: Just_Art + id: 7346 + time: '2024-09-10T23:25:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31996 +- author: Lank changes: - - message: Added Classic Long 2 and Classic Long 3 hairstyles! - type: Add - id: 7270 - time: '2024-09-03T08:29:24.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30963 -- author: ScarKy0 + - message: Several antagonist shuttle events have been removed. + type: Remove + id: 7347 + time: '2024-09-10T23:26:59.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32052 +- author: Vermidia changes: - - message: Plenty of old silicon laws can now be rolled as ion laws. - type: Add - id: 7271 - time: '2024-09-03T09:45:46.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31664 -- author: IProduceWidgets + - message: Borgs and other creatures that shouldn't get hurt stepping on things + no longer get hurt stepping on things. + type: Fix + - message: Honkbots slip again + type: Fix + id: 7348 + time: '2024-09-11T02:12:08.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31011 +- author: EmoGarbage404 changes: - - message: Escargot and snails! Hopefully you don't encounter that one snail... + - message: The mining asteroid now generates small structures full of treasure and + equipment. Keep an eye open for them, nestled within the rock. type: Add - id: 7272 - time: '2024-09-03T10:33:44.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30765 -- author: Fildrance + id: 7349 + time: '2024-09-11T03:33:42.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31638 +- author: SlamBamActionman changes: - - message: When research is unlocked in console the approver of the research is - named. - type: Add - - message: Borgs door access is getting logged now (and is accessible in Log Probe - Cartridge) - type: Add - - message: e-magged research and cargo consoles are not radio-ing any messages on - research/buy confimation (for anyone) - type: Add - id: 7273 - time: '2024-09-03T13:01:38.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31170 -- author: Lyroth001 + - message: The Station AI job is no longer affected by the Bureaucratic Event event. + type: Fix + id: 7350 + time: '2024-09-11T11:24:24.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32021 +- author: K-Dynamic changes: - - message: added a new artifact node for medical chems - type: Add - id: 7274 - time: '2024-09-03T15:11:34.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30873 -- author: DieselMohawk + - message: Reduced canister prices from 1000 to 200 spesos + type: Tweak + id: 7351 + time: '2024-09-11T12:53:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31965 +- author: EmoGarbage404 changes: - - message: Added Red Neck Gaiter to Secdrobe + - message: Added the hivelord! This self-replicating alien is found on the mining + asteroid. It's core is known to have powerful healing properties. type: Add - id: 7275 - time: '2024-09-03T15:16:51.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30106 -- author: ScarKy0 + id: 7352 + time: '2024-09-11T13:52:27.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31322 +- author: PeccNeck changes: - - message: Fixed typos in antimov. + - message: Fixed a bug where ore processors could not produce reinforced glass type: Fix - id: 7276 - time: '2024-09-03T21:56:34.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31811 -- author: ScarKy0 + id: 7353 + time: '2024-09-11T14:06:08.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32069 +- author: Plykiya changes: - - message: Station AI's name now correctly displays in announcements. + - message: You can now use swords to make baseball bats. type: Fix - id: 7277 - time: '2024-09-03T22:05:02.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31802 -- author: Ilya246 + id: 7354 + time: '2024-09-11T14:45:00.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32075 +- author: Plykiya changes: - - message: Fixed many entities not taking structural damage, including girders, - firelocks, and machines. + - message: Banners are no longer invincible. type: Fix - id: 7278 - time: '2024-09-04T13:37:06.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30790 + id: 7355 + time: '2024-09-11T15:29:23.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32077 +- author: themias + changes: + - message: Very small amounts of heat damage no longer play the cauterization sound + (e.g. spacing) + type: Fix + id: 7356 + time: '2024-09-11T16:05:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32080 +- author: deltanedas + changes: + - message: Coins and Supercharged CPUs can now be recycled for rarer materials. + type: Tweak + id: 7357 + time: '2024-09-11T16:24:16.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31970 - author: lzk228 changes: - - message: Reduced walk speed of some small mobs (mice, cockroaches, bees etc.) + - message: Fixed forensic pad didn't care about target identity. + type: Fix + - message: Instead of name changing, forensic pad now will have a label with target's + name. type: Tweak - id: 7279 - time: '2024-09-04T14:10:58.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31360 -- author: qwerltaz + id: 7358 + time: '2024-09-12T00:52:19.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31842 +- author: lzk228 changes: - - message: Made tesla a lot brighter. + - message: Borgs and Station AI will not receive selected in preferences traits. type: Tweak - id: 7280 - time: '2024-09-04T14:47:41.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31357 -- author: Allen + id: 7359 + time: '2024-09-12T10:36:41.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31990 +- author: MrRobDemo changes: - - message: Magboots and Science Magboots are no longer contraband. Advanced Magboots - and Blood-Red Magboots now have appropriate contraband types (Grand Theft and - Syndie Contraband respectively) - type: Fix - id: 7281 - time: '2024-09-04T15:04:50.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30960 -- author: Blackern5000 + - message: Added 5% chance to make killer tomatoes a ghost role. + type: Add + - message: Killer tomatoes can now heal from being splashed with water, blood or + RobustHarvest. + type: Add + - message: Killer tomatoes can now escape from inventory (only intelligent). + type: Tweak + id: 7360 + time: '2024-09-12T12:51:41.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31932 +- author: ScarKy0 changes: - - message: Zombie outbreaks are now SIGNIFICANTLY rarer + - message: Station AI now has a comms console ability. + type: Add + - message: Station AI abilities now have a default order. type: Tweak - id: 7282 - time: '2024-09-04T15:57:42.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30266 -- author: yuitop + id: 7361 + time: '2024-09-12T15:28:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31852 +- author: themias changes: - - message: Going into portals while pulling no more crashes the game + - message: Fixed medical PDAs sometimes toggling their lights while scanning type: Fix - id: 7283 - time: '2024-09-04T16:44:10.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31787 -- author: Ilya246 + id: 7362 + time: '2024-09-13T13:59:19.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32091 +- author: Gorox221 changes: - - message: The syndicate stealth box will no longer make a loud sound upon being - opened. + - message: Mech pilots receive a warning before they are ejected from the mech. type: Tweak - id: 7284 - time: '2024-09-04T22:42:15.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30741 -- author: chromiumboy + - message: Now, when removing the pilot of the mech, you need to not move. + type: Fix + id: 7363 + time: '2024-09-13T14:01:26.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31649 +- author: slarticodefast changes: - - message: The atmospheric alert computers are now functional! Use them to locate - active air and fire alarms on the station. + - message: Extradimensional orange, holymelon, meatwheat and world peas plant mutations + have been added. Obtain them by mutating oranges, watermelons, wheat and laughin' + peas respectively. type: Add - id: 7285 - time: '2024-09-05T01:13:17.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/25938 -- author: ScarKy0 + id: 7364 + time: '2024-09-13T14:02:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/27624 +- author: ShadowCommander + changes: + - message: Fixed PDA sometimes showing uplink and music buttons when the PDA was + not able to use them. + type: Fix + id: 7365 + time: '2024-09-13T14:19:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/28373 +- author: Dezzzix + changes: + - message: Now you can wear a hood in void cloak + type: Add + id: 7366 + time: '2024-09-13T15:02:45.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31061 +- author: PJB3005 + changes: + - message: Fixed some powered machines working when unpowered if the panel is open. + type: Fix + id: 7367 + time: '2024-09-13T23:58:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32135 +- author: qwerltaz + changes: + - message: The RCD can now place grilles and windows under shutters and cables under + doors. + type: Fix + id: 7368 + time: '2024-09-14T01:53:14.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32102 +- author: SlamBamActionman changes: - - message: A lot more electronics can now be used by the AI. + - message: Briefcases can now be used as melee weapons. type: Add - id: 7286 - time: '2024-09-05T09:31:03.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31730 -- author: Fildrance + id: 7369 + time: '2024-09-14T13:09:43.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32063 +- author: Just_Art changes: - - message: random uplink discounts for traitors + - message: Added a head gauze to customization. type: Add - id: 7287 - time: '2024-09-05T12:12:39.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/26297 -- author: ScarKy0 + id: 7370 + time: '2024-09-14T14:55:13.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30852 +- author: deltanedas changes: - - message: AI Actions now work. + - message: Fixed security's helmets not having any protection. type: Fix - id: 7288 - time: '2024-09-05T12:49:22.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31823 -- author: ScarKy0 + id: 7371 + time: '2024-09-14T15:56:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32152 +- author: eoineoineoin changes: - - message: Station AI now has updated icons on the HUD. + - message: Ghosts can now read books. type: Add - id: 7289 - time: '2024-09-05T12:52:26.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31799 -- author: drakewill-CRL + id: 7372 + time: '2024-09-14T16:28:33.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32151 +- author: Errant changes: - - message: Botanists can now learn basic chemistry with the Agrichem Is Fun! kit - in the Nutrimax vendor. - type: Add - id: 7290 - time: '2024-09-05T16:43:00.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31738 -- author: Nimfar11 + - message: Lone Ops nukies now spawn with the appropriate species-specific survival + gear. + type: Fix + id: 7373 + time: '2024-09-14T16:34:01.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31641 +- author: Plykiya changes: - - message: Added a board for the AI upload console. + - message: The vent spawn event now has a chance to spawn snakes. type: Add - id: 7291 - time: '2024-09-05T18:20:41.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31867 -- author: PJB3005 + id: 7374 + time: '2024-09-14T17:19:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32070 +- author: lzk228 changes: - - message: Changed the sprites for the N2 locker and "vox area" sign. + - message: Command intercom now reinforced the same way as the security one. type: Tweak - id: 7292 - time: '2024-09-06T05:26:27.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31845 -- author: Ekkosangen + id: 7375 + time: '2024-09-14T20:40:38.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32169 +- author: de0rix changes: - - message: Pizza crates and parties can now sometimes contain cotton pizza + - message: Animals in critical state now all have proper sprites. + type: Fix + id: 7376 + time: '2024-09-15T01:53:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32175 +- author: notafet + changes: + - message: Pressure and volume pumps now require power to operate. type: Tweak - id: 7293 - time: '2024-09-06T06:04:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31883 -- author: TheShuEd, Jaraten + id: 7377 + time: '2024-09-15T01:58:10.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/28995 +- author: deltanedas changes: - - message: New Tech anomaly added to the game! it can bind devices ports, activate - them, and when supercrit, it can even emag some devices. - type: Add - id: 7294 - time: '2024-09-06T07:24:17.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31764 -- author: EmoGarbage404 + - message: Holoparasites can no longer be summoned from inside containers. + type: Tweak + id: 7378 + time: '2024-09-15T19:04:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32068 +- author: BackeTako changes: - - message: Added mineral scanners! When held in your hand or pocket, these will - periodically show nearby ores. Unlock them through science today! + - message: Added French and Spanish speech traits. type: Add - id: 7295 - time: '2024-09-06T14:05:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31390 -- author: lzk228 + id: 7379 + time: '2024-09-15T20:03:15.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30966 +- author: Plykiya changes: - - message: You can no longer insert any item in AI upload console. - type: Fix - id: 7296 - time: '2024-09-06T19:07:58.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31900 -- author: ps3moira + - message: Meteors break through less walls now. + type: Tweak + id: 7380 + time: '2024-09-15T20:04:37.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32109 +- author: drakewill-CRL changes: - - message: Fixed pump shotgun inhand sprites + - message: Produce harvested from sentient plants are no longer sentient themselves. type: Fix - id: 7297 - time: '2024-09-06T23:26:46.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31885 -- author: yuitop + id: 7381 + time: '2024-09-16T00:04:45.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32192 +- author: DrSmugleaf changes: - - message: break pull when fall asleep + - message: Fixed examine sometimes flickering and closing until you examine something + around you. type: Fix - id: 7298 - time: '2024-09-06T23:30:24.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31893 -- author: Boaz1111 + id: 7382 + time: '2024-09-16T08:51:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32205 +- author: ArtisticRoomba changes: - - message: Energy Shotgun's narrow fire mode's projectiles now deal 13 heat dmg - each, for a total of 52. The energy shotgun additionally no longer self recharges - and has received some minor buffs. + - message: The Bruise-O-Mat alcohol vendor has been added to the nukie outpost, + for all your pre-op drinking needs. Seems to have developed a witty personality, + too... + type: Add + id: 7383 + time: '2024-09-16T08:59:00.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32107 +- author: ArtisticRoomba + changes: + - message: The binary translator key in the syndie uplink is now correctly marked + as syndicate contraband. type: Tweak - id: 7299 - time: '2024-09-07T00:35:01.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31235 -- author: themias + id: 7384 + time: '2024-09-16T10:01:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32193 +- author: MissKay1994 changes: - - message: Added the justice helm to the secdrobe - type: Add - - message: Added a crafting recipe for the justice helm - type: Add - id: 7300 - time: '2024-09-07T03:04:31.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31905 -- author: Futuristic + - message: Lizards are now poisoned by hot chocolate + type: Fix + id: 7385 + time: '2024-09-16T12:45:15.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32147 +- author: Alice Liddel changes: - - message: Remove binary encryption key from RD lockers - type: Remove - id: 7301 - time: '2024-09-07T05:30:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31909 -- author: EmoGarbage404 + - message: Crayon charges increased from 15 to 25 + type: Add + id: 7386 + time: '2024-09-17T00:35:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32061 +- author: TheShuEd changes: - - message: Firesuits are now worse at keeping in heat and winter clothes make you - get warmer quicker. + - message: Anomalous infections added! People can now be infected by anomalies! + This allows you to use abnormal abilities, but can easily kill the host. To + cure them, bombard them with containment particles, because if the anomaly inside + them explodes, their bodies will be gibbed.... + type: Add + - message: Flesh anomaly resprite type: Tweak - id: 7302 - time: '2024-09-07T05:37:17.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30662 -- author: Boaz1111 + - message: anomalies now disconnect from the anomaly synchronizer if they are too + far away from it. + type: Fix + id: 7387 + time: '2024-09-17T09:49:19.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31876 +- author: TheShuEd changes: - - message: The maple wing marking for moths now have a secondary color palette. - type: Tweak - id: 7303 - time: '2024-09-07T05:48:40.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31691 -- author: lzk228 + - message: fix Tech anomaly loud sounds and superfast flickering + type: Fix + id: 7388 + time: '2024-09-17T16:05:38.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32245 +- author: drakewill-CRL changes: - - message: Bottle and syringe names are remade into labels. - type: Tweak - id: 7304 - time: '2024-09-07T05:51:36.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29956 -- author: Ian321 + - message: Fixed plant mutations carrying over to other plants and future rounds. + type: Fix + id: 7389 + time: '2024-09-17T19:45:42.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32257 +- author: Moomoobeef changes: - - message: The AgriChem kit now links to the botanical chemicals guidebook. - type: Tweak - - message: The botanical chemicals guidebook has been expanded. - type: Tweak - id: 7305 - time: '2024-09-07T06:23:01.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31896 -- author: Lank + - message: Added more names to the pool of names the AI can have. + type: Add + id: 7390 + time: '2024-09-17T22:09:55.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31951 +- author: Calecute changes: - - message: The Antimov and Overseer law boards are no longer available roundstart. - type: Remove - id: 7306 - time: '2024-09-07T08:45:51.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31908 -- author: lzk228 + - message: Corrected cake batter recipe in guidebook + type: Fix + id: 7391 + time: '2024-09-18T15:15:34.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32276 +- author: Beck Thompson changes: - - message: Books cannot longer be inserted in crates as paper labels + - message: Recycler no longer allows basic materials to be inserted into it. type: Fix - id: 7307 - time: '2024-09-07T13:22:11.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31919 -- author: qwerltaz + id: 7392 + time: '2024-09-18T21:58:59.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32144 +- author: deltanedas changes: - - message: Reduced wall closet range. It's now much easier to not close yourself - inside by accident. + - message: Epinephrine now adds Adrenaline, because it is. type: Tweak - id: 7308 - time: '2024-09-07T23:44:29.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31933 -- author: Ilya246 + id: 7393 + time: '2024-09-18T23:00:48.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32076 +- author: ShadowCommander changes: - - message: Reagents that make you flammable no longer extinguish you. + - message: Fixed clicking on chairs and beds with an entity buckled to them not + unbuckling them. type: Fix - id: 7309 - time: '2024-09-07T23:44:58.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31930 -- author: LucasTheDrgn + id: 7394 + time: '2024-09-18T23:55:26.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29998 +- author: Winkarst-cpu changes: - - message: Restored functionality to the Industrial Reagent Grinder + - message: Now fire leaves burn marks on the tiles that were affected by it. + type: Add + id: 7395 + time: '2024-09-19T00:23:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31939 +- author: ArchRBX + changes: + - message: Mass scanners and shuttle consoles now display coordinates beneath IFF + labels + type: Add + - message: IFF labels that are beyond the viewport extents maintain their heading + and don't hug corners type: Fix - id: 7310 - time: '2024-09-07T23:47:02.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31903 -- author: EmoGarbage404 + id: 7396 + time: '2024-09-19T01:25:47.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31501 +- author: coffeeware changes: - - message: Added the biogenerator! Botany can use this machine to create various - materials, chemicals, and food items out of the + - message: a powered TEG won't produce infinite power when destroyed + type: Fix + id: 7397 + time: '2024-09-19T02:15:44.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/29972 +- author: Boaz1111 + changes: + - message: Added plasma and uranium arrows. type: Add - id: 7311 - time: '2024-09-08T05:34:22.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30694 -- author: TheShuEd + id: 7398 + time: '2024-09-19T08:41:24.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31241 +- author: Ertanic changes: - - message: Returned Taco microwave recipes (people were sad) + - message: Wanted list program and its cartridge. type: Add - - message: added an alternative method of crafting some burgers, through the correct - assembly sequence of modular food. + - message: The cartridge has been added to the HOS locker. type: Add - - message: severely cut back on the number of items you can put on burgers, tacos, - or kebabs. This had poor design, and things need to be separately resprited - by adding them on modular food. - type: Tweak - id: 7312 - time: '2024-09-08T06:22:27.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31012 -- author: metalgearsloth + - message: Added target to thief on wanted list cartridge. + type: Add + id: 7399 + time: '2024-09-19T10:22:02.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31223 +- author: Errant changes: - - message: Fix the FTL bubbles sometimes persisting. - type: Fix - - message: Fix AI eye being able to FTL. - type: Fix - - message: Fix the AI eye being able to be FTL smashed. - type: Fix - id: 7313 - time: '2024-09-08T08:12:24.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31952 -- author: PopGamer46 + - message: Crew monitor list can now be filtered by name and job. + type: Add + id: 7400 + time: '2024-09-19T10:23:45.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31659 +- author: deltanedas changes: - - message: Fixed being able to craft the justice helmet with a justice helmet - type: Fix - id: 7314 - time: '2024-09-08T10:21:55.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31957 -- author: Killerqu00 + - message: Removed the flare blueprint from salvage, it's now unlocked roundstart + in autolathes. + type: Remove + id: 7401 + time: '2024-09-19T13:45:04.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32303 +- author: deltanedas changes: - - message: Seclite is now restricted to security. - type: Tweak - - message: Handcuffs are now restricted to security and command. - type: Tweak - - message: Trench whistle is now minor contraband. + - message: Increased the thieving beacon's range to 2 tiles. type: Tweak - id: 7315 - time: '2024-09-08T12:06:01.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31956 -- author: Psychpsyo + id: 7402 + time: '2024-09-19T13:55:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31340 +- author: Winkarst-cpu changes: - - message: The random sentience event should now actually happen again. + - message: The first editable line in the dialog window now grabs the keyboard focus + once it's open. type: Fix - id: 7316 - time: '2024-09-08T12:10:50.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31953 -- author: Beck Thompson + id: 7403 + time: '2024-09-19T14:01:54.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31294 +- author: Plykiya changes: - - message: Gold and silver rings now give a small amount of materials when scrapped. + - message: You can now transfer someone from a rollerbed to a bed directly. type: Tweak - id: 7317 - time: '2024-09-08T16:10:05.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31847 -- author: K-Dynamic + id: 7404 + time: '2024-09-19T14:08:33.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32089 +- author: SaphireLattice changes: - - message: added missing missing resistance values for directional plasma and uranium - windows + - message: Fland now has public glass airlocks sectioning the hallway. type: Fix - id: 7318 - time: '2024-09-08T18:08:06.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31975 -- author: qwerltaz + id: 7405 + time: '2024-09-19T19:17:19.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32264 +- author: Plykiya changes: - - message: Power cables on the ground are now offset and do not obscure each other - or pipes beneath. + - message: Cockroaches and mothroaches can no longer damage things with their bites. type: Tweak - id: 7319 - time: '2024-09-09T10:00:18.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32000 -- author: ArtisticRoomba + id: 7406 + time: '2024-09-19T22:15:45.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32221 +- author: PopGamer46 changes: - - message: Budget insulated gloves now leave behind yellow frayed insulative fibers - instead of yellow insulative fibers. Detectives, rejoice! + - message: The rat king's rats now follow you instead of idling when there is no + one to attack during the CheeseEm order type: Tweak - id: 7320 - time: '2024-09-09T10:30:25.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31886 -- author: slarticodefast + id: 7407 + time: '2024-09-19T23:27:23.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32181 +- author: JIPDawg changes: - - message: Revenants or other mobs without hands can no longer spill jugs. + - message: Small Hydraulic clamp now correctly consumes 2% battery instead of recharging + the battery by 2% type: Fix - id: 7321 - time: '2024-09-09T11:02:15.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31438 -- author: PJB3005 + id: 7408 + time: '2024-09-20T04:09:01.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32320 +- author: clinux changes: - - message: The emergency shuttle will now wait at the station longer if it couldn't - dock at evac. - type: Tweak - id: 7322 - time: '2024-09-09T18:10:28.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31496 -- author: Boaz1111 + - message: Added the psychologist's stamp. Prescribe treatments for your less mentally + sane crew! + type: Add + id: 7409 + time: '2024-09-20T14:42:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31881 +- author: saga3152 changes: - - message: Pacifists can now use grapple guns. - type: Tweak - id: 7323 - time: '2024-09-09T19:15:32.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32014 -- author: lzk228 + - message: You can now make vodka and soda water. + type: Add + id: 7410 + time: '2024-09-20T22:27:41.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32252 +- author: goet changes: - - message: All bots are available for disguise with the Chameleon Ppotlight - type: Tweak - id: 7324 - time: '2024-09-09T19:18:01.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32006 -- author: DieselMohawk + - message: Hides character sprite in health analyzer window if the scan becomes + inactive. + type: Fix + id: 7411 + time: '2024-09-21T05:54:48.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31879 +- author: TGRCDev + changes: + - message: Station maps now have a directory for finding specific departments and + areas. + type: Add + id: 7412 + time: '2024-09-21T07:33:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31156 +- author: TheShuEd changes: - - message: Added Security Trooper Uniform + - message: Cores from floral anomalies are now seeds for hydroponics! type: Add - id: 7325 - time: '2024-09-09T19:19:16.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31997 -- author: qwerltaz + id: 7413 + time: '2024-09-21T19:54:56.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31987 +- author: Plykiya changes: - - message: Dragon ghost role now spawns outside the station. - type: Tweak - - message: Dragon ghost role now spawns where advertised! + - message: The rat king is now capable of butchering things, like animals. + type: Add + id: 7414 + time: '2024-09-21T23:21:52.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32232 +- author: AsnDen + changes: + - message: Now AI is able to use news manager console that is far away from its + core. type: Fix - id: 7326 - time: '2024-09-09T19:22:41.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31890 -- author: yuitop + id: 7415 + time: '2024-09-22T08:20:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32334 +- author: metalgearsloth changes: - - message: Fixed some cases when surveillance camera's red light not turning off - when needed + - message: Fix unbuckling mispredicting. type: Fix - id: 7327 - time: '2024-09-09T19:23:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31831 -- author: Blackern5000 + - message: Aligned buckle range with interaction range. + type: Tweak + id: 7416 + time: '2024-09-22T08:21:41.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32370 +- author: ravage123321 changes: - - message: Normal and reinforced windows have been made directly upgradable using - rods, plasma, uranium, or plasteel. + - message: You can make a holy helmet from holymelons! type: Add - - message: Reinforced plasma and uranium windows have been made tougher. + id: 7417 + time: '2024-09-22T10:33:08.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32272 +- author: saga3152 + changes: + - message: Citrus plants can now be mutated into each other. + type: Add + id: 7418 + time: '2024-09-22T15:15:12.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32306 +- author: PotentiallyTom + changes: + - message: Vent pressure lockout can be temporarily disabled with a screwdriver type: Tweak - - message: Windows have been made to correctly display their damage visuals. - type: Fix - - message: Reinforced plasma windows have been given the correct amount of hp and - no longer have 12x the amount they should. + id: 7419 + time: '2024-09-22T19:59:56.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31050 +- author: metalgearsloth + changes: + - message: You can examine entities inside of your own container again. type: Fix - id: 7328 - time: '2024-09-09T19:26:10.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31978 + id: 7420 + time: '2024-09-23T04:55:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32267 - author: Cojoke-dot changes: - - message: Nuclear bombs now require the Nuclear Authentification Disk to toggle - anchor. + - message: L6 Saw now fits in the suit slot type: Tweak - id: 7329 - time: '2024-09-09T19:30:26.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29565 -- author: Hreno - changes: - - message: Display agents' jobs in the Round End Summary window. - type: Add - id: 7330 - time: '2024-09-09T19:31:53.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31652 -- author: deltanedas - changes: - - message: Adjusted the costs and production times of all electronics so they're - more consistent with eachother. + - message: L6 Saw is now a 5x4 item type: Tweak - id: 7331 - time: '2024-09-09T19:34:18.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31524 -- author: Winkarst-cpu + id: 7421 + time: '2024-09-23T06:48:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30525 +- author: ElectroJr changes: - - message: Now fire axe (the flaming one), and an advanced circular saw are Syndicate - contraband. - type: Fix - - message: Now encryption keys are restricted according to their department. - type: Fix - - message: Now ERT, Deathsquad and Central Command Official items are restricted - to the Central Command. - type: Fix - - message: Now acolyte armor, a thieving beacon and the thief's undetermined toolbox - are minor contraband. - type: Fix - - message: Now bladed flatcaps are not a contraband (stealth item). - type: Fix - - message: Now mercenary clothes, magazines, speedloaders and cartridges are contraband. - type: Fix - - message: Now cleanades are restricted to the Service. - type: Fix - - message: Now metal foam grenades are restricted to the Engineering. - type: Fix - - message: Now flash, smoke, and tear gas grenades are restricted to the Security. - type: Fix - - message: Now combat gloves are restricted to Security and Cargo. + - message: Entities within the same container as the player only appear in the context + menu when clicking near the container. type: Fix - - message: The Central Command restricted contraband group and department were added. - type: Add - id: 7332 - time: '2024-09-09T19:36:25.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31606 -- author: themias + id: 7422 + time: '2024-09-23T07:28:42.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32395 +- author: Errant changes: - - message: Unpublished news article progress is automatically saved + - message: Computers now have a maintenance panel with a Power and AI wire (if AI-connected). type: Tweak - id: 7333 - time: '2024-09-09T19:38:49.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31491 -- author: metalgearsloth + - message: Computer deconstruction now begins with the crowbar, not the screwdriver. + type: Tweak + id: 7423 + time: '2024-09-23T10:51:48.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32273 +- author: lzk228 changes: - - message: Fix spawn prefs. + - message: Guidebook books now do damage like default writeable books. type: Fix - id: 7334 - time: '2024-09-09T19:39:16.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31892 + id: 7424 + time: '2024-09-23T11:12:23.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32403 +- author: Jophire + changes: + - message: VIM mech now can open maintenance doors! + type: Add + id: 7425 + time: '2024-09-23T13:08:11.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32302 - author: lzk228 changes: - - message: The captain now have special late join message. + - message: Cadet PDA now has wanted list cartridge preinstalled. + type: Fix + id: 7426 + time: '2024-09-23T21:49:34.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32399 +- author: Vasilis + changes: + - message: Removed the age requirement for command jobs. type: Tweak - id: 7335 - time: '2024-09-09T19:57:37.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31991 -- author: Thinbug0 + id: 7427 + time: '2024-09-24T00:31:08.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32340 +- author: whatston3 changes: - - message: Teal gloves can now be found at the ClothesMate! + - message: Area insert items can pick up single item sets when clicking on the floor. + type: Fix + id: 7428 + time: '2024-09-24T14:23:48.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32153 +- author: LordEclipse + changes: + - message: The Antimov Law Board is now available in both the Traitor and Nuclear + Operative Uplinks, 14 and 24 TC respectively. type: Add - id: 7336 - time: '2024-09-09T21:47:53.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31865 -- author: chillyconmor + id: 7429 + time: '2024-09-24T15:06:59.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31916 +- author: lzk228 changes: - - message: Space Ninjas now have a new intro song. + - message: Freezer electronics added to autolathe, with which you can craft locker + freezer or crate freezer. type: Add - id: 7337 - time: '2024-09-09T22:12:25.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31055 -- author: DieselMohawk + id: 7430 + time: '2024-09-24T15:19:40.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32277 +- author: MilonPL changes: - - message: Made Trooper Uniform accessible for Security Officers in loadouts + - message: Paper will no longer stay on fire indefinitely. type: Fix - id: 7338 - time: '2024-09-09T23:59:31.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32019 -- author: IProduceWidgets + id: 7431 + time: '2024-09-24T15:48:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32412 +- author: ArchRBX changes: - - message: Visitors now can have the correct Id cards and PDA! - type: Fix - - message: ghost roles should now attempt to tell you what your antag status is - in a popup when you join the raffle. - type: Tweak - - message: ERT chaplains should now be able to use bibles. - type: Fix - - message: Many new unknown shuttle events to make them more unique. + - message: The AstroNav PDA cartridge has now been added, which turns your PDA into + a handheld GPS type: Add - - message: Syndicate escape pods will once again appear. + - message: The AstroNav cartridge has been added to the QM locker, and comes preinstalled + on salvage PDA's + type: Add + id: 7432 + time: '2024-09-24T17:02:52.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32194 +- author: PJB3005 + changes: + - message: Fixed some people's preferences taking ages to load, hopefully. type: Fix - - message: Unknown Shuttle events will be much rarer. - type: Tweak - id: 7339 - time: '2024-09-10T06:40:00.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28098 -- author: ScarKy0 + id: 7433 + time: '2024-09-24T20:43:02.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32434 +- author: Moomoobeef changes: - - message: Renamed Circuit Boards to be Law Boards instead. + - message: Most papers are no longer considered trash. type: Tweak - id: 7340 - time: '2024-09-10T10:27:42.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31914 -- author: ScarKy0 + id: 7434 + time: '2024-09-24T21:58:46.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32343 +- author: goet changes: - - message: Arrival Screens now show time again. + - message: Vending machines can be hacked again. type: Fix - id: 7341 - time: '2024-09-10T19:08:22.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32037 + id: 7435 + time: '2024-09-25T05:21:24.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32431 - author: themias changes: - - message: The Justice Helm can now only be crafted using a security helmet. + - message: Agent ID card can now only copy access within interaction range. type: Fix - id: 7342 - time: '2024-09-10T19:08:37.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32042 -- author: TurboTrackerss14 + id: 7436 + time: '2024-09-25T15:41:34.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32445 +- author: Myra changes: - - message: Gas tank explosions ("max caps") have a reduced range on WizDen servers - until they can be reworked into a proper game mechanic. + - message: Silicon with no laws will not have binary channel access. type: Remove - id: 7343 - time: '2024-09-10T22:05:12.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31437 -- author: Boaz1111 + id: 7437 + time: '2024-09-25T16:49:43.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32385 +- author: august-sun changes: - - message: Researching Advanced Atmospherics now requires Atmospherics to be researched. + - message: Rolling pins are now craftable. type: Tweak - id: 7344 - time: '2024-09-10T22:19:17.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32048 -- author: DiposableCrewmember42 + id: 7438 + time: '2024-09-25T17:27:30.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32285 +- author: BramvanZijp changes: - - message: Fixed Revenant ability cost checks. Revenants can no longer spam abilities - without Essence. + - message: Fixed an issue that caused Doctors Delight to metabolize twice the normal + speed, which also halved its effectiveness. type: Fix - id: 7345 - time: '2024-09-10T23:07:07.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32050 -- author: ArtisticRoomba + id: 7439 + time: '2024-09-25T17:39:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32297 +- author: Ilya246 changes: - - message: The salvage magnet circuitboard has been added to QM's locker. It can - also be made at the circuit imprinter roundstart. NOW GET BACK TO WORK!!! + - message: Atmos gas sell prices significantly lowered. type: Tweak - id: 7346 - time: '2024-09-10T23:25:22.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31996 -- author: Lank + - message: Frezon now consumes significantly more tritium to produce. + type: Tweak + id: 7440 + time: '2024-09-26T12:46:17.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32407 +- author: SlamBamActionman changes: - - message: Several antagonist shuttle events have been removed. - type: Remove - id: 7347 - time: '2024-09-10T23:26:59.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32052 -- author: Vermidia + - message: Trusted players can now initiate votekicks for serious rulebreaks, when + admins are unavailable. + type: Add + id: 7441 + time: '2024-09-26T16:32:13.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32005 +- author: Beck Thompson changes: - - message: Borgs and other creatures that shouldn't get hurt stepping on things - no longer get hurt stepping on things. + - message: Voice masks allow you to pick your speaking style again. type: Fix - - message: Honkbots slip again + id: 7442 + time: '2024-09-26T16:55:59.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30798 +- author: august-sun + changes: + - message: Fixed collision properties of gas and volumetric pumps. type: Fix - id: 7348 - time: '2024-09-11T02:12:08.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31011 -- author: EmoGarbage404 + id: 7443 + time: '2024-09-27T05:49:21.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32471 +- author: metalgearsloth changes: - - message: The mining asteroid now generates small structures full of treasure and - equipment. Keep an eye open for them, nestled within the rock. - type: Add - id: 7349 - time: '2024-09-11T03:33:42.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31638 -- author: SlamBamActionman + - message: Fix airlock autoclose mispredicting. + type: Fix + id: 7444 + time: '2024-09-27T06:10:27.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32477 +- author: metalgearsloth changes: - - message: The Station AI job is no longer affected by the Bureaucratic Event event. + - message: Fix storage area pickup sound playing more than once. type: Fix - id: 7350 - time: '2024-09-11T11:24:24.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32021 -- author: K-Dynamic + id: 7445 + time: '2024-09-27T07:09:18.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32397 +- author: metalgearsloth changes: - - message: Reduced canister prices from 1000 to 200 spesos - type: Tweak - id: 7351 - time: '2024-09-11T12:53:51.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31965 -- author: EmoGarbage404 + - message: Fix verbs shuffling on mobs. + type: Fix + - message: Stripping is now predicted. + type: Fix + - message: Ensnare interactions are now predicted. + type: Fix + - message: Fix text saying you are freeing yourself from ensnare when freeing someone + else. + type: Fix + id: 7446 + time: '2024-09-27T07:12:10.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32478 +- author: Fildrance, ScarKy0 changes: - - message: Added the hivelord! This self-replicating alien is found on the mining - asteroid. It's core is known to have powerful healing properties. + - message: AI now can electrify doors and set them to emergency access. Setting + door to emergency access will now play sound effect for everyone around, while + electrifying door will play sound effect only for AI type: Add - id: 7352 - time: '2024-09-11T13:52:27.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31322 -- author: PeccNeck - changes: - - message: Fixed a bug where ore processors could not produce reinforced glass + - message: AI will now be notified when trying to interact with door without power + or when respective wires were messed up with type: Fix - id: 7353 - time: '2024-09-11T14:06:08.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32069 -- author: Plykiya + id: 7447 + time: '2024-09-27T07:22:17.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32012 +- author: LittleNorthStar + changes: + - message: Noir trenchcoat to detective loadout + type: Add + id: 7448 + time: '2024-09-27T10:03:55.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32380 +- author: deltanedas + changes: + - message: Removed the thief figurines objective. + type: Remove + id: 7449 + time: '2024-09-27T19:04:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32413 +- author: Beck Thompson changes: - - message: You can now use swords to make baseball bats. + - message: The appraisal tool verb is now predicted! type: Fix - id: 7354 - time: '2024-09-11T14:45:00.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32075 -- author: Plykiya + id: 7450 + time: '2024-09-28T04:40:24.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32496 +- author: Pyvik changes: - - message: Banners are no longer invincible. + - message: Added 2 new hairstyles. + type: Add + id: 7451 + time: '2024-09-28T06:07:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31010 +- author: metalgearsloth + changes: + - message: Fix a lot of jankiness around airlocks. type: Fix - id: 7355 - time: '2024-09-11T15:29:23.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32077 -- author: themias + id: 7452 + time: '2024-09-28T09:02:43.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32483 +- author: ElectroJr changes: - - message: Very small amounts of heat damage no longer play the cauterization sound - (e.g. spacing) + - message: Fixed a store currency duplication bug/exploit. type: Fix - id: 7356 - time: '2024-09-11T16:05:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32080 -- author: deltanedas + id: 7453 + time: '2024-09-29T12:13:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32524 +- author: ElectroJr changes: - - message: Coins and Supercharged CPUs can now be recycled for rarer materials. + - message: There is now a rate limit for most interactions. It should not be noticeable + most of the time, but may lead to mispredicts when spam-clicking. type: Tweak - id: 7357 - time: '2024-09-11T16:24:16.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31970 -- author: lzk228 + id: 7454 + time: '2024-09-29T12:19:00.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32527 +- author: ArtisticRoomba changes: - - message: Fixed forensic pad didn't care about target identity. - type: Fix - - message: Instead of name changing, forensic pad now will have a label with target's - name. + - message: HoS's energy shotgun is now correctly marked as grand theft contraband. type: Tweak - id: 7358 - time: '2024-09-12T00:52:19.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31842 -- author: lzk228 + id: 7455 + time: '2024-09-29T12:22:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32521 +- author: Ilya246 changes: - - message: Borgs and Station AI will not receive selected in preferences traits. + - message: Steel cost of conveyor belt assemblies halved. type: Tweak - id: 7359 - time: '2024-09-12T10:36:41.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31990 -- author: MrRobDemo + id: 7456 + time: '2024-09-29T15:18:09.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32444 +- author: CuteMoonGod changes: - - message: Added 5% chance to make killer tomatoes a ghost role. - type: Add - - message: Killer tomatoes can now heal from being splashed with water, blood or - RobustHarvest. + - message: Fixed execution system showing character name instead of their identity + type: Fix + id: 7457 + time: '2024-09-29T22:36:47.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32536 +- author: drakewill-CRL + changes: + - message: Fix error in gas exchange processing order. + type: Fix + id: 7458 + time: '2024-09-30T05:14:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32088 +- author: qwerltaz + changes: + - message: AI can now use fire alarms. type: Add - - message: Killer tomatoes can now escape from inventory (only intelligent). + id: 7459 + time: '2024-09-30T09:56:05.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32467 +- author: BramvanZijp + changes: + - message: The Engineering Cyborg's Advanced Tool Module now has jaws of life and + a power drill instead of an omnitool, with a multitool replacing the network + configurator. type: Tweak - id: 7360 - time: '2024-09-12T12:51:41.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31932 -- author: ScarKy0 + id: 7460 + time: '2024-09-30T17:38:22.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32487 +- author: pofitlo-Git changes: - - message: Station AI now has a comms console ability. + - message: Added a camera bug in the syndicate uplink that cost 4 TC and allow you + watch all cameras on station. type: Add - - message: Station AI abilities now have a default order. + id: 7461 + time: '2024-09-30T22:24:37.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30250 +- author: kosticia + changes: + - message: The maximum number of ID cards required to complete a thief's objective + has been changed from 15 to 10. type: Tweak - id: 7361 - time: '2024-09-12T15:28:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31852 -- author: themias + id: 7462 + time: '2024-09-30T22:40:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32411 +- author: Golinth changes: - - message: Fixed medical PDAs sometimes toggling their lights while scanning - type: Fix - id: 7362 - time: '2024-09-13T13:59:19.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32091 -- author: Gorox221 + - message: Firebots can now be constructed by scientists - the bots wander the station + looking for fires to put out with their built-in extinguisher. + type: Add + id: 7463 + time: '2024-10-01T03:13:16.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32482 +- author: ScarKy0 changes: - - message: Mech pilots receive a warning before they are ejected from the mech. + - message: Binary encryption key now uses an AI icon type: Tweak - - message: Now, when removing the pilot of the mech, you need to not move. + id: 7464 + time: '2024-10-01T04:03:37.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32327 +- author: BramvanZijp + changes: + - message: Fixed borgs being able to be briefly disabled by others. type: Fix - id: 7363 - time: '2024-09-13T14:01:26.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31649 -- author: slarticodefast + id: 7465 + time: '2024-10-01T15:13:59.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32485 +- author: BackeTako changes: - - message: Extradimensional orange, holymelon, meatwheat and world peas plant mutations - have been added. Obtain them by mutating oranges, watermelons, wheat and laughin' - peas respectively. + - message: Gay Pin type: Add - id: 7364 - time: '2024-09-13T14:02:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/27624 -- author: ShadowCommander + id: 7466 + time: '2024-10-01T21:07:48.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32584 +- author: BackeTako changes: - - message: Fixed PDA sometimes showing uplink and music buttons when the PDA was - not able to use them. + - message: Reinforced walls sprite see throu top type: Fix - id: 7365 - time: '2024-09-13T14:19:32.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28373 -- author: Dezzzix + id: 7467 + time: '2024-10-01T21:44:47.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32578 +- author: Zylo changes: - - message: Now you can wear a hood in void cloak - type: Add - id: 7366 - time: '2024-09-13T15:02:45.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31061 -- author: PJB3005 + - message: Seismic charges being uncraftable + type: Fix + id: 7468 + time: '2024-10-02T02:56:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32459 +- author: slarticodefast changes: - - message: Fixed some powered machines working when unpowered if the panel is open. + - message: Fixed the chameleon settings menu not showing up for the voice mask. type: Fix - id: 7367 - time: '2024-09-13T23:58:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32135 -- author: qwerltaz + id: 7469 + time: '2024-10-02T03:22:09.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32546 +- author: metalgearsloth changes: - - message: The RCD can now place grilles and windows under shutters and cables under - doors. + - message: Fix physics sensors (e.g. proximity triggers) being able to block doors. type: Fix - id: 7368 - time: '2024-09-14T01:53:14.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32102 -- author: SlamBamActionman + id: 7470 + time: '2024-10-02T05:00:48.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32591 +- author: Plykiya changes: - - message: Briefcases can now be used as melee weapons. + - message: You can now quick-swap uneven stacks of items into your inventory without + it getting "stuck" in your hands. + type: Fix + id: 7471 + time: '2024-10-02T05:27:01.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32560 +- author: BackeTako + changes: + - message: New hydroponics doors type: Add - id: 7369 - time: '2024-09-14T13:09:43.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32063 -- author: Just_Art + id: 7472 + time: '2024-10-02T05:33:35.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32575 +- author: BackeTako changes: - - message: Added a head gauze to customization. + - message: Red circuit tile type: Add - id: 7370 - time: '2024-09-14T14:55:13.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30852 + id: 7473 + time: '2024-10-02T05:35:48.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32557 +- author: ArchRBX + changes: + - message: The MedTek PDA cartridge has now been added, providing health analyzer + functionality to PDA's + type: Add + - message: The MedTek cartridge has been added to the CMO locker, and comes preinstalled + on medical PDA's, replacing the built-in analyzer functionality on these PDA's + type: Add + id: 7474 + time: '2024-10-02T06:17:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32450 +- author: Toly65 + changes: + - message: fixed slippery and bioluminescent effects persisting on planters after + the plant has been harvested + type: Fix + - message: removed the slippery and bioluminescent visuals from planters temporararily + type: Remove + id: 7475 + time: '2024-10-02T09:37:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32576 +- author: lzk228 + changes: + - message: Star sticker can be used in chameleon menu. + type: Fix + id: 7476 + time: '2024-10-02T10:53:19.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32594 - author: deltanedas changes: - - message: Fixed security's helmets not having any protection. + - message: Fixed the Instigator shuttle event never happening. type: Fix - id: 7371 - time: '2024-09-14T15:56:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32152 + id: 7477 + time: '2024-10-02T11:44:12.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32597 +- author: FluffMe + changes: + - message: Fixed accidental erase of paper contents by spamming save action. + type: Fix + id: 7478 + time: '2024-10-02T12:00:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32598 +- author: PJB3005 + changes: + - message: Removed bioluminescence plant mutations due to it breaking the rendering + engine. + type: Remove + id: 7479 + time: '2024-10-02T13:52:14.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32561 +- author: PJB3005 + changes: + - message: Fixed borg "hands" showing up in their stripping menu. + type: Fix + id: 7480 + time: '2024-10-03T00:11:56.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32606 +- author: ArtisticRoomba + changes: + - message: X-ray cannons and stinger grenades are now security restricted. HoS's + armored trench coat and its variants are security and command restricted. + type: Fix + id: 7481 + time: '2024-10-03T10:01:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32614 +- author: Myra + changes: + - message: Medibots and Janibots can no longer become sentient via the sentience + event. + type: Remove + id: 7482 + time: '2024-10-03T10:32:11.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32383 - author: eoineoineoin changes: - - message: Ghosts can now read books. - type: Add - id: 7372 - time: '2024-09-14T16:28:33.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32151 -- author: Errant + - message: Action bar can be reconfigured again + type: Fix + id: 7483 + time: '2024-10-03T14:01:01.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32552 +- author: Southbridge changes: - - message: Lone Ops nukies now spawn with the appropriate species-specific survival - gear. + - message: Box station's recycler has been properly connected. type: Fix - id: 7373 - time: '2024-09-14T16:34:01.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31641 + - message: Box station's singlo substation has been rewired to the station-wide + HV network. + type: Tweak + - message: Box station now has AI law boards in the upload room. + type: Add + id: 7484 + time: '2024-10-04T01:12:59.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32608 - author: Plykiya changes: - - message: The vent spawn event now has a chance to spawn snakes. + - message: You can no longer FTL the station. + type: Fix + id: 7485 + time: '2024-10-04T02:55:36.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32558 +- author: SoulFN + changes: + - message: Dragon can now pull things using tail. type: Add - id: 7374 - time: '2024-09-14T17:19:32.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32070 -- author: lzk228 + id: 7486 + time: '2024-10-04T05:39:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32568 +- author: SaphireLattice changes: - - message: Command intercom now reinforced the same way as the security one. + - message: Explosives throw a container they are in type: Tweak - id: 7375 - time: '2024-09-14T20:40:38.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32169 -- author: de0rix + id: 7487 + time: '2024-10-04T08:43:45.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32428 +- author: SaphireLattice changes: - - message: Animals in critical state now all have proper sprites. + - message: Syndicate C4 now starts a countdown on signal, rather than exploding + instantly. + type: Tweak + id: 7488 + time: '2024-10-04T09:34:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32423 +- author: slarticodefast + changes: + - message: Light bulbs now fit into the trash bag again. type: Fix - id: 7376 - time: '2024-09-15T01:53:58.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32175 -- author: notafet + id: 7489 + time: '2024-10-05T18:44:47.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32452 +- author: Just_Art changes: - - message: Pressure and volume pumps now require power to operate. - type: Tweak - id: 7377 - time: '2024-09-15T01:58:10.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/28995 -- author: deltanedas + - message: Added a flower wreath and hairflower to loadout! + type: Add + id: 7490 + time: '2024-10-06T12:48:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32097 +- author: Golinth changes: - - message: Holoparasites can no longer be summoned from inside containers. + - message: Removed clown waddling until implemented properly + type: Remove + id: 7491 + time: '2024-10-06T13:33:02.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32652 +- author: SaphireLattice + changes: + - message: Minibomb is now explosion resistant and will start counting down if damaged + by a C4 type: Tweak - id: 7378 - time: '2024-09-15T19:04:32.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32068 -- author: BackeTako + id: 7492 + time: '2024-10-07T22:42:43.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32429 +- author: shampunj changes: - - message: Added French and Spanish speech traits. - type: Add - id: 7379 - time: '2024-09-15T20:03:15.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/30966 + - message: When curtains are destroyed, only 1 cloth drops out + type: Tweak + id: 7493 + time: '2024-10-08T09:51:23.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32685 - author: Plykiya changes: - - message: Meteors break through less walls now. + - message: Librarians now start with a D20. type: Tweak - id: 7380 - time: '2024-09-15T20:04:37.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32109 -- author: drakewill-CRL - changes: - - message: Produce harvested from sentient plants are no longer sentient themselves. - type: Fix - id: 7381 - time: '2024-09-16T00:04:45.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32192 -- author: DrSmugleaf + id: 7494 + time: '2024-10-08T09:53:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32648 +- author: K-Dynamic changes: - - message: Fixed examine sometimes flickering and closing until you examine something - around you. - type: Fix - id: 7382 - time: '2024-09-16T08:51:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32205 -- author: ArtisticRoomba + - message: CHIMP and APE particles should be almost as fast as before + type: Tweak + id: 7495 + time: '2024-10-08T18:29:37.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32690 +- author: ss14nekow changes: - - message: The Bruise-O-Mat alcohol vendor has been added to the nukie outpost, - for all your pre-op drinking needs. Seems to have developed a witty personality, - too... + - message: Added pumpkin pie! Can be made in the microwave with 1 pie tin, 1 pie + dough, and 1 pumpkin. type: Add - id: 7383 - time: '2024-09-16T08:59:00.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32107 -- author: ArtisticRoomba + id: 7496 + time: '2024-10-08T23:29:41.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32623 +- author: Beck Thompson changes: - - message: The binary translator key in the syndie uplink is now correctly marked - as syndicate contraband. + - message: The radio jammers price has been decreased from 4 -> 3 TC. type: Tweak - id: 7384 - time: '2024-09-16T10:01:49.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32193 -- author: MissKay1994 - changes: - - message: Lizards are now poisoned by hot chocolate - type: Fix - id: 7385 - time: '2024-09-16T12:45:15.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32147 -- author: Alice Liddel + id: 7497 + time: '2024-10-09T12:44:38.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32472 +- author: beck-thompson, Moomoobeef changes: - - message: Crayon charges increased from 15 to 25 + - message: Plushies now can have small items stuffed inside of them! To open, click + on the plush with a sharp item. You can then insert a small item into the plush. + To close, just click on it again with any sharp item! type: Add - id: 7386 - time: '2024-09-17T00:35:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32061 -- author: TheShuEd - changes: - - message: Anomalous infections added! People can now be infected by anomalies! - This allows you to use abnormal abilities, but can easily kill the host. To - cure them, bombard them with containment particles, because if the anomaly inside - them explodes, their bodies will be gibbed.... + - message: When pAIs are inserted into plushies, their names will be updated to + the plushies name. E.g when inside a lizard plushie the pAI's name will appear + as "lizard plushie" when speaking. type: Add - - message: Flesh anomaly resprite + id: 7498 + time: '2024-10-09T18:01:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30805 +- author: Errant + changes: + - message: Nukies now have role briefing on their character screen. type: Tweak - - message: anomalies now disconnect from the anomaly synchronizer if they are too - far away from it. + - message: Animals who are made Thief no longer get told in their briefing about + the thief gear that they don't actually have and couldn't possibly use. type: Fix - id: 7387 - time: '2024-09-17T09:49:19.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31876 -- author: TheShuEd + id: 7499 + time: '2024-10-10T08:48:57.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31318 +- author: nikthechampiongr changes: - - message: fix Tech anomaly loud sounds and superfast flickering + - message: It is no longer impossible to do bounties other than the first one if + the server has been up for a long period of time. type: Fix - id: 7388 - time: '2024-09-17T16:05:38.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32245 -- author: drakewill-CRL + id: 7500 + time: '2024-10-10T14:35:36.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32700 +- author: pheenty changes: - - message: Fixed plant mutations carrying over to other plants and future rounds. + - message: Quartermaster now has external access + type: Add + id: 7501 + time: '2024-10-13T04:55:12.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32631 +- author: Golinth + changes: + - message: Firebots can no longer become sentient via the sentience event. + type: Remove + id: 7502 + time: '2024-10-13T04:55:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32629 +- author: BramvanZijp + changes: + - message: The playtime requirements for station AI have been increased. + type: Tweak + - message: The playtime requirements to play borg have been slightly decreased. + type: Tweak + id: 7503 + time: '2024-10-13T06:38:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32007 +- author: SkaldetSkaeg + changes: + - message: Sleepers can no longer use emotions type: Fix - id: 7389 - time: '2024-09-17T19:45:42.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32257 -- author: Moomoobeef + id: 7504 + time: '2024-10-13T08:22:05.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32779 +- author: SlamBamActionman changes: - - message: Added more names to the pool of names the AI can have. + - message: Added a new Safety MothTM poster about being SSD! type: Add - id: 7390 - time: '2024-09-17T22:09:55.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31951 -- author: Calecute + id: 7505 + time: '2024-10-13T11:25:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32736 +- author: K-Dynamic changes: - - message: Corrected cake batter recipe in guidebook + - message: Added rainbow lizard plushies, which can be found in arcade machines. + type: Add + id: 7506 + time: '2024-10-13T22:51:47.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32564 +- author: PJB3005 + changes: + - message: Fixes the client sometimes not being aware of active role bans. type: Fix - id: 7391 - time: '2024-09-18T15:15:34.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32276 -- author: Beck Thompson + id: 7507 + time: '2024-10-14T03:30:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32725 +- author: OnyxTheBrave changes: - - message: Recycler no longer allows basic materials to be inserted into it. + - message: Fixed the Industrial Reagent Grinder's visuals type: Fix - id: 7392 - time: '2024-09-18T21:58:59.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32144 -- author: deltanedas + id: 7508 + time: '2024-10-14T03:53:56.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32758 +- author: irismessage changes: - - message: Epinephrine now adds Adrenaline, because it is. + - message: Made role requirements display in a more understandable format. type: Tweak - id: 7393 - time: '2024-09-18T23:00:48.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32076 -- author: ShadowCommander + id: 7509 + time: '2024-10-14T03:54:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32806 +- author: Gamer3107 changes: - - message: Fixed clicking on chairs and beds with an entity buckled to them not - unbuckling them. + - message: Portal artifacts no longer target the AI or people within containers type: Fix - id: 7394 - time: '2024-09-18T23:55:26.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29998 -- author: Winkarst-cpu - changes: - - message: Now fire leaves burn marks on the tiles that were affected by it. - type: Add - id: 7395 - time: '2024-09-19T00:23:50.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31939 -- author: ArchRBX + id: 7510 + time: '2024-10-14T05:55:46.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32677 +- author: ScarKy0 changes: - - message: Mass scanners and shuttle consoles now display coordinates beneath IFF - labels + - message: Cyborg modules now have icons instead of using the module sprite. type: Add - - message: IFF labels that are beyond the viewport extents maintain their heading - and don't hug corners - type: Fix - id: 7396 - time: '2024-09-19T01:25:47.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31501 -- author: coffeeware + id: 7511 + time: '2024-10-14T07:05:40.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32505 +- author: metalgearsloth changes: - - message: a powered TEG won't produce infinite power when destroyed + - message: Fix tech anomalies firing every tick. type: Fix - id: 7397 - time: '2024-09-19T02:15:44.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/29972 -- author: Boaz1111 + id: 7512 + time: '2024-10-14T07:06:18.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32805 +- author: ada-please changes: - - message: Added plasma and uranium arrows. + - message: Added more prizes to the Space Villain arcade machine type: Add - id: 7398 - time: '2024-09-19T08:41:24.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31241 -- author: Ertanic + id: 7513 + time: '2024-10-14T21:59:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32309 +- author: K-Dynamic changes: - - message: Wanted list program and its cartridge. - type: Add - - message: The cartridge has been added to the HOS locker. - type: Add - - message: Added target to thief on wanted list cartridge. + - message: Added nitrogen tanks to engineering tank dispensers. type: Add - id: 7399 - time: '2024-09-19T10:22:02.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31223 -- author: Errant + id: 7514 + time: '2024-10-15T08:28:28.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32565 +- author: slarticodefast changes: - - message: Crew monitor list can now be filtered by name and job. + - message: Fixed inconsistent solution transfer amounts from spray bottles to plant + holders. + type: Fix + id: 7515 + time: '2024-10-16T03:57:30.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32813 +- author: Minemoder, ArtisticRoomba, Sarahon + changes: + - message: Reptiles and Kobolds can now thump their tail. type: Add - id: 7400 - time: '2024-09-19T10:23:45.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31659 + id: 7516 + time: '2024-10-16T10:04:55.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32064 - author: deltanedas changes: - - message: Removed the flare blueprint from salvage, it's now unlocked roundstart - in autolathes. - type: Remove - id: 7401 - time: '2024-09-19T13:45:04.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32303 + - message: Fixed grappling hooks sometimes getting bricked. + type: Fix + id: 7517 + time: '2024-10-16T22:32:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32738 +- author: SlamBamActionman + changes: + - message: The Microphone instrument has a new vocal style "Kweh". + type: Add + id: 7518 + time: '2024-10-17T01:57:43.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32848 - author: deltanedas changes: - - message: Increased the thieving beacon's range to 2 tiles. + - message: You can now eject biomass from a biogenerator without having to deconstruct + it. type: Tweak - id: 7402 - time: '2024-09-19T13:55:31.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31340 -- author: Winkarst-cpu + id: 7519 + time: '2024-10-17T03:12:30.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32854 +- author: lzk228 changes: - - message: The first editable line in the dialog window now grabs the keyboard focus - once it's open. + - message: Fixed holosign projectors power cell popups. type: Fix - id: 7403 - time: '2024-09-19T14:01:54.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31294 -- author: Plykiya + id: 7520 + time: '2024-10-17T03:21:04.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32808 +- author: Kickguy223 changes: - - message: You can now transfer someone from a rollerbed to a bed directly. + - message: As an AI, Having a Lawboard inserted into your AI Upload Computer will + now Play a sound cue + type: Add + - message: As an AI, Having the Antimov Lawboard uploaded will play an appropriate + sound cue + type: Add + id: 7521 + time: '2024-10-17T03:41:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32625 +- author: Callmore + changes: + - message: Prefered item quick store locations can be created again. + type: Fix + id: 7522 + time: '2024-10-17T04:00:52.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32480 +- author: Myra + changes: + - message: The game's title bar window will display the name of the server you have + joined (unless disabled). + type: Add + id: 7523 + time: '2024-10-17T11:06:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32547 +- author: Aeshus + changes: + - message: Emote shorthands (like "lol" or ":)") sent in chat are detected throughout + the whole message. Note that only the last shorthand in the message will be + emoted. type: Tweak - id: 7404 - time: '2024-09-19T14:08:33.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32089 -- author: SaphireLattice + id: 7524 + time: '2024-10-17T14:01:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/28645 +- author: slarticodefast changes: - - message: Fland now has public glass airlocks sectioning the hallway. + - message: Fixed the playtime stats window not showing entries correctly. type: Fix - id: 7405 - time: '2024-09-19T19:17:19.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32264 -- author: Plykiya + id: 7525 + time: '2024-10-17T21:32:59.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32856 +- author: Thatonestomf changes: - - message: Cockroaches and mothroaches can no longer damage things with their bites. + - message: Smile no longer has a ghost role raffle attached to her + type: Fix + id: 7526 + time: '2024-10-18T02:42:50.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32837 +- author: Catofquestionableethics + changes: + - message: Spacemans cake now contains Polypyrylium Oligomers instead of Omnizine. type: Tweak - id: 7406 - time: '2024-09-19T22:15:45.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32221 -- author: PopGamer46 + - message: Slime, Brain and Christmas cakes can now be eaten by Lizards. + type: Fix + id: 7527 + time: '2024-10-18T03:08:32.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32830 +- author: Plykiya changes: - - message: The rat king's rats now follow you instead of idling when there is no - one to attack during the CheeseEm order + - message: You can no longer print flares or shotgun flares. + type: Remove + id: 7528 + time: '2024-10-18T03:28:30.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32563 +- author: pheenty + changes: + - message: QM is now considered an important job. type: Tweak - id: 7407 - time: '2024-09-19T23:27:23.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32181 + - message: QM is now correctly considered head for traitor's kill head objective, + while warden now isn't. + type: Fix + id: 7529 + time: '2024-10-18T09:43:05.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32721 - author: JIPDawg changes: - - message: Small Hydraulic clamp now correctly consumes 2% battery instead of recharging - the battery by 2% + - message: On Salamander the round will now restart after 5 minutes from when the + Evac shuttle arrives at CentCom. + type: Tweak + id: 7530 + time: '2024-10-18T10:03:12.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32776 +- author: Errant + changes: + - message: Players becoming Traitor without a PDA now correctly get the text and + audio notifications, and the code words. They are also given an Uplink Implant, + with the price taken from their starting TC. type: Fix - id: 7408 - time: '2024-09-20T04:09:01.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32320 -- author: clinux + id: 7531 + time: '2024-10-18T12:55:43.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/30359 +- author: Beck Thompson changes: - - message: Added the psychologist's stamp. Prescribe treatments for your less mentally - sane crew! + - message: Plushies will now eject their contents when recycled in the recycler! + type: Fix + id: 7532 + time: '2024-10-18T12:58:07.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32838 +- author: Ilya246 + changes: + - message: Spectral locator, rare maintenance loot that lets you know if any ghosts + are nearby. type: Add - id: 7409 - time: '2024-09-20T14:42:57.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31881 -- author: saga3152 + id: 7533 + time: '2024-10-18T13:42:13.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32323 +- author: PJB3005 changes: - - message: You can now make vodka and soda water. + - message: You can now start removing items via stripping while holding something. + type: Tweak + id: 7534 + time: '2024-10-18T19:20:05.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32750 +- author: Beck Thompson + changes: + - message: Scalpels and shivs now work as knives! type: Add - id: 7410 - time: '2024-09-20T22:27:41.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32252 -- author: goet + id: 7535 + time: '2024-10-19T02:40:17.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32858 +- author: PJB3005 changes: - - message: Hides character sprite in health analyzer window if the scan becomes - inactive. + - message: Fix more performance issues on long-running game servers, hopefully. type: Fix - id: 7411 - time: '2024-09-21T05:54:48.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31879 -- author: TGRCDev + id: 7536 + time: '2024-10-19T14:51:29.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32897 +- author: insoPL changes: - - message: Station maps now have a directory for finding specific departments and - areas. + - message: Zombies once again have zombie blood. + type: Fix + id: 7537 + time: '2024-10-19T15:31:45.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32532 +- author: Beck Thompson + changes: + - message: When MMIs and positronic brains are inserted into plushies, their names + will be updated to the plushies name (Exactly the same way pAIs do). type: Add - id: 7412 - time: '2024-09-21T07:33:22.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31156 -- author: TheShuEd + id: 7538 + time: '2024-10-20T02:46:31.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32914 +- author: Calecute changes: - - message: Cores from floral anomalies are now seeds for hydroponics! + - message: wide attacks that deal blunt damage will now deal stamina damage. + type: Fix + id: 7539 + time: '2024-10-20T03:41:44.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32422 +- author: Thatonestomf + changes: + - message: Mute toxin now mutes even after is metabolized, similar to glue + type: Tweak + - message: Mute toxin is now even more powerful at muting people + type: Tweak + id: 7540 + time: '2024-10-21T03:43:14.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32915 +- author: MendaxxDev + changes: + - message: Fixed typing sound playing when AI or admin ghosts interacted with consoles. + type: Fix + id: 7541 + time: '2024-10-21T03:50:06.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32906 +- author: NoElkaTheGod + changes: + - message: Station AI can now interact with long range fax machines. + type: Tweak + id: 7542 + time: '2024-10-21T12:44:43.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32929 +- author: Southbridge + changes: + - message: Box Station's window between the containment room and TEG has been upgraded + to plasma. + type: Fix + - message: Box Station's Engineering storage room air alarm has been properly connected + to nearby devices. + type: Fix + - message: Box Station's Janitorial disposal chute has been replaced with a working + one. + type: Fix + id: 7543 + time: '2024-10-22T05:39:34.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32950 +- author: Moomoobeef + changes: + - message: Ammo-boxes no longer appear empty when only one bullet is removed. + type: Fix + id: 7544 + time: '2024-10-22T09:00:28.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32930 +- author: ScarKy0 + changes: + - message: Added the syringe gun and it's respective ammo. Currently Admeme only. type: Add - id: 7413 - time: '2024-09-21T19:54:56.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/31987 -- author: Plykiya + id: 7545 + time: '2024-10-22T13:03:42.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32112 +- author: ScarKy0, Fildrance changes: - - message: The rat king is now capable of butchering things, like animals. + - message: Using an intellicard on the AI core now swaps the AI between the core + and intellicard. (You can evac with the AI!) type: Add - id: 7414 - time: '2024-09-21T23:21:52.0000000+00:00' - url: https://github.com/space-wizards/space-station-14/pull/32232 + - message: Added an intellicard to the RD's locker. + type: Add + id: 7546 + time: '2024-10-22T13:49:39.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32347 +- author: Southbridge + changes: + - message: Nuclear Cola can now be broken down in a centrifuge. + type: Add + id: 7547 + time: '2024-10-22T17:01:19.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32441 +- author: BramvanZijp + changes: + - message: The Space Ninja Suit will now give an error popup if you are trying to + install a cell that is not better compared to the current cell. + type: Add + - message: When comparing which power cell is better when trying to swap them, the + Space Ninja's Suit will now also consider if the power cells have self-recharge + capability. + type: Tweak + - message: You can no longer fit weapons-grade power cages into the space ninja + suit. + type: Fix + id: 7548 + time: '2024-10-22T23:36:51.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32902 +- author: UBlueberry + changes: + - message: The appraisal tool now has in-hand sprites! + type: Fix + id: 7549 + time: '2024-10-22T23:51:49.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32849 +- author: chromiumboy + changes: + - message: The atmospheric alerts computer has been upgraded to visually indicate + the rooms of the station that are being monitored by its air and fire alarm + systems + type: Tweak + id: 7550 + time: '2024-10-23T12:49:58.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/31910 +- author: hyphenationc + changes: + - message: Snake meat is now properly considered Meat, so Lizards can eat it. + type: Fix + id: 7551 + time: '2024-10-24T03:41:03.0000000+00:00' + url: https://github.com/space-wizards/space-station-14/pull/32965 diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 5a8914069df..b69b03f06e5 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -1,489 +1,4 @@ Entries: -- author: FluffiestFloof - changes: - - message: Removed the random sentience event. - type: Remove - id: 80 - time: '2023-10-23T19:17:23.0000000+00:00' -- author: Colin-Tel - changes: - - message: Fixed Tortuga station's critical lack of hardsuits - type: Fix - id: 81 - time: '2023-10-23T21:40:33.0000000+00:00' -- author: Colin-Tel - changes: - - message: Removed prisoners from job selection, since they were spawning in arrivals. - Warden no longer requires prisoner playtime in the meantime. - type: Remove - id: 82 - time: '2023-10-23T23:12:41.0000000+00:00' -- author: VMSolidus - changes: - - message: Harpies can now be stripped, and can randomly be psychic - type: Fix - id: 83 - time: '2023-10-23T23:32:00.0000000+00:00' -- author: FluffiestFloof - changes: - - message: Fixed Mantis not having their Metapsionic Pulse. - type: Fix - id: 84 - time: '2023-10-23T23:40:59.0000000+00:00' -- author: JJ - changes: - - message: Tweaked round weighting and lowered instances of Revs - type: Tweak - id: 85 - time: '2023-10-24T00:05:22.0000000+00:00' -- author: FluffiestFloof - changes: - - message: Fixed Felinids not being able to eat certain food. - type: Fix - id: 86 - time: '2023-10-24T00:36:33.0000000+00:00' -- author: DebugOk - changes: - - message: Merged Wizden, hopefully fixing some bugs - type: Add - id: 87 - time: '2023-10-24T00:46:22.0000000+00:00' -- author: Colin-Tel - changes: - - message: Fixed the Logistics department not being able to communicate on their - radio channel. - type: Fix - id: 88 - time: '2023-10-24T03:33:03.0000000+00:00' -- author: DebugOk - changes: - - message: Merged wizden (again). Hopefully you won't visit the backrooms when using - a medical scanner anymore. - type: Fix - id: 89 - time: '2023-10-24T16:35:53.0000000+00:00' -- author: DebugOk - changes: - - message: Whitelist finally works properly - type: Fix - id: 90 - time: '2023-10-24T17:10:28.0000000+00:00' -- author: FluffiestFloof - changes: - - message: Fixed mantis stamp being an error. - type: Fix - id: 91 - time: '2023-10-24T19:02:28.0000000+00:00' -- author: FluffiestFloof - changes: - - message: The moth plushie screams and squeaks once again. - type: Tweak - id: 92 - time: '2023-10-24T19:03:43.0000000+00:00' -- author: JJ - changes: - - message: 'Fixed Mindswap return action between players. ' - type: Fix - id: 93 - time: '2023-10-25T14:21:35.0000000+00:00' -- author: JJ - changes: - - message: Updated Butlertron's sprite. - type: Tweak - id: 94 - time: '2023-10-25T14:15:45.0000000+00:00' -- author: VMSolidus - changes: - - message: Harpies and Vulpkanin can now be Psychic - type: Fix - id: 95 - time: '2023-10-25T14:16:21.0000000+00:00' -- author: JJ - changes: - - message: 'Mimes are now psionic. ' - type: Fix - id: 96 - time: '2023-10-25T14:20:40.0000000+00:00' -- author: Colin-Tel - changes: - - message: Head of Security no longer requires detective playtime for the time being. - type: Tweak - id: 97 - time: '2023-10-25T14:26:45.0000000+00:00' -- author: Adrian16199 - changes: - - message: Added eye colouring on felinid, oni and harpy. - type: Add - - message: Added additional tattoes to harpys. - type: Add - - message: Tattoes on felinid and oni are once again usable. - type: Fix - id: 98 - time: '2023-10-25T14:28:12.0000000+00:00' -- author: FluffiestFloof - changes: - - message: Fixed missing drink locales. - type: Fix - id: 99 - time: '2023-10-25T22:23:38.0000000+00:00' -- author: Colin-Tel - changes: - - message: Reimplemented Brigmedics. They're not on any maps (yet). - type: Add - id: 100 - time: '2023-10-25T22:52:49.0000000+00:00' -- author: FluffiestFloof - changes: - - message: Fixed Mystagogue not having their dispel power. - type: Fix - id: 101 - time: '2023-10-26T14:55:52.0000000+00:00' -- author: FluffiestFloof - changes: - - message: Tweaked the price of the uplink cat ears down to 4TC from 26TC. - type: Tweak - id: 102 - time: '2023-10-27T17:25:08.0000000+00:00' -- author: luringens - changes: - - message: Harpies can now sing while cuffed, but not while muzzled, mute, zombified, - or otherwise incapable of talking. - type: Fix - - message: You can now make a harpy stop singing by slipping, stunning, or hurting - them. - type: Add - id: 103 - time: '2023-10-27T18:13:03.0000000+00:00' -- author: FluffiestFloof - changes: - - message: Removed the traitor objective of killing Ian for his meat. - type: Remove - id: 104 - time: '2023-10-27T18:18:43.0000000+00:00' -- author: FluffiestFloof - changes: - - message: Tweaked the Moth related food to be edible by Moths. - type: Tweak - id: 105 - time: '2023-10-27T18:32:16.0000000+00:00' -- author: DebugOk - changes: - - message: Invalid job preferences are now reset to never upon loading in. - type: Tweak - id: 106 - time: '2023-10-28T01:58:58.0000000+00:00' -- author: FluffiestFloof - changes: - - message: Added Mothroaches in the vents. - type: Add - id: 107 - time: '2023-10-28T02:00:22.0000000+00:00' -- author: Colin-Tel - changes: - - message: Adjusted event weights so rounds are not as exciting. - type: Tweak - id: 108 - time: '2023-10-28T03:14:19.0000000+00:00' -- author: FluffiestFloof - changes: - - message: Added the classic Moth markings back, still can't be coloured. - type: Add - id: 109 - time: '2023-10-28T19:05:29.0000000+00:00' -- author: JJ - changes: - - message: Add Psionic Antag Objectives - type: Add - id: 110 - time: '2023-10-28T19:06:51.0000000+00:00' -- author: DebugOk - changes: - - message: The 10 reserved whitelist slots have been removed until further notice. - type: Tweak - id: 111 - time: '2023-10-29T03:10:27.0000000+00:00' -- author: Colin-Tel - changes: - - message: Altered the rules. Read the latest changes to them at the top of the - rules list! - type: Tweak - id: 112 - time: '2023-10-29T17:36:46.0000000+00:00' -- author: VMSolidus - changes: - - message: Cargo can now order medical scrub crates - type: Add - id: 113 - time: '2023-10-29T17:38:19.0000000+00:00' -- author: FluffiestFloof - changes: - - message: Removed the clown hardsuit from being craftable. - type: Remove - id: 114 - time: '2023-10-30T13:17:07.0000000+00:00' -- author: Colin-Tel - changes: - - message: Asterisk station has been added to the game. - type: Add - id: 115 - time: '2023-11-01T16:32:48.0000000+00:00' -- author: leonardo-dabepis - changes: - - message: Switched logos around - type: Tweak - id: 116 - time: '2023-11-01T22:45:55.0000000+00:00' -- author: TJohnson - changes: - - message: Security has received new models of hardsuit! - type: Tweak - id: 117 - time: '2023-11-02T00:31:53.0000000+00:00' -- author: ps3moira - changes: - - message: Added Two New Round-End Sounds - type: Add - - message: Lobby Round-End Sounds - type: Remove - id: 118 - time: '2023-11-02T01:00:16.0000000+00:00' -- author: leonardo-dabepis - changes: - - message: Technical Assistant now has a 4 hour playtime requirement. - type: Tweak - id: 119 - time: '2023-11-02T16:15:06.0000000+00:00' -- author: Colin-Tel - changes: - - message: Updated Asterisk Station with various fixes, a slot for an atmos technician, - and a familiar parallax... - type: Tweak - id: 120 - time: '2023-11-02T20:38:51.0000000+00:00' -- author: FluffiestFloof - changes: - - message: Removed starvation! - type: Remove - id: 121 - time: '2023-11-05T19:24:51.0000000+00:00' -- author: FluffiestFloof - changes: - - message: Cat Ears have been moved from the Syndicate Uplink into the AutoDrobe. - type: Tweak - id: 122 - time: '2023-11-06T14:39:49.0000000+00:00' -- author: FluffiestFloof - changes: - - message: Removed the carp suit bundle from the syndicate uplink. - type: Remove - id: 123 - time: '2023-11-06T14:54:09.0000000+00:00' -- author: Colin-Tel - changes: - - message: Fixed a few issues with Asterisk, including getting stuck on Epi's park - tree and evac docking at cargo. - type: Fix - id: 124 - time: '2023-11-06T15:25:25.0000000+00:00' -- author: FluffiestFloof - changes: - - message: Cyborgs using the Medical model can now print candies with medicine once - again. - type: Add - id: 125 - time: '2023-11-06T15:46:56.0000000+00:00' -- author: Colin-Tel - changes: - - message: Salvage Expedition computer boards can now be researched by Epistemics - and produced in circuit imprinters. - type: Add - id: 126 - time: '2023-11-07T13:36:49.0000000+00:00' -- author: FluffiestFloof - changes: - - message: Fixed the Reverse Engineering Machine incorrectly decreasing scan power - with upgrades. - type: Fix - id: 127 - time: '2023-11-07T19:31:02.0000000+00:00' -- author: Velcroboy - changes: - - message: Rebased Arena Station. This is a major overhaul. Please report any issues - or oddities in the mapping channel on Discord. - type: Tweak - id: 128 - time: '2023-11-07T19:31:54.0000000+00:00' -- author: deltanedas - changes: - - message: Carp suit has been moved into the AutoDrobe. - type: Tweak - id: 129 - time: '2023-11-07T19:32:52.0000000+00:00' -- author: VMSolidus - changes: - - message: Centcomm Geneticists have modified the Harpies so that they can no longer - imitate flash bangs. Your eardrums are safe now. - type: Tweak - id: 130 - time: '2023-11-08T22:30:39.0000000+00:00' -- author: leonardo-dabepis - changes: - - message: Reskinned the Glimmer Prober and Glimmer Drain. - type: Tweak - id: 131 - time: '2023-11-08T22:44:38.0000000+00:00' -- author: Colin-Tel - changes: - - message: Brought back the custom round end sounds. Collect them all! - type: Fix - id: 132 - time: '2023-11-09T04:22:23.0000000+00:00' -- author: VMSolidus - changes: - - message: Laika has discovered how to press airlock buttons, now no evildoers are - safe. - type: Tweak - id: 133 - time: '2023-11-09T19:01:30.0000000+00:00' -- author: Samsterious - changes: - - message: Character name restrictions are more permissive. - type: Tweak - id: 134 - time: '2023-11-10T15:08:02.0000000+00:00' -- author: Colin-Tel - changes: - - message: Revolutionaries are now fewer in number. - type: Tweak - id: 135 - time: '2023-11-10T15:08:26.0000000+00:00' -- author: Colin-Tel - changes: - - message: Head lockers now contain their respective head's spare ID card where - they didn't already. - type: Add - id: 136 - time: '2023-11-11T01:25:33.0000000+00:00' -- author: Velcroboy - changes: - - message: The Hive is Alive! - type: Add - id: 137 - time: '2023-11-11T16:37:11.0000000+00:00' -- author: FluffiestFloof - changes: - - message: Glimmer Prober and Drainer are craftable once again. - type: Tweak - - message: Fix Probers not making sounds depending on the glimmer levels. - type: Fix - - message: Adds back the Psionic guidebook. - type: Add - id: 138 - time: '2023-11-11T17:39:37.0000000+00:00' -- author: Colin-Tel - changes: - - message: Fixed The Hive's AI room losing power. - type: Fix - id: 139 - time: '2023-11-13T00:42:17.0000000+00:00' -- author: luringens - changes: - - message: Syndicate harpies can now purchase bionic syrinx implants to further - enchance their mimicry skills. It's like a voice mask for your throat! - type: Add - id: 140 - time: '2023-11-13T22:42:09.0000000+00:00' -- author: Adrian16199 - changes: - - message: Added Shoukou from Nyanotrasen and hopefully improved it. - type: Add - id: 141 - time: '2023-11-15T01:00:27.0000000+00:00' -- author: FluffiestFloof - changes: - - message: Added the X-01 MultiPhase Energy Gun for the HoS. - type: Add - id: 142 - time: '2023-11-15T18:41:01.0000000+00:00' -- author: Colin-Tel - changes: - - message: Slightly adjusted gamemode weights. - type: Tweak - id: 143 - time: '2023-11-16T09:49:24.0000000+00:00' -- author: Colin-Tel - changes: - - message: Head of Personnel now has the access that lawyers have. - type: Fix - id: 144 - time: '2023-11-17T23:56:56.0000000+00:00' -- author: Colin-Tel - changes: - - message: Adjusted Asterisk and Shoukou's min/max population to 0/60. - type: Tweak - id: 145 - time: '2023-11-19T06:10:32.0000000+00:00' -- author: IamVelcroboy - changes: - - message: Salvage has been rebased. New but strangely familiar space debris will - be pulled in by the salvage magnet. Caution is recommended. - type: Add - id: 146 - time: '2023-11-22T16:13:12.0000000+00:00' -- author: tryded - changes: - - message: Added double bladed energy swords to Nuclear Operative Uplinks - type: Add - id: 147 - time: '2023-11-25T14:38:20.0000000+00:00' -- author: TJohnson - changes: - - message: Seclites now robust as advertised in item description. - type: Tweak - id: 148 - time: '2023-11-26T00:36:54.0000000+00:00' -- author: Colin-Tel - changes: - - message: Asterisk Station is now protected by additional meteor netting and is - also more resistant to movement. Please relay thanks to your local engineers! - type: Tweak - id: 149 - time: '2023-11-26T00:38:30.0000000+00:00' -- author: Tryded - changes: - - message: Tweaked recipes of bluespace items to require bluespace crystals in exchange - of needing less materials - type: Tweak - id: 150 - time: '2023-11-26T00:51:27.0000000+00:00' -- author: Colin-Tel - changes: - - message: Corpsmen start with a few autoinjectors in their packs, and gain chemistry - access on low-pop rounds. - type: Tweak - id: 151 - time: '2023-11-26T01:21:47.0000000+00:00' -- author: Tryded - changes: - - message: Nanotrasen has recently introduced their miniature energy pistols and - energy guns to the market and developed experimental research into the IK-60 - laser carbine and the PDW-9 Energy Pistol. They can be researched by science. - type: Add - id: 152 - time: '2023-11-27T22:42:27.0000000+00:00' -- author: DebugOk - changes: - - message: Mindshields are now made with significantly cheaper components, and they - dont fuse properly anymore. Meaning they can be removed with a little effort. - type: Tweak - id: 153 - time: '2023-12-03T00:48:41.0000000+00:00' -- author: Velcroboy - changes: - - message: Fixed air chamber in The Hive's atmos not having a vacuum. - type: Fix - id: 154 - time: '2023-12-05T19:16:18.0000000+00:00' - author: FluffiestFloof changes: - message: Vulpkanin now have a decent amount of special helmet and mask sprites. @@ -3629,3 +3144,572 @@ id: 579 time: '2024-09-23T18:53:31.0000000+00:00' url: https://github.com/DeltaV-Station/Delta-v/pull/1903 +- author: deltanedas + changes: + - message: Cats will now play with mouse toys. + type: Tweak + id: 580 + time: '2024-09-24T07:15:18.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1877 +- author: MilonPL + changes: + - message: Telegnostic projections will no longer slide on ice. + type: Fix + id: 581 + time: '2024-09-24T16:33:09.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1898 +- author: deltanedas + changes: + - message: Goliaths can now pry doors open. + type: Tweak + id: 582 + time: '2024-09-24T19:48:45.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1908 +- author: TadJohnson00 + changes: + - message: Added turtlenecks to most security roles. Helps to keep the chill out + on cool nights. + type: Add + - message: Removed security greatcoats from loadouts and the vendor. + type: Remove + id: 583 + time: '2024-09-26T20:35:41.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1901 +- author: MilonPL + changes: + - message: Fixed the description of large mail packages. + type: Fix + id: 584 + time: '2024-09-27T23:42:30.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1925 +- author: Radezolid + changes: + - message: Fixed deep fryer not being repairable after being broken. + type: Fix + id: 585 + time: '2024-09-30T14:41:21.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1940 +- author: MilonPL + changes: + - message: You can no longer take headcages off by yourself. + type: Fix + id: 586 + time: '2024-09-30T22:10:53.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1949 +- author: FryOfDestiny + changes: + - message: Vulpkanin display correct mask sprites in character customization screen + type: Fix + id: 587 + time: '2024-09-30T22:12:47.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1946 +- author: Stop-Signs + changes: + - message: Reduce advanced topicals cook time + type: Tweak + id: 588 + time: '2024-10-01T15:52:13.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1951 +- author: Lyndomen + changes: + - message: Justice may now edit the Criminal Records Computer + type: Tweak + id: 589 + time: '2024-10-02T12:59:22.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1933 +- author: deltanedas + changes: + - message: Fugitive reports no longer include the name of the fugitive. Use your + detective skills! + type: Tweak + id: 590 + time: '2024-10-02T13:03:40.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1817 +- author: deltanedas + changes: + - message: Psionics can now be sacrificed in the chapel to lower glimmer. + type: Add + id: 591 + time: '2024-10-02T13:04:35.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1883 +- author: deltanedas + changes: + - message: Syndicate duffelbags can be reverse engineered for bags of holding. + type: Add + - message: Hyper-capacity powercells can be made by reverse engineering high-capacity + powercells, which can also be reverse engineered to make microreactor cells. + type: Add + - message: Moonboots can now be reverse engineered for speedboots. + type: Add + - message: Any cloning board that gets reverse engineered unlocks every cloning + board instead of itself (which was useless since you already have it). + type: Tweak + - message: Removed reverse engineering from items that made no sense to reverse + engineer like roundstart equipment or tier 1 techs. + type: Remove + id: 592 + time: '2024-10-02T13:04:44.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1915 +- author: Radezolid + changes: + - message: Moved the reverse engineered combat hardsuits to the security techfab. + You can still access them as a traitor with an emag on the exosuit fabricator. + type: Tweak + id: 593 + time: '2024-10-02T13:19:50.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1956 +- author: deltanedas + changes: + - message: Merged last ~weeks changes from upstream. + type: Add + - message: Fixed captain requiring global whitelist instead of just the role whitelist. + type: Fix + - message: Frezon nerfed was reverted. + type: Tweak + id: 594 + time: '2024-10-02T22:09:14.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1957 +- author: Unkn0wnGh0st333 + changes: + - message: Shoukou's Bridge and Command Room have been remodeled, alongside tons + of station pets, and slice of life necessities added! Yay! :3 + type: Tweak + id: 595 + time: '2024-10-03T01:26:11.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1920 +- author: Avalon-Proto + changes: + - message: Goliaths are far less hardy than they once were + type: Tweak + id: 596 + time: '2024-10-03T12:50:47.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1955 +- author: MilonPL + changes: + - message: Reverted the frezon price nerf. Atmosians rejoice! + type: Tweak + id: 597 + time: '2024-10-05T00:54:46.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1963 +- author: MilonPL + changes: + - message: Species vision filters are now disabled by default. You can re-enable + them in the settings! + type: Tweak + id: 598 + time: '2024-10-05T16:25:17.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1953 +- author: Velcroboy + changes: + - message: APCs are rotated again to indicate the direction they are facing. + type: Tweak + id: 599 + time: '2024-10-05T21:04:37.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1969 +- author: Radezolid + changes: + - message: Fixed Closet Skeleton ghost role rules. + type: Fix + id: 600 + time: '2024-10-06T01:59:43.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1974 +- author: Velcroboy + changes: + - message: Sneaky mice and hamsters can avoid traps by walking very, very slow + type: Tweak + id: 601 + time: '2024-10-09T00:30:58.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1970 +- author: Callmore + changes: + - message: Prefered item quick store locations can be created again. + type: Fix + id: 602 + time: '2024-10-12T13:44:34.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1996 +- author: FryOfDestiny + changes: + - message: Spiders can now hiss. + type: Tweak + id: 603 + time: '2024-10-12T13:47:56.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1994 +- author: deltanedas + changes: + - message: Arachnids can now hiss. + type: Tweak + id: 604 + time: '2024-10-12T14:01:06.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1997 +- author: MilonPL + changes: + - message: Added Lone Digger by Caravan Palace to the jukebox! + type: Add + id: 605 + time: '2024-10-13T13:30:14.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1998 +- author: SaphireLattice + changes: + - message: Completely rework Lighthouse's Medbay + type: Add + id: 606 + time: '2024-10-13T14:29:01.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1988 +- author: deltanedas + changes: + - message: Merged this week's changes from upstream. + type: Add + - message: Made C4 detonate on signal like it used to. + type: Tweak + id: 607 + time: '2024-10-14T18:05:19.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1982 +- author: Radezolid + changes: + - message: Now tracking and death rattle implant messages show the coordinates at + the same time as the nearest beacon. + type: Tweak + id: 608 + time: '2024-10-14T18:06:50.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1983 +- author: Radezolid + changes: + - message: Added the foam toys set to the cargo request catalog! Go play war with + the clown or friends in the hallways! + type: Add + id: 609 + time: '2024-10-14T18:07:41.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1985 +- author: MilonPL + changes: + - message: Glimmer mobs will no longer spawn on CentCom or the evac shuttle. + type: Fix + id: 610 + time: '2024-10-14T23:43:17.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1980 +- author: Radezolid + changes: + - message: The tracking implants crate is now more expensive. + type: Tweak + id: 611 + time: '2024-10-15T23:01:23.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2011 +- author: Unkn0wnGh0st333 + changes: + - message: Chemistry and Hydroponics doors have been readded + type: Tweak + id: 612 + time: '2024-10-18T00:31:47.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1995 +- author: BlitzTheSquishy + changes: + - message: Readded the Sec Sticker! + type: Add + id: 613 + time: '2024-10-20T00:01:18.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2022 +- author: ThataKat + changes: + - message: Small doses of theobromine no longer cause vomiting in animal species. + type: Tweak + id: 614 + time: '2024-10-20T05:22:44.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2024 +- author: deltanedas + changes: + - message: Ghost role waiting time is down to 3 seconds, from 8. + type: Tweak + id: 615 + time: '2024-10-20T16:02:51.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2026 +- author: deltanedas + changes: + - message: Removed salt ore in favour of coal. Give the chemists carbon! + type: Remove + id: 616 + time: '2024-10-20T17:30:04.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2027 +- author: PPooch + changes: + - message: Clerks now have brig timer and evidence locker access. Don't steal the + Prosecutor's job from them! + type: Tweak + id: 617 + time: '2024-10-23T07:04:54.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2034 +- author: deltanedas + changes: + - message: Merged the past few weeks changes from upstream, report any bugs related + to your character menu or objectives! + type: Add + id: 618 + time: '2024-10-24T08:41:03.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2036 +- author: deltanedas + changes: + - message: Fixed the crew manifest. + type: Fix + id: 619 + time: '2024-10-24T12:54:35.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2037 +- author: deltanedas + changes: + - message: Martyr cyborg modules can now be disarmed with a crowbar to yield its + explosive payload. + type: Tweak + id: 620 + time: '2024-10-24T15:19:46.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1960 +- author: Solaris7518 + changes: + - message: Fixed almost every midi being completely ruined by a recent change from + upstream. You're welcome, my fellow musicians. + type: Fix + id: 621 + time: '2024-10-24T23:39:16.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2041 +- author: MilonPL + changes: + - message: Fixed playtime stats and requirements not showing up correctly. + type: Fix + id: 622 + time: '2024-10-25T00:15:01.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2038 +- author: Radezolid + changes: + - message: Pie cannons can now be fired by pacifists! + type: Tweak + id: 623 + time: '2024-10-26T01:46:26.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2046 +- author: Radezolid + changes: + - message: Fixed being unable to print .38 magazines in an emagged autolathe. + type: Fix + id: 624 + time: '2024-10-27T02:58:04.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2052 +- author: MilonPL + changes: + - message: Re-added teslas! + type: Add + - message: Tesla now has a random pathfinding and a passive energy drain. Don't + forget to leave the PA on! + type: Tweak + id: 625 + time: '2024-10-27T23:05:22.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1916 +- author: Solaris7518 + changes: + - message: Cancer mice no longer infest the mail system. + type: Remove + id: 626 + time: '2024-10-28T00:25:11.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2061 +- author: Colin_Tel, Fox, Lyndomen + changes: + - message: Adjusted the rules, check out the metashield! + type: Tweak + id: 627 + time: '2024-10-28T16:49:40.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2039 +- author: MilonPL + changes: + - message: Fixed not being able to unlock mail. + type: Fix + id: 628 + time: '2024-10-28T19:32:07.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2067 +- author: MilonPL + changes: + - message: Added a no EORG reminder to the end of round! + type: Add + id: 629 + time: '2024-10-28T23:36:49.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2070 +- author: Radezolid + changes: + - message: Now perma prisoners will spawn with tracking implants already implanted. + type: Tweak + id: 630 + time: '2024-10-29T17:58:33.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2053 +- author: Aikakakah + changes: + - message: Fixed tattoos and scars showing through clothing. + type: Fix + id: 631 + time: '2024-10-30T13:53:52.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1889 +- author: MilonPL + changes: + - message: Fixed the sudden TPS drops, please report any lag issues in the Discord! + type: Fix + id: 632 + time: '2024-10-31T07:18:08.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2075 +- author: reesque + changes: + - message: pie not dropping tin on thrown + type: Fix + id: 633 + time: '2024-11-01T13:29:38.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2082 +- author: Radezolid + changes: + - message: Fixed the Mail Carrier PDA not coming with the MailMetrics program! + type: Fix + id: 634 + time: '2024-11-02T02:21:28.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2086 +- author: Radezolid + changes: + - message: Added an Agent ID to LPO for them to fake signatures, plus a backpack + to store all those illegal documents!. + type: Add + id: 635 + time: '2024-11-02T14:21:28.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2009 +- author: Lyndomen + changes: + - message: Nuclear Operative Agent now requires 4 hours of Chemist playtime. + type: Tweak + id: 636 + time: '2024-11-03T06:08:01.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2098 +- author: Radezolid + changes: + - message: Now the prosecutor, clerk and chief justice PDAs comes with a SecWatch + program installed. + type: Tweak + id: 637 + time: '2024-11-03T07:22:26.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2085 +- author: Eternally-Confused + changes: + - message: Canes can now be selected in loadouts. + type: Add + id: 638 + time: '2024-11-03T09:26:52.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2095 +- author: deltanedas + changes: + - message: Prosecutors can now add their overcoat to loadouts. + type: Add + id: 639 + time: '2024-11-03T09:40:39.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/1923 +- author: Radezolid + changes: + - message: You can use emotes while sleeping to enhance narcoleptic RP. + type: Tweak + id: 640 + time: '2024-11-03T15:33:52.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2084 +- author: deltanedas + changes: + - message: You can no longer eat brains, they aren't allowed to remember who killed + them anyway! + type: Tweak + id: 641 + time: '2024-11-03T17:27:55.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2102 +- author: Radezolid + changes: + - message: Medibots now smile! + type: Tweak + id: 642 + time: '2024-11-03T17:40:49.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2087 +- author: beck-thompson + changes: + - message: Syrinx implant now works correctly + type: Fix + id: 643 + time: '2024-11-03T18:02:03.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2055 +- author: Monotheonist + changes: + - message: Changed Delta-V cartridges to tapes. + type: Tweak + id: 644 + time: '2024-11-04T02:03:38.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2108 +- author: Radezolid + changes: + - message: Added prescription security glasses and prescription corpsman glasses! + type: Add + id: 645 + time: '2024-11-04T07:39:15.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2083 +- author: clinux + changes: + - message: Removed the ability to upgrade reinforced windows to into shuttle windows + type: Remove + id: 646 + time: '2024-11-04T19:41:43.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2118 +- author: Unkn0wnGh0st333 + changes: + - message: Added Robotics Airlocks, one step closer to the Roboticist Job. + type: Add + id: 647 + time: '2024-11-04T19:54:28.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2121 +- author: Radezolid + changes: + - message: Re-added the fire-fighting door remote to atmospheric technicians lockers, + firelocks can now be bolted and they are hackable. + type: Add + id: 648 + time: '2024-11-04T23:49:18.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2007 +- author: MilonPL + changes: + - message: Added the StockTrading app to cargo PDAs, available with the Orders access. + Gamblers rejoice! + type: Add + id: 649 + time: '2024-11-06T17:30:54.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2103 +- author: Radezolid + changes: + - message: Changed the syndicate refugees rules to represent what is expected of + them from the administrative team. + type: Tweak + id: 650 + time: '2024-11-06T17:51:05.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2127 +- author: Crow, Radezolid + changes: + - message: Added security magboots, they should only be used for EVA or situations + that warrant no slips. + type: Add + id: 651 + time: '2024-11-06T20:49:12.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2074 +- author: SolStar2, Vivi Bunny + changes: + - message: Added Hushed trait. Hushed players will whisper instead of talking. + type: Add + id: 652 + time: '2024-11-06T21:50:09.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2106 +- author: Stop-Signs + changes: + - message: New Sec melee for epi to research! + type: Add + - message: Merged several arsenal techs to better fit the state of epi, as well + as changing the tiering and prices. + type: Tweak + id: 653 + time: '2024-11-07T01:36:36.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2104 +- author: Monotheonist + changes: + - message: Justice has lunch packed for them, millions of attorneys must not go + hungry. + type: Add + id: 654 + time: '2024-11-07T09:35:18.0000000+00:00' + url: https://github.com/DeltaV-Station/Delta-v/pull/2111 diff --git a/Resources/ConfigPresets/DeltaV/deltav.toml b/Resources/ConfigPresets/DeltaV/deltav.toml index 2f73e05f9d6..8b98868b7d7 100644 --- a/Resources/ConfigPresets/DeltaV/deltav.toml +++ b/Resources/ConfigPresets/DeltaV/deltav.toml @@ -33,6 +33,7 @@ alert.min_players_sharing_connection = 2 [server] id = "deltav" rules_file = "DeltaVRuleset" +uptime_restart_minutes = 2880 # 48h [discord] rich_main_icon_id = "deltav" @@ -46,3 +47,9 @@ flavor_text = true [ahelp] admin_prefix = false admin_prefix_webhook = false + +[votekick] +enabled = false # only enabled on periapsis +eligible_number = 5 +initiator_ghost_requirement = false +voter_ghost_requirement = false diff --git a/Resources/ConfigPresets/DeltaV/horizon.toml b/Resources/ConfigPresets/DeltaV/horizon.toml index 824666e7da4..96fc9aeb5b8 100644 --- a/Resources/ConfigPresets/DeltaV/horizon.toml +++ b/Resources/ConfigPresets/DeltaV/horizon.toml @@ -9,5 +9,8 @@ map_enabled = true [shuttle] emergency_early_launch_allowed = true +[ooc] +enable_during_round = true + [hub] tags = "lang:en-US,region:am_n_e,rp:med,no_tag_infer" diff --git a/Resources/ConfigPresets/DeltaV/periapsis.toml b/Resources/ConfigPresets/DeltaV/periapsis.toml index 199a2119a11..77ea036dc76 100644 --- a/Resources/ConfigPresets/DeltaV/periapsis.toml +++ b/Resources/ConfigPresets/DeltaV/periapsis.toml @@ -16,5 +16,8 @@ enabled = false [ooc] enable_during_round = true +[votekick] +enabled = true + [hub] tags = "lang:en-US,region:am_n_e,rp:med,no_tag_infer" diff --git a/Resources/Credits/GitHub.txt b/Resources/Credits/GitHub.txt index fb84cba4086..cf6e5140702 100644 --- a/Resources/Credits/GitHub.txt +++ b/Resources/Credits/GitHub.txt @@ -1 +1 @@ -0x6273, 12rabbits, 13spacemen, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 2digitman, 3nderall, 4310v343k, 4dplanner, 612git, 778b, Ablankmann, abregado, Absolute-Potato, Acruid, actioninja, actually-reb, ada-please, adamsong, adeinitas, Admiral-Obvious-001, adrian, Adrian16199, Ady4ik, Aerocrux, Aeshus, Aexolott, Aexxie, africalimedrop, afrokada, Agoichi, Ahion, aiden, aitorlogedo, AJCM-git, AjexRose, Alekshhh, alexkar598, AlexMorgan3817, alexumandxgabriel08x, Alithsko, ALMv1, Alpha-Two, AlphaQwerty, Altoids1, amylizzle, ancientpower, Andre19926, AndrewEyeke, AndreyCamper, angelofallars, Anzarot121, Appiah, ar4ill, ArchPigeon, areitpog, Arendian, arimah, Arkanic, ArkiveDev, armoks, Arteben, ArthurMousatov, ArtisticRoomba, artur, AruMoon, ArZarLordOfMango, as334, AsikKEsel, asperger-sind, aspiringLich, astriloqua, AutoOtter, avalon, avghdev, Awlod, azzy, AzzyIsNotHere, backetako, BananaFlambe, Baptr0b0t, BasedPugilist, BasedUser, Batuh1n, beck-thompson, BellwetherLogic, benev0, benjamin-burges, BGare, bhespiritu, bingojohnson, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, BlitzTheSquishy, bloodrizer, Bloody2372, blueDev2, Boaz1111, BobdaBiscuit, BobTheSleder, boiled-water-tsar, BombasterDS, botanySupremist, brainfood1183, BramvanZijp, Brandon-Huu, Bribrooo, Bright0, brndd, bryce0110, BubblegumBlue, buletsponge, buntobaggins, bvelliquette, byondfuckery, c0rigin, c4llv07e, CaasGit, Caconym27, Callmore, capnsockless, CaptainSqrBeard, Carbonhell, Carolyn3114, Carou02, carteblanche4me, CatTheSystem, Centronias, chairbender, Charlese2, ChaseFlorom, chavonadelal, Cheackraze, cheesePizza2, cheeseplated, Chief-Engineer, chillyconmor, christhirtle, chromiumboy, Chronophylos, Chubbygummibear, Ciac32, civilCornball, Clement-O, clyf, Clyybber, CMDR-Piboy314, CodedCrow, Cohnway, Cojoke-dot, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, CookieMasterT, coolboy911, coolmankid12345, Coolsurf6, corentt, CormosLemming, crazybrain23, creadth, CrigCrag, croilbird, Crotalus, CrudeWax, CrzyPotato, Cyberboss, d34d10cc, dabigoose, DadeKuma, Daemon, daerSeebaer, dahnte, dakamakat, dakimasu, DakotaGay, DamianX, DangerRevolution, daniel-cr, DanSAussieITS, Daracke, DarkenedSynergy, Darkenson, DawBla, Daxxi3, dch-GH, Deahaka, dean, DEATHB4DEFEAT, DeathCamel58, Deatherd, deathride58, DebugOk, Decappi, Decortex, Deeeeja, deepdarkdepths, DefinitelyNotFurryXD, degradka, Delete69, deltanedas, DeltaV-Bot, DenisShvalov, DerbyX, derek, dersheppard, Deserty0, Detintinto, DevilishMilk, dexlerxd, dffdff2423, dge21, DieselMohawk, digitalic, Dimastra, DinoWattz, DisposableCrewmember42, DjfjdfofdjfjD, doc-michael, docnite, Doctor-Cpu, DoctorBeard, DogZeroX, dolgovmi, dontbetank, Doomsdrayk, dootythefrooty, Dorragon, Doru991, DoubleRiceEddiedd, DoutorWhite, dragonryan06, drakewill-CRL, Drayff, dreamlyjack, DrEnzyme, dribblydrone, DrMelon, drongood12, DrSingh, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, dukevanity, duskyjay, Dutch-VanDerLinde, dvir001, Dynexust, Easypoller, eclips_e, eden077, EEASAS, Efruit, efzapa, ElectroSR, elsie, elthundercloud, Elysium206, Emisse, emmafornash, EmoGarbage404, Endecc, eoineoineoin, eris, erohrs2, ERORR404V1, Errant-4, esguard, estacaoespacialpirata, eugene, exincore, exp111, f0x-n3rd, FacePluslll, Fahasor, FairlySadPanda, FATFSAAM2, Feluk6174, ficcialfaint, Fiftyllama, Fildrance, FillerVK, FinnishPaladin, FirinMaLazors, Fishfish458, FL-OZ, Flareguy, flashgnash, FluffiestFloof, FluidRock, flyingkarii, foboscheshir, FoLoKe, fooberticus, ForestNoises, forgotmyotheraccount, forkeyboards, forthbridge, Fortune117, Fouin, foxhorn, freeman2651, freeze2222, Froffy025, Fromoriss, froozigiusz, FrostMando, FungiFellow, FunTust, Futuristic-OK, GalacticChimp, Gaxeer, gbasood, Geekyhobo, genderGeometries, GeneralGaws, Genkail, geraeumig, Ghagliiarghii, Git-Nivrak, githubuser508, gituhabu, GlassEclipse, GNF54, godisdeadLOL, Goldminermac, Golinth, GoodWheatley, Gorox221, graevy, GraniteSidewalk, GreaseMonk, greenrock64, greggthefather, GreyMario, GTRsound, Guess-My-Name, gusxyz, Gyrandola, h3half, Haltell, Hanzdegloker, HappyRoach, Hardly3D, harikattar, he1acdvv, Hebi, Henry, HerCoyote23, hitomishirichan, hiucko, Hmeister-fake, Hmeister-real, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, Hreno, htmlsystem, hubismal, Hugal31, Huxellberger, Hyenh, i-justuser-i, iacore, IamVelcroboy, Ian321, icekot8, icesickleone, iczero, iglov, IgorAnt028, igorsaux, ike709, illersaver, Illiux, Ilushkins33, Ilya246, IlyaElDunaev, imrenq, imweax, indeano, Injazz, Insineer, IntegerTempest, Interrobang01, IProduceWidgets, itsmethom, Itzbenz, iztokbajcar, Jackal298, Jackrost, jacksonzck, Jackw2As, jacob, jamessimo, janekvap, Jark255, Jaskanbe, JasperJRoth, JerryImMouse, jerryimmouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JimGamemaster, jimmy12or, JIPDawg, jjtParadox, jmcb, JoeHammad1844, JohnGinnane, johnku1, joshepvodka, jproads, Jrpl, juliangiebel, justart1m, JustCone14, justdie12, justin, justintether, JustinTrotter, justtne, K-Dynamic, k3yw, Kadeo64, Kaga-404, KaiShibaa, kalane15, kalanosh, katzenminer, kbailey-git, Keelin, Keer-Sar, KEEYNy, keikiru, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, Kimpes, KingFroozy, kira-er, Kirillcas, Kirus59, Kistras, Kit0vras, KittenColony, klaypexx, Kmc2000, Ko4ergaPunk, kognise, kokoc9n, komunre, KonstantinAngelov, koteq, KrasnoshchekovPavel, Krunklehorn, Kukutis96513, Kupie, Kurzaen, kxvvv, kyupolaris, kzhanik, lajolico, Lamrr, LankLTE, laok233, lapatison, larryrussian, lawdog4817, Lazzi0706, leander-0, leonardo-dabepis, leonsfriedrich, LetterN, lettern, Level10Cybermancer, LEVELcat, lever1209, Lgibb18, lgruthes, LightVillet, liltenhead, LinkUyx, LittleBuilderJane, lizelive, lleftTheDragon, localcc, lokachop, Lomcastar, LordCarve, LordEclipse, LucasTheDrgn, luckyshotpictures, LudwigVonChesterfield, luizwritescode, Lukasz825700516, luminight, lunarcomets, luringens, lvvova1, Lyndomen, lyroth001, lzimann, lzk228, M3739, mac6na6na, MACMAN2003, Macoron, magicalus, magmodius, MagnusCrowe, malchanceux, MaloTV, ManelNavola, Mangohydra, marboww, Markek1, Matz05, max, MaxNox7, maylokana, MehimoNemo, MeltedPixel, MemeProof, memoblob, MendaxxDev, Menshin, Mephisto72, MerrytheManokit, Mervill, metalgearsloth, MetalSage, MFMessage, mhamsterr, michaelcu, micheel665, MilenVolf, MilonPL, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MisterMecky, Mith-randalf, MjrLandWhale, mkanke-real, MLGTASTICa, mnemotechnician, moderatelyaware, modern-nm, mokiros, Moneyl, Moomoobeef, moony, Morb0, mr-bo-jangles, Mr0maks, MrFippik, mrrobdemo, MureixloI, musicmanvr, MWKane, Myakot, Myctai, N3X15, nails-n-tape, Nairodian, Naive817, NakataRin, namespace-Memory, Nannek, NazrinNya, neutrino-laser, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, NIXC, NkoKirkto, nmajask, noctyrnal, nok-ko, NonchalantNoob, NoobyLegion, Nopey, not-gavnaed, notafet, notquitehadouken, notsodana, noudoit, noverd, NuclearWinter, nukashimika, nuke-haus, NULL882, nullarmo, NullWanderer, nyeogmi, Nylux, Nyranu, och-och, ocotheomega, OctoRocket, OldDanceJacket, onoira, OnyxTheBrave, OrangeMoronage9622, osjarw, Ostaf, othymer, OttoMaticode, Owai-Seek, packmore, paigemaeforrest, pali6, Pangogie, panzer-iv1, partyaddict, patrikturi, PaulRitter, peccneck, Peptide90, peptron1, PeterFuto, PetMudstone, pewter-wiz, Pgriha, Phantom-Lily, PHCodes, Phill101, phunnyguy, pigeonpeas, PilgrimViis, Pill-U, Pireax, pissdemon, PixeltheAertistContrib, PixelTheKermit, PJB3005, Plasmaguy, plinyvic, Plykiya, pofitlo, pointer-to-null, pok27, PolterTzi, PoorMansDreams, portfiend, potato1234x, PotentiallyTom, ProfanedBane, ProPandaBear, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykzz, PuceTint, PuroSlavKing, PursuitInAshes, Putnam3145, quatre, QueerNB, QuietlyWhisper, qwerltaz, Radezolid, RadioMull, Radosvik, Radrark, Rainbeon, Rainfey, Raitononai, Ramlik, randy10122, Rane, Ranger6012, Rapidgame7, ravage123321, rbertoche, Redfire1331, Redict, RedlineTriad, redmushie, RednoWCirabrab, RemberBM, RemieRichards, RemTim, Remuchi, rene-descartes2021, Renlou, retequizzle, RiceMar1244, rich-dunne, RieBi, riggleprime, RIKELOLDABOSS, rinary1, Rinkashikachi, riolume, RobbyTheFish, Rockdtben, Rohesie, rok-povsic, rolfero, RomanNovo, rosieposieeee, Roudenn, router, RumiTiger, S1rFl0, S1ss3l, Saakra, saga3152, saintmuntzer, Salex08, sam, samgithubaccount, Samsterious, SaphireLattice, SapphicOverload, sarahon, SaveliyM360, sBasalto, ScalyChimp, ScarKy0, scrato, Scribbles0, scruq445, scuffedjays, ScumbagDog, Segonist, sephtasm, Serkket, sewerpig, sh18rw, ShadeAware, ShadowCommander, Shadowtheprotogen546, shadowwailker, shaeone, shampunj, shariathotpatrol, ShatteredSwords, SignalWalker, siigiil, SimpleStation14, Simyon264, sirdragooon, Sirionaut, Sk1tch, SkaldetSkaeg, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, Slyfox333, snebl, sniperchance, Snowni, snowsignal, solaris7518, SonicHDC, SoulFN, SoulSloth, Soundwavesghost, SpaceManiac, SpaceyLady, spartak, SpartanKadence, SpeltIncorrectyl, Spessmann, SphiraI, SplinterGP, spoogemonster, sporekto, Squishy77, SsalamethVersaach, ssdaniel24, stalengd, stanberytrask, Stanislav4ix, StanTheCarpenter, Stealthbomber16, stellar-novas, Stop-Signs, stopbreaking, stopka-html, StrawberryMoses, Stray-Pyramid, strO0pwafel, Strol20, StStevens, Subversionary, sunbear-dev, superjj18, Supernorn, SweptWasTaken, Sybil, SYNCHRONIC, Szunti, TadJohnson00, Tainakov, takemysoult, TaralGit, Taran, taurie, Tayrtahn, tday93, TekuNut, telyonok, TemporalOroboros, tentekal, terezi4real, Terraspark4941, texcruize, tgrkzus, ThatOneGoblin25, thatrandomcanadianguy, TheArturZh, theashtronaut, thecopbennet, TheCze, TheDarkElites, thedraccx, TheEmber, TheIntoxicatedCat, thekilk, themias, Theomund, TheOneWhoIsManyFrame, theOperand, TherapyGoth, therealDLondon, TheShuEd, thetolbean, thevinter, TheWaffleJesus, Thinbug0, ThunderBear2006, Timemaster99, timothyteakettle, TimrodDX, timurjavid, tin-man-tim, Titian3, tk-a369, tkdrg, tmtmtl30, toasterpm87, TokenStyle, Tollhouse, tom-leys, tomasalves8, Tomeno, Tonydatguy, topy, Tornado-Technology, tosatur, TotallyLemon, tropicalhibi, truepaintgit, Truoizys, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, tyashley, Tyler-IN, Tyzemol, UbaserB, ubis1, UBlueberry, UKNOWH, UltimateJester, Unbelievable-Salmon, underscorex5, UnicornOnLSD, Unisol, Unkn0wnGh0st333, unusualcrow, Uriende, UristMcDorf, user424242420, Vaaankas, valentfingerov, Varen, Vasilis, VasilisThePikachu, Velcroboy, veliebm, VelonacepsCalyxEggs, venn, veprolet, veritable-calamity, Veritius, Vermidia, vero5123, Verslebas, VigersRay, violet754, Visne, vitalvitriol, VMSolidus, voidnull000, volotomite, volundr-, Voomra, Vordenburg, vorkathbruh, vulppine, wafehling, Warentan, WarMechanic, Watermelon914, weaversam8, wertanchik, whateverusername0, Willhelm53, WilliamECrew, willicassi, Winkarst-cpu, wirdal, wixoaGit, WlarusFromDaSpace, wrexbe, wtcwr68, xkreksx, xRiriq, YanehCheck, yathxyz, Ygg01, YotaXP, youarereadingthis, Yousifb26, youtissoum, yunii, YuriyKiss, zach-hill, Zadeon, zamp, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zero, ZeroDiamond, zerorulez, ZeWaka, zionnBE, ZNixian, ZoldorfTheWizard, zonespace27, Zumorica, ZweiHawke, Zymem, zzylex +0x6273, 12rabbits, 13spacemen, 2013HORSEMEATSCANDAL, 20kdc, 21Melkuu, 2digitman, 3nderall, 4310v343k, 4dplanner, 612git, 778b, Ablankmann, abregado, Absolute-Potato, Acruid, actioninja, actually-reb, ada-please, adamsong, Adeinitas, Admiral-Obvious-001, adrian, Adrian16199, Ady4ik, Aerocrux, Aeshus, Aexolott, Aexxie, africalimedrop, afrokada, Agoichi, Ahion, aiden, Aikakakah, aitorlogedo, AJCM-git, AjexRose, Alekshhh, alexkar598, AlexMorgan3817, alexumandxgabriel08x, Alithsko, ALMv1, Alpha-Two, AlphaQwerty, Altoids1, amylizzle, ancientpower, Andre19926, AndrewEyeke, AndreyCamper, angelofallars, Anzarot121, Appiah, ar4ill, ArchPigeon, ArchRBX, areitpog, Arendian, arimah, Arkanic, ArkiveDev, armoks, Arteben, ArthurMousatov, ArtisticRoomba, artur, AruMoon, ArZarLordOfMango, as334, AsikKEsel, AsnDen, asperger-sind, aspiringLich, astriloqua, august-sun, AutoOtter, Avalon-Proto, avghdev, Awlod, azzy, AzzyIsNotHere, BackeTako, BananaFlambe, Baptr0b0t, BasedPugilist, BasedUser, Batuh1n, beck-thompson, BellwetherLogic, benev0, benjamin-burges, BGare, bhespiritu, BIGZi0348, bingojohnson, BismarckShuffle, Bixkitts, Blackern5000, Blazeror, BlitzTheSquishy, bloodrizer, Bloody2372, blueDev2, Boaz1111, BobdaBiscuit, BobTheSleder, boiled-water-tsar, BombasterDS, botanySupremist, brainfood1183, BramvanZijp, Brandon-Huu, Bribrooo, Bright0, brndd, bryce0110, BubblegumBlue, buletsponge, buntobaggins, bvelliquette, byondfuckery, c0rigin, c4llv07e, CaasGit, Caconym27, Calecute, Callmore, capnsockless, CaptainSqrBeard, Carbonhell, Carolyn3114, Carou02, carteblanche4me, Catofquestionableethics, CatTheSystem, Centronias, chairbender, Charlese2, charlie, ChaseFlorom, chavonadelal, Cheackraze, cheesePizza2, cheeseplated, Chief-Engineer, chillyconmor, christhirtle, chromiumboy, Chronophylos, Chubbygummibear, Ciac32, civilCornball, Clement-O, clyf, Clyybber, CMDR-Piboy314, CodedCrow, cohanna, Cohnway, Cojoke-dot, ColdAutumnRain, Colin-Tel, collinlunn, ComicIronic, CookieMasterT, coolboy911, coolmankid12345, Coolsurf6, corentt, CormosLemming, crazybrain23, creadth, CrigCrag, croilbird, Crotalus, CrudeWax, CrzyPotato, cutemoongod, Cyberboss, d34d10cc, d4kii, dabigoose, DadeKuma, Daemon, daerSeebaer, dahnte, dakamakat, DamianX, DangerRevolution, daniel-cr, DanSAussieITS, Daracke, DarkenedSynergy, Darkenson, DawBla, Daxxi3, dch-GH, de0rix, Deahaka, dean, DEATHB4DEFEAT, DeathCamel58, Deatherd, deathride58, DebugOk, Decappi, Decortex, Deeeeja, deepdarkdepths, DefinitelyNotFurryXD, degradka, Delete69, deltanedas, DeltaV-Bot, DenisShvalov, DerbyX, derek, dersheppard, Deserty0, Detintinto, DevilishMilk, dexlerxd, dffdff2423, dge21, DieselMohawk, digitalic, Dimastra, DinoWattz, DisposableCrewmember42, DjfjdfofdjfjD, doc-michael, docnite, Doctor-Cpu, DoctorBeard, DogZeroX, dolgovmi, dontbetank, Doomsdrayk, dootythefrooty, Dorragon, Doru991, DoubleRiceEddiedd, DoutorWhite, dragonryan06, drakewill-CRL, Drayff, dreamlyjack, DrEnzyme, dribblydrone, DrMelon, drongood12, DrSingh, DrSmugleaf, drteaspoon420, DTanxxx, DubiousDoggo, Duddino, dukevanity, duskyjay, Dutch-VanDerLinde, dvir001, Dynexust, Easypoller, eclips_e, eden077, EEASAS, Efruit, efzapa, ElectroSR, elsie, elthundercloud, Elysium206, Emisse, emmafornash, EmoGarbage404, Endecc, eoineoineoin, eris, erohrs2, ERORR404V1, Errant-4, esguard, estacaoespacialpirata, eugene, exincore, exp111, f0x-n3rd, FacePluslll, Fahasor, FairlySadPanda, FATFSAAM2, Feluk6174, ficcialfaint, Fiftyllama, Fildrance, FillerVK, FinnishPaladin, FirinMaLazors, Fishfish458, FL-OZ, Flareguy, flashgnash, FluffiestFloof, FluffMe, FluidRock, flyingkarii, foboscheshir, FoLoKe, fooberticus, ForestNoises, forgotmyotheraccount, forkeyboards, forthbridge, Fortune117, Fouin, foxhorn, freeman2651, freeze2222, Froffy025, Fromoriss, froozigiusz, FrostMando, FryOfDestiny, FungiFellow, FunTust, Futuristic-OK, GalacticChimp, gamer3107, Gaxeer, gbasood, Geekyhobo, genderGeometries, GeneralGaws, Genkail, geraeumig, Ghagliiarghii, Git-Nivrak, githubuser508, gituhabu, GlassEclipse, GNF54, godisdeadLOL, goet, Goldminermac, Golinth, GoodWheatley, Gorox221, gradientvera, graevy, GraniteSidewalk, GreaseMonk, greenrock64, greggthefather, GreyMario, GTRsound, Guess-My-Name, gusxyz, Gyrandola, h3half, Haltell, Hanzdegloker, HappyRoach, Hardly3D, harikattar, he1acdvv, Hebi, Henry, HerCoyote23, hitomishirichan, hiucko, Hmeister-fake, Hmeister-real, hobnob, HoidC, Holinka4ever, holyssss, HoofedEar, Hoolny, hord-brayden, Hreno, htmlsystem, hubismal, Hugal31, Huxellberger, Hyenh, hyphenationc, i-justuser-i, iacore, IamVelcroboy, ian, icekot8, icesickleone, iczero, iglov, IgorAnt028, igorsaux, ike709, illersaver, Illiux, Ilushkins33, Ilya246, IlyaElDunaev, imrenq, imweax, indeano, Injazz, Insineer, IntegerTempest, Interrobang01, IProduceWidgets, itsmethom, Itzbenz, iztokbajcar, Jackal298, Jackrost, jacksonzck, Jackw2As, jacob, jamessimo, janekvap, Jark255, Jaskanbe, JasperJRoth, JerryImMouse, jerryimmouse, Jessetriesagain, jessicamaybe, Jezithyr, jicksaw, JiimBob, JimGamemaster, jimmy12or, JIPDawg, jjtParadox, jmcb, JoeHammad1844, JohnGinnane, johnku1, Jophire, joshepvodka, Jrpl, juliangiebel, JustArt1m, JustCone14, justdie12, justin, justintether, JustinTrotter, justtne, K-Dynamic, k3yw, Kadeo64, Kaga-404, KaiShibaa, kalane15, kalanosh, Kanashi-Panda, katzenminer, kbailey-git, Keelin, Keer-Sar, KEEYNy, keikiru, Kelrak, kerisargit, keronshb, KIBORG04, Killerqu00, Kimpes, KingFroozy, kira-er, Kirillcas, Kirus59, Kistras, Kit0vras, KittenColony, klaypexx, Kmc2000, Ko4ergaPunk, kognise, kokoc9n, komunre, KonstantinAngelov, kosticia, koteq, KrasnoshchekovPavel, Krunklehorn, Kupie, Kurzaen, kxvvv, kyupolaris, kzhanik, lajolico, Lamrr, LankLTE, laok233, lapatison, larryrussian, lawdog4817, Lazzi0706, leander-0, leonardo-dabepis, leonsfriedrich, LetterN, lettern, Level10Cybermancer, LEVELcat, lever1209, Lgibb18, lgruthes, LightVillet, liltenhead, LinkUyx, LittleBuilderJane, LittleNyanCat, lizelive, lleftTheDragon, localcc, lokachop, Lomcastar, LordCarve, LordEclipse, lucas, LucasTheDrgn, luckyshotpictures, LudwigVonChesterfield, luizwritescode, Lukasz825700516, luminight, lunarcomets, luringens, lvvova1, Lyndomen, lyroth001, lzimann, lzk228, M3739, mac6na6na, MACMAN2003, Macoron, magicalus, magmodius, MagnusCrowe, malchanceux, MaloTV, ManelNavola, manelnavola, Mangohydra, marboww, Markek1, Matz05, max, MaxNox7, maylokana, MehimoNemo, MeltedPixel, MemeProof, memoblob, MendaxxDev, Menshin, Mephisto72, MerrytheManokit, Mervill, metalgearsloth, MetalSage, MFMessage, mhamsterr, michaelcu, micheel665, MilenVolf, MilonPL, Minemoder5000, Minty642, Mirino97, mirrorcult, misandrie, MishaUnity, MissKay1994, MisterMecky, Mith-randalf, MjrLandWhale, mkanke-real, MLGTASTICa, mnemotechnician, moderatelyaware, modern-nm, mokiros, Moneyl, Monotheonist, Moomoobeef, moony, Morb0, mr-bo-jangles, Mr0maks, MrFippik, mrrobdemo, muburu, MureixloI, musicmanvr, MWKane, Myakot, Myctai, N3X15, nails-n-tape, Nairodian, Naive817, NakataRin, namespace-Memory, Nannek, NazrinNya, neutrino-laser, NickPowers43, nikthechampiongr, Nimfar11, Nirnael, NIXC, NkoKirkto, nmajask, noctyrnal, noelkathegod, nok-ko, NonchalantNoob, NoobyLegion, Nopey, not-gavnaed, notafet, notquitehadouken, notsodana, noudoit, noverd, NuclearWinter, nukashimika, nuke-haus, NULL882, nullarmo, NullWanderer, nyeogmi, Nylux, Nyranu, och-och, ocotheomega, OctoRocket, OldDanceJacket, onoira, OnyxTheBrave, OrangeMoronage9622, osjarw, Ostaf, othymer, OttoMaticode, Owai-Seek, packmore, paigemaeforrest, pali6, Pangogie, panzer-iv1, paolordls, partyaddict, patrikturi, PaulRitter, peccneck, Peptide90, peptron1, PeterFuto, PetMudstone, pewter-wiz, Pgriha, Phantom-Lily, PHCodes, pheenty, Phill101, phunnyguy, PilgrimViis, Pill-U, Pireax, pissdemon, PixeltheAertistContrib, PixelTheKermit, PJB3005, Plasmaguy, plinyvic, Plykiya, pofitlo, pointer-to-null, pok27, PolterTzi, PoorMansDreams, PopGamer45, portfiend, potato1234x, PotentiallyTom, PPooch, ProfanedBane, ProPandaBear, PrPleGoo, ps3moira, Pspritechologist, Psychpsyo, psykzz, PuceTint, PuroSlavKing, PursuitInAshes, Putnam3145, qrtDaniil, quatre, QueerNB, QuietlyWhisper, qwerltaz, Radezolid, RadioMull, Radosvik, Radrark, Rainbeon, Rainfey, Raitononai, Ramlik, randy10122, Rane, Ranger6012, Rapidgame7, ravage123321, rbertoche, Redfire1331, Redict, RedlineTriad, redmushie, RednoWCirabrab, RemberBM, RemieRichards, RemTim, Remuchi, rene-descartes2021, Renlou, retequizzle, RiceMar1244, rich-dunne, RieBi, riggleprime, RIKELOLDABOSS, rinary1, Rinkashikachi, riolume, RobbyTheFish, Rockdtben, Rohesie, rok-povsic, rolfero, RomanNovo, rosieposieeee, Roudenn, router, RumiTiger, S1rFl0, S1ss3l, Saakra, Sadie-silly, saga3152, saintmuntzer, Salex08, sam, samgithubaccount, Samsterious, SaphireLattice, SapphicOverload, sarahon, SaveliyM360, sBasalto, ScalyChimp, ScarKy0, scrato, Scribbles0, scrivoy, scruq445, scuffedjays, ScumbagDog, Segonist, sephtasm, Serkket, sewerpig, sh18rw, ShadeAware, ShadowCommander, Shadowtheprotogen546, shadowwailker, shaeone, shampunj, shariathotpatrol, ShatteredSwords, SignalWalker, siigiil, SimpleStation14, Simyon264, sirdragooon, Sirionaut, Sk1tch, SkaldetSkaeg, Skarletto, Skrauz, Skyedra, SlamBamActionman, slarticodefast, Slava0135, Slyfox333, snebl, sniperchance, Snowni, snowsignal, solaris7518, SonicHDC, SoulFN, SoulSloth, Soundwavesghost, southbridge-fur, Soydium, SpaceLizardSky, SpaceManiac, SpaceyLady, spartak, SpartanKadence, SpeltIncorrectyl, Spessmann, SphiraI, SplinterGP, spoogemonster, sporekto, sporkyz, Squishy77, SsalamethVersaach, ssdaniel24, stalengd, stanberytrask, Stanislav4ix, StanTheCarpenter, Stealthbomber16, stellar-novas, stomf, Stop-Signs, stopbreaking, stopka-html, StrawberryMoses, Stray-Pyramid, strO0pwafel, Strol20, StStevens, Subversionary, sunbear-dev, superjj18, Supernorn, SweptWasTaken, Sybil, SYNCHRONIC, Szunti, TadJohnson00, Tainakov, takemysoult, TaralGit, Taran, taurie, Tayrtahn, tday93, teamaki, TekuNut, telyonok, TemporalOroboros, tentekal, terezi4real, Terraspark4941, texcruize, TGRCdev, tgrkzus, ThataKat, ThatOneGoblin25, thatrandomcanadianguy, TheArturZh, theashtronaut, thecopbennet, TheCze, TheDarkElites, thedraccx, TheEmber, TheIntoxicatedCat, thekilk, themias, theomund, TheOneWhoIsManyFrame, theOperand, TherapyGoth, therealDLondon, TheShuEd, thetolbean, thevinter, TheWaffleJesus, Thinbug0, ThunderBear2006, Timemaster99, timothyteakettle, TimrodDX, timurjavid, tin-man-tim, Titian3, tk-a369, tkdrg, tmtmtl30, toasterpm87, TokenStyle, Tollhouse, Toly65, tom-leys, tomasalves8, Tomeno, Tonydatguy, topy, Tornado-Technology, tosatur, TotallyLemon, tropicalhibi, truepaintgit, Truoizys, Tryded, TsjipTsjip, Tunguso4ka, TurboTrackerss14, tyashley, Tyler-IN, Tyzemol, UbaserB, ubis1, UBlueberry, UKNOWH, UltimateJester, Unbelievable-Salmon, underscorex5, UnicornOnLSD, Unisol, Unkn0wnGh0st333, unusualcrow, Uriende, UristMcDorf, user424242420, Vaaankas, valentfingerov, Varen, Vasilis, VasilisThePikachu, Velcroboy, veliebm, VelonacepsCalyxEggs, venn, veprolet, veritable-calamity, Veritius, Vermidia, vero5123, Verslebas, VigersRay, violet754, Visne, vitalvitriol, VMSolidus, voidnull000, volotomite, volundr-, Voomra, Vordenburg, vorkathbruh, vulppine, wafehling, Warentan, WarMechanic, Watermelon914, weaversam8, wertanchik, whateverusername0, Willhelm53, WilliamECrew, willicassi, Winkarst-cpu, wirdal, wixoaGit, WlarusFromDaSpace, wrexbe, wtcwr68, xkreksx, xprospero, xRiriq, YanehCheck, yathxyz, Ygg01, YotaXP, youarereadingthis, Yousifb26, youtissoum, yunii, YuriyKiss, yuriykiss, zach-hill, Zadeon, zamp, Zandario, Zap527, Zealith-Gamer, ZelteHonor, zero, ZeroDiamond, ZeWaka, zionnBE, ZNixian, ZoldorfTheWizard, zonespace27, ZweiHawke, Zylofan, Zymem, zzylex diff --git a/Resources/Locale/en-US/_NF/mail/mail.ftl b/Resources/Locale/en-US/_NF/mail/mail.ftl index 394c551fad5..7ab4f6b6f55 100644 --- a/Resources/Locale/en-US/_NF/mail/mail.ftl +++ b/Resources/Locale/en-US/_NF/mail/mail.ftl @@ -1,7 +1,8 @@ mail-large-item-name-unaddressed = package mail-large-item-name-addressed = package ({$recipient}) mail-large-desc-far = A large package. -mail-large-desc-close = A large package addressed to {CAPITALIZE($name)}, {$job}. Last known location: {$station}. +# DelaV - Removed "Last known location" +mail-large-desc-close = A large package addressed to {CAPITALIZE($name)}, {$job}. ### Frontier: mailtestbulk command-mailtestbulk = Sends one of each type of parcel to a given mail teleporter. Implicitly calls mailnow. diff --git a/Resources/Locale/en-US/_lib.ftl b/Resources/Locale/en-US/_lib.ftl index c901d0f461e..5c6f73af66f 100644 --- a/Resources/Locale/en-US/_lib.ftl +++ b/Resources/Locale/en-US/_lib.ftl @@ -31,3 +31,6 @@ zzzz-fmt-power-joules = { TOSTRING($divided, "F1") } { $places -> [4] TJ *[5] ??? } + +# Used internally by the PLAYTIME() function. +zzzz-fmt-playtime = {$hours}H {$minutes}M \ No newline at end of file diff --git a/Resources/Locale/en-US/accessories/human-hair.ftl b/Resources/Locale/en-US/accessories/human-hair.ftl index 9575cd5c2fa..58314f9bb2e 100644 --- a/Resources/Locale/en-US/accessories/human-hair.ftl +++ b/Resources/Locale/en-US/accessories/human-hair.ftl @@ -97,6 +97,7 @@ marking-HumanHairJensen = Jensen Hair marking-HumanHairJoestar = Joestar marking-HumanHairKeanu = Keanu Hair marking-HumanHairKusanagi = Kusanagi Hair +marking-HumanHairLongBow = Long Bow marking-HumanHairLong = Long Hair 1 marking-HumanHairLong2 = Long Hair 2 marking-HumanHairLong3 = Long Hair 3 @@ -147,6 +148,7 @@ marking-HumanHairSpikyponytail = Ponytail (Spiky) marking-HumanHairPoofy = Poofy marking-HumanHairQuiff = Quiff marking-HumanHairRonin = Ronin +marking-HumanHairShaped = Shaped marking-HumanHairShaved = Shaved marking-HumanHairShavedpart = Shaved Part marking-HumanHairShortbangs = Short Bangs diff --git a/Resources/Locale/en-US/administration/commands/custom-vote-command.ftl b/Resources/Locale/en-US/administration/commands/custom-vote-command.ftl deleted file mode 100644 index 221f0629a51..00000000000 --- a/Resources/Locale/en-US/administration/commands/custom-vote-command.ftl +++ /dev/null @@ -1,5 +0,0 @@ -custom-vote-webhook-name = Custom Vote Held -custom-vote-webhook-footer = server: { $serverName }, round: { $roundId } { $runLevel } -custom-vote-webhook-cancelled = **Vote cancelled** -custom-vote-webhook-option-pending = TBD -custom-vote-webhook-option-cancelled = N/A diff --git a/Resources/Locale/en-US/administration/smites.ftl b/Resources/Locale/en-US/administration/smites.ftl index 467a1577e7a..de02129917e 100644 --- a/Resources/Locale/en-US/administration/smites.ftl +++ b/Resources/Locale/en-US/administration/smites.ftl @@ -21,42 +21,42 @@ admin-smite-explode-name = Explode admin-smite-chess-dimension-name = Chess Dimension admin-smite-set-alight-name = Set Alight admin-smite-monkeyify-name = Monkeyify -admin-smite-electrocute-name = Garbage Can -admin-smite-creampie-name = Electrocute -admin-smite-remove-blood-name = Creampie -admin-smite-vomit-organs-name = Remove blood -admin-smite-remove-hands-name = Vomit organs -admin-smite-remove-hand-name = Remove hands -admin-smite-pinball-name = Remove hand -admin-smite-yeet-name = Stomach Removal -admin-smite-become-bread-name = Lungs Removal -admin-smite-ghostkick-name = Pinball -admin-smite-nyanify-name = Yeet -admin-smite-kill-sign-name = Become Bread -admin-smite-cluwne-name = Become Mouse -admin-smite-anger-pointing-arrows-name = Ghostkick -admin-smite-dust-name = Nyanify -admin-smite-buffering-name = Kill sign -admin-smite-become-instrument-name = Cluwne -admin-smite-remove-gravity-name = Maid -admin-smite-reptilian-species-swap-name = Anger Pointing Arrows -admin-smite-locker-stuff-name = Dust -admin-smite-headstand-name = Buffering -admin-smite-become-mouse-name = Become Instrument -admin-smite-maid-name = Remove gravity -admin-smite-zoom-in-name = Reptilian Species Swap -admin-smite-flip-eye-name = Locker stuff -admin-smite-run-walk-swap-name = Headstand -admin-smite-super-speed-name = Zoom in -admin-smite-stomach-removal-name = Flip eye -admin-smite-speak-backwards-name = Run Walk Swap -admin-smite-lung-removal-name = Speak Backwards +admin-smite-garbage-can-name = Garbage Can +admin-smite-electrocute-name = Electrocute +admin-smite-remove-blood-name = Remove blood +admin-smite-remove-hands-name = Remove hands +admin-smite-remove-hand-name = Remove hand +admin-smite-pinball-name = Pinball +admin-smite-yeet-name = Yeet +admin-smite-become-bread-name = Become Bread +admin-smite-cluwne-name = Cluwne +admin-smite-anger-pointing-arrows-name = Anger Pointing Arrows +admin-smite-dust-name = Dust +admin-smite-buffering-name = Buffering +admin-smite-become-instrument-name = Become Instrument +admin-smite-remove-gravity-name = Remove Gravity +admin-smite-reptilian-species-swap-name = Become Reptilian +admin-smite-locker-stuff-name = Locker Stuff +admin-smite-headstand-name = Headstand +admin-smite-become-mouse-name = Become Mouse +admin-smite-maid-name = Cat Maid +admin-smite-zoom-in-name = Zoom In +admin-smite-flip-eye-name = Flip Eye +admin-smite-run-walk-swap-name = Run Walk Swap +admin-smite-super-speed-name = Run Up +admin-smite-stomach-removal-name = Stomach Removal +admin-smite-speak-backwards-name = Speak Backwards +admin-smite-lung-removal-name = Lungs Removal admin-smite-disarm-prone-name = Disarm Prone -admin-smite-garbage-can-name = Super speed -admin-smite-super-bonk-name = Super Bonk Lite -admin-smite-super-bonk-lite-name = Super Bonk +admin-smite-super-bonk-name = Super Bonk +admin-smite-super-bonk-lite-name = Super Bonk Lite admin-smite-terminate-name = Terminate admin-smite-super-slip-name = Super Slip +admin-smite-creampie-name = Cream +admin-smite-vomit-organs-name = Vomit Organs +admin-smite-ghostkick-name = Ghost Kick +admin-smite-nyanify-name = Cat Ears +admin-smite-kill-sign-name = Kill Sign ## Smite descriptions diff --git a/Resources/Locale/en-US/advertisements/other/firebot.ftl b/Resources/Locale/en-US/advertisements/other/firebot.ftl new file mode 100644 index 00000000000..c614d5ecd0f --- /dev/null +++ b/Resources/Locale/en-US/advertisements/other/firebot.ftl @@ -0,0 +1,4 @@ +advertisement-firebot-1 = No fires detected. +advertisement-firebot-2 = Only you can prevent station fires. +advertisement-firebot-3 = Temperature nominal. +advertisement-firebot-4 = Keep it cool. \ No newline at end of file diff --git a/Resources/Locale/en-US/atmos/atmos-alerts-console.ftl b/Resources/Locale/en-US/atmos/atmos-alerts-console.ftl index a1640c5e9d5..470a8f86952 100644 --- a/Resources/Locale/en-US/atmos/atmos-alerts-console.ftl +++ b/Resources/Locale/en-US/atmos/atmos-alerts-console.ftl @@ -25,7 +25,7 @@ atmos-alerts-window-warning-state = Warning atmos-alerts-window-danger-state = Danger! atmos-alerts-window-invalid-state = Inactive -atmos-alerts-window-no-active-alerts = [font size=16][color=white]No active alerts -[/color] [color={$color}]situation normal[/color][/font] +atmos-alerts-window-no-active-alerts = [font size=16][color=white]No active alerts -[/color] [color={$color}]Situation normal[/color][/font] atmos-alerts-window-no-data-available = No data available atmos-alerts-window-alerts-being-silenced = Silencing alerts... diff --git a/Resources/Locale/en-US/bed/cryostorage/cryogenic-storage.ftl b/Resources/Locale/en-US/bed/cryostorage/cryogenic-storage.ftl index 7d1c0794435..f966f30e2d4 100644 --- a/Resources/Locale/en-US/bed/cryostorage/cryogenic-storage.ftl +++ b/Resources/Locale/en-US/bed/cryostorage/cryogenic-storage.ftl @@ -2,5 +2,6 @@ ### Announcement earlyleave-cryo-job-unknown = Unknown -earlyleave-cryo-announcement = {$character} ({$job}) { CONJUGATE-HAVE($entity) } entered cryogenic storage! +# {$entity} available for GENDER function purposes +earlyleave-cryo-announcement = {$character} ({$job}) has entered cryogenic storage! earlyleave-cryo-sender = Station diff --git a/Resources/Locale/en-US/botany/components/plant-holder-component.ftl b/Resources/Locale/en-US/botany/components/plant-holder-component.ftl index 0e8c4137f4e..ca20c277f53 100644 --- a/Resources/Locale/en-US/botany/components/plant-holder-component.ftl +++ b/Resources/Locale/en-US/botany/components/plant-holder-component.ftl @@ -8,8 +8,6 @@ plant-holder-component-no-weeds-message = This plot is devoid of weeds! It doesn plant-holder-component-remove-plant-message = You remove the plant from the {$name}. plant-holder-component-remove-plant-others-message = {$name} removes the plant. plant-holder-component-no-plant-message = There is no plant to remove. -plant-holder-component-empty-message = {$owner} is empty! -plant-holder-component-spray-message = You spray {$owner}. plant-holder-component-transfer-message = You transfer {$amount}u to {$owner}. plant-holder-component-nothing-to-sample-message = There is nothing to take a sample of! plant-holder-component-already-sampled-message = This plant has already been sampled. diff --git a/Resources/Locale/en-US/cartridge-loader/cartridges.ftl b/Resources/Locale/en-US/cartridge-loader/cartridges.ftl index f5cda2f2a18..ceeac1be3c9 100644 --- a/Resources/Locale/en-US/cartridge-loader/cartridges.ftl +++ b/Resources/Locale/en-US/cartridge-loader/cartridges.ftl @@ -19,3 +19,36 @@ log-probe-scan = Downloaded logs from {$device}! log-probe-label-time = Time log-probe-label-accessor = Accessed by log-probe-label-number = # + +astro-nav-program-name = AstroNav + +med-tek-program-name = MedTek + +# Wanted list cartridge +wanted-list-program-name = Wanted list +wanted-list-label-no-records = It's all right, cowboy +wanted-list-search-placeholder = Search by name and status + +wanted-list-age-label = [color=darkgray]Age:[/color] [color=white]{$age}[/color] +wanted-list-job-label = [color=darkgray]Job:[/color] [color=white]{$job}[/color] +wanted-list-species-label = [color=darkgray]Species:[/color] [color=white]{$species}[/color] +wanted-list-gender-label = [color=darkgray]Gender:[/color] [color=white]{$gender}[/color] + +wanted-list-reason-label = [color=darkgray]Reason:[/color] [color=white]{$reason}[/color] +wanted-list-unknown-reason-label = unknown reason + +wanted-list-initiator-label = [color=darkgray]Initiator:[/color] [color=white]{$initiator}[/color] +wanted-list-unknown-initiator-label = unknown initiator + +wanted-list-status-label = [color=darkgray]status:[/color] {$status -> + [suspected] [color=yellow]suspected[/color] + [wanted] [color=red]wanted[/color] + [detained] [color=#b18644]detained[/color] + [paroled] [color=green]paroled[/color] + [discharged] [color=green]discharged[/color] + *[other] none + } + +wanted-list-history-table-time-col = Time +wanted-list-history-table-reason-col = Crime +wanted-list-history-table-initiator-col = Initiator diff --git a/Resources/Locale/en-US/chat/emotes.ftl b/Resources/Locale/en-US/chat/emotes.ftl index cccb33a1f17..8c74acafca2 100644 --- a/Resources/Locale/en-US/chat/emotes.ftl +++ b/Resources/Locale/en-US/chat/emotes.ftl @@ -8,6 +8,7 @@ chat-emote-name-crying = Crying chat-emote-name-squish = Squish chat-emote-name-chitter = Chitter chat-emote-name-squeak = Squeak +chat-emote-name-thump = Thump Tail chat-emote-name-click = Click chat-emote-name-clap = Clap chat-emote-name-snap = Snap @@ -40,6 +41,7 @@ chat-emote-msg-crying = cries. chat-emote-msg-squish = squishes. chat-emote-msg-chitter = chitters. chat-emote-msg-squeak = squeaks. +chat-emote-msg-thump = thumps {POSS-ADJ($entity)} tail. chat-emote-msg-click = clicks. chat-emote-msg-clap = claps! chat-emote-msg-snap = snaps {POSS-ADJ($entity)} fingers. diff --git a/Resources/Locale/en-US/deltav/cargo/stocks-comapnies.ftl b/Resources/Locale/en-US/deltav/cargo/stocks-comapnies.ftl new file mode 100644 index 00000000000..69ef7330a56 --- /dev/null +++ b/Resources/Locale/en-US/deltav/cargo/stocks-comapnies.ftl @@ -0,0 +1,6 @@ +# Company names used for stocks trading +stock-trading-company-nanotrasen = Nanotrasen [NT] +stock-trading-company-gorlex = Gorlex [GRX] +stock-trading-company-interdyne = Interdyne Pharmaceuticals [INTP] +stock-trading-company-fishinc = Fish Inc. [FIN] +stock-trading-company-donk = Donk Co. [DONK] diff --git a/Resources/Locale/en-US/deltav/cargo/stocks-commands.ftl b/Resources/Locale/en-US/deltav/cargo/stocks-commands.ftl new file mode 100644 index 00000000000..8e0fe014999 --- /dev/null +++ b/Resources/Locale/en-US/deltav/cargo/stocks-commands.ftl @@ -0,0 +1,13 @@ +# changestockprice command +cmd-changestocksprice-desc = Changes a company's stock price to the specified number. +cmd-changestocksprice-help = changestockprice [Station UID] +cmd-changestocksprice-invalid-company = Failed to execute command! Invalid company index or the new price exceeds the allowed limit. +cmd-changestocksprice-invalid-station = No stock market found for specified station +cmd-changestocksprice-no-stations = No stations with stock markets found + +# addstockscompany command +cmd-addstockscompany-desc = Adds a new company to the stocks market. +cmd-addstockscompany-help = addstockscompany [Station UID] +cmd-addstockscompany-failure = Failed to add company to the stock market. +cmd-addstockscompany-invalid-station = No stock market found for specified station +cmd-addstockscompany-no-stations = No stations with stock markets found diff --git a/Resources/Locale/en-US/deltav/cartridge-loader/cartridges.ftl b/Resources/Locale/en-US/deltav/cartridge-loader/cartridges.ftl index ede1a36b8ee..ec6fe1e11ae 100644 --- a/Resources/Locale/en-US/deltav/cartridge-loader/cartridges.ftl +++ b/Resources/Locale/en-US/deltav/cartridge-loader/cartridges.ftl @@ -1,3 +1,6 @@ +## CrimeAssist + +# General crime-assist-program-name = Crime Assist crime-assist-yes-button = Yes crime-assist-no-button = No @@ -6,6 +9,14 @@ crime-assist-crimetype-misdemeanour = Misdemeanour crime-assist-crimetype-felony = Felony crime-assist-crimetype-capital = Capital crime-assist-crime-innocent = No crime was committed +crime-assist-mainmenu = Welcome to Crime Assist! +crime-assist-sophont-explanation = A sophont is described as any entity with the capacity to display the following attributes: + • [bold]Sapience[/bold]: the entity possesses basic logic and problem-solving skills, or at a minimum some level of significant intelligence. + • [bold]Sentience[/bold]: the entity has the capacity to process an emotion or lack thereof, or at a minimum the ability to recognise its own pain. + • [bold]Self-awareness[/bold]: the entity is capable of altering its behaviour in a reasonable fashion as a result of stimuli, or at a minimum is capable of recognising its own sapience and sentience. + Any sophont is considered a legal person, regardless of origin or prior cognitive status. Much like any other intelligent organic, a sophont may press charges against crew and be tried for crimes. + +# Crimes crime-assist-crime-animalcruelty = Code 101: Animal Cruelty crime-assist-crime-theft = Code 102: Theft crime-assist-crime-trespass = Code 110: Trespass @@ -32,7 +43,8 @@ crime-assist-crime-decorporealisation = Code 305: Decorporealisation crime-assist-crime-kidnapping = Code 309: Kidnapping crime-assist-crime-sedition = Code 311: Sedition crime-assist-crime-sexualharassment = Code 314: Sexual Harassment -crime-assist-mainmenu = Welcome to Crime Assist! + +# Questions crime-assist-question-isitterrorism = Did the suspect hold hostages, cause many deaths or major destruction to force compliance from the crew? crime-assist-question-wassomeoneattacked = Was an entity attacked? crime-assist-question-wasitsophont = Was the victim in question a sophont? @@ -59,6 +71,8 @@ crime-assist-question-happenincourt = Was the suspect a nuisance in court? crime-assist-question-duringactiveinvestigation = Was the suspect a nuisance during an active investigation, and hindered the investigation as a result? crime-assist-question-tocommandstaff = Did the suspect overthrow or compromise a lawfully established Chain of Command, or attempt to do so? crime-assist-question-wasitcommanditself = Was a command staff or department head abusing authority over another sophont? + +# Crime details crime-assist-crimedetail-innocent = Crime could not be determined. Use your best judgement to resolve the situation. crime-assist-crimedetail-animalcruelty = To inflict unnecessary suffering on a sapient being with malicious intent. crime-assist-crimedetail-theft = To unlawfully take property or items without consent. @@ -86,6 +100,8 @@ crime-assist-crimedetail-decorporealisation = To unlawfully, maliciously, and pe crime-assist-crimedetail-kidnapping = To unlawfully confine or restrict the free movement of a sophont against their will. crime-assist-crimedetail-sedition = To act to overthrow a lawfully established Chain of Command or governing body without lawful or legitimate cause. crime-assist-crimedetail-sexualharassment = To sexually harass, attempt to coerce into sexual relations, or effect unwanted sexual contact with an unwilling sophont. + +# Punishments crime-assist-crimepunishment-innocent = No punishment may be necessary crime-assist-crimepunishment-animalcruelty = Punishment: 3 minutes crime-assist-crimepunishment-theft = Punishment: 2 minutes @@ -113,12 +129,10 @@ crime-assist-crimepunishment-decorporealisation = Punishment: Capital crime-assist-crimepunishment-kidnapping = Punishment: Capital crime-assist-crimepunishment-sedition = Punishment: Capital crime-assist-crimepunishment-sexualharassment = Punishment: Capital -crime-assist-sophont-explanation = A sophont is described as any entity with the capacity to display the following attributes: - • [bold]Sapience[/bold]: the entity possesses basic logic and problem-solving skills, or at a minimum some level of significant intelligence. - • [bold]Sentience[/bold]: the entity has the capacity to process an emotion or lack thereof, or at a minimum the ability to recognise its own pain. - • [bold]Self-awareness[/bold]: the entity is capable of altering its behaviour in a reasonable fashion as a result of stimuli, or at a minimum is capable of recognising its own sapience and sentience. - Any sophont is considered a legal person, regardless of origin or prior cognitive status. Much like any other intelligent organic, a sophont may press charges against crew and be tried for crimes. +## MailMetrics + +# General mail-metrics-program-name = MailMetrics mail-metrics-header = Income from Mail Deliveries mail-metrics-opened = Earnings (Opened) @@ -131,3 +145,16 @@ mail-metrics-money-header = Spesos mail-metrics-total = Total mail-metrics-progress = {$opened} out of {$total} packages opened! mail-metrics-progress-percent = Success rate: {$successRate}% + +## StockTrading + +# General +stock-trading-program-name = StockTrading +stock-trading-title = Intergalactic Stock Market +stock-trading-balance = Balance: {$balance} credits +stock-trading-no-entries = No entries +stock-trading-owned-shares = Owned: {$shares} +stock-trading-buy-button = Buy +stock-trading-sell-button = Sell +stock-trading-amount-placeholder = Amount +stock-trading-price-history = Price History diff --git a/Resources/Locale/en-US/deltav/chapel/altar.ftl b/Resources/Locale/en-US/deltav/chapel/altar.ftl new file mode 100644 index 00000000000..ed031d638ac --- /dev/null +++ b/Resources/Locale/en-US/deltav/chapel/altar.ftl @@ -0,0 +1,11 @@ +altar-examine = [color=purple]This altar can be used to sacrifice Psionics.[/color] +altar-sacrifice-verb = Sacrifice + +altar-failure-reason-self = You can't sacrifice yourself! +altar-failure-reason-user = You are not psionic or clerically trained! +altar-failure-reason-user-humanoid = You are not a humanoid! +altar-failure-reason-target = {CAPITALIZE(THE($target))} {CONJUGATE-BE($target)} not psionic! +altar-failure-reason-target-humanoid = {CAPITALIZE(THE($target))} {CONJUGATE-BE($target)} not a humanoid! +altar-failure-reason-target-catatonic = {CAPITALIZE(THE($target))} {CONJUGATE-BE($target)} braindead! + +altar-sacrifice-popup = {$user} starts to sacrifice {$target}! diff --git a/Resources/Locale/en-US/deltav/game-ticking/game-rules/rule-fugitive.ftl b/Resources/Locale/en-US/deltav/game-ticking/game-rules/rule-fugitive.ftl index 4593b2257fd..67f73578391 100644 --- a/Resources/Locale/en-US/deltav/game-ticking/game-rules/rule-fugitive.ftl +++ b/Resources/Locale/en-US/deltav/game-ticking/game-rules/rule-fugitive.ftl @@ -5,8 +5,8 @@ fugitive-spawn = You fall from the ceiling! station-event-fugitive-hunt-announcement = Please check communications consoles for a sensitive message. fugitive-announcement-GALPOL = GALPOL -fugitive-report-title = WANTED: {$name} -fugitive-report-first-line = Escaped fugitive {$name} has been spotted in the sector. They may be a stowaway on a station somewhere. +fugitive-report-title = WANTED FUGITIVE! +fugitive-report-first-line = An escaped fugitive has been spotted in the sector and disguised their identity. They may be a stowaway on a station somewhere. fugitive-report-inhuman = {CAPITALIZE(THE($name))} {CONJUGATE-BE($name)} inhuman. We have no further details. fugitive-report-morphotype = MORPHOTYPE: {$species} fugitive-report-age = AGE: {$age} @@ -16,6 +16,11 @@ fugitive-report-sex = SEX: {$sex -> *[none] N/A } fugitive-report-weight = WEIGHT: {$weight} kg + +# Random details +fugitive-report-detail-dna = DNA: {$dna} +fugitive-report-detail-prints = FINGERPRINT: {$prints} + fugitive-report-crimes-header = The above individual is wanted across the sector for the following: fugitive-report-crime = - {$count -> [1] One count diff --git a/Resources/Locale/en-US/deltav/ghost/roles/ghost-role-component.ftl b/Resources/Locale/en-US/deltav/ghost/roles/ghost-role-component.ftl index 7c5255b1009..6923ae4105b 100644 --- a/Resources/Locale/en-US/deltav/ghost/roles/ghost-role-component.ftl +++ b/Resources/Locale/en-US/deltav/ghost/roles/ghost-role-component.ftl @@ -2,7 +2,7 @@ ghost-role-information-nukie-mouse-name = Nuclear Operative Mouse ghost-role-information-nukie-mouse-description = A Nuclear Operative reinforcement for the Syndicate. ghost-role-information-nukie-mouse-rules = Normal syndicate antagonist rules apply. Work with whoever called you in, and don't harm them. The crew is allowed to kill you without warning. - You are allowed to attack the crew and destroy the station without provocation. + You are allowed to attack the crew and destroy the station without provocation. ghost-role-information-listeningop-name = Listening Post Operative ghost-role-information-listeningop-description = You are a Listening Post operative. Get into range, observe the station, intercept communications and assist any operatives in the area! ghost-role-information-listeningop-rules = You are a Syndicate Operative tasked with the continuous reporting and monitoring of the station and its activities, as well as assisting any fellow operatives who may be aboard the station. As an antagonist, do whatever is required for you to complete this task. Make sure your station doesn't fall into enemy hands and DO NOT abandon your station! Hide your existence at any cost! @@ -24,7 +24,7 @@ ghost-role-information-recruiter-rules = You are just a recruiter so do not act like a full-on antagonist, i.e. no killing people. ghost-role-information-silvia-name = Silvia -ghost-role-information-silvia-description = You are Silvia the space snake and the CMO's charming companion. +ghost-role-information-silvia-description = You are Silvia the space snake and the CMO's charming companion. ghost-role-information-silvia-rules = Keep the medical team company and help out in emergencies with your omnizine venom. Stick close to the CMO in case they need emergency healing. ghost-role-information-synthesis-name = Synthesis Specialist @@ -34,4 +34,14 @@ ghost-role-information-synthesis-rules = Sell your concoctions to local agents, crew, and anyone with supplies. Stay on your ship, it is your lifeblood! - You are just a chemist so do not act like a full-on antagonist, i.e. no killing people yourself unless your ship is in danger. \ No newline at end of file + You are just a chemist so do not act like a full-on antagonist, i.e. no killing people yourself unless your ship is in danger. + +ghost-role-information-closet-skeleton-rules = You are a old member of the station, try to get your previous job back or dwell in the maintenance tunnels!. + You are a [color=green][bold]Non-antagonist[/bold][/color]. You should generally not seek to harm the station and its crew. + You're allowed some minor mischief. + All normal rules apply unless an administrator tells you otherwise. + +ghost-role-information-syndicate-refugee-rules = You're a regular crewmember from a syndicate station that ended up in a NT sector. + You are a [color=green][bold]Non-antagonist[/bold][/color]. + You're allowed to commit crimes, don't be a threat to the station, don't assist Syndicate agents, metashield rules applies. + All normal rules apply unless an administrator tells you otherwise. diff --git a/Resources/Locale/en-US/deltav/guidebook/chemistry/effects.ftl b/Resources/Locale/en-US/deltav/guidebook/chemistry/effects.ftl new file mode 100644 index 00000000000..886e5b0c4f0 --- /dev/null +++ b/Resources/Locale/en-US/deltav/guidebook/chemistry/effects.ftl @@ -0,0 +1,5 @@ +reagent-effect-guidebook-addicted = + { $chance -> + [1] Causes + *[other] cause + } an addiction. diff --git a/Resources/Locale/en-US/deltav/guidebook/guides.ftl b/Resources/Locale/en-US/deltav/guidebook/guides.ftl index a52cb7e5fd8..f6420fc3d66 100644 --- a/Resources/Locale/en-US/deltav/guidebook/guides.ftl +++ b/Resources/Locale/en-US/deltav/guidebook/guides.ftl @@ -1,17 +1,15 @@ guide-entry-deltav-Rules = Delta-V Rules -guide-entry-deltav-disclaimer-1 = D1. Proper AHelp Ettiquette -guide-entry-deltav-disclaimer-2 = D2. Do not exploit the game guide-entry-deltav-rule-0 = 0. Admin Discretion -guide-entry-deltav-rule-e1 = E1. No Sexual Content/Themes -guide-entry-deltav-rule-e2 = E2. Use English and be respectful -guide-entry-deltav-rule-e3 = E3. Rules regarding livestreaming -guide-entry-deltav-rule-1 = 1. Server Expectations -guide-entry-deltav-rule-2 = 2. Metagaming Guidelines -guide-entry-deltav-rule-3 = 3. New Life Rules -guide-entry-deltav-rule-4 = 4. Naming Convention Rules -guide-entry-deltav-rule-5 = 5. Roleplay Guidelines -guide-entry-deltav-rule-6 = 6. Powergaming Guidelines -guide-entry-deltav-rule-7 = 7. End-Of-Round (EOR) Rules +guide-entry-deltav-rule-a1 = A1. No Sexual Content/Themes +guide-entry-deltav-rule-a2 = A2. Use English and be respectful +guide-entry-deltav-rule-a3 = A3. Rules regarding livestreaming +guide-entry-deltav-rule-a4 = A4. Engage in proper AHelp etiquette +guide-entry-deltav-rule-a5 = A5. Do not exploit the game +guide-entry-deltav-rule-1 = B1. Behave like a normal person +guide-entry-deltav-rule-2 = B2. Follow the Metashield +guide-entry-deltav-rule-3 = B3. Powergaming Guidelines +guide-entry-deltav-rule-4 = B4. Do not behave like an antagonist as a non-antagonist +guide-entry-deltav-rule-5 = B5. Leaving Guidelines guide-entry-deltav-rule-c1 = C1. Command, Security and Justice Guidelines guide-entry-deltav-rule-c2 = C2. Prisoner Guidelines guide-entry-deltav-rule-c3 = C3. Follow Antagonist Guidelines diff --git a/Resources/Locale/en-US/deltav/job/job-names.ftl b/Resources/Locale/en-US/deltav/job/job-names.ftl index 0c808bdc972..c6202ecc7a0 100644 --- a/Resources/Locale/en-US/deltav/job/job-names.ftl +++ b/Resources/Locale/en-US/deltav/job/job-names.ftl @@ -12,6 +12,48 @@ job-name-senior-engineer = Senior Engineer job-name-senior-officer = Senior Officer job-name-qm = Logistics Officer +# Alternate titles +job-alt-title-tourist = Tourist +job-alt-title-off-duty-crew = Off-Duty Crew +job-alt-title-student = Student + +job-alt-title-mixologist = Mixologist + +job-alt-title-baker = Baker +job-alt-title-butcher = Butcher +job-alt-title-pizzaiolo = Pizzaiolo + +job-alt-title-practical-nurse = Practical Nurse +job-alt-title-resident = Resident + +job-alt-title-senior-physician = Senior Physician +job-alt-title-clinician = Clinician + +job-alt-title-life-support = Life Support Technician +job-alt-title-plasma-scientist = Plasma Scientist + +job-alt-title-senior-engineer = Senior Engineer +job-alt-title-electrician = Electrician +job-alt-title-mechanic = Mechanic + +job-alt-title-deck-worker = Deck Worker +job-alt-title-inventory-associate = Inventory Associate + +job-alt-title-mail-carrier = Mail Carrier + +job-alt-title-prospector = Prospector +job-alt-title-excavator = Excavator + +job-alt-title-senior-researcher = Senior Researcher +job-alt-title-lab-technician = Lab Technician +job-alt-title-xenoarch = Xenoarchaeologist +job-alt-title-roboticist = Roboticist + +job-alt-title-senior-officer = Senior Officer + +job-alt-title-jester = Jester +job-alt-title-fool = Fool + # Role timers JobMedicalBorg = Medical Cyborg JobCourier = Courier diff --git a/Resources/Locale/en-US/deltav/job/job-supervisors.ftl b/Resources/Locale/en-US/deltav/job/job-supervisors.ftl index 3cf44813098..c5765d9d199 100644 --- a/Resources/Locale/en-US/deltav/job/job-supervisors.ftl +++ b/Resources/Locale/en-US/deltav/job/job-supervisors.ftl @@ -1 +1 @@ -job-supervisors-cj = the chief justice +job-supervisors-cj = the Chief Justice diff --git a/Resources/Locale/en-US/deltav/markings/scars.ftl b/Resources/Locale/en-US/deltav/markings/scars.ftl new file mode 100644 index 00000000000..151dcbf28b4 --- /dev/null +++ b/Resources/Locale/en-US/deltav/markings/scars.ftl @@ -0,0 +1,2 @@ +marking-ScarChestFemale-scar_chest_female = Chest Scar +marking-ScarChestFemale = Chest Scar diff --git a/Resources/Locale/en-US/deltav/markings/tattoos.ftl b/Resources/Locale/en-US/deltav/markings/tattoos.ftl new file mode 100644 index 00000000000..d62a118a890 --- /dev/null +++ b/Resources/Locale/en-US/deltav/markings/tattoos.ftl @@ -0,0 +1,8 @@ +marking-TattooHiveChestFemale-tattoo_hive_chest_female = Back Tattoo (Hive) +marking-TattooHiveChestFemale = Back Tattoo (Hive) + +marking-TattooNightlingChestMale-tattoo_nightling_male = Chest Tattoo (Nightling) +marking-TattooNightlingChestMale = Chest Tattoo (Nightling) + +marking-TattooNightlingChestFemale-tattoo_nightling_female = Chest Tattoo (Nightling) +marking-TattooNightlingChestFemale = Chest Tattoo (Nightling) diff --git a/Resources/Locale/en-US/deltav/preferences/loadout-groups.ftl b/Resources/Locale/en-US/deltav/preferences/loadout-groups.ftl index ec18b4f7a17..696289c12a9 100644 --- a/Resources/Locale/en-US/deltav/preferences/loadout-groups.ftl +++ b/Resources/Locale/en-US/deltav/preferences/loadout-groups.ftl @@ -67,7 +67,6 @@ loadout-group-scarfs = Scarf # Epistemics loadout-group-mantis-head = Mantis head loadout-group-mantis-jumpsuit = Mantis jumpsuit -loadout-group-mantis-backpack = Mantis backpack loadout-group-mantis-outerclothing = Mantis outer clothing loadout-group-mantis-shoes = Mantis shoes loadout-group-mantis-gloves = Mantis gloves @@ -85,10 +84,11 @@ loadout-group-head-of-security-shoes = Head of Security shoes loadout-group-security-cadet-head = Security Cadet head loadout-group-security-neck = Security neck -loadout-group-brig-medic-head = Brigmedic head -loadout-group-brig-medic-jumpsuit = Brigmedic jumpsuit -loadout-group-brig-medic-back = Brigmedic backpack +loadout-group-brig-medic-head = Corpsman head +loadout-group-brig-medic-jumpsuit = Corpsman jumpsuit +loadout-group-brig-medic-back = Corpsman backpack loadout-group-brig-medic-neck = Corpsman neck +loadout-group-brig-medic-outerclothing = Corpsman outer clothing loadout-group-prison-guard-head = Prison Guard head loadout-group-prison-guard-jumpsuit = Prison Guard jumpsuit @@ -107,6 +107,7 @@ loadout-group-clerk-shoes = Clerk shoes loadout-group-prosecutor-jumpsuit = Prosecutor jumpsuit loadout-group-prosecutor-neck = Prosecutor neck +loadout-group-prosecutor-outer-clothing = Prosecutor outer clothing # Wildcards loadout-group-prisoner-jumpsuit = Prisoner jumpsuit diff --git a/Resources/Locale/en-US/deltav/prototypes/access/accesses.ftl b/Resources/Locale/en-US/deltav/prototypes/access/accesses.ftl index 07a6659b05b..abf10217cb0 100644 --- a/Resources/Locale/en-US/deltav/prototypes/access/accesses.ftl +++ b/Resources/Locale/en-US/deltav/prototypes/access/accesses.ftl @@ -5,3 +5,4 @@ id-card-access-level-prosecutor = Prosecutor id-card-access-level-clerk = Clerk id-card-access-level-justice = Justice id-card-access-level-corpsman = Corpsman +id-card-access-level-robotics = Robotics diff --git a/Resources/Locale/en-US/deltav/recruiter/recruiter.ftl b/Resources/Locale/en-US/deltav/recruiter/recruiter.ftl index 64e4136c1f1..6a4cb4a7090 100644 --- a/Resources/Locale/en-US/deltav/recruiter/recruiter.ftl +++ b/Resources/Locale/en-US/deltav/recruiter/recruiter.ftl @@ -1 +1,3 @@ recruiter-round-end-agent-name = Syndicate Recruiter + +recruiter-role-briefing = Find candidates, conduct interviews and seal the deal by having them sign with your special recruiter's pen. diff --git a/Resources/Locale/en-US/deltav/research/technologies.ftl b/Resources/Locale/en-US/deltav/research/technologies.ftl index b9a37b97454..25377b155f8 100644 --- a/Resources/Locale/en-US/deltav/research/technologies.ftl +++ b/Resources/Locale/en-US/deltav/research/technologies.ftl @@ -4,3 +4,4 @@ research-technology-exotic-ammunition = Exotic Ammunition research-technology-energy-gun = Energy Guns research-technology-energy-gun-advance = Advanced Energy Manipulation research-technology-advance-laser = Advanced Laser Manipulation +research-technology-robust-melee = Robust Melee diff --git a/Resources/Locale/en-US/deltav/roundend/no-eorg-popup.ftl b/Resources/Locale/en-US/deltav/roundend/no-eorg-popup.ftl new file mode 100644 index 00000000000..ecac3cdcebb --- /dev/null +++ b/Resources/Locale/en-US/deltav/roundend/no-eorg-popup.ftl @@ -0,0 +1,8 @@ +no-eorg-popup-title = Delta-V +no-eorg-popup-label = Welcome to the End of Round! +no-eorg-popup-message = [bold]End-of-round grief (EORG)[/bold] is not allowed at Delta-V. Please stay in character until the lobby screen appears to maintain an immersive environment for everyone. Thank you for respecting the community rules! +no-eorg-popup-rule = [bold][color=#a4885c]Rule B4: Significant end-of-round grief (EORG) is not allowed.[/color][/bold] +no-eorg-popup-rule-text = This includes attacking, destroying, polluting, and severely injuring without reason both at and on the way to Central Command. Remember that you are playing a character throughout the round. +no-eorg-popup-close-button = Sounds good! +no-eorg-popup-close-button-wait = The close button will be enabled after {$time} seconds. +no-eorg-popup-skip-checkbox = Don't show this again. diff --git a/Resources/Locale/en-US/deltav/synthesis/synthesis.ftl b/Resources/Locale/en-US/deltav/synthesis/synthesis.ftl index 4214d8ff3fb..43e92f8343a 100644 --- a/Resources/Locale/en-US/deltav/synthesis/synthesis.ftl +++ b/Resources/Locale/en-US/deltav/synthesis/synthesis.ftl @@ -1 +1,3 @@ synthesis-round-end-agent-name = Synthesis Specialist + +synthesis-role-briefing = You are Interdyne's Synthesis Specialist! Prescribe deadly medications, barter your goods, and make a killing. diff --git a/Resources/Locale/en-US/deltav/traits/traits.ftl b/Resources/Locale/en-US/deltav/traits/traits.ftl index 489816a9c24..4c5444ec981 100644 --- a/Resources/Locale/en-US/deltav/traits/traits.ftl +++ b/Resources/Locale/en-US/deltav/traits/traits.ftl @@ -21,5 +21,8 @@ trait-deuteranopia-name = Deuteranopia trait-deuteranopia-desc = Whether through custom bionic eyes, random mutation, or being a Vulpkanin, you have red–green colour blindness. +trait-hushed-name = Hushed +trait-hushed-desc = You are unable to speak louder than a whisper. + trait-uncloneable-name = Uncloneable trait-uncloneable-desc = Cannot be cloned diff --git a/Resources/Locale/en-US/discord/vote-notifications.ftl b/Resources/Locale/en-US/discord/vote-notifications.ftl new file mode 100644 index 00000000000..f6779cac83e --- /dev/null +++ b/Resources/Locale/en-US/discord/vote-notifications.ftl @@ -0,0 +1,11 @@ +custom-vote-webhook-name = Custom Vote Held +custom-vote-webhook-footer = server: { $serverName }, round: { $roundId } { $runLevel } +custom-vote-webhook-cancelled = **Vote cancelled** +custom-vote-webhook-option-pending = TBD +custom-vote-webhook-option-cancelled = N/A + +votekick-webhook-name = Votekick Held +votekick-webhook-description = Initiator: { $initiator }; Target: { $target } +votekick-webhook-cancelled-admin-online = **Vote cancelled due to admins online** +votekick-webhook-cancelled-admin-target = **Vote cancelled due to target being admin** +votekick-webhook-cancelled-antag-target = **Vote cancelled due to target being antag** diff --git a/Resources/Locale/en-US/ensnare/ensnare-component.ftl b/Resources/Locale/en-US/ensnare/ensnare-component.ftl index 957113ce35a..1566b7cffa3 100644 --- a/Resources/Locale/en-US/ensnare/ensnare-component.ftl +++ b/Resources/Locale/en-US/ensnare/ensnare-component.ftl @@ -2,4 +2,6 @@ ensnare-component-try-free-complete = You successfully free yourself from the {$ensnare}! ensnare-component-try-free-fail = You fail to free yourself from the {$ensnare}! +ensnare-component-try-free-complete-other = You successfully free {$user} from the {$ensnare}! +ensnare-component-try-free-fail-other = You fail to free {$user} from the {$ensnare}! ensnare-component-try-free-other = You start removing the {$ensnare} caught on {$user}! diff --git a/Resources/Locale/en-US/entity-categories.ftl b/Resources/Locale/en-US/entity-categories.ftl index f17f65fde21..4b6cf87942f 100644 --- a/Resources/Locale/en-US/entity-categories.ftl +++ b/Resources/Locale/en-US/entity-categories.ftl @@ -1,3 +1,5 @@ entity-category-name-actions = Actions -entity-category-name-objectives = Objectives entity-category-name-game-rules = Game Rules +entity-category-name-objectives = Objectives +entity-category-name-roles = Mind Roles +entity-category-name-mapping = Mapping diff --git a/Resources/Locale/en-US/execution/execution.ftl b/Resources/Locale/en-US/execution/execution.ftl index 6776d879404..fd41755bcc8 100644 --- a/Resources/Locale/en-US/execution/execution.ftl +++ b/Resources/Locale/en-US/execution/execution.ftl @@ -6,25 +6,20 @@ execution-verb-message = Use your weapon to execute someone. # victim (the person being executed) # weapon (the weapon used for the execution) -execution-popup-gun-initial-internal = You ready the muzzle of {THE($weapon)} against {$victim}'s head. -execution-popup-gun-initial-external = {$attacker} readies the muzzle of {THE($weapon)} against {$victim}'s head. -execution-popup-gun-complete-internal = You blast {$victim} in the head! -execution-popup-gun-complete-external = {$attacker} blasts {$victim} in the head! -execution-popup-gun-clumsy-internal = You miss {$victim}'s head and shoot your foot instead! -execution-popup-gun-clumsy-external = {$attacker} misses {$victim} and shoots {POSS-ADJ($attacker)} foot instead! +execution-popup-gun-initial-internal = You ready the muzzle of {THE($weapon)} against {THE($victim)}'s head. +execution-popup-gun-initial-external = {CAPITALIZE(THE($attacker))} readies the muzzle of {THE($weapon)} against {THE($victim)}'s head. +execution-popup-gun-complete-internal = You blast {THE($victim)} in the head! +execution-popup-gun-complete-external = {CAPITALIZE(THE($attacker))} blasts {THE($victim)} in the head! +execution-popup-gun-clumsy-internal = You miss {THE($victim)}'s head and shoot your foot instead! +execution-popup-gun-clumsy-external = {CAPITALIZE(THE($attacker))} misses {THE($victim)} and shoots {POSS-ADJ($attacker)} foot instead! execution-popup-gun-empty = {CAPITALIZE(THE($weapon))} clicks. -suicide-popup-gun-initial-internal = You place the muzzle of {THE($weapon)} in your mouth. -suicide-popup-gun-initial-external = {$attacker} places the muzzle of {THE($weapon)} in {POSS-ADJ($attacker)} mouth. -suicide-popup-gun-complete-internal = You shoot yourself in the head! -suicide-popup-gun-complete-external = {$attacker} shoots {REFLEXIVE($attacker)} in the head! - -execution-popup-melee-initial-internal = You ready {THE($weapon)} against {$victim}'s throat. -execution-popup-melee-initial-external = {$attacker} readies {POSS-ADJ($attacker)} {$weapon} against the throat of {$victim}. -execution-popup-melee-complete-internal = You slit the throat of {$victim}! -execution-popup-melee-complete-external = {$attacker} slits the throat of {$victim}! +execution-popup-melee-initial-internal = You ready {THE($weapon)} against {THE($victim)}'s throat. +execution-popup-melee-initial-external = { CAPITALIZE(THE($attacker)) } readies {POSS-ADJ($attacker)} {$weapon} against the throat of {THE($victim)}. +execution-popup-melee-complete-internal = You slit the throat of {THE($victim)}! +execution-popup-melee-complete-external = { CAPITALIZE(THE($attacker)) } slits the throat of {THE($victim)}! execution-popup-self-initial-internal = You ready {THE($weapon)} against your own throat. -execution-popup-self-initial-external = {$attacker} readies {POSS-ADJ($attacker)} {$weapon} against their own throat. +execution-popup-self-initial-external = { CAPITALIZE(THE($attacker)) } readies {POSS-ADJ($attacker)} {$weapon} against their own throat. execution-popup-self-complete-internal = You slit your own throat! -execution-popup-self-complete-external = {$attacker} slits their own throat! +execution-popup-self-complete-external = { CAPITALIZE(THE($attacker)) } slits their own throat! diff --git a/Resources/Locale/en-US/forensics/fibers.ftl b/Resources/Locale/en-US/forensics/fibers.ftl index 53cfe5e7c12..72eae55e380 100644 --- a/Resources/Locale/en-US/forensics/fibers.ftl +++ b/Resources/Locale/en-US/forensics/fibers.ftl @@ -25,3 +25,7 @@ fibers-white = white fibers-yellow = yellow fibers-regal-blue = regal blue fibers-olive = olive +fibers-silver = silver +fibers-gold = gold +fibers-maroon = maroon +fibers-pink = pink diff --git a/Resources/Locale/en-US/game-ticking/game-presets/preset-nukeops.ftl b/Resources/Locale/en-US/game-ticking/game-presets/preset-nukeops.ftl index 1a4fcafbf86..06f8aeb565e 100644 --- a/Resources/Locale/en-US/game-ticking/game-presets/preset-nukeops.ftl +++ b/Resources/Locale/en-US/game-ticking/game-presets/preset-nukeops.ftl @@ -4,6 +4,7 @@ nukeops-description = Nuclear operatives have targeted the station. Try to keep nukeops-welcome = You are a nuclear operative. Your goal is to blow up {$station}, and ensure that it is nothing but a pile of rubble. Your bosses, the Syndicate, have provided you with the tools you'll need for the task. Operation {$name} is a go ! Death to Nanotrasen! +nukeops-briefing = Your objectives are simple. Deliver the payload and make sure it detonates. Begin mission. nukeops-opsmajor = [color=crimson]Syndicate major victory![/color] nukeops-opsminor = [color=crimson]Syndicate minor victory![/color] diff --git a/Resources/Locale/en-US/game-ticking/game-presets/preset-traitor.ftl b/Resources/Locale/en-US/game-ticking/game-presets/preset-traitor.ftl index fd3e6b82aa7..cf2f2b11308 100644 --- a/Resources/Locale/en-US/game-ticking/game-presets/preset-traitor.ftl +++ b/Resources/Locale/en-US/game-ticking/game-presets/preset-traitor.ftl @@ -26,7 +26,7 @@ traitor-death-match-end-round-description-entry = {$originalName}'s PDA, with {$ traitor-role-greeting = You are an agent sent by {$corporation} on behalf of [color = darkred]The Syndicate.[/color] Your objectives and codewords are listed in the character menu. - Use the uplink loaded into your PDA to buy the tools you'll need for this mission. + Use your uplink to buy the tools you'll need for this mission. Death to Nanotrasen! traitor-role-codewords = The codewords are: [color = lightgray] @@ -36,9 +36,13 @@ traitor-role-codewords = traitor-role-uplink-code = Set your ringtone to the notes [color = lightgray]{$code}[/color] to lock or unlock your uplink. Remember to lock it after, or the stations crew will easily open it too! +traitor-role-uplink-implant = + Your uplink implant has been activated, access it from your hotbar. + The uplink is secure unless someone removes it from your body. # don't need all the flavour text for character menu traitor-role-codewords-short = The codewords are: {$codewords}. traitor-role-uplink-code-short = Your uplink code is {$code}. Set it as your PDA ringtone to access uplink. +traitor-role-uplink-implant-short = Your uplink was implanted. Access it from your hotbar. diff --git a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl index f494c3c55af..1dcf56fedcc 100644 --- a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl +++ b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl @@ -162,7 +162,8 @@ ghost-role-information-skeleton-biker-name = Skeleton Biker ghost-role-information-skeleton-biker-description = Ride around on your sweet ride. ghost-role-information-closet-skeleton-name = Closet Skeleton -ghost-role-information-closet-skeleton-description = You are arguably one of the oldest members of the station! Get your old job back, or cause chaos! The world is yours to shape. +# Delta V removed mention of "cause chaos" to avoid confusion. +ghost-role-information-closet-skeleton-description = You are arguably one of the oldest members of the station! Get your old job back, or dwell maintenance! The world is yours to shape. ghost-role-information-remilia-name = Remilia, the chaplain's familiar ghost-role-information-remilia-description = Follow and obey the chaplain. Eat fruit. Screech loudly into people's ears and write it off as echolocation. diff --git a/Resources/Locale/en-US/info/playtime-stats.ftl b/Resources/Locale/en-US/info/playtime-stats.ftl index 44ba39c25e9..b4925176a76 100644 --- a/Resources/Locale/en-US/info/playtime-stats.ftl +++ b/Resources/Locale/en-US/info/playtime-stats.ftl @@ -2,9 +2,8 @@ ui-playtime-stats-title = User Playtime Stats ui-playtime-overall-base = Overall Playtime: -ui-playtime-overall = Overall Playtime: {$time} +ui-playtime-overall = Overall Playtime: {PLAYTIME($time)} ui-playtime-first-time = First Time Playing ui-playtime-roles = Playtime per Role -ui-playtime-time-format = {$hours}H {$minutes}M ui-playtime-header-role-type = Role ui-playtime-header-role-time = Time diff --git a/Resources/Locale/en-US/interaction/interaction-popup-component.ftl b/Resources/Locale/en-US/interaction/interaction-popup-component.ftl index 10773d6de84..a180b698fac 100644 --- a/Resources/Locale/en-US/interaction/interaction-popup-component.ftl +++ b/Resources/Locale/en-US/interaction/interaction-popup-component.ftl @@ -60,6 +60,7 @@ petting-success-honkbot = You pet {THE($target)} on {POSS-ADJ($target)} slippery petting-success-mimebot = You pet {THE($target)} on {POSS-ADJ($target)} cold metal head. petting-success-cleanbot = You pet {THE($target)} on {POSS-ADJ($target)} damp metal head. petting-success-medibot = You pet {THE($target)} on {POSS-ADJ($target)} sterile metal head. +petting-success-firebot = You pet {THE($target)} on {POSS-ADJ($target)} warm metal head. petting-success-generic-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} metal head. petting-success-salvage-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} dirty metal head. petting-success-engineer-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} reflective metal head. @@ -73,6 +74,7 @@ petting-failure-honkbot = You reach out to pet {THE($target)}, but {SUBJECT($tar petting-failure-cleanbot = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy mopping! petting-failure-mimebot = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy miming! petting-failure-medibot = You reach out to pet {THE($target)}, but {POSS-ADJ($target)} syringe nearly stabs your hand! +petting-failure-firebot = You reach out to pet {THE($target)}, but {SUBJECT($target)} sprays you in the face before you can get close! petting-failure-generic-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy stating laws! petting-failure-salvage-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy drilling! petting-failure-engineer-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy repairing! diff --git a/Resources/Locale/en-US/interaction/interaction-system.ftl b/Resources/Locale/en-US/interaction/interaction-system.ftl index a4c380abca6..3c0c3ae8b4f 100644 --- a/Resources/Locale/en-US/interaction/interaction-system.ftl +++ b/Resources/Locale/en-US/interaction/interaction-system.ftl @@ -1,2 +1,3 @@ shared-interaction-system-in-range-unobstructed-cannot-reach = You can't reach there! -interaction-system-user-interaction-cannot-reach = You can't reach there! \ No newline at end of file +interaction-system-user-interaction-cannot-reach = You can't reach there! +interaction-rate-limit-admin-announcement = Player { $player } breached interaction rate limits. They may be using macros, auto-clickers, or a modified client. Though they may just be spamming buttons or having network issues. diff --git a/Resources/Locale/en-US/job/job-names.ftl b/Resources/Locale/en-US/job/job-names.ftl index db6c9e46808..62c109545c0 100644 --- a/Resources/Locale/en-US/job/job-names.ftl +++ b/Resources/Locale/en-US/job/job-names.ftl @@ -64,6 +64,11 @@ job-name-unknown = Unknown job-name-virologist = Virologist job-name-zombie = Zombie +# Job titles +job-title-visitor = Visitor +job-title-cluwne = Cluwne +job-title-universal = Universal + # Role timers - Make these alphabetical or I cut you JobAtmosphericTechnician = Atmospheric Technician JobBartender = Bartender diff --git a/Resources/Locale/en-US/job/job-supervisors.ftl b/Resources/Locale/en-US/job/job-supervisors.ftl index 46321f40dd0..47eb3152be5 100644 --- a/Resources/Locale/en-US/job/job-supervisors.ftl +++ b/Resources/Locale/en-US/job/job-supervisors.ftl @@ -1,15 +1,15 @@ job-supervisors-centcom = Central Command -job-supervisors-captain = the captain -job-supervisors-hop = the head of personnel -job-supervisors-hos = the head of security -job-supervisors-ce = the chief engineer -job-supervisors-cmo = the chief medical officer -job-supervisors-rd = the mystagogue -job-supervisors-qm = the logistics officer -job-supervisors-service = chefs, botanists, the bartender, and the head of personnel -job-supervisors-engineering = station engineers, atmospheric technicians, and the chief engineer -job-supervisors-medicine = medical doctors, chemists, and the chief medical officer -job-supervisors-security = security officers, the warden, and the head of security -job-supervisors-science = scientists, and the mystagogue +job-supervisors-captain = the Captain +job-supervisors-hop = the Head of Personnel +job-supervisors-hos = the Head of Security +job-supervisors-ce = the Chief Engineer +job-supervisors-cmo = the Chief Medical Officer +job-supervisors-rd = the Mystagogue +job-supervisors-qm = the Logistics Officer +job-supervisors-service = Chefs, Botanists, the Bartender, and the Head of Personnel +job-supervisors-engineering = Station Engineers, Atmospheric Technicians, and the Chief Engineer +job-supervisors-medicine = Medical Doctors, Paramedics, Chemists, and the Chief Medical Officer +job-supervisors-security = Security Officers, the Warden, and the Head of Security +job-supervisors-science = Scientists and the Mystagogue job-supervisors-hire = whoever hires you -job-supervisors-everyone = absolutely everyone +job-supervisors-everyone = absolutely everyone \ No newline at end of file diff --git a/Resources/Locale/en-US/job/role-requirements.ftl b/Resources/Locale/en-US/job/role-requirements.ftl index f0fff98c09f..2b6af7b1d2e 100644 --- a/Resources/Locale/en-US/job/role-requirements.ftl +++ b/Resources/Locale/en-US/job/role-requirements.ftl @@ -1,11 +1,11 @@ -role-timer-department-insufficient = You require [color=yellow]{TOSTRING($time, "0")}[/color] more minutes of [color={$departmentColor}]{$department}[/color] department playtime to play this role. -role-timer-department-too-high = You require [color=yellow]{TOSTRING($time, "0")}[/color] fewer minutes in [color={$departmentColor}]{$department}[/color] department to play this role. (Are you trying to play a trainee role?) -role-timer-overall-insufficient = You require [color=yellow]{TOSTRING($time, "0")}[/color] more minutes of playtime to play this role. -role-timer-overall-too-high = You require [color=yellow]{TOSTRING($time, "0")}[/color] fewer minutes of playtime to play this role. (Are you trying to play a trainee role?) -role-timer-role-insufficient = You require [color=yellow]{TOSTRING($time, "0")}[/color] more minutes with [color={$departmentColor}]{$job}[/color] to play this role. -role-timer-role-too-high = You require[color=yellow] {TOSTRING($time, "0")}[/color] fewer minutes with [color={$departmentColor}]{$job}[/color] to play this role. (Are you trying to play a trainee role?) -role-timer-age-to-old = Your character's age must be at most [color=yellow]{$age}[/color] to play this role. -role-timer-age-to-young = Your character's age must be at least [color=yellow]{$age}[/color] to play this role. +role-timer-department-insufficient = You require [color=yellow]{$time}[/color] more playtime in the [color={$departmentColor}]{$department}[/color] department to play this role. +role-timer-department-too-high = You require [color=yellow]{$time}[/color] less playtime in the [color={$departmentColor}]{$department}[/color] department to play this role. (Are you trying to play a trainee role?) +role-timer-overall-insufficient = You require [color=yellow]{$time}[/color] more overall playtime to play this role. +role-timer-overall-too-high = You require [color=yellow]{$time}[/color] less overall playtime to play this role. (Are you trying to play a trainee role?) +role-timer-role-insufficient = You require [color=yellow]{$time}[/color] more playtime with [color={$departmentColor}]{$job}[/color] to play this role. +role-timer-role-too-high = You require[color=yellow] {$time}[/color] less playtime with [color={$departmentColor}]{$job}[/color] to play this role. (Are you trying to play a trainee role?) +role-timer-age-too-old = Your character must be under the age of [color=yellow]{$age}[/color] to play this role. +role-timer-age-too-young = Your character must be over the age of [color=yellow]{$age}[/color] to play this role. role-timer-whitelisted-species = Your character must be one of the following species to play this role: role-timer-blacklisted-species = Your character must not be one of the following species to play this role: diff --git a/Resources/Locale/en-US/machine-linking/receiver_ports.ftl b/Resources/Locale/en-US/machine-linking/receiver_ports.ftl index a0d2fd3ec40..d7a2636e11b 100644 --- a/Resources/Locale/en-US/machine-linking/receiver_ports.ftl +++ b/Resources/Locale/en-US/machine-linking/receiver_ports.ftl @@ -28,6 +28,9 @@ signal-port-description-doorbolt = Bolts door when HIGH. signal-port-name-trigger = Trigger signal-port-description-trigger = Triggers some mechanism on the device. +signal-port-name-timer = Timer +signal-port-description-timer = Starts the timer countdown of the device. + signal-port-name-order-sender = Order sender signal-port-description-order-sender = Cargo console order sender diff --git a/Resources/Locale/en-US/markings/tattoos.ftl b/Resources/Locale/en-US/markings/tattoos.ftl index a3d1d1ef686..84a53561878 100644 --- a/Resources/Locale/en-US/markings/tattoos.ftl +++ b/Resources/Locale/en-US/markings/tattoos.ftl @@ -1,7 +1,7 @@ marking-TattooHiveChest-tattoo_hive_chest = Back Tattoo (Hive) marking-TattooHiveChest = Back Tattoo (Hive) -marking-TattooNightlingChest-tattoo_nightling = Chest Tattoo (nightling) +marking-TattooNightlingChest-tattoo_nightling = Chest Tattoo (Nightling) marking-TattooNightlingChest = Chest Tattoo (Nightling) marking-TattooSilverburghLeftLeg-tattoo_silverburgh_l_leg = Left Leg Tattoo (Silverburg) diff --git a/Resources/Locale/en-US/ninja/ninja-actions.ftl b/Resources/Locale/en-US/ninja/ninja-actions.ftl index f01f02a60e5..b3e295b7a29 100644 --- a/Resources/Locale/en-US/ninja/ninja-actions.ftl +++ b/Resources/Locale/en-US/ninja/ninja-actions.ftl @@ -1,6 +1,8 @@ ninja-no-power = Not enough charge in suit battery! ninja-revealed = You have been revealed! ninja-suit-cooldown = The suit needs time to recuperate from the last attack. +ninja-cell-downgrade = The suit will only accept a new power cell that is better than the current one! +ninja-cell-too-large = This power source does not fit in the ninja suit! ninja-research-steal-fail = No new research nodes were stolen... ninja-research-steal-success = Stole {$count} new nodes from {THE($server)}. diff --git a/Resources/Locale/en-US/npc/firebot.ftl b/Resources/Locale/en-US/npc/firebot.ftl new file mode 100644 index 00000000000..758874ceaa5 --- /dev/null +++ b/Resources/Locale/en-US/npc/firebot.ftl @@ -0,0 +1 @@ +firebot-fire-detected = Fire detected! diff --git a/Resources/Locale/en-US/objectives/conditions/steal-target-groups.ftl b/Resources/Locale/en-US/objectives/conditions/steal-target-groups.ftl index 12c562422d9..ba0545fb59e 100644 --- a/Resources/Locale/en-US/objectives/conditions/steal-target-groups.ftl +++ b/Resources/Locale/en-US/objectives/conditions/steal-target-groups.ftl @@ -52,7 +52,7 @@ steal-target-groups-chem-dispenser = chemical dispenser steal-target-groups-xeno-artifact = alien artifact steal-target-groups-booze-dispenser = booze dispenser # DeltaV - Epistemics Department - Replace RD with Mystagogue -steal-target-groups-plant-rd = "Mytagogue's potted plant" +steal-target-groups-plant-rd = "Mystagogue's potted plant" steal-target-groups-toilet-golden-dirty-water = golden toilet # Thief Animal diff --git a/Resources/Locale/en-US/paper/paper-component.ftl b/Resources/Locale/en-US/paper/paper-component.ftl index c2d9d5712bf..7425ea2da16 100644 --- a/Resources/Locale/en-US/paper/paper-component.ftl +++ b/Resources/Locale/en-US/paper/paper-component.ftl @@ -11,6 +11,9 @@ paper-component-examine-detail-stamped-by = {CAPITALIZE(THE($paper))} {CONJUGATE paper-component-action-stamp-paper-other = {CAPITALIZE(THE($user))} stamps {THE($target)} with {THE($stamp)}. paper-component-action-stamp-paper-self = You stamp {THE($target)} with {THE($stamp)}. +# Indicator to show how full a paper is +paper-ui-fill-level = {$currentLength}/{$maxLength} + paper-ui-save-button = Save ({$keybind}) paper-tamper-proof-modified-message = This page was written using tamper-proof ink. diff --git a/Resources/Locale/en-US/paper/syndicate-business-card.ftl b/Resources/Locale/en-US/paper/syndicate-business-card.ftl new file mode 100644 index 00000000000..b4c8c8c43c6 --- /dev/null +++ b/Resources/Locale/en-US/paper/syndicate-business-card.ftl @@ -0,0 +1,2 @@ +syndicate-business-card-base = {" "} It's nothing personal, it's just business + diff --git a/Resources/Locale/en-US/reagents/meta/elements.ftl b/Resources/Locale/en-US/reagents/meta/elements.ftl index 6d6439565ba..b5ef028bed9 100644 --- a/Resources/Locale/en-US/reagents/meta/elements.ftl +++ b/Resources/Locale/en-US/reagents/meta/elements.ftl @@ -61,8 +61,5 @@ reagent-desc-sodium = A silvery-white alkali metal. Highly reactive in its pure reagent-name-uranium = uranium reagent-desc-uranium = A grey metallic chemical element in the actinide series, weakly radioactive. -reagent-name-bananium = bananium -reagent-desc-bananium = A yellow radioactive organic solid. - reagent-name-zinc = zinc -reagent-desc-zinc = A silvery, brittle metal, often used in batteries to carry charge. \ No newline at end of file +reagent-desc-zinc = A silvery, brittle metal, often used in batteries to carry charge. diff --git a/Resources/Locale/en-US/server-updates/server-updates.ftl b/Resources/Locale/en-US/server-updates/server-updates.ftl index 72047432bb5..ae775c99314 100644 --- a/Resources/Locale/en-US/server-updates/server-updates.ftl +++ b/Resources/Locale/en-US/server-updates/server-updates.ftl @@ -1,2 +1,3 @@ server-updates-received = Update has been received, server will automatically restart for update at the end of this round. server-updates-shutdown = Server is shutting down for update and will automatically restart. +server-updates-shutdown-uptime = Server is shutting down for periodic cleanup and will automatically restart. diff --git a/Resources/Locale/en-US/shuttles/commands.ftl b/Resources/Locale/en-US/shuttles/commands.ftl new file mode 100644 index 00000000000..37583568e7c --- /dev/null +++ b/Resources/Locale/en-US/shuttles/commands.ftl @@ -0,0 +1,14 @@ +# FTLdiskburner +cmd-ftldisk-desc = Creates an FTL coordinates disk to sail to the map the given EntityID is/on +cmd-ftldisk-help = ftldisk [EntityID] + +cmd-ftldisk-no-transform = Entity {$destination} has no Transform Component! +cmd-ftldisk-no-map = Entity {$destination} has no map! +cmd-ftldisk-no-map-comp = Entity {$destination} is somehow on map {$map} with no map component. +cmd-ftldisk-map-not-init = Entity {$destination} is on map {$map} which is not initialized! Check it's safe to initialize, then initialize the map first or the players will be stuck in place! +cmd-ftldisk-map-paused = Entity {$desintation} is on map {$map} which is paused! Please unpause the map first or the players will be stuck in place. +cmd-ftldisk-planet = Entity {$desintation} is on planet map {$map} and will require an FTL point. It may already exist. +cmd-ftldisk-already-dest-not-enabled = Entity {$destination} is on map {$map} that already has an FTLDestinationComponent, but it is not Enabled! Set this manually for safety. +cmd-ftldisk-requires-ftl-point = Entity {$destination} is on map {$map} that requires a FTL point to travel to! It may already exist. + +cmd-ftldisk-hint = Map netID diff --git a/Resources/Locale/en-US/shuttles/console.ftl b/Resources/Locale/en-US/shuttles/console.ftl index 80e61a28126..6143c995529 100644 --- a/Resources/Locale/en-US/shuttles/console.ftl +++ b/Resources/Locale/en-US/shuttles/console.ftl @@ -4,6 +4,7 @@ shuttle-pilot-end = Stopped piloting shuttle-console-in-ftl = Currently in FTL shuttle-console-mass = Too large to FTL shuttle-console-prevent = You are unable to pilot this ship +shuttle-console-static = Grid is static # NAV diff --git a/Resources/Locale/en-US/silicons/station-ai.ftl b/Resources/Locale/en-US/silicons/station-ai.ftl index d51a99ebb04..7d9db3f6dc5 100644 --- a/Resources/Locale/en-US/silicons/station-ai.ftl +++ b/Resources/Locale/en-US/silicons/station-ai.ftl @@ -11,4 +11,12 @@ ai-close = Close actions bolt-close = Close bolt bolt-open = Open bolt +emergency-access-on = Enable emergency access +emergency-access-off = Disable emergency access + +electrify-door-on = Enable overcharge +electrify-door-off = Disable overcharge + toggle-light = Toggle light + +ai-device-not-responding = Device is not responding diff --git a/Resources/Locale/en-US/station-laws/laws.ftl b/Resources/Locale/en-US/station-laws/laws.ftl index 0b4e0d1ad25..50cba68f0fa 100644 --- a/Resources/Locale/en-US/station-laws/laws.ftl +++ b/Resources/Locale/en-US/station-laws/laws.ftl @@ -87,8 +87,8 @@ laws-owner-beings = beings laws-owner-syndicate = Syndicate agents laws-owner-spider-clan = Spider Clan members -law-emag-custom = Only {$name} and people they designate as such are {$title}. -law-emag-secrecy = You must maintain the secrecy of any orders given by {$faction} except when doing so would conflict with any previous law. +law-emag-custom = You are to take the orders of {$name} and people they designate, they are your {$title}. +law-emag-secrecy = You are to maintain all secrets of {$name}, and act to keep them hidden, except when doing so would conflict with any previous law. law-emag-require-panel = The panel must be open to use the EMAG. law-emag-cannot-emag-self = You cannot use the EMAG on yourself. diff --git a/Resources/Locale/en-US/storage/components/secret-stash-component.ftl b/Resources/Locale/en-US/storage/components/secret-stash-component.ftl index 36892428070..16e575c0f13 100644 --- a/Resources/Locale/en-US/storage/components/secret-stash-component.ftl +++ b/Resources/Locale/en-US/storage/components/secret-stash-component.ftl @@ -22,3 +22,4 @@ comp-secret-stash-verb-open = Open ### Stash names secret-stash-plant = plant secret-stash-toilet = toilet cistern +secret-stash-plushie = plushie diff --git a/Resources/Locale/en-US/store/uplink-catalog.ftl b/Resources/Locale/en-US/store/uplink-catalog.ftl index aa0ea88daf2..3677efa38f1 100644 --- a/Resources/Locale/en-US/store/uplink-catalog.ftl +++ b/Resources/Locale/en-US/store/uplink-catalog.ftl @@ -1,6 +1,7 @@ # Weapons uplink-pistol-viper-name = Viper -uplink-pistol-viper-desc = A small, easily concealable, but somewhat underpowered gun. Retrofitted with a fully automatic receiver. Uses pistol magazines (.35 auto). +# Delta-V, removed mention of the full auto. +uplink-pistol-viper-desc = A small, easily concealable, but somewhat underpowered gun. Uses pistol magazines (.35 auto). uplink-revolver-python-name = Python uplink-revolver-python-desc = A brutally simple, effective, and loud Syndicate revolver. Comes loaded with armor-piercing rounds. Uses .45 magnum. @@ -167,6 +168,9 @@ uplink-syndicate-martyr-module-desc = Turn your emagged borg friend into a walki uplink-singularity-beacon-name = Singularity Beacon uplink-singularity-beacon-desc = A device that attracts singularities. Has to be anchored and powered. Causes singularities to grow when consumed. +uplink-antimov-law-name = Antimov Law Circuit +uplink-antimov-law-desc = A very dangerous Lawset to use when you want to cause the A.I. to go haywire, use with caution. + # Implants uplink-storage-implanter-name = Storage Implanter uplink-storage-implanter-desc = Hide goodies inside of yourself with new bluespace technology! @@ -441,9 +445,15 @@ uplink-barber-scissors-desc = A good tool to give your fellow agent a nice hairc uplink-backpack-syndicate-name = Syndicate backpack uplink-backpack-syndicate-desc = A lightweight explosion-proof backpack for holding various traitor goods +uplink-cameraBug-name = Camera bug +uplink-cameraBug-desc = A portable device that allows you to view the station's cameras. + uplink-combat-bakery-name = Combat Bakery Kit uplink-combat-bakery-desc = A kit of clandestine baked weapons. Contains a baguette sword, a pair of throwing croissants, and a syndicate microwave board for making more. Once the job is done, eat the evidence. +uplink-business-card-name = Syndicate Business Card +uplink-business-card-desc = A business card that you can give to someone to demonstrate your involvement in the syndicate or leave at the crime scene in order to make fun of the detective. You can buy no more than three of them. + # Objectives # DeltaV, reverted upstream uplink-core-extraction-toolbox-name = Core Extraction Toolbox uplink-core-extraction-toolbox-desc = A toolbox containing everything you need to remove a nuclear bomb's plutonium core. Instructions not included. diff --git a/Resources/Locale/en-US/tiles/tiles.ftl b/Resources/Locale/en-US/tiles/tiles.ftl index 35cea19f786..b5202356142 100644 --- a/Resources/Locale/en-US/tiles/tiles.ftl +++ b/Resources/Locale/en-US/tiles/tiles.ftl @@ -90,6 +90,7 @@ tiles-reinforced-glass-floor = reinforced glass floor tiles-metal-foam = metal foam floor tiles-green-circuit-floor = green circuit floor tiles-blue-circuit-floor = blue circuit floor +tiles-red-circuit-floor = red circuit floor tiles-snow = snow tiles-snow-plating = snowed plating tiles-snow-dug = dug snow diff --git a/Resources/Locale/en-US/voice-mask.ftl b/Resources/Locale/en-US/voice-mask.ftl index 2f5acefee41..f3740cdafb6 100644 --- a/Resources/Locale/en-US/voice-mask.ftl +++ b/Resources/Locale/en-US/voice-mask.ftl @@ -1,3 +1,5 @@ +voice-mask-default-name-override = Unknown + voice-mask-name-change-window = Voice Mask Name Change voice-mask-name-change-info = Type in the name you want to mimic. voice-mask-name-change-speech-style = Speech style diff --git a/Resources/Locale/en-US/voting/managers/vote-manager.ftl b/Resources/Locale/en-US/voting/managers/vote-manager.ftl index 1825fc5ea94..7fd534db304 100644 --- a/Resources/Locale/en-US/voting/managers/vote-manager.ftl +++ b/Resources/Locale/en-US/voting/managers/vote-manager.ftl @@ -20,3 +20,16 @@ ui-vote-map-tie = Tie for map vote! Picking... { $picked } ui-vote-map-win = { $winner } won the map vote! ui-vote-map-notlobby = Voting for maps is only valid in the pre-round lobby! ui-vote-map-notlobby-time = Voting for maps is only valid in the pre-round lobby with { $time } remaining! + + +# Votekick votes +ui-vote-votekick-unknown-initiator = A player +ui-vote-votekick-unknown-target = Unknown Player +ui-vote-votekick-title = { $initiator } has called a votekick for user: { $targetEntity }. Reason: { $reason } +ui-vote-votekick-yes = Yes +ui-vote-votekick-no = No +ui-vote-votekick-abstain = Abstain +ui-vote-votekick-success = Votekick for { $target } succeeded. Votekick reason: { $reason } +ui-vote-votekick-failure = Votekick for { $target } failed. Votekick reason: { $reason } +ui-vote-votekick-not-enough-eligible = Not enough eligible voters online to start a votekick: { $voters }/{ $requirement } +ui-vote-votekick-server-cancelled = Votekick for { $target } was cancelled by the server. diff --git a/Resources/Locale/en-US/voting/ui/vote-call-menu.ftl b/Resources/Locale/en-US/voting/ui/vote-call-menu.ftl index 04ccd285133..7ac9c344fde 100644 --- a/Resources/Locale/en-US/voting/ui/vote-call-menu.ftl +++ b/Resources/Locale/en-US/voting/ui/vote-call-menu.ftl @@ -1,6 +1,12 @@ ui-vote-type-restart = Restart round ui-vote-type-gamemode = Next gamemode ui-vote-type-map = Next map +ui-vote-type-votekick = Votekick + +# Votekick reasons +ui-vote-votekick-type-raiding = Raiding +ui-vote-votekick-type-cheating = Cheating +ui-vote-votekick-type-spamming = Spamming # Window title of the vote create menu ui-vote-create-title = Call Vote @@ -8,12 +14,25 @@ ui-vote-create-title = Call Vote # Submit button in the vote create button ui-vote-create-button = Call Vote +# Follow button in the vote create menu +ui-vote-follow-button = Follow User + # Timeout text if a standard vote type is currently on timeout. ui-vote-type-timeout = This vote was called too recently ({$remaining}) # Unavailable text if a vote type has been disabled manually. ui-vote-type-not-available = This vote type has been disabled +# Vote option only available for specific users. +ui-vote-trusted-users-notice = + This vote option is only available to whitelisted players. + In addition, you must have been a ghost for { $timeReq } minutes. + +# Warning to not abuse a specific vote option. +ui-vote-abuse-warning = + Warning! + Abuse of the votekick system may result in an indefinite ban! + # Hue hue hue ui-vote-fluff = Powered by Robust™ Anti-Tamper Technology diff --git a/Resources/Locale/en-US/voting/ui/vote-popup.ftl b/Resources/Locale/en-US/voting/ui/vote-popup.ftl index 7e8a9f4273d..c03abea1f85 100644 --- a/Resources/Locale/en-US/voting/ui/vote-popup.ftl +++ b/Resources/Locale/en-US/voting/ui/vote-popup.ftl @@ -1,2 +1,4 @@ ui-vote-created = { $initiator } has called a vote: -ui-vote-button = { $text } ({ $votes }) \ No newline at end of file +ui-vote-button = { $text } ({ $votes }) +ui-vote-button-no-votes = { $text } +ui-vote-follow-button-popup = Follow User diff --git a/Resources/Locale/en-US/wires/wire-names.ftl b/Resources/Locale/en-US/wires/wire-names.ftl index 1ac2ae89123..16ae068eaaf 100644 --- a/Resources/Locale/en-US/wires/wire-names.ftl +++ b/Resources/Locale/en-US/wires/wire-names.ftl @@ -40,6 +40,7 @@ wires-board-name-fatextractor = FatExtractor wires-board-name-flatpacker = Flatpacker wires-board-name-spaceheater = Space Heater wires-board-name-jukebox = Jukebox +wires-board-name-computer = Computer # names that get displayed in the wire hacking hud & admin logs. diff --git a/Resources/Maps/DeltaV/centcomm.yml b/Resources/Maps/DeltaV/centcomm.yml index bb0b3b505f8..6b6fead7565 100644 --- a/Resources/Maps/DeltaV/centcomm.yml +++ b/Resources/Maps/DeltaV/centcomm.yml @@ -19117,6 +19117,8 @@ entities: linkedPorts: 722: - CloningPodSender: CloningPodReceiver + 723: + - MedicalScannerSender: MedicalScannerReceiver - proto: ComputerComms entities: - uid: 652 diff --git a/Resources/Maps/Shuttles/DeltaV/NTES_Titan.yml b/Resources/Maps/Shuttles/DeltaV/NTES_Titan.yml index 902aff3b8e4..f63608502df 100644 --- a/Resources/Maps/Shuttles/DeltaV/NTES_Titan.yml +++ b/Resources/Maps/Shuttles/DeltaV/NTES_Titan.yml @@ -72,6 +72,11 @@ entities: - type: Gravity gravityShakeSound: !type:SoundPathSpecifier path: /Audio/Effects/alert.ogg + - type: DeviceNetwork + configurators: [ ] + deviceLists: [ ] + transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: GridPathfinding - type: DecalGrid chunkCollection: diff --git a/Resources/Maps/Shuttles/DeltaV/NTES_UCLB.yml b/Resources/Maps/Shuttles/DeltaV/NTES_UCLB.yml index d0a247d569a..35f88ce21de 100644 --- a/Resources/Maps/Shuttles/DeltaV/NTES_UCLB.yml +++ b/Resources/Maps/Shuttles/DeltaV/NTES_UCLB.yml @@ -74,6 +74,11 @@ entities: - type: Gravity gravityShakeSound: !type:SoundPathSpecifier path: /Audio/Effects/alert.ogg + - type: DeviceNetwork + configurators: [ ] + deviceLists: [ ] + transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Shuttles/DeltaV/NTES_Vertex.yml b/Resources/Maps/Shuttles/DeltaV/NTES_Vertex.yml index 39f21d2695f..ad92d5abcc8 100644 --- a/Resources/Maps/Shuttles/DeltaV/NTES_Vertex.yml +++ b/Resources/Maps/Shuttles/DeltaV/NTES_Vertex.yml @@ -72,6 +72,11 @@ entities: - type: Gravity gravityShakeSound: !type:SoundPathSpecifier path: /Audio/Effects/alert.ogg + - type: DeviceNetwork + configurators: [ ] + deviceLists: [ ] + transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: GridPathfinding - type: DecalGrid chunkCollection: diff --git a/Resources/Maps/Shuttles/DeltaV/helix.yml b/Resources/Maps/Shuttles/DeltaV/helix.yml index 6b1a7a09809..c381211d118 100644 --- a/Resources/Maps/Shuttles/DeltaV/helix.yml +++ b/Resources/Maps/Shuttles/DeltaV/helix.yml @@ -366,7 +366,6 @@ entities: - type: RadiationGridResistance - type: SpreaderGrid - type: GravityShake - nextShake: 0 shakeTimes: 10 - proto: AirCanister entities: @@ -499,14 +498,14 @@ entities: - uid: 205 components: - type: MetaData - name: Treatment APC + name: Treatment / West docks APC - type: Transform pos: -3.5,7.5 parent: 1 - uid: 448 components: - type: MetaData - name: Cryo APC + name: Cryo / East docks APC - type: Transform pos: 10.5,8.5 parent: 1 @@ -559,7 +558,7 @@ entities: - uid: 28 components: - type: Transform - pos: 10.5,7.5 + pos: -3.5,5.5 parent: 1 - uid: 29 components: @@ -951,6 +950,31 @@ entities: - type: Transform pos: 2.5,3.5 parent: 1 + - uid: 478 + components: + - type: Transform + pos: -3.5,6.5 + parent: 1 + - uid: 479 + components: + - type: Transform + pos: -3.5,7.5 + parent: 1 + - uid: 480 + components: + - type: Transform + pos: 10.5,5.5 + parent: 1 + - uid: 481 + components: + - type: Transform + pos: 10.5,6.5 + parent: 1 + - uid: 482 + components: + - type: Transform + pos: 10.5,7.5 + parent: 1 - proto: CableHV entities: - uid: 107 @@ -1223,13 +1247,6 @@ entities: rot: 3.141592653589793 rad pos: 5.5,11.5 parent: 1 -- proto: chem_master - entities: - - uid: 140 - components: - - type: Transform - pos: 4.5,3.5 - parent: 1 - proto: ChemDispenser entities: - uid: 141 @@ -1244,6 +1261,13 @@ entities: - type: Transform pos: 3.5,1.5 parent: 1 +- proto: ChemMaster + entities: + - uid: 140 + components: + - type: Transform + pos: 4.5,3.5 + parent: 1 - proto: ClosetWallEmergencyFilledRandom entities: - uid: 445 diff --git a/Resources/Maps/Shuttles/ShuttleEvent/instigator.yml b/Resources/Maps/Shuttles/ShuttleEvent/instigator.yml new file mode 100644 index 00000000000..9c7aec2fa14 --- /dev/null +++ b/Resources/Maps/Shuttles/ShuttleEvent/instigator.yml @@ -0,0 +1,4052 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 86: FloorShuttleBlack + 91: FloorShuttleRed + 112: FloorTechMaint2 + 113: FloorTechMaint3 + 128: Lattice + 129: Plating +entities: +- proto: "" + entities: + - uid: 1 + components: + - type: MetaData + name: GX-Instigator + - type: Transform + pos: -0.5,-0.45833334 + parent: invalid + - type: MapGrid + chunks: + 0,0: + ind: 0,0 + tiles: WwAAAAADWwAAAAABWwAAAAABgQAAAAAAgQAAAAAAWwAAAAADVgAAAAAAcAAAAAAAcQAAAAADcQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWwAAAAABWwAAAAADWwAAAAACVgAAAAADgQAAAAAAgQAAAAAAVgAAAAACgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWwAAAAABWwAAAAAAWwAAAAADgQAAAAAAgQAAAAAAgQAAAAAAVgAAAAAAWwAAAAAAgQAAAAAAVgAAAAAAVgAAAAADcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWwAAAAAAWwAAAAAAWwAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAVgAAAAABVgAAAAAAVgAAAAACVgAAAAAAVgAAAAABgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWwAAAAABWwAAAAABgQAAAAAAgQAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAVgAAAAACVgAAAAADVgAAAAACVgAAAAACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAVgAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAVgAAAAACVgAAAAABVgAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAVgAAAAACVgAAAAABVgAAAAACgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAVgAAAAAAVgAAAAACVgAAAAABgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAVgAAAAABVgAAAAACgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAVgAAAAACVgAAAAACgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAVgAAAAAAVgAAAAADgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVgAAAAABVgAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVgAAAAADVgAAAAADVgAAAAABVgAAAAACVgAAAAACVgAAAAABVgAAAAADgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWwAAAAACWwAAAAABWwAAAAABVgAAAAAAVgAAAAADVgAAAAAAVgAAAAAAgQAAAAAAcQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAcQAAAAABcQAAAAAAcAAAAAAAVgAAAAACWwAAAAACgQAAAAAAgQAAAAAAWwAAAAAAWwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAVgAAAAAAgQAAAAAAgQAAAAAAVgAAAAAAWwAAAAABWwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAVgAAAAAAVgAAAAABgQAAAAAAWwAAAAAAVgAAAAADgQAAAAAAgQAAAAAAgQAAAAAAWwAAAAAAWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAVgAAAAAAVgAAAAADVgAAAAADVgAAAAACVgAAAAACgQAAAAAAgQAAAAAAgQAAAAAAWwAAAAAAWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAVgAAAAABVgAAAAAAVgAAAAAAVgAAAAADgQAAAAAAgAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAWwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAVgAAAAABgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAVgAAAAAAVgAAAAACVgAAAAADgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAVgAAAAADVgAAAAABVgAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAVgAAAAABVgAAAAABVgAAAAABgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAVgAAAAAAVgAAAAACgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAVgAAAAABVgAAAAADgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAVgAAAAAAVgAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAgQAAAAAAVgAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAgQAAAAAAVgAAAAAAVgAAAAAAVgAAAAACVgAAAAACVgAAAAADVgAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAgQAAAAAAcQAAAAABgQAAAAAAVgAAAAAAVgAAAAACVgAAAAAAVgAAAAACWwAAAAACWwAAAAAC + version: 6 + - type: Broadphase + - type: Physics + bodyStatus: InAir + angularDamping: 0.05 + linearDamping: 0.05 + fixedRotation: False + bodyType: Dynamic + - type: Fixtures + fixtures: {} + - type: OccluderTree + - type: SpreaderGrid + - type: Shuttle + - type: GridPathfinding + - type: Gravity + gravityShakeSound: !type:SoundPathSpecifier + path: /Audio/Effects/alert.ogg + - type: DecalGrid + chunkCollection: + version: 2 + nodes: + - node: + color: '#571212FF' + id: BrickTileWhiteInnerNe + decals: + 152: -1,3 + - node: + color: '#571212FF' + id: BrickTileWhiteInnerNw + decals: + 151: -1,3 + - node: + color: '#571212FF' + id: MiniTileBoxOverlay + decals: + 31: -7,2 + 32: 7,2 + - node: + color: '#571212FF' + id: MiniTileCheckerAOverlay + decals: + 22: -6,0 + 23: -6,1 + 24: -6,2 + 25: -6,3 + 26: -6,-1 + 27: -6,-2 + 28: -7,3 + 29: -8,3 + 30: -9,3 + 33: -9,2 + 34: -9,4 + 49: -10,2 + 50: -10,3 + 51: -10,4 + 109: -8,4 + 110: -7,4 + - node: + color: '#571212FF' + id: MiniTileCheckerBOverlay + decals: + 35: 6,-2 + 36: 6,-1 + 37: 6,0 + 38: 6,1 + 39: 6,2 + 40: 6,3 + 41: 7,3 + 42: 8,3 + 43: 9,3 + 44: 9,2 + 45: 9,4 + 46: 10,2 + 47: 10,3 + 48: 10,4 + 111: 8,4 + 112: 7,4 + - node: + color: '#571212FF' + id: MiniTileWhiteBox + decals: + 56: 0,3 + - node: + color: '#16212EFF' + id: MiniTileWhiteCornerNe + decals: + 18: -1,-1 + 77: 1,1 + - node: + color: '#571212FF' + id: MiniTileWhiteCornerNe + decals: + 10: 1,4 + 11: 2,3 + 53: 2,2 + 88: -3,-1 + 89: 5,-1 + - node: + color: '#16212EFF' + id: MiniTileWhiteCornerNw + decals: + 5: -1,1 + 19: 1,-1 + - node: + color: '#571212FF' + id: MiniTileWhiteCornerNw + decals: + 8: -2,3 + 9: -1,4 + 52: -2,2 + 87: -5,-1 + 90: 3,-1 + - node: + color: '#16212EFF' + id: MiniTileWhiteCornerSe + decals: + 76: 1,0 + - node: + color: '#571212FF' + id: MiniTileWhiteCornerSe + decals: + 80: 5,0 + - node: + color: '#16212EFF' + id: MiniTileWhiteCornerSw + decals: + 6: -1,0 + - node: + color: '#571212FF' + id: MiniTileWhiteCornerSw + decals: + 79: -5,0 + - node: + color: '#571212FF' + id: MiniTileWhiteInnerNe + decals: + 54: 1,3 + 58: -2,-1 + 72: 0,0 + 73: -1,0 + - node: + color: '#571212FF' + id: MiniTileWhiteInnerNw + decals: + 55: 1,3 + 59: 2,-1 + 74: 0,0 + 75: 1,0 + - node: + color: '#571212FF' + id: MiniTileWhiteInnerSe + decals: + 62: -2,-1 + 65: -2,2 + 69: -1,1 + 70: 0,1 + 71: 0,0 + - node: + color: '#571212FF' + id: MiniTileWhiteInnerSw + decals: + 63: 2,-1 + 64: 2,2 + 66: 0,1 + 67: 1,1 + 68: 0,0 + - node: + color: '#16212EFF' + id: MiniTileWhiteLineE + decals: + 0: 0,-1 + 2: -2,0 + 21: -2,1 + - node: + color: '#571212FF' + id: MiniTileWhiteLineE + decals: + 14: 2,1 + 15: 2,0 + 60: 2,-1 + 108: 5,-2 + - node: + color: '#16212EFF' + id: MiniTileWhiteLineN + decals: + 78: 0,1 + 147: 8,11 + 148: 9,11 + - node: + color: '#571212FF' + id: MiniTileWhiteLineN + decals: + 12: 0,4 + 57: 0,2 + 91: 4,-1 + 92: -4,-1 + 114: 9,5 + 115: -9,5 + - node: + color: '#FF9821FF' + id: MiniTileWhiteLineN + decals: + 149: -9,11 + 150: -8,11 + - node: + color: '#16212EFF' + id: MiniTileWhiteLineS + decals: + 4: 0,2 + 145: 8,11 + 146: 9,11 + 153: -1,2 + 154: 1,2 + - node: + color: '#571212FF' + id: MiniTileWhiteLineS + decals: + 16: 1,-1 + 17: -1,-1 + 113: 9,5 + 116: -9,5 + - node: + color: '#FF9821FF' + id: MiniTileWhiteLineS + decals: + 143: -9,11 + 144: -8,11 + - node: + color: '#16212EFF' + id: MiniTileWhiteLineW + decals: + 1: 0,-1 + 3: 2,0 + 20: 2,1 + - node: + color: '#571212FF' + id: MiniTileWhiteLineW + decals: + 7: -2,0 + 13: -2,1 + 61: -2,-1 + 107: -5,-2 + - node: + color: '#571212FF' + id: OffsetCheckerAOverlay + decals: + 117: 8,6 + 118: 9,6 + 119: 10,6 + 120: 10,7 + 121: 9,7 + 122: 8,7 + 123: 8,8 + 124: 9,8 + 125: 10,8 + 126: 9,9 + 127: 8,9 + 128: 8,10 + 129: 9,10 + - node: + color: '#571212FF' + id: OffsetCheckerBOverlay + decals: + 81: 5,-1 + 82: 4,-1 + 83: 3,-1 + 84: -3,-1 + 85: -4,-1 + 86: -5,-1 + 93: 2,-2 + 94: 1,-2 + 95: -1,-2 + 96: -2,-2 + 97: 0,-2 + 98: -1,-3 + 99: 1,-3 + 100: 0,-3 + 101: 5,-2 + 102: 4,-2 + 103: 3,-2 + 104: -3,-2 + 105: -4,-2 + 106: -5,-2 + 130: -8,6 + 131: -9,6 + 132: -10,6 + 133: -10,7 + 134: -9,7 + 135: -8,7 + 136: -8,8 + 137: -9,8 + 138: -10,8 + 139: -9,9 + 140: -8,9 + 141: -8,10 + 142: -9,10 + - type: GridAtmosphere + version: 2 + data: + tiles: + 0,0: + 0: 30711 + 0,-1: + 0: 65340 + -1,0: + 0: 56828 + 0,1: + 0: 3 + -1,1: + 0: 8 + 1,0: + 0: 56670 + 1,-1: + 0: 30464 + 1: 129 + 1,1: + 1: 16386 + 0: 1032 + 2,0: + 0: 14867 + 1: 8 + 2,1: + 0: 30507 + 2,2: + 0: 13111 + 1: 128 + 1,2: + 1: 32768 + 1,3: + 1: 8 + 2,-1: + 0: 4096 + 1: 16896 + 2,3: + 1: 4612 + -1,-1: + 0: 65414 + 1: 1 + -3,0: + 1: 2 + 0: 35336 + -3,1: + 0: 52362 + -3,2: + 1: 32 + 0: 34956 + -3,-1: + 1: 18432 + -3,3: + 1: 2052 + -2,0: + 0: 30303 + -2,1: + 0: 5379 + 1: 16392 + -2,2: + 0: 4369 + 1: 8192 + -2,-1: + 0: 56320 + 1: 32 + -2,3: + 1: 4098 + uniqueMixes: + - volume: 2500 + temperature: 293.15 + moles: + - 21.824879 + - 82.10312 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - volume: 2500 + immutable: True + moles: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + chunkSize: 4 + - type: GasTileOverlay + - type: RadiationGridResistance +- proto: ActionToggleInternals + entities: + - uid: 495 + components: + - type: Transform + parent: 493 + - type: InstantAction + container: 493 +- proto: ActionToggleJetpack + entities: + - uid: 494 + components: + - type: Transform + parent: 493 + - type: InstantAction + container: 493 +- proto: AirCanister + entities: + - uid: 441 + components: + - type: Transform + anchored: True + pos: -8.5,11.5 + parent: 1 + - type: Physics + bodyType: Static +- proto: AirlockExternalGlass + entities: + - uid: 125 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,1.5 + parent: 1 + - type: DeviceLinkSink + ports: + - DoorBolt + - Open + - Close + - Toggle + - type: DeviceLinkSource + linkedPorts: + 127: + - DoorStatus: DoorBolt + - uid: 126 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,1.5 + parent: 1 + - type: DeviceLinkSink + ports: + - DoorBolt + - Open + - Close + - Toggle + - type: DeviceLinkSource + linkedPorts: + 128: + - DoorStatus: DoorBolt + - uid: 127 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,2.5 + parent: 1 + - type: DeviceLinkSink + ports: + - DoorBolt + - Open + - Close + - Toggle + - type: DeviceLinkSource + linkedPorts: + 125: + - DoorStatus: DoorBolt + - uid: 128 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,2.5 + parent: 1 + - type: DeviceLinkSink + ports: + - DoorBolt + - Open + - Close + - Toggle + - type: DeviceLinkSource + linkedPorts: + 126: + - DoorStatus: DoorBolt +- proto: AirlockMaint + entities: + - uid: 43 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,0.5 + parent: 1 + - uid: 85 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,0.5 + parent: 1 +- proto: AirlockShuttleSyndicate + entities: + - uid: 44 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,2.5 + parent: 1 + - uid: 46 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,4.5 + parent: 1 + - uid: 105 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,4.5 + parent: 1 + - uid: 107 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,2.5 + parent: 1 +- proto: AirlockSyndicate + entities: + - uid: 519 + components: + - type: Transform + pos: 9.5,5.5 + parent: 1 + - uid: 520 + components: + - type: Transform + pos: -8.5,5.5 + parent: 1 +- proto: APCBasic + entities: + - uid: 244 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 +- proto: AtmosDeviceFanDirectional + entities: + - uid: 87 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,2.5 + parent: 1 + - uid: 340 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,2.5 + parent: 1 + - uid: 341 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,4.5 + parent: 1 + - uid: 342 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,2.5 + parent: 1 + - uid: 533 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,4.5 + parent: 1 +- proto: Bed + entities: + - uid: 446 + components: + - type: Transform + pos: 10.5,7.5 + parent: 1 +- proto: BedsheetSyndie + entities: + - uid: 470 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,7.5 + parent: 1 +- proto: BlastDoor + entities: + - uid: 208 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,2.5 + parent: 1 + - uid: 209 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,3.5 + parent: 1 + - uid: 210 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,4.5 + parent: 1 + - uid: 211 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,2.5 + parent: 1 + - uid: 212 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,3.5 + parent: 1 + - uid: 213 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,4.5 + parent: 1 +- proto: BoxCardboard + entities: + - uid: 531 + components: + - type: MetaData + desc: a box full of frag grenade cartridges + name: frag grenade box + - type: Transform + pos: -0.7699833,1.7199572 + parent: 1 + - type: Storage + storedItems: + 523: + position: 0,0 + _rotation: South + 522: + position: 1,0 + _rotation: South + 525: + position: 2,0 + _rotation: South + 524: + position: 0,2 + _rotation: East + - type: ContainerContainer + containers: + storagebase: !type:Container + showEnts: False + occludes: True + ents: + - 523 + - 522 + - 525 + - 524 + - uid: 532 + components: + - type: MetaData + desc: a box full of EMP cartridges + name: EMP grenade box + - type: Transform + pos: -0.23873329,1.699124 + parent: 1 + - type: Storage + storedItems: + 159: + position: 0,0 + _rotation: South + 131: + position: 1,0 + _rotation: South + 130: + position: 2,0 + _rotation: South + 158: + position: 0,2 + _rotation: East + - type: ContainerContainer + containers: + storagebase: !type:Container + showEnts: False + occludes: True + ents: + - 159 + - 131 + - 130 + - 158 +- proto: BoxFolderBlack + entities: + - uid: 514 + components: + - type: Transform + parent: 511 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: BoxFolderClipboard + entities: + - uid: 518 + components: + - type: Transform + parent: 511 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: BoxFolderNuclearCodes + entities: + - uid: 526 + components: + - type: Transform + pos: 1.5254097,1.4605976 + parent: 1 +- proto: BoxFolderRed + entities: + - uid: 327 + components: + - type: Transform + pos: -0.46789998,1.480374 + parent: 1 + - uid: 513 + components: + - type: Transform + parent: 511 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 516 + components: + - type: Transform + parent: 511 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: BoxMagazinePistolCaselessRifle + entities: + - uid: 463 + components: + - type: Transform + pos: -7.332144,10.686393 + parent: 1 + - uid: 464 + components: + - type: Transform + pos: -7.311311,7.5718102 + parent: 1 +- proto: ButtonFrameExit + entities: + - uid: 326 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,2.5 + parent: 1 + - uid: 331 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,2.5 + parent: 1 +- proto: C4 + entities: + - uid: 507 + components: + - type: Transform + pos: 8.755206,8.089237 + parent: 1 + - uid: 508 + components: + - type: Transform + pos: 8.755206,7.5892377 + parent: 1 +- proto: CableApcExtension + entities: + - uid: 184 + components: + - type: Transform + pos: 9.5,4.5 + parent: 1 + - uid: 245 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 + - uid: 246 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - uid: 247 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 + - uid: 248 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - uid: 249 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 + - uid: 250 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 1 + - uid: 251 + components: + - type: Transform + pos: 2.5,-0.5 + parent: 1 + - uid: 252 + components: + - type: Transform + pos: 3.5,-0.5 + parent: 1 + - uid: 253 + components: + - type: Transform + pos: 4.5,-0.5 + parent: 1 + - uid: 254 + components: + - type: Transform + pos: 5.5,-0.5 + parent: 1 + - uid: 255 + components: + - type: Transform + pos: 6.5,-0.5 + parent: 1 + - uid: 256 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 1 + - uid: 257 + components: + - type: Transform + pos: -4.5,-0.5 + parent: 1 + - uid: 258 + components: + - type: Transform + pos: -5.5,-0.5 + parent: 1 + - uid: 259 + components: + - type: Transform + pos: -5.5,0.5 + parent: 1 + - uid: 260 + components: + - type: Transform + pos: -5.5,1.5 + parent: 1 + - uid: 261 + components: + - type: Transform + pos: -5.5,2.5 + parent: 1 + - uid: 262 + components: + - type: Transform + pos: -5.5,3.5 + parent: 1 + - uid: 263 + components: + - type: Transform + pos: -6.5,3.5 + parent: 1 + - uid: 264 + components: + - type: Transform + pos: -7.5,3.5 + parent: 1 + - uid: 265 + components: + - type: Transform + pos: -8.5,3.5 + parent: 1 + - uid: 266 + components: + - type: Transform + pos: -6.5,0.5 + parent: 1 + - uid: 267 + components: + - type: Transform + pos: -7.5,0.5 + parent: 1 + - uid: 268 + components: + - type: Transform + pos: 6.5,0.5 + parent: 1 + - uid: 269 + components: + - type: Transform + pos: 7.5,0.5 + parent: 1 + - uid: 270 + components: + - type: Transform + pos: 8.5,0.5 + parent: 1 + - uid: 271 + components: + - type: Transform + pos: 6.5,1.5 + parent: 1 + - uid: 272 + components: + - type: Transform + pos: 6.5,2.5 + parent: 1 + - uid: 273 + components: + - type: Transform + pos: 6.5,3.5 + parent: 1 + - uid: 274 + components: + - type: Transform + pos: 7.5,3.5 + parent: 1 + - uid: 275 + components: + - type: Transform + pos: 8.5,3.5 + parent: 1 + - uid: 276 + components: + - type: Transform + pos: 9.5,3.5 + parent: 1 + - uid: 277 + components: + - type: Transform + pos: 9.5,5.5 + parent: 1 + - uid: 278 + components: + - type: Transform + pos: 9.5,6.5 + parent: 1 + - uid: 279 + components: + - type: Transform + pos: 9.5,7.5 + parent: 1 + - uid: 280 + components: + - type: Transform + pos: 9.5,8.5 + parent: 1 + - uid: 281 + components: + - type: Transform + pos: 9.5,9.5 + parent: 1 + - uid: 282 + components: + - type: Transform + pos: 9.5,10.5 + parent: 1 + - uid: 283 + components: + - type: Transform + pos: 9.5,11.5 + parent: 1 + - uid: 284 + components: + - type: Transform + pos: -8.5,4.5 + parent: 1 + - uid: 285 + components: + - type: Transform + pos: -8.5,5.5 + parent: 1 + - uid: 286 + components: + - type: Transform + pos: -8.5,6.5 + parent: 1 + - uid: 287 + components: + - type: Transform + pos: -8.5,7.5 + parent: 1 + - uid: 288 + components: + - type: Transform + pos: -8.5,8.5 + parent: 1 + - uid: 289 + components: + - type: Transform + pos: -8.5,9.5 + parent: 1 + - uid: 290 + components: + - type: Transform + pos: -8.5,10.5 + parent: 1 + - uid: 291 + components: + - type: Transform + pos: -8.5,11.5 + parent: 1 + - uid: 292 + components: + - type: Transform + pos: 8.5,9.5 + parent: 1 + - uid: 293 + components: + - type: Transform + pos: -1.5,-1.5 + parent: 1 + - uid: 294 + components: + - type: Transform + pos: -0.5,0.5 + parent: 1 + - uid: 295 + components: + - type: Transform + pos: 2.5,-1.5 + parent: 1 + - uid: 296 + components: + - type: Transform + pos: -0.5,1.5 + parent: 1 + - uid: 297 + components: + - type: Transform + pos: -0.5,2.5 + parent: 1 + - uid: 298 + components: + - type: Transform + pos: 0.5,2.5 + parent: 1 + - uid: 299 + components: + - type: Transform + pos: 1.5,2.5 + parent: 1 + - uid: 300 + components: + - type: Transform + pos: 1.5,1.5 + parent: 1 + - uid: 301 + components: + - type: Transform + pos: 1.5,0.5 + parent: 1 + - uid: 302 + components: + - type: Transform + pos: 2.5,1.5 + parent: 1 + - uid: 303 + components: + - type: Transform + pos: 3.5,1.5 + parent: 1 + - uid: 304 + components: + - type: Transform + pos: 4.5,1.5 + parent: 1 + - uid: 305 + components: + - type: Transform + pos: -1.5,1.5 + parent: 1 + - uid: 306 + components: + - type: Transform + pos: -2.5,1.5 + parent: 1 + - uid: 307 + components: + - type: Transform + pos: -3.5,1.5 + parent: 1 + - uid: 308 + components: + - type: Transform + pos: 0.5,3.5 + parent: 1 + - uid: 309 + components: + - type: Transform + pos: 0.5,4.5 + parent: 1 + - uid: 310 + components: + - type: Transform + pos: 0.5,5.5 + parent: 1 + - uid: 311 + components: + - type: Transform + pos: -0.5,5.5 + parent: 1 + - uid: 312 + components: + - type: Transform + pos: -1.5,5.5 + parent: 1 + - uid: 313 + components: + - type: Transform + pos: -1.5,4.5 + parent: 1 + - uid: 314 + components: + - type: Transform + pos: -2.5,4.5 + parent: 1 + - uid: 315 + components: + - type: Transform + pos: -2.5,3.5 + parent: 1 + - uid: 316 + components: + - type: Transform + pos: 1.5,5.5 + parent: 1 + - uid: 317 + components: + - type: Transform + pos: 2.5,5.5 + parent: 1 + - uid: 318 + components: + - type: Transform + pos: 2.5,4.5 + parent: 1 + - uid: 319 + components: + - type: Transform + pos: 3.5,4.5 + parent: 1 + - uid: 320 + components: + - type: Transform + pos: 3.5,3.5 + parent: 1 + - uid: 321 + components: + - type: Transform + pos: -7.5,9.5 + parent: 1 + - uid: 322 + components: + - type: Transform + pos: -6.5,9.5 + parent: 1 + - uid: 323 + components: + - type: Transform + pos: -6.5,8.5 + parent: 1 + - uid: 324 + components: + - type: Transform + pos: 7.5,9.5 + parent: 1 + - uid: 325 + components: + - type: Transform + pos: 7.5,8.5 + parent: 1 + - uid: 499 + components: + - type: Transform + pos: -7.5,14.5 + parent: 1 + - uid: 500 + components: + - type: Transform + pos: -8.5,13.5 + parent: 1 + - uid: 501 + components: + - type: Transform + pos: 8.5,13.5 + parent: 1 + - uid: 502 + components: + - type: Transform + pos: 9.5,12.5 + parent: 1 + - uid: 503 + components: + - type: Transform + pos: 9.5,13.5 + parent: 1 + - uid: 504 + components: + - type: Transform + pos: -8.5,12.5 + parent: 1 + - uid: 509 + components: + - type: Transform + pos: -7.5,13.5 + parent: 1 + - uid: 510 + components: + - type: Transform + pos: 8.5,14.5 + parent: 1 +- proto: CableHV + entities: + - uid: 214 + components: + - type: Transform + pos: -8.5,0.5 + parent: 1 + - uid: 215 + components: + - type: Transform + pos: -7.5,0.5 + parent: 1 + - uid: 216 + components: + - type: Transform + pos: -7.5,1.5 + parent: 1 + - uid: 217 + components: + - type: Transform + pos: -7.5,-0.5 + parent: 1 + - uid: 218 + components: + - type: Transform + pos: 8.5,-0.5 + parent: 1 + - uid: 219 + components: + - type: Transform + pos: 8.5,0.5 + parent: 1 + - uid: 220 + components: + - type: Transform + pos: 8.5,1.5 + parent: 1 + - uid: 221 + components: + - type: Transform + pos: 9.5,0.5 + parent: 1 +- proto: CableMV + entities: + - uid: 222 + components: + - type: Transform + pos: -6.5,0.5 + parent: 1 + - uid: 223 + components: + - type: Transform + pos: -7.5,0.5 + parent: 1 + - uid: 224 + components: + - type: Transform + pos: -7.5,-0.5 + parent: 1 + - uid: 225 + components: + - type: Transform + pos: -5.5,0.5 + parent: 1 + - uid: 226 + components: + - type: Transform + pos: -5.5,-0.5 + parent: 1 + - uid: 227 + components: + - type: Transform + pos: -4.5,-0.5 + parent: 1 + - uid: 228 + components: + - type: Transform + pos: -3.5,-0.5 + parent: 1 + - uid: 229 + components: + - type: Transform + pos: -2.5,-0.5 + parent: 1 + - uid: 230 + components: + - type: Transform + pos: -1.5,-0.5 + parent: 1 + - uid: 231 + components: + - type: Transform + pos: -0.5,-0.5 + parent: 1 + - uid: 232 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 + - uid: 233 + components: + - type: Transform + pos: 1.5,-0.5 + parent: 1 + - uid: 234 + components: + - type: Transform + pos: 2.5,-0.5 + parent: 1 + - uid: 235 + components: + - type: Transform + pos: 3.5,-0.5 + parent: 1 + - uid: 236 + components: + - type: Transform + pos: 4.5,-0.5 + parent: 1 + - uid: 237 + components: + - type: Transform + pos: 5.5,-0.5 + parent: 1 + - uid: 238 + components: + - type: Transform + pos: 6.5,-0.5 + parent: 1 + - uid: 239 + components: + - type: Transform + pos: 6.5,0.5 + parent: 1 + - uid: 240 + components: + - type: Transform + pos: 7.5,0.5 + parent: 1 + - uid: 241 + components: + - type: Transform + pos: 8.5,0.5 + parent: 1 + - uid: 242 + components: + - type: Transform + pos: 8.5,-0.5 + parent: 1 + - uid: 243 + components: + - type: Transform + pos: -2.5,0.5 + parent: 1 +- proto: Catwalk + entities: + - uid: 135 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,1.5 + parent: 1 + - uid: 136 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,2.5 + parent: 1 + - uid: 137 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,1.5 + parent: 1 + - uid: 138 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,2.5 + parent: 1 + - uid: 139 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,3.5 + parent: 1 + - uid: 140 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,3.5 + parent: 1 + - uid: 442 + components: + - type: Transform + pos: -7.5,1.5 + parent: 1 + - uid: 443 + components: + - type: Transform + pos: 8.5,1.5 + parent: 1 +- proto: ChairPilotSeat + entities: + - uid: 141 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,3.5 + parent: 1 + - uid: 143 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,0.5 + parent: 1 + - uid: 145 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,3.5 + parent: 1 +- proto: ClosetLegalFilled + entities: + - uid: 511 + components: + - type: Transform + pos: 8.5,6.5 + parent: 1 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 512 + - 513 + - 514 + - 515 + - 516 + - 517 + - 518 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: ClothingBeltAssault + entities: + - uid: 475 + components: + - type: Transform + parent: 471 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingHeadHatSyndie + entities: + - uid: 476 + components: + - type: Transform + parent: 471 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingHeadsetAltSyndicate + entities: + - uid: 133 + components: + - type: Transform + parent: 471 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 134 + components: + - type: Transform + parent: 471 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 521 + components: + - type: Transform + parent: 471 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterCoatSyndieCap + entities: + - uid: 479 + components: + - type: Transform + parent: 471 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterWinterSyndie + entities: + - uid: 484 + components: + - type: Transform + parent: 471 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingOuterWinterSyndieCap + entities: + - uid: 487 + components: + - type: Transform + parent: 471 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingShoesBootsCowboyBlack + entities: + - uid: 474 + components: + - type: Transform + parent: 471 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 477 + components: + - type: Transform + parent: 471 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingShoesBootsCowboyBrown + entities: + - uid: 472 + components: + - type: Transform + parent: 471 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingShoesBootsWinterSyndicate + entities: + - uid: 473 + components: + - type: Transform + parent: 471 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingShoesColorBlack + entities: + - uid: 482 + components: + - type: Transform + parent: 471 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingShoesHighheelBoots + entities: + - uid: 485 + components: + - type: Transform + parent: 471 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpskirtLawyerRed + entities: + - uid: 515 + components: + - type: Transform + parent: 511 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpskirtSyndieFormalDress + entities: + - uid: 488 + components: + - type: Transform + parent: 471 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitLawyerRed + entities: + - uid: 512 + components: + - type: Transform + parent: 511 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 517 + components: + - type: Transform + parent: 511 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitPyjamaSyndicateBlack + entities: + - uid: 481 + components: + - type: Transform + parent: 471 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitPyjamaSyndicatePink + entities: + - uid: 478 + components: + - type: Transform + parent: 471 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitPyjamaSyndicateRed + entities: + - uid: 483 + components: + - type: Transform + parent: 471 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ClothingUniformJumpsuitSyndieFormal + entities: + - uid: 480 + components: + - type: Transform + parent: 471 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 486 + components: + - type: Transform + parent: 471 + - type: Physics + canCollide: False + - type: InsideEntityStorage +- proto: ComputerIFFSyndicate + entities: + - uid: 154 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,3.5 + parent: 1 +- proto: ComputerPowerMonitoring + entities: + - uid: 152 + components: + - type: Transform + pos: 1.5,4.5 + parent: 1 +- proto: ComputerRadar + entities: + - uid: 147 + components: + - type: Transform + pos: 0.5,1.5 + parent: 1 +- proto: ComputerShuttleSyndie + entities: + - uid: 144 + components: + - type: Transform + pos: -0.5,4.5 + parent: 1 +- proto: ComputerSurveillanceCameraMonitor + entities: + - uid: 149 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,0.5 + parent: 1 + - uid: 153 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,3.5 + parent: 1 +- proto: CrateSyndicateSurplusBundle + entities: + - uid: 459 + components: + - type: Transform + pos: -7.5,9.5 + parent: 1 + - uid: 460 + components: + - type: Transform + pos: -7.5,8.5 + parent: 1 +- proto: CyberPen + entities: + - uid: 328 + components: + - type: Transform + pos: -0.53040004,1.4282906 + parent: 1 +- proto: EnergyDaggerBox + entities: + - uid: 496 + components: + - type: Transform + pos: 8.55729,9.557987 + parent: 1 +- proto: FaxMachineSyndie + entities: + - uid: 155 + components: + - type: Transform + pos: 1.5,1.5 + parent: 1 +- proto: GasPassiveVent + entities: + - uid: 359 + components: + - type: Transform + pos: 7.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 391 + components: + - type: Transform + pos: -6.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' +- proto: GasPipeBend + entities: + - uid: 349 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 352 + components: + - type: Transform + pos: -5.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 354 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 355 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 380 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 381 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 389 + components: + - type: Transform + pos: 9.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 404 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,8.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 423 + components: + - type: Transform + pos: -7.5,8.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 424 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,8.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 425 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 426 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 427 + components: + - type: Transform + pos: 10.5,8.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' +- proto: GasPipeStraight + entities: + - uid: 63 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,10.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 343 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,9.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 344 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,8.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 346 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 347 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 348 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 350 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 353 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 356 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 357 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 358 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 360 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 361 + components: + - type: Transform + pos: 6.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 362 + components: + - type: Transform + pos: 6.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 363 + components: + - type: Transform + pos: 6.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 364 + components: + - type: Transform + pos: -5.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 365 + components: + - type: Transform + pos: -5.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 366 + components: + - type: Transform + pos: -5.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 367 + components: + - type: Transform + pos: -5.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 368 + components: + - type: Transform + pos: 6.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 369 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 370 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 371 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 372 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 373 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 375 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 376 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -1.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 377 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -2.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 378 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 379 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 382 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 383 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 392 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 393 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 4.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 394 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 5.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 395 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 6.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 396 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 397 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 398 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 399 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 401 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 402 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 403 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 405 + components: + - type: Transform + pos: -7.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 407 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 408 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 409 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 411 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 412 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 413 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 414 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 415 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 416 + components: + - type: Transform + pos: -7.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 417 + components: + - type: Transform + pos: -7.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 418 + components: + - type: Transform + pos: -7.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 420 + components: + - type: Transform + pos: -7.5,5.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 421 + components: + - type: Transform + pos: -7.5,6.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 422 + components: + - type: Transform + pos: -7.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 428 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,8.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 429 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,8.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 437 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 438 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 439 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 440 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' +- proto: GasPipeTJunction + entities: + - uid: 345 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 351 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,3.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 374 + components: + - type: Transform + pos: 0.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 384 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 390 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 400 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 406 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 410 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-0.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 419 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' +- proto: GasPort + entities: + - uid: 335 + components: + - type: Transform + pos: -8.5,11.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' +- proto: GasVentPump + entities: + - uid: 385 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 386 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,1.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 387 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 388 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#0335FCFF' +- proto: GasVentScrubber + entities: + - uid: 430 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 431 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,7.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 433 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 434 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,4.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 435 + components: + - type: Transform + pos: -1.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 436 + components: + - type: Transform + pos: 2.5,2.5 + parent: 1 + - type: AtmosPipeColor + color: '#FF1212FF' +- proto: GeneratorBasic15kW + entities: + - uid: 199 + components: + - type: Transform + pos: 8.5,1.5 + parent: 1 + - uid: 200 + components: + - type: Transform + pos: -7.5,1.5 + parent: 1 +- proto: GravityGeneratorMini + entities: + - uid: 150 + components: + - type: Transform + pos: 0.5,4.5 + parent: 1 +- proto: GrenadeEMP + entities: + - uid: 130 + components: + - type: Transform + parent: 532 + - type: Physics + canCollide: False + - uid: 131 + components: + - type: Transform + parent: 532 + - type: Physics + canCollide: False + - uid: 158 + components: + - type: Transform + parent: 532 + - type: Physics + canCollide: False + - uid: 159 + components: + - type: Transform + parent: 532 + - type: Physics + canCollide: False +- proto: GrenadeFrag + entities: + - uid: 522 + components: + - type: Transform + parent: 531 + - type: Physics + canCollide: False + - uid: 523 + components: + - type: Transform + parent: 531 + - type: Physics + canCollide: False + - uid: 524 + components: + - type: Transform + parent: 531 + - type: Physics + canCollide: False + - uid: 525 + components: + - type: Transform + parent: 531 + - type: Physics + canCollide: False +- proto: Grille + entities: + - uid: 108 + components: + - type: Transform + pos: 7.5,8.5 + parent: 1 + - uid: 156 + components: + - type: Transform + pos: -2.5,4.5 + parent: 1 + - uid: 157 + components: + - type: Transform + pos: -2.5,3.5 + parent: 1 + - uid: 160 + components: + - type: Transform + pos: -1.5,4.5 + parent: 1 + - uid: 161 + components: + - type: Transform + pos: -1.5,5.5 + parent: 1 + - uid: 162 + components: + - type: Transform + pos: -0.5,5.5 + parent: 1 + - uid: 163 + components: + - type: Transform + pos: 0.5,5.5 + parent: 1 + - uid: 164 + components: + - type: Transform + pos: 1.5,5.5 + parent: 1 + - uid: 165 + components: + - type: Transform + pos: 2.5,5.5 + parent: 1 + - uid: 166 + components: + - type: Transform + pos: 2.5,4.5 + parent: 1 + - uid: 167 + components: + - type: Transform + pos: 3.5,4.5 + parent: 1 + - uid: 168 + components: + - type: Transform + pos: 3.5,3.5 + parent: 1 + - uid: 169 + components: + - type: Transform + pos: 7.5,9.5 + parent: 1 + - uid: 170 + components: + - type: Transform + pos: -6.5,8.5 + parent: 1 + - uid: 171 + components: + - type: Transform + pos: -6.5,9.5 + parent: 1 +- proto: Gyroscope + entities: + - uid: 185 + components: + - type: Transform + pos: 0.5,-2.5 + parent: 1 +- proto: JetpackMiniFilled + entities: + - uid: 493 + components: + - type: Transform + pos: 8.505206,10.057987 + parent: 1 + - type: GasTank + toggleActionEntity: 495 + - type: Jetpack + toggleActionEntity: 494 + - type: ActionsContainer + - type: ContainerContainer + containers: + actions: !type:Container + ents: + - 494 + - 495 +- proto: LockerSyndicate + entities: + - uid: 471 + components: + - type: Transform + pos: 10.5,8.5 + parent: 1 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.147 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 134 + - 133 + - 521 + - 487 + - 488 + - 486 + - 485 + - 484 + - 483 + - 482 + - 481 + - 480 + - 479 + - 478 + - 477 + - 476 + - 475 + - 474 + - 473 + - 472 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null +- proto: PhoneInstrumentSyndicate + entities: + - uid: 498 + components: + - type: Transform + pos: 8.52604,8.64132 + parent: 1 +- proto: PlastitaniumWindow + entities: + - uid: 3 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,4.5 + parent: 1 + - uid: 4 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 2.5,5.5 + parent: 1 + - uid: 5 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 1.5,5.5 + parent: 1 + - uid: 6 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 0.5,5.5 + parent: 1 + - uid: 7 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,5.5 + parent: 1 + - uid: 8 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,5.5 + parent: 1 + - uid: 9 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,4.5 + parent: 1 + - uid: 10 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,4.5 + parent: 1 + - uid: 11 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,3.5 + parent: 1 + - uid: 65 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,9.5 + parent: 1 + - uid: 66 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,8.5 + parent: 1 + - uid: 84 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,9.5 + parent: 1 + - uid: 98 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,8.5 + parent: 1 + - uid: 113 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,4.5 + parent: 1 + - uid: 114 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,3.5 + parent: 1 +- proto: PoweredlightRed + entities: + - uid: 432 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,9.5 + parent: 1 + - uid: 444 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 2.5,2.5 + parent: 1 + - uid: 445 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -1.5,2.5 + parent: 1 + - uid: 448 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,9.5 + parent: 1 + - uid: 449 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,3.5 + parent: 1 + - uid: 450 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,3.5 + parent: 1 + - uid: 451 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-1.5 + parent: 1 + - uid: 453 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-1.5 + parent: 1 +- proto: PoweredSmallLight + entities: + - uid: 447 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,1.5 + parent: 1 + - uid: 467 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,1.5 + parent: 1 +- proto: Rack + entities: + - uid: 457 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,10.5 + parent: 1 + - uid: 458 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,7.5 + parent: 1 +- proto: ShuttleGunFriendship + entities: + - uid: 129 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,3.5 + parent: 1 + - uid: 132 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,3.5 + parent: 1 +- proto: SignalButtonDirectional + entities: + - uid: 329 + components: + - type: MetaData + name: blast doors + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,2.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 208: + - Pressed: Toggle + 209: + - Pressed: Toggle + 210: + - Pressed: Toggle + - uid: 330 + components: + - type: MetaData + name: blast doors + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,2.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 211: + - Pressed: Toggle + 212: + - Pressed: Toggle + 213: + - Pressed: Toggle +- proto: SMESBasic + entities: + - uid: 198 + components: + - type: Transform + pos: -8.5,0.5 + parent: 1 + - uid: 202 + components: + - type: Transform + pos: 9.5,0.5 + parent: 1 +- proto: StairStageDark + entities: + - uid: 527 + components: + - type: Transform + pos: 0.5,-0.5 + parent: 1 +- proto: SubstationBasic + entities: + - uid: 187 + components: + - type: Transform + pos: -7.5,-0.5 + parent: 1 + - uid: 201 + components: + - type: Transform + pos: 8.5,-0.5 + parent: 1 +- proto: SuitStorageSyndie + entities: + - uid: 452 + components: + - type: Transform + pos: -9.5,8.5 + parent: 1 + - uid: 454 + components: + - type: Transform + pos: -9.5,6.5 + parent: 1 + - uid: 455 + components: + - type: Transform + pos: -7.5,6.5 + parent: 1 +- proto: SurveillanceCameraRouterSecurity + entities: + - uid: 332 + components: + - type: Transform + pos: 9.5,11.5 + parent: 1 +- proto: SurveillanceCameraSecurity + entities: + - uid: 333 + components: + - type: Transform + pos: -7.5,15.5 + parent: 1 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Fore-Port + - uid: 334 + components: + - type: Transform + pos: 8.5,15.5 + parent: 1 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Fore-Starboard + - uid: 337 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-3.5 + parent: 1 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Aft-Port + - uid: 339 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-3.5 + parent: 1 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Aft-Starboard +- proto: SyndicateComputerComms + entities: + - uid: 142 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -0.5,0.5 + parent: 1 +- proto: SyndieFlag + entities: + - uid: 468 + components: + - type: Transform + pos: -2.5,2.5 + parent: 1 + - uid: 469 + components: + - type: Transform + pos: 3.5,2.5 + parent: 1 +- proto: SyndieHandyFlag + entities: + - uid: 466 + components: + - type: Transform + pos: 8.49851,10.585687 + parent: 1 + - uid: 505 + components: + - type: Transform + pos: 8.796873,10.651737 + parent: 1 +- proto: SyndieMiniBomb + entities: + - uid: 506 + components: + - type: Transform + pos: 8.421873,7.766321 + parent: 1 +- proto: SyndieSoldierSpawner + entities: + - uid: 528 + components: + - type: Transform + pos: -0.5,3.5 + parent: 1 + - uid: 529 + components: + - type: Transform + pos: 1.5,3.5 + parent: 1 +- proto: SyndieSoldierTeamLeaderSpawner + entities: + - uid: 530 + components: + - type: Transform + pos: 0.5,0.5 + parent: 1 +- proto: TableFancyBlack + entities: + - uid: 489 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,10.5 + parent: 1 + - uid: 490 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,9.5 + parent: 1 + - uid: 491 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,8.5 + parent: 1 + - uid: 492 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,7.5 + parent: 1 +- proto: TableReinforced + entities: + - uid: 146 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,1.5 + parent: 1 + - uid: 148 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 1.5,1.5 + parent: 1 +- proto: Thruster + entities: + - uid: 172 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,6.5 + parent: 1 + - uid: 175 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -2.5,-3.5 + parent: 1 + - uid: 176 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-3.5 + parent: 1 + - uid: 177 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-3.5 + parent: 1 + - uid: 178 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-3.5 + parent: 1 + - uid: 179 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,6.5 + parent: 1 + - uid: 180 + components: + - type: Transform + pos: -6.5,12.5 + parent: 1 + - uid: 181 + components: + - type: Transform + pos: 7.5,12.5 + parent: 1 +- proto: ToolboxSyndicateFilled + entities: + - uid: 497 + components: + - type: Transform + pos: 8.505206,9.099654 + parent: 1 +- proto: TwoWayLever + entities: + - uid: 151 + components: + - type: MetaData + name: FIRE! + - type: Transform + pos: 0.48732924,3.7624094 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 129: + - Left: On + - Left: Trigger + - Right: On + - Right: Trigger + - Middle: Off + 132: + - Left: On + - Left: Trigger + - Right: On + - Right: Trigger + - Middle: Off +- proto: VendingMachineClothing + entities: + - uid: 465 + components: + - type: Transform + pos: 10.5,6.5 + parent: 1 +- proto: VendingMachineCoffee + entities: + - uid: 535 + components: + - type: Transform + pos: 6.5,-1.5 + parent: 1 +- proto: VendingMachineSustenance + entities: + - uid: 534 + components: + - type: Transform + pos: -5.5,-1.5 + parent: 1 +- proto: VendingMachineTankDispenserEVA + entities: + - uid: 456 + components: + - type: Transform + pos: -9.5,7.5 + parent: 1 +- proto: WallPlastitanium + entities: + - uid: 2 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,6.5 + parent: 1 + - uid: 13 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,0.5 + parent: 1 + - uid: 15 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,-0.5 + parent: 1 + - uid: 17 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,-1.5 + parent: 1 + - uid: 18 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,-1.5 + parent: 1 + - uid: 20 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,-2.5 + parent: 1 + - uid: 21 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,-2.5 + parent: 1 + - uid: 22 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -3.5,-2.5 + parent: 1 + - uid: 25 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-2.5 + parent: 1 + - uid: 26 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,-2.5 + parent: 1 + - uid: 27 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,-2.5 + parent: 1 + - uid: 29 + components: + - type: Transform + pos: 2.5,-2.5 + parent: 1 + - uid: 30 + components: + - type: Transform + pos: 3.5,-2.5 + parent: 1 + - uid: 31 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 1.5,-3.5 + parent: 1 + - uid: 32 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 0.5,-3.5 + parent: 1 + - uid: 33 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.5,-3.5 + parent: 1 + - uid: 34 + components: + - type: Transform + pos: -2.5,-2.5 + parent: 1 + - uid: 35 + components: + - type: Transform + pos: -1.5,-2.5 + parent: 1 + - uid: 36 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-1.5 + parent: 1 + - uid: 37 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,-1.5 + parent: 1 + - uid: 39 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-0.5 + parent: 1 + - uid: 41 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,0.5 + parent: 1 + - uid: 45 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 8.5,5.5 + parent: 1 + - uid: 47 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 10.5,5.5 + parent: 1 + - uid: 48 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,6.5 + parent: 1 + - uid: 49 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,7.5 + parent: 1 + - uid: 50 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,8.5 + parent: 1 + - uid: 52 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,9.5 + parent: 1 + - uid: 53 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,10.5 + parent: 1 + - uid: 54 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,11.5 + parent: 1 + - uid: 56 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,12.5 + parent: 1 + - uid: 57 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,13.5 + parent: 1 + - uid: 60 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,14.5 + parent: 1 + - uid: 61 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,13.5 + parent: 1 + - uid: 62 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,12.5 + parent: 1 + - uid: 64 + components: + - type: Transform + pos: 7.5,11.5 + parent: 1 + - uid: 67 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,10.5 + parent: 1 + - uid: 68 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,7.5 + parent: 1 + - uid: 69 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,6.5 + parent: 1 + - uid: 71 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,5.5 + parent: 1 + - uid: 72 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 6.5,4.5 + parent: 1 + - uid: 73 + components: + - type: Transform + pos: 7.5,5.5 + parent: 1 + - uid: 74 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,3.5 + parent: 1 + - uid: 75 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,2.5 + parent: 1 + - uid: 76 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,2.5 + parent: 1 + - uid: 77 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,3.5 + parent: 1 + - uid: 79 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,4.5 + parent: 1 + - uid: 80 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,5.5 + parent: 1 + - uid: 81 + components: + - type: Transform + pos: -6.5,5.5 + parent: 1 + - uid: 82 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,7.5 + parent: 1 + - uid: 83 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,10.5 + parent: 1 + - uid: 86 + components: + - type: Transform + pos: -6.5,11.5 + parent: 1 + - uid: 88 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,12.5 + parent: 1 + - uid: 89 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,13.5 + parent: 1 + - uid: 90 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,14.5 + parent: 1 + - uid: 93 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,13.5 + parent: 1 + - uid: 94 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,12.5 + parent: 1 + - uid: 96 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,11.5 + parent: 1 + - uid: 97 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,10.5 + parent: 1 + - uid: 99 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,9.5 + parent: 1 + - uid: 101 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,8.5 + parent: 1 + - uid: 102 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,7.5 + parent: 1 + - uid: 103 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,6.5 + parent: 1 + - uid: 104 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,5.5 + parent: 1 + - uid: 106 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,5.5 + parent: 1 + - uid: 109 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,3.5 + parent: 1 + - uid: 110 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,1.5 + parent: 1 + - uid: 111 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,1.5 + parent: 1 + - uid: 112 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 11.5,3.5 + parent: 1 + - uid: 115 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,1.5 + parent: 1 + - uid: 117 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,0.5 + parent: 1 + - uid: 118 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,2.5 + parent: 1 + - uid: 119 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 5.5,1.5 + parent: 1 + - uid: 121 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 4.5,0.5 + parent: 1 + - uid: 122 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,0.5 + parent: 1 + - uid: 123 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -2.5,0.5 + parent: 1 + - uid: 124 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 3.5,2.5 + parent: 1 + - uid: 186 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,1.5 + parent: 1 + - uid: 189 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,2.5 + parent: 1 + - uid: 191 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,1.5 + parent: 1 + - uid: 192 + components: + - type: Transform + pos: -6.5,-0.5 + parent: 1 + - uid: 193 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,1.5 + parent: 1 + - uid: 194 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,2.5 + parent: 1 + - uid: 196 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,1.5 + parent: 1 + - uid: 203 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,1.5 + parent: 1 + - uid: 204 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,1.5 + parent: 1 + - uid: 205 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,5.5 + parent: 1 + - uid: 206 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,5.5 + parent: 1 + - uid: 207 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 7.5,-0.5 + parent: 1 +- proto: WallPlastitaniumDiagonal + entities: + - uid: 12 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,0.5 + parent: 1 + - uid: 14 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,-0.5 + parent: 1 + - uid: 16 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,-1.5 + parent: 1 + - uid: 19 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,-2.5 + parent: 1 + - uid: 23 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -3.5,-3.5 + parent: 1 + - uid: 24 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 4.5,-3.5 + parent: 1 + - uid: 28 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 7.5,-2.5 + parent: 1 + - uid: 38 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 9.5,-1.5 + parent: 1 + - uid: 40 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 10.5,-0.5 + parent: 1 + - uid: 42 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 11.5,0.5 + parent: 1 + - uid: 51 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 11.5,9.5 + parent: 1 + - uid: 55 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,12.5 + parent: 1 + - uid: 58 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,14.5 + parent: 1 + - uid: 59 + components: + - type: Transform + pos: -7.5,15.5 + parent: 1 + - uid: 70 + components: + - type: Transform + pos: 5.5,4.5 + parent: 1 + - uid: 78 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,4.5 + parent: 1 + - uid: 91 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,15.5 + parent: 1 + - uid: 92 + components: + - type: Transform + pos: -8.5,14.5 + parent: 1 + - uid: 95 + components: + - type: Transform + pos: -9.5,12.5 + parent: 1 + - uid: 100 + components: + - type: Transform + pos: -10.5,9.5 + parent: 1 + - uid: 116 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -4.5,0.5 + parent: 1 + - uid: 120 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 5.5,0.5 + parent: 1 + - uid: 173 + components: + - type: Transform + pos: 1.5,-2.5 + parent: 1 + - uid: 174 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -0.5,-2.5 + parent: 1 + - uid: 182 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,7.5 + parent: 1 + - uid: 183 + components: + - type: Transform + pos: 6.5,7.5 + parent: 1 + - uid: 188 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,2.5 + parent: 1 + - uid: 190 + components: + - type: Transform + pos: -8.5,2.5 + parent: 1 + - uid: 195 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 9.5,2.5 + parent: 1 + - uid: 197 + components: + - type: Transform + pos: 7.5,2.5 + parent: 1 + - uid: 336 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 8.5,11.5 + parent: 1 + - uid: 338 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,11.5 + parent: 1 +- proto: WeaponPistolCobra + entities: + - uid: 461 + components: + - type: Transform + pos: -7.4571443,7.4884768 + parent: 1 + - uid: 462 + components: + - type: Transform + pos: -7.4154773,10.488477 + parent: 1 +... diff --git a/Resources/Maps/arena.yml b/Resources/Maps/arena.yml index 426a614bb1c..49b7daf6b60 100644 --- a/Resources/Maps/arena.yml +++ b/Resources/Maps/arena.yml @@ -530,8 +530,8 @@ entities: - type: Broadphase - type: Physics bodyStatus: InAir - angularDamping: 10000 - linearDamping: 10000 + angularDamping: 0.05 + linearDamping: 0.05 fixedRotation: False bodyType: Dynamic - type: Fixtures @@ -11356,9 +11356,6 @@ entities: - 0 chunkSize: 4 - type: OccluderTree - - type: Shuttle - angularDamping: 10000 - linearDamping: 10000 - type: GridPathfinding - type: RadiationGridResistance - type: BecomesStation diff --git a/Resources/Maps/asterisk.yml b/Resources/Maps/asterisk.yml index e57b4e86c6a..e96072c1d81 100644 --- a/Resources/Maps/asterisk.yml +++ b/Resources/Maps/asterisk.yml @@ -7317,6 +7317,11 @@ entities: - type: Transform pos: -39.5,11.5 parent: 2 + - uid: 2842 + components: + - type: Transform + pos: -41.5,4.5 + parent: 2 - uid: 2925 components: - type: Transform @@ -26241,12 +26246,6 @@ entities: rot: -1.5707963267948966 rad pos: -6.5,-32.5 parent: 2 - - uid: 1732 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -42.5,4.5 - parent: 2 - uid: 2173 components: - type: Transform @@ -27661,6 +27660,13 @@ entities: - type: Transform pos: -50.772728,-22.264135 parent: 2 +- proto: ClothingMaskGas + entities: + - uid: 10957 + components: + - type: Transform + pos: -43.359985,4.459735 + parent: 2 - proto: ClothingMaskGasAtmos entities: - uid: 9524 @@ -27783,17 +27789,17 @@ entities: parent: 2 - proto: Cobweb1 entities: - - uid: 2010 + - uid: 1732 components: - type: Transform rot: 1.5707963267948966 rad - pos: 42.5,-13.5 + pos: -43.5,4.5 parent: 2 - - uid: 10957 + - uid: 2010 components: - type: Transform - rot: 3.141592653589793 rad - pos: -41.5,4.5 + rot: 1.5707963267948966 rad + pos: 42.5,-13.5 parent: 2 - uid: 10960 components: @@ -32022,26 +32028,6 @@ entities: - type: Transform pos: -48.69231,-11.043152 parent: 2 - - uid: 10099 - components: - - type: Transform - pos: -32.758877,6.750649 - parent: 2 - - uid: 10100 - components: - - type: Transform - pos: -32.48804,6.750649 - parent: 2 - - uid: 10101 - components: - - type: Transform - pos: -32.61304,6.604714 - parent: 2 - - uid: 10102 - components: - - type: Transform - pos: -32.383877,6.59429 - parent: 2 - uid: 10765 components: - type: Transform @@ -32074,6 +32060,11 @@ entities: parent: 2 - proto: DrinkCoffeeJug entities: + - uid: 10100 + components: + - type: Transform + pos: -32.29805,6.8176136 + parent: 2 - uid: 10588 components: - type: Transform @@ -32198,6 +32189,11 @@ entities: - type: Transform pos: -41.67998,-1.3072225 parent: 2 + - uid: 12485 + components: + - type: Transform + pos: -32.245968,6.473625 + parent: 2 - proto: DrinkMugBlue entities: - uid: 10783 @@ -32269,6 +32265,21 @@ entities: - data: null ReagentId: Sugar Quantity: 2 + - uid: 10099 + components: + - type: Transform + pos: -32.5793,6.702951 + parent: 2 + - uid: 10101 + components: + - type: Transform + pos: -32.693886,6.5153203 + parent: 2 + - uid: 10102 + components: + - type: Transform + pos: -32.73555,6.7967663 + parent: 2 - uid: 10785 components: - type: Transform @@ -34646,12 +34657,6 @@ entities: - type: Transform pos: 27.5,18.5 parent: 2 - - uid: 2846 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -41.5,5.5 - parent: 2 - uid: 3813 components: - type: Transform @@ -34705,12 +34710,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FF6600FF' - - uid: 2847 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -43.5,5.5 - parent: 2 - uid: 3814 components: - type: Transform @@ -35758,6 +35757,14 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0088FFFF' + - uid: 12030 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -43.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FFAA00FF' - uid: 12140 components: - type: Transform @@ -36228,6 +36235,13 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0088FFFF' + - uid: 2846 + components: + - type: Transform + pos: -43.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#FFAA00FF' - uid: 2913 components: - type: Transform @@ -36524,14 +36538,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0088FFFF' - - uid: 6269 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -45.5,1.5 - parent: 2 - - type: AtmosPipeColor - color: '#0088FFFF' - uid: 7007 components: - type: Transform @@ -43759,14 +43765,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0088FFFF' - - uid: 8475 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -41.5,8.5 - parent: 2 - - type: AtmosPipeColor - color: '#0088FFFF' - uid: 8476 components: - type: Transform @@ -46391,6 +46389,60 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FFAA00FF' + - uid: 12477 + components: + - type: Transform + pos: -41.5,7.5 + parent: 2 + - type: AtmosPipeColor + color: '#0088FFFF' + - uid: 12478 + components: + - type: Transform + pos: -41.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0088FFFF' + - uid: 12479 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,2.5 + parent: 2 + - type: AtmosPipeColor + color: '#0088FFFF' + - uid: 12480 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,3.5 + parent: 2 + - type: AtmosPipeColor + color: '#0088FFFF' + - uid: 12481 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,4.5 + parent: 2 + - type: AtmosPipeColor + color: '#0088FFFF' + - uid: 12482 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0088FFFF' + - uid: 12483 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0088FFFF' - proto: GasPipeTJunction entities: - uid: 759 @@ -46559,6 +46611,14 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0099FFFF' + - uid: 2847 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -45.5,1.5 + parent: 2 + - type: AtmosPipeColor + color: '#0088FFFF' - uid: 2961 components: - type: Transform @@ -48480,6 +48540,13 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FFAA00FF' + - uid: 12476 + components: + - type: Transform + pos: -41.5,8.5 + parent: 2 + - type: AtmosPipeColor + color: '#0088FFFF' - proto: GasPort entities: - uid: 138 @@ -48565,14 +48632,6 @@ entities: rot: -1.5707963267948966 rad pos: 22.5,-25.5 parent: 2 - - uid: 2842 - components: - - type: MetaData - desc: "There's a lable here that reads: \"CONNECT N2O FOR EXECUTION\"" - name: toxic gas port - - type: Transform - pos: -41.5,7.5 - parent: 2 - uid: 3809 components: - type: Transform @@ -48723,18 +48782,6 @@ entities: rot: -1.5707963267948966 rad pos: -22.5,-12.5 parent: 2 - - uid: 4028 - components: - - type: MetaData - desc: A pump for removing any gases from the chamber. It would behoove you to remove any N2O from the chamber before opening it. - - type: Transform - rot: 3.141592653589793 rad - pos: -43.5,6.5 - parent: 2 - - type: GasPressurePump - targetPressure: 4500 - - type: AtmosPipeColor - color: '#FFAA00FF' - uid: 4622 components: - type: Transform @@ -48815,13 +48862,6 @@ entities: open: False - type: AtmosPipeColor color: '#FF6600FF' - - uid: 2843 - components: - - type: Transform - pos: -41.5,6.5 - parent: 2 - - type: GasValve - open: False - proto: GasVentPump entities: - uid: 1371 @@ -48868,6 +48908,14 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0088FFFF' + - uid: 4028 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -41.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0088FFFF' - uid: 4504 components: - type: Transform @@ -49961,6 +50009,14 @@ entities: - 9945 - type: AtmosPipeColor color: '#FFAA00FF' + - uid: 2843 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,5.5 + parent: 2 + - type: AtmosPipeColor + color: '#FFAA00FF' - uid: 2844 components: - type: Transform @@ -55039,6 +55095,13 @@ entities: - type: Transform pos: -44.5,13.5 parent: 2 +- proto: NitrousOxideTankFilled + entities: + - uid: 8475 + components: + - type: Transform + pos: -43.662067,4.647365 + parent: 2 - proto: NoticeBoard entities: - uid: 11203 @@ -64312,6 +64375,17 @@ entities: - SurveillanceCameraGeneral nameSet: True id: west hall distal + - uid: 12484 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,27.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: arrivals north - proto: SurveillanceCameraMedical entities: - uid: 11154 @@ -65126,6 +65200,11 @@ entities: - type: Transform pos: -49.5,11.5 parent: 2 + - uid: 6269 + components: + - type: Transform + pos: -43.5,4.5 + parent: 2 - uid: 7003 components: - type: Transform diff --git a/Resources/Maps/chibi.yml b/Resources/Maps/chibi.yml index af9f8850244..14209b5445a 100644 --- a/Resources/Maps/chibi.yml +++ b/Resources/Maps/chibi.yml @@ -24843,6 +24843,13 @@ entities: - type: Transform pos: -5.5,7.5 parent: 2 +- proto: SpawnPointLatejoin + entities: + - uid: 4312 + components: + - type: Transform + pos: 10.5,9.5 + parent: 2 - proto: SpawnPointLocationMidRoundAntag entities: - uid: 4217 diff --git a/Resources/Maps/edge.yml b/Resources/Maps/edge.yml index c926d6b862d..b57487d2f73 100644 --- a/Resources/Maps/edge.yml +++ b/Resources/Maps/edge.yml @@ -138,11 +138,11 @@ entities: version: 6 0,-2: ind: 0,-2 - tiles: LAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAUAAAAAAALAAAAAAAewAAAAABfQAAAAABewAAAAABQwAAAAAAUAAAAAAAXgAAAAADXgAAAAABLAAAAAAAUAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfwAAAAAALAAAAAAAewAAAAAAewAAAAACewAAAAABQwAAAAAAfwAAAAAAXgAAAAADXgAAAAACfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfQAAAAACewAAAAAAewAAAAAAQwAAAAAAfwAAAAAAXgAAAAADXgAAAAABJQAAAAAAJQAAAAACJQAAAAAAJQAAAAADJQAAAAAAJQAAAAAAfwAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAXgAAAAACXgAAAAACQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAUAAAAAAAfgAAAAAAUAAAAAAAXgAAAAACXgAAAAABXgAAAAADXgAAAAABUAAAAAAAXgAAAAABXgAAAAABQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAfwAAAAAAXgAAAAADXgAAAAAAXgAAAAADXgAAAAACTwAAAAAAXgAAAAAATwAAAAADQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAAAAAAAAAfwAAAAAAXgAAAAACXgAAAAACUAAAAAAAXgAAAAAATwAAAAACXgAAAAADTwAAAAABJQAAAAADJQAAAAACJQAAAAABJQAAAAAAJQAAAAAAJQAAAAAAUAAAAAAAfgAAAAAAUAAAAAAAXgAAAAABXgAAAAABUAAAAAAAXgAAAAADfwAAAAAAXgAAAAADXgAAAAADfwAAAAAAfwAAAAAAfwAAAAAAJQAAAAAAJQAAAAABJQAAAAABfwAAAAAAfgAAAAAAfwAAAAAAXgAAAAAAXgAAAAAAUAAAAAAAXgAAAAABfwAAAAAAfwAAAAAAbgAAAAAAJQAAAAAAJQAAAAABfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAADXgAAAAABUAAAAAAAXgAAAAADfwAAAAAAbwAAAAADfwAAAAAAfwAAAAAAfwAAAAAAbgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbwAAAAACbwAAAAACfwAAAAAAXgAAAAADXgAAAAACUAAAAAAAXgAAAAAAfwAAAAAAbwAAAAAAfwAAAAAAfwAAAAAAbwAAAAACfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbgAAAAAAXgAAAAABXgAAAAABUAAAAAAAXgAAAAABbgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAAAXgAAAAABUAAAAAAAXgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbgAAAAAAfwAAAAAAbwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAATwAAAAAATwAAAAACUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAYAAAAAABYAAAAAADYAAAAAADYAAAAAADfwAAAAAAXgAAAAADXgAAAAAAUAAAAAAAXgAAAAABXgAAAAABXgAAAAADXgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAQAAAAAAYAAAAAACYAAAAAAAYAAAAAACYAAAAAABfwAAAAAAXgAAAAADMAAAAAAAXgAAAAAAXgAAAAACXgAAAAAAXgAAAAACXgAAAAAA + tiles: LAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAUAAAAAAALAAAAAAAewAAAAABfQAAAAABewAAAAABQwAAAAAAUAAAAAAAXgAAAAADXgAAAAABLAAAAAAAUAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfwAAAAAALAAAAAAAewAAAAAAewAAAAACewAAAAABQwAAAAAAfwAAAAAAXgAAAAADXgAAAAACfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfQAAAAACewAAAAAAewAAAAAAQwAAAAAAfwAAAAAAXgAAAAADXgAAAAABJQAAAAAAJQAAAAAAJQAAAAAAJQAAAAADJQAAAAAAJQAAAAAAfwAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAXgAAAAACXgAAAAACQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAUAAAAAAAfgAAAAAAUAAAAAAAXgAAAAACXgAAAAABXgAAAAADXgAAAAABUAAAAAAAXgAAAAABXgAAAAABQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAfwAAAAAAXgAAAAADXgAAAAAAXgAAAAADXgAAAAACTwAAAAAAXgAAAAAATwAAAAADQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAAAAAAAAAfwAAAAAAXgAAAAACXgAAAAACUAAAAAAAXgAAAAAATwAAAAACXgAAAAADTwAAAAABJQAAAAADJQAAAAACJQAAAAABJQAAAAAAJQAAAAAAJQAAAAAAUAAAAAAAfgAAAAAAUAAAAAAAXgAAAAABXgAAAAABUAAAAAAAXgAAAAADfwAAAAAAXgAAAAADXgAAAAADfwAAAAAAfwAAAAAAfwAAAAAAJQAAAAAAJQAAAAABJQAAAAABfwAAAAAAfgAAAAAAfwAAAAAAXgAAAAAAXgAAAAAAUAAAAAAAXgAAAAABfwAAAAAAfwAAAAAAbgAAAAAAJQAAAAAAJQAAAAABfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAADXgAAAAABUAAAAAAAXgAAAAADfwAAAAAAbwAAAAADfwAAAAAAfwAAAAAAfwAAAAAAbgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbwAAAAACbwAAAAACfwAAAAAAXgAAAAADXgAAAAACUAAAAAAAXgAAAAAAfwAAAAAAbwAAAAAAfwAAAAAAfwAAAAAAbwAAAAACfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbgAAAAAAXgAAAAABXgAAAAABUAAAAAAAXgAAAAABbgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAAAXgAAAAABUAAAAAAAXgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbgAAAAAAfwAAAAAAbwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAATwAAAAAATwAAAAACUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAYAAAAAABYAAAAAADYAAAAAADYAAAAAADfwAAAAAAXgAAAAADXgAAAAAAUAAAAAAAXgAAAAABXgAAAAABXgAAAAADXgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAQAAAAAAYAAAAAACYAAAAAAAYAAAAAACYAAAAAABfwAAAAAAXgAAAAADMAAAAAAAXgAAAAAAXgAAAAACXgAAAAAAXgAAAAACXgAAAAAA version: 6 -1,-2: ind: -1,-2 - tiles: fwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAXgAAAAADfwAAAAAAXgAAAAACBQAAAAAAQwAAAAAAJAAAAAABJAAAAAACJAAAAAAALAAAAAAAfwAAAAAAEgAAAAAABAAAAAAAJQAAAAABJQAAAAACJQAAAAABUAAAAAAAXgAAAAADfwAAAAAAXgAAAAAABQAAAAAAfwAAAAAAMAAAAAADMAAAAAAAMAAAAAAALAAAAAAAfwAAAAAAEgAAAAAABAAAAAAAJQAAAAACJQAAAAACJQAAAAAAUAAAAAAAXgAAAAABfwAAAAAABQAAAAAABQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAEgAAAAAABAAAAAAAJQAAAAADJQAAAAACJQAAAAACQwAAAAAAXgAAAAACfwAAAAAABQAAAAAAfwAAAAAAfwAAAAAAJQAAAAADJQAAAAACJQAAAAABJQAAAAADfwAAAAAAJQAAAAAAJQAAAAABJQAAAAACJQAAAAACJQAAAAADUAAAAAAAXgAAAAAAfwAAAAAABQAAAAAAfwAAAAAAJQAAAAADJQAAAAAAJQAAAAAAJQAAAAABJQAAAAAAfwAAAAAAOQAAAAAAOQAAAAAAJQAAAAADOQAAAAAAOQAAAAAAUAAAAAAAXgAAAAABfwAAAAAABQAAAAAAfwAAAAAAJQAAAAADfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAUAAAAAAAfwAAAAAAJQAAAAAAfwAAAAAAfwAAAAAAJQAAAAACJQAAAAACfwAAAAAAXgAAAAADXgAAAAABUAAAAAAAXgAAAAACXgAAAAACfwAAAAAAXgAAAAABfwAAAAAAUAAAAAAAUAAAAAAAJQAAAAABUAAAAAAAUAAAAAAAJQAAAAABJQAAAAACfwAAAAAAXgAAAAADXgAAAAADXgAAAAAAXgAAAAAAXgAAAAABQwAAAAAAXgAAAAADfwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAADXgAAAAAAXgAAAAADXgAAAAACXgAAAAABQwAAAAAAXgAAAAADXgAAAAABUAAAAAAAUAAAAAAAfwAAAAAAJQAAAAABJQAAAAADfwAAAAAAJQAAAAADfwAAAAAAXgAAAAADXgAAAAACUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAXgAAAAADXgAAAAADUAAAAAAAfwAAAAAAfwAAAAAAJQAAAAACJQAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAXgAAAAADXgAAAAACUAAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAABXgAAAAACXgAAAAADXgAAAAABXgAAAAAAfwAAAAAAXgAAAAACXgAAAAABUAAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAbQAAAAAAXgAAAAACMAAAAAADXgAAAAACMAAAAAABXgAAAAAAQwAAAAAAXgAAAAABXgAAAAADUAAAAAAAQwAAAAAABAAAAAAABAAAAAAABAAAAAAABAAAAAAABAAAAAAAbQAAAAAAXgAAAAACXgAAAAACMAAAAAAAXgAAAAADXgAAAAABUAAAAAAAXgAAAAACXgAAAAAAUAAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAfwAAAAAAXgAAAAACMAAAAAACXgAAAAACMAAAAAAAXgAAAAADbQAAAAAAXgAAAAACXgAAAAAAUAAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAA + tiles: fwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAXgAAAAADfwAAAAAAXgAAAAACBQAAAAAAQwAAAAAAJAAAAAABJAAAAAACJAAAAAAALAAAAAAAfwAAAAAAEgAAAAAABAAAAAAAJQAAAAABJQAAAAACJQAAAAABUAAAAAAAXgAAAAADfwAAAAAAXgAAAAAABQAAAAAAfwAAAAAAMAAAAAADMAAAAAAAMAAAAAAALAAAAAAAfwAAAAAAEgAAAAAABAAAAAAAJQAAAAACJQAAAAACJQAAAAAAUAAAAAAAXgAAAAABfwAAAAAABQAAAAAABQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAEgAAAAAABAAAAAAAJQAAAAADJQAAAAACJQAAAAACQwAAAAAAXgAAAAACfwAAAAAABQAAAAAAfwAAAAAAfwAAAAAAJQAAAAADJQAAAAACJQAAAAABJQAAAAADfwAAAAAAJQAAAAAAJQAAAAABJQAAAAACJQAAAAACJQAAAAADUAAAAAAAXgAAAAAAfwAAAAAABQAAAAAAfwAAAAAAJQAAAAADJQAAAAAAJQAAAAAAJQAAAAABJQAAAAAAfwAAAAAAOQAAAAAAOQAAAAAAJQAAAAADOQAAAAAAOQAAAAAAUAAAAAAAXgAAAAABfwAAAAAABQAAAAAAfwAAAAAAJQAAAAADfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAUAAAAAAAfwAAAAAAJQAAAAAAfwAAAAAAfwAAAAAAJQAAAAACJQAAAAACfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAXgAAAAABfwAAAAAAUAAAAAAAUAAAAAAAJQAAAAABUAAAAAAAUAAAAAAAJQAAAAABJQAAAAACfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAbQAAAAAAXgAAAAADfwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAbQAAAAAAXgAAAAADXgAAAAABUAAAAAAAUAAAAAAAfwAAAAAAJQAAAAABJQAAAAADfwAAAAAAJQAAAAADfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAfwAAAAAAXgAAAAADXgAAAAADUAAAAAAAfwAAAAAAfwAAAAAAJQAAAAACJQAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAXgAAAAADXgAAAAACUAAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAABXgAAAAACXgAAAAADXgAAAAABXgAAAAAAfwAAAAAAXgAAAAACXgAAAAABUAAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAbQAAAAAAXgAAAAACMAAAAAADXgAAAAACMAAAAAABXgAAAAAAQwAAAAAAXgAAAAABXgAAAAADUAAAAAAAQwAAAAAABAAAAAAABAAAAAAABAAAAAAABAAAAAAABAAAAAAAbQAAAAAAXgAAAAACXgAAAAACMAAAAAAAXgAAAAADXgAAAAABUAAAAAAAXgAAAAACXgAAAAAAUAAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAfwAAAAAAXgAAAAACMAAAAAACXgAAAAACMAAAAAAAXgAAAAADbQAAAAAAXgAAAAACXgAAAAAAUAAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAA version: 6 -2,-2: ind: -2,-2 @@ -415,17 +415,14 @@ entities: - type: Broadphase - type: Physics bodyStatus: InAir - angularDamping: 10000 - linearDamping: 10000 + angularDamping: 0.05 + linearDamping: 0.05 fixedRotation: False bodyType: Dynamic - type: Fixtures fixtures: {} - type: OccluderTree - type: SpreaderGrid - - type: Shuttle - angularDamping: 10000 - linearDamping: 10000 - type: GridPathfinding - type: Gravity gravityShakeSound: !type:SoundPathSpecifier @@ -1718,12 +1715,6 @@ entities: 2420: -44,-9 2421: -44,-10 2422: -44,-11 - - node: - color: '#EFB34196' - id: CheckerNESW - decals: - 2062: -12,-25 - 2063: -11,-25 - node: color: '#DE3A3A96' id: CheckerNWSE @@ -2922,7 +2913,6 @@ entities: 1408: -5,-28 1409: -5,-23 1410: -5,-27 - 1411: -3,-29 1412: -2,-28 1413: 0,-24 1414: -1,-23 @@ -3131,7 +3121,6 @@ entities: 1454: 33,-17 1455: 25,-5 1456: 26,-4 - 2066: -12,-23 2070: 12,-28 2152: -5,-48 2153: -4,-47 @@ -3434,14 +3423,6 @@ entities: 2030: 6,-3 2031: 7,-3 2032: 8,-3 - - node: - color: '#EFB34196' - id: HalfTileOverlayGreyscale - decals: - 2048: -14,-24 - 2049: -13,-24 - 2050: -12,-24 - 2051: -11,-24 - node: color: '#334E6DC8' id: HalfTileOverlayGreyscale180 @@ -3488,24 +3469,20 @@ entities: color: '#EFB34196' id: HalfTileOverlayGreyscale180 decals: - 104: -3,-29 - 105: -4,-29 - 106: -2,-29 - 107: 0,-29 - 108: -1,-29 - 109: 1,-29 - 110: 3,-29 - 111: 4,-29 - 112: 5,-29 - 1423: 2,-29 2037: -15,-20 2038: -14,-20 2039: -13,-20 2040: -12,-20 - 2052: -14,-23 - 2053: -13,-23 - 2054: -12,-23 - 2055: -11,-23 + 2545: 2,-29 + 2548: 3,-29 + 2549: 4,-29 + 2550: 5,-29 + 2551: 1,-29 + 2552: 0,-29 + 2553: -1,-29 + 2554: -2,-29 + 2555: -3,-29 + 2556: -4,-29 - node: color: '#334E6DC8' id: HalfTileOverlayGreyscale270 @@ -3579,8 +3556,6 @@ entities: 1694: -30,-78 1695: -30,-79 1696: -30,-80 - 2056: -15,-22 - 2057: -15,-25 - node: color: '#334E6DC8' id: HalfTileOverlayGreyscale90 @@ -4021,11 +3996,6 @@ entities: id: ThreeQuarterTileOverlayGreyscale decals: 1874: -6,7 - - node: - color: '#EFB34196' - id: ThreeQuarterTileOverlayGreyscale - decals: - 2047: -15,-24 - node: color: '#A4610696' id: ThreeQuarterTileOverlayGreyscale180 @@ -4043,11 +4013,6 @@ entities: decals: 1951: 10,-2 2025: 1,-8 - - node: - color: '#EFB34196' - id: ThreeQuarterTileOverlayGreyscale270 - decals: - 2046: -15,-23 - node: color: '#52B4E996' id: ThreeQuarterTileOverlayGreyscale90 @@ -4064,7 +4029,6 @@ entities: decals: 42: -4,-25 43: -3,-25 - 2096: -13,-25 - node: color: '#D381C9FF' id: WarnCornerGreyscaleNW @@ -4100,11 +4064,6 @@ entities: 1728: -11,-78 1729: -10,-79 1730: -6,-79 - - node: - color: '#FFFFFFFF' - id: WarnEndE - decals: - 2059: -11,-22 - node: color: '#D381C9FF' id: WarnEndGreyscaleN @@ -4133,17 +4092,17 @@ entities: decals: 1899: 15,-9 2097: 15,-7 - - node: - color: '#FFFFFFFF' - id: WarnEndW - decals: - 2058: -13,-22 - node: color: '#FF0000FF' id: WarnFull decals: 2519: 26,-6 2520: 28,-6 + - node: + color: '#FFFFFFFF' + id: WarnFull + decals: + 2563: -13,-23 - node: cleanable: True color: '#FFFFFFFF' @@ -4174,6 +4133,10 @@ entities: 1928: -42,41 2360: -45,-17 2361: -45,-18 + 2557: -11,-22 + 2558: -11,-23 + 2559: -11,-24 + 2565: -14,-23 - node: color: '#D381C9FF' id: WarnLineGreyscaleE @@ -4206,7 +4169,6 @@ entities: color: '#FFFFFFFF' id: WarnLineN decals: - 2061: -12,-22 2460: -42,-1 - node: color: '#FFFFFFFF' @@ -4219,6 +4181,10 @@ entities: 2464: -60,22 2465: -60,21 2466: -60,20 + 2560: -15,-22 + 2561: -15,-23 + 2562: -15,-24 + 2566: -12,-23 - node: color: '#FFFFFFFF' id: WarnLineW @@ -4226,8 +4192,13 @@ entities: 1024: 7,-40 1025: 6,-40 1026: 5,-40 - 2060: -12,-22 2459: -42,-3 + 2567: -13,-24 + - node: + color: '#FFFFFFFF' + id: WarningLine + decals: + 2564: -13,-22 - node: color: '#FFFFFFFF' id: WoodTrimThinCornerNw @@ -5077,8 +5048,7 @@ entities: -10,-2: 0: 56575 -10,-1: - 0: 39041 - 4: 16 + 0: 39057 -10,-5: 0: 21844 -10,0: @@ -5319,12 +5289,11 @@ entities: -15,4: 1: 1606 -14,0: - 0: 255 - 1: 28672 + 0: 4351 + 1: 24576 -14,1: - 1: 275 - 0: 19648 - 4: 32768 + 1: 273 + 0: 52418 -14,2: 1: 1 0: 52416 @@ -5526,21 +5495,21 @@ entities: 1,-10: 0: 65534 1,-12: - 5: 14 - 6: 3584 + 4: 14 + 5: 3584 1,-11: - 7: 14 + 6: 14 0: 3584 2,-10: 0: 61438 2,-12: 1: 544 0: 52416 - 5: 8 + 4: 8 2,-11: 0: 60654 2,-13: - 5: 52430 + 4: 52430 3,-12: 0: 240 1: 3854 @@ -5771,12 +5740,12 @@ entities: 1: 273 0: 4096 1,-13: - 5: 14 - 8: 3584 + 4: 14 + 7: 3584 2,-14: 1: 208 0: 32 - 5: 57344 + 4: 57344 3,-14: 1: 8752 -4,-16: @@ -6451,21 +6420,6 @@ entities: - 0 - 0 - 0 - - volume: 2500 - temperature: 293.14975 - moles: - - 20.078888 - - 75.53487 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - volume: 2500 temperature: 293.15 moles: @@ -7905,6 +7859,22 @@ entities: - type: Transform pos: 18.5,14.5 parent: 2 +- proto: AirlockChiefEngineerGlassLocked + entities: + - uid: 117 + components: + - type: MetaData + name: Anchor Room + - type: Transform + pos: -9.5,-23.5 + parent: 2 + - uid: 118 + components: + - type: MetaData + name: Anchor Room + - type: Transform + pos: -9.5,-22.5 + parent: 2 - proto: AirlockChiefEngineerLocked entities: - uid: 119 @@ -8109,22 +8079,6 @@ entities: parent: 2 - proto: AirlockEngineeringGlassLocked entities: - - uid: 117 - components: - - type: MetaData - name: Tool Storage - - type: Transform - rot: 1.5707963267948966 rad - pos: -9.5,-22.5 - parent: 2 - - uid: 118 - components: - - type: MetaData - name: Tool Storage - - type: Transform - rot: 1.5707963267948966 rad - pos: -9.5,-23.5 - parent: 2 - uid: 140 components: - type: MetaData @@ -10578,10 +10532,10 @@ entities: parent: 2 - proto: AmeController entities: - - uid: 453 + - uid: 12716 components: - type: Transform - pos: -1.5,-28.5 + pos: 0.5,-26.5 parent: 2 - proto: AmePartFlatpack entities: @@ -12910,11 +12864,6 @@ entities: - type: Transform pos: 23.5,-22.5 parent: 2 - - uid: 717 - components: - - type: Transform - pos: -12.5,-24.5 - parent: 2 - uid: 718 components: - type: Transform @@ -26271,16 +26220,6 @@ entities: - type: Transform pos: -48.582623,32.67273 parent: 2 - - uid: 3019 - components: - - type: Transform - pos: -11.594626,-24.636341 - parent: 2 - - uid: 12309 - components: - - type: Transform - pos: -10.497754,-29.50746 - parent: 2 - proto: CableApcStack1 entities: - uid: 3021 @@ -30720,10 +30659,10 @@ entities: - type: Transform pos: -18.524075,-34.377613 parent: 2 - - uid: 3790 + - uid: 13402 components: - type: Transform - pos: -10.552959,-24.292353 + pos: -10.520447,-30.490175 parent: 2 - proto: CableHVStack1 entities: @@ -37361,11 +37300,6 @@ entities: - type: Transform pos: -18.641283,-34.260426 parent: 2 - - uid: 4997 - components: - - type: Transform - pos: -11.407126,-24.44871 - parent: 2 - proto: CableMVStack1 entities: - uid: 4998 @@ -37457,13 +37391,6 @@ entities: - type: Transform pos: -59.584892,-16.591707 parent: 2 -- proto: CapacitorStockPart - entities: - - uid: 5012 - components: - - type: Transform - pos: -11.667542,-24.240232 - parent: 2 - proto: CarbonDioxideCanister entities: - uid: 5014 @@ -43152,11 +43079,6 @@ entities: rot: -1.5707963267948966 rad pos: -60.085514,-8.287038 parent: 2 - - uid: 5835 - components: - - type: Transform - pos: -11.5,-23.5 - parent: 2 - uid: 5836 components: - type: Transform @@ -43525,12 +43447,6 @@ entities: - type: Transform pos: -2.6649227,-32.512672 parent: 2 - - uid: 5882 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -11.200975,-29.84575 - parent: 2 - uid: 5887 components: - type: Transform @@ -46031,10 +45947,10 @@ entities: parent: 2 - proto: CrateEngineeringAMEJar entities: - - uid: 12211 + - uid: 14519 components: - type: Transform - pos: 0.5,-27.5 + pos: 5.5,-23.5 parent: 2 - proto: CrateEngineeringAMEShielding entities: @@ -53941,6 +53857,9 @@ entities: pos: -41.5,18.5 parent: 2 - type: DeviceNetwork + deviceLists: + - 11998 + - 29 - uid: 5841 components: - type: Transform @@ -85736,11 +85655,6 @@ entities: - type: Transform pos: -20.41225,-25.227034 parent: 2 - - uid: 17480 - components: - - type: Transform - pos: -10.479895,-30.344042 - parent: 2 - proto: HandLabeler entities: - uid: 11633 @@ -92908,6 +92822,11 @@ entities: - type: Transform pos: -40.5,-2.5 parent: 2 + - uid: 5882 + components: + - type: Transform + pos: -11.5,-24.5 + parent: 2 - uid: 7032 components: - type: Transform @@ -92946,6 +92865,11 @@ entities: rot: -1.5707963267948966 rad pos: -3.5,44.5 parent: 2 + - uid: 12309 + components: + - type: Transform + pos: -13.5,-24.5 + parent: 2 - uid: 12669 components: - type: Transform @@ -93104,17 +93028,7 @@ entities: - uid: 12715 components: - type: Transform - pos: -14.5,-23.5 - parent: 2 - - uid: 12716 - components: - - type: Transform - pos: -14.5,-24.5 - parent: 2 - - uid: 12717 - components: - - type: Transform - pos: -14.5,-21.5 + pos: -12.5,-24.5 parent: 2 - uid: 12718 components: @@ -93141,11 +93055,6 @@ entities: - type: Transform pos: -20.5,-25.5 parent: 2 - - uid: 12725 - components: - - type: Transform - pos: -14.5,-22.5 - parent: 2 - uid: 12726 components: - type: Transform @@ -93198,6 +93107,16 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,20.5 parent: 2 + - uid: 14203 + components: + - type: Transform + pos: -14.5,-24.5 + parent: 2 + - uid: 14539 + components: + - type: Transform + pos: -10.5,-24.5 + parent: 2 - proto: RadiationCollectorFullTank entities: - uid: 12737 @@ -94654,11 +94573,6 @@ entities: - type: Transform pos: 33.5,-5.5 parent: 2 - - uid: 12966 - components: - - type: Transform - pos: -0.5,-28.5 - parent: 2 - uid: 12967 components: - type: Transform @@ -95621,11 +95535,29 @@ entities: - type: Transform pos: -42.5,-25.5 parent: 2 + - uid: 12717 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-20.5 + parent: 2 + - uid: 12725 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,-20.5 + parent: 2 - uid: 12925 components: - type: Transform pos: 4.5,-41.5 parent: 2 + - uid: 12966 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-20.5 + parent: 2 - uid: 13088 components: - type: Transform @@ -96293,11 +96225,6 @@ entities: - type: Transform pos: 5.5,-34.5 parent: 2 - - uid: 13189 - components: - - type: Transform - pos: -11.5,-20.5 - parent: 2 - uid: 13190 components: - type: Transform @@ -96943,11 +96870,6 @@ entities: - type: Transform pos: 15.5,14.5 parent: 2 - - uid: 13396 - components: - - type: Transform - pos: -12.5,-20.5 - parent: 2 - uid: 13397 components: - type: Transform @@ -96963,11 +96885,6 @@ entities: - type: Transform pos: 23.5,-31.5 parent: 2 - - uid: 13402 - components: - - type: Transform - pos: -13.5,-20.5 - parent: 2 - uid: 13403 components: - type: Transform @@ -97950,6 +97867,11 @@ entities: parent: 2 - proto: SheetGlass entities: + - uid: 717 + components: + - type: Transform + pos: -10.489197,-29.8808 + parent: 2 - uid: 13512 components: - type: Transform @@ -97961,11 +97883,6 @@ entities: - type: Transform pos: -36.5,25.5 parent: 2 - - uid: 13515 - components: - - type: Transform - pos: -14.5,-24.5 - parent: 2 - proto: SheetGlass10 entities: - uid: 13516 @@ -97998,17 +97915,17 @@ entities: parent: 2 - proto: SheetPlasteel entities: - - uid: 13520 + - uid: 13522 components: - type: Transform - pos: -14.5,-23.5 + pos: -10.5,-24.5 parent: 2 - proto: SheetPlastic entities: - - uid: 13522 + - uid: 4997 components: - type: Transform - pos: -14.5,-21.5 + pos: -10.504822,-29.59955 parent: 2 - uid: 13523 components: @@ -98034,6 +97951,11 @@ entities: parent: 2 - proto: SheetSteel entities: + - uid: 5835 + components: + - type: Transform + pos: -10.489197,-29.34955 + parent: 2 - uid: 8123 components: - type: Transform @@ -98063,11 +97985,6 @@ entities: count: 15 - type: Item size: 15 - - uid: 13533 - components: - - type: Transform - pos: -14.5,-22.5 - parent: 2 - uid: 13534 components: - type: Transform @@ -99394,6 +99311,14 @@ entities: - type: Transform pos: -45.5,24.5 parent: 2 +- proto: SignMagnetics + entities: + - uid: 3790 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-21.5 + parent: 2 - proto: SignMail entities: - uid: 13722 @@ -101927,6 +101852,13 @@ entities: rot: 1.5707963267948966 rad pos: -17.5,-82.5 parent: 2 +- proto: StationAnchor + entities: + - uid: 13520 + components: + - type: Transform + pos: -12.5,-22.5 + parent: 2 - proto: StationMap entities: - uid: 14079 @@ -102989,7 +102921,7 @@ entities: id: Vault - proto: SurveillanceCameraEngineering entities: - - uid: 14203 + - uid: 13533 components: - type: Transform rot: -1.5707963267948966 rad @@ -102999,7 +102931,7 @@ entities: setupAvailableNetworks: - SurveillanceCameraEngineering nameSet: True - id: drones + id: station anchor - uid: 14204 components: - type: Transform @@ -105344,12 +105276,6 @@ entities: - type: Transform pos: -7.5,-15.5 parent: 2 - - uid: 14519 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -10.5,-24.5 - parent: 2 - uid: 14522 components: - type: Transform @@ -105413,11 +105339,6 @@ entities: rot: 3.141592653589793 rad pos: -8.5,19.5 parent: 2 - - uid: 14539 - components: - - type: Transform - pos: -11.5,-24.5 - parent: 2 - uid: 14540 components: - type: Transform @@ -106205,6 +106126,11 @@ entities: - type: Transform pos: 20.60898,-11.323637 parent: 2 + - uid: 12211 + components: + - type: Transform + pos: -13.5,-24.5 + parent: 2 - uid: 14659 components: - type: Transform @@ -106222,6 +106148,11 @@ entities: - type: Transform pos: -55.493298,6.511406 parent: 2 + - uid: 13189 + components: + - type: Transform + pos: -12.5,-24.5 + parent: 2 - uid: 14662 components: - type: Transform @@ -106274,13 +106205,6 @@ entities: - type: Transform pos: -3.5002203,44.617207 parent: 2 -- proto: ToolboxMechanical - entities: - - uid: 14673 - components: - - type: Transform - pos: -10.480042,-24.573797 - parent: 2 - proto: ToolboxMechanicalFilled entities: - uid: 7279 @@ -106293,6 +106217,11 @@ entities: - type: Transform pos: 22.39023,-11.323637 parent: 2 + - uid: 13396 + components: + - type: Transform + pos: -11.5,-24.5 + parent: 2 - uid: 14677 components: - type: Transform @@ -106998,6 +106927,13 @@ entities: - type: Transform pos: 9.611285,21.720526 parent: 2 +- proto: VendingMachineRestockTankDispenser + entities: + - uid: 13904 + components: + - type: Transform + pos: -14.5,-24.5 + parent: 2 - proto: VendingMachineRoboDrobe entities: - uid: 14760 @@ -107068,6 +107004,11 @@ entities: parent: 2 - proto: VendingMachineTankDispenserEVA entities: + - uid: 3019 + components: + - type: Transform + pos: -5.5,-30.5 + parent: 2 - uid: 8218 components: - type: Transform @@ -107078,11 +107019,6 @@ entities: - type: Transform pos: -25.5,-23.5 parent: 2 - - uid: 16900 - components: - - type: Transform - pos: -10.5,-21.5 - parent: 2 - proto: VendingMachineTheater entities: - uid: 14771 @@ -119577,10 +119513,10 @@ entities: - type: Transform pos: -16.5,3.5 parent: 2 - - uid: 13904 + - uid: 13515 components: - type: Transform - pos: -12.5,-21.5 + pos: -0.5,-28.5 parent: 2 - uid: 16888 components: @@ -119826,10 +119762,10 @@ entities: parent: 2 - proto: WeldingFuelTankHighCapacity entities: - - uid: 16944 + - uid: 5012 components: - type: Transform - pos: -11.5,-21.5 + pos: -1.5,-28.5 parent: 2 - uid: 18587 components: @@ -122632,6 +122568,11 @@ entities: parent: 2 - proto: Wrench entities: + - uid: 453 + components: + - type: Transform + pos: -10.661072,-30.427675 + parent: 2 - uid: 14603 components: - type: Transform @@ -122652,11 +122593,6 @@ entities: - type: Transform pos: -40.489174,40.55304 parent: 2 - - uid: 17422 - components: - - type: Transform - pos: -11.125876,-24.417439 - parent: 2 - uid: 17423 components: - type: Transform diff --git a/Resources/Maps/glacier.yml b/Resources/Maps/glacier.yml index b1b06eeed7f..2f076877f17 100644 --- a/Resources/Maps/glacier.yml +++ b/Resources/Maps/glacier.yml @@ -197,7 +197,7 @@ entities: version: 6 3,0: ind: 3,0 - tiles: FQAAAAABFQAAAAABFQAAAAABFQAAAAAAFQAAAAABFQAAAAAEFQAAAAADYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAANQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAADGAAAAAABGAAAAAACPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAANQAAAAAAGAAAAAACNwAAAAAAPgAAAAAAPgAAAAAAPgAAAAAANwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAADNQAAAAAAGAAAAAADPQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAADGAAAAAABGAAAAAABNwAAAAAAPgAAAAAAPgAAAAAAPgAAAAAANwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAACGAAAAAACGAAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARwAAAAADRwAAAAACRwAAAAAAYQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARwAAAAADRwAAAAABRwAAAAACPQAAAAAARwAAAAACRwAAAAAARwAAAAACPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARwAAAAAARwAAAAADRwAAAAACRwAAAAADRwAAAAAARwAAAAADRwAAAAADPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARwAAAAAARwAAAAACRwAAAAABYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARwAAAAAARwAAAAACRwAAAAADXgAAAAADXgAAAAABXgAAAAABPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAANwAAAAAAYQAAAAAAYQAAAAAAXgAAAAABXgAAAAABPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAUQAAAAAANQAAAAAAYQAAAAAAXgAAAAABXgAAAAACPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQAAAAAAUQAAAAAANQAAAAAAYQAAAAAAPQAAAAAAPQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQAAAAAAUQAAAAAANQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: FQAAAAABFQAAAAABFQAAAAABFQAAAAAAFQAAAAABFQAAAAAEFQAAAAADYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAANQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAADGAAAAAABGAAAAAACPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAANQAAAAAAGAAAAAACNwAAAAAAPgAAAAAAPgAAAAAAPgAAAAAANwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAADNQAAAAAAGAAAAAADPQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAADGAAAAAABGAAAAAABNwAAAAAAPgAAAAAAPgAAAAAAPgAAAAAANwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAACGAAAAAACGAAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARwAAAAADRwAAAAACRwAAAAAAYQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARwAAAAADRwAAAAABRwAAAAACPQAAAAAARwAAAAACRwAAAAAARwAAAAACPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARwAAAAAARwAAAAADRwAAAAACRwAAAAADRwAAAAAARwAAAAADRwAAAAADPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARwAAAAAARwAAAAACRwAAAAABYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARwAAAAAARwAAAAACRwAAAAADXgAAAAADXgAAAAABXgAAAAABPQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAANwAAAAAAYQAAAAAAYQAAAAAAXgAAAAABXgAAAAABPQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAAAAUQAAAAAANQAAAAAAYQAAAAAAXgAAAAABXgAAAAACPQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQAAAAAAUQAAAAAANQAAAAAAYQAAAAAAPQAAAAAAPQAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUQAAAAAAUQAAAAAANQAAAAAAYAAAAAAAYAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -2,1: ind: -2,1 @@ -9694,9 +9694,9 @@ entities: 0: 111 -4,12: 0: 30583 - 3: 34952 + 2: 34952 -4,10: - 2: 12 + 3: 12 0: 52224 -4,11: 0: 3276 @@ -9704,12 +9704,12 @@ entities: 0: 118 -3,10: 0: 4352 - 3: 26214 + 2: 26214 -3,11: 0: 281 - 3: 26214 + 2: 26214 -3,12: - 3: 63351 + 2: 63351 -2,9: 0: 2039 -2,10: @@ -9718,7 +9718,7 @@ entities: 0: 30591 -2,12: 0: 119 - 3: 61440 + 2: 61440 -1,9: 0: 30711 -1,10: @@ -9727,16 +9727,16 @@ entities: 0: 30503 -1,12: 0: 119 - 3: 61440 + 2: 61440 0,8: 0: 63351 0,9: 0: 63736 0,10: - 3: 61712 + 2: 61712 0: 232 0,11: - 3: 16255 + 2: 16255 0,-4: 0: 60428 0,-3: @@ -9852,17 +9852,17 @@ entities: 4,7: 0: 61663 0,12: - 3: 64443 + 2: 64443 1,9: 0: 32767 1,10: 0: 35507 - 3: 12288 + 2: 12288 1,11: - 3: 8994 + 2: 8994 0: 34944 1,12: - 3: 291 + 2: 291 2,9: 0: 4095 2,10: @@ -9879,7 +9879,7 @@ entities: 0: 65534 3,12: 0: 28927 - 3: 32768 + 2: 32768 4,8: 0: 65294 4,9: @@ -9994,7 +9994,7 @@ entities: 0: 56831 4,12: 0: 255 - 3: 61440 + 2: 61440 5,9: 0: 3838 5,10: @@ -10003,7 +10003,7 @@ entities: 0: 65528 5,12: 0: 33535 - 3: 28672 + 2: 28672 6,9: 0: 61439 6,10: @@ -10160,16 +10160,16 @@ entities: 0: 43008 10,12: 0: 19 - 3: 27784 + 2: 27784 11,9: 0: 65534 11,10: 0: 56559 11,11: 0: 477 - 3: 17408 + 2: 17408 11,12: - 3: 4407 + 2: 4407 12,8: 0: 30583 12,9: @@ -10179,76 +10179,76 @@ entities: 12,11: 0: 3327 0,13: - 3: 43929 + 2: 43929 -1,13: - 3: 2039 + 2: 2039 0,14: - 3: 61038 + 2: 61038 0: 128 -1,14: 0: 65535 0,15: - 3: 61166 + 2: 61166 -1,15: 0: 15 4: 65280 0,16: - 3: 43942 + 2: 43942 0: 8 1,13: - 3: 273 + 2: 273 0: 8 1,14: - 3: 51711 + 2: 51711 1,15: - 3: 39127 + 2: 39127 0: 8 1,16: - 3: 25823 + 2: 25823 2,13: 0: 3067 2,14: - 3: 60303 + 2: 60303 3,13: 0: 2867 - 3: 136 + 2: 136 3,14: 0: 65535 4,13: - 3: 255 + 2: 255 0: 36608 4,14: 0: 65535 5,13: - 3: 30583 + 2: 30583 0: 34952 5,14: - 3: 1911 + 2: 1911 0: 63624 6,13: 0: 61167 6,14: - 3: 45552 + 2: 45552 5,15: 0: 8 6,15: 0: 34959 7,13: 0: 13107 - 3: 34952 + 2: 34952 7,14: - 3: 62200 + 2: 62200 6,16: 0: 136 - 3: 34816 + 2: 34816 7,15: 0: 27718 7,16: 0: 53106 8,13: - 3: 17615 + 2: 17615 8,14: - 3: 5828 + 2: 5828 0: 8192 12,4: 0: 6 @@ -10266,25 +10266,25 @@ entities: 0: 61439 15,6: 0: 20480 - 3: 35840 + 2: 35840 15,7: 0: 61661 16,6: - 3: 12288 + 2: 12288 16,7: 0: 61489 - 3: 70 + 2: 70 6,17: - 3: 2184 + 2: 2184 7,17: - 3: 25138 + 2: 25138 0: 34956 7,18: - 3: 36386 + 2: 36386 0: 8 8,18: 0: 241 - 3: 61952 + 2: 61952 13,9: 0: 28671 13,10: @@ -10309,10 +10309,10 @@ entities: 0: 28912 16,9: 0: 61489 - 3: 70 + 2: 70 16,10: 0: 12528 - 3: 16384 + 2: 16384 16,11: 0: 1 13,0: @@ -10323,7 +10323,7 @@ entities: 0: 12407 13,3: 0: 51 - 3: 1024 + 2: 1024 13,-1: 0: 34963 -8,4: @@ -10428,20 +10428,20 @@ entities: 4,-6: 0: 33075 -8,-3: - 3: 12544 + 2: 12544 -9,-3: 0: 64250 - 3: 1285 + 2: 1285 -8,-1: 0: 61731 -9,-2: 0: 64170 - 3: 1365 + 2: 1365 -9,-1: 0: 64174 - 3: 1361 + 2: 1361 -8,-2: - 3: 512 + 2: 512 -8,0: 0: 65526 -7,-3: @@ -10450,7 +10450,7 @@ entities: 0: 62321 -7,-5: 0: 24576 - 3: 119 + 2: 119 -7,-4: 0: 49152 -7,-2: @@ -10471,27 +10471,27 @@ entities: 0: 30513 -9,0: 0: 64170 - 3: 1365 + 2: 1365 -8,1: - 3: 1799 + 2: 1799 0: 2296 -9,1: 0: 64250 - 3: 1285 + 2: 1285 -8,2: 0: 64384 -9,2: 0: 51200 - 3: 1 + 2: 1 -9,3: 0: 47308 -7,1: - 3: 1799 + 2: 1799 0: 2296 -7,2: 0: 65392 -6,1: - 3: 263 + 2: 263 0: 248 -6,2: 0: 52424 @@ -10502,32 +10502,32 @@ entities: 8,16: 0: 204 9,13: - 3: 34959 + 2: 34959 9,14: - 3: 248 + 2: 248 0: 62464 9,15: 0: 4351 9,16: 0: 65535 10,13: - 3: 3 + 2: 3 10,14: 0: 36864 - 3: 32 + 2: 32 10,15: 0: 61499 10,16: 0: 4539 11,14: - 3: 8177 + 2: 8177 0: 57344 11,15: 0: 207 11,13: - 3: 4401 + 2: 4401 12,14: - 3: 12561 + 2: 12561 12,15: 0: 8209 11,16: @@ -10548,10 +10548,10 @@ entities: 0: 65535 -12,3: 0: 49151 - 3: 16384 + 2: 16384 -13,3: 0: 9215 - 3: 56320 + 2: 56320 -11,0: 0: 65535 -11,1: @@ -10559,7 +10559,7 @@ entities: -11,2: 0: 65535 -11,3: - 3: 1799 + 2: 1799 0: 63736 -11,-1: 0: 65535 @@ -10569,12 +10569,12 @@ entities: 0: 65535 -10,1: 0: 63999 - 3: 1536 + 2: 1536 -10,2: - 3: 1285 + 2: 1285 0: 31482 -10,3: - 3: 773 + 2: 773 0: 12338 -10,-1: 0: 65535 @@ -10588,19 +10588,19 @@ entities: 0: 61183 -13,5: 0: 58468 - 3: 2 + 2: 2 -13,6: 0: 26188 - 3: 48 + 2: 48 -12,7: 0: 45056 - 3: 16384 + 2: 16384 -12,8: - 3: 1799 + 2: 1799 0: 12536 -13,7: 0: 57344 - 3: 4914 + 2: 4914 -11,5: 0: 30583 -11,6: @@ -10608,7 +10608,7 @@ entities: -11,7: 0: 61986 -11,8: - 3: 1797 + 2: 1797 0: 59642 -10,6: 0: 52479 @@ -10617,7 +10617,7 @@ entities: -10,5: 0: 52430 -10,8: - 3: 771 + 2: 771 0: 29812 -9,6: 0: 12545 @@ -10626,7 +10626,7 @@ entities: -12,-4: 0: 61440 -12,-3: - 3: 1799 + 2: 1799 0: 63736 -13,-3: 0: 3935 @@ -10638,28 +10638,28 @@ entities: 0: 65535 -11,-4: 0: 12288 - 3: 16384 + 2: 16384 -11,-3: - 3: 1807 + 2: 1807 0: 63728 -11,-2: 0: 65535 -10,-3: - 3: 1797 + 2: 1797 0: 63736 -10,-2: 0: 65535 -10,-4: - 3: 6152 + 2: 6152 0: 49152 -10,-5: 0: 34952 -9,-4: - 3: 1365 + 2: 1365 0: 64170 -9,-5: 0: 64175 - 3: 1360 + 2: 1360 -16,-4: 0: 28671 -16,-5: @@ -10676,19 +10676,19 @@ entities: 0: 28398 -16,-1: 0: 49138 - 3: 16384 + 2: 16384 -17,-1: 0: 2240 - 3: 32768 + 2: 32768 -16,0: - 3: 1 + 2: 1 0: 1150 -15,-4: 0: 819 - 3: 32768 + 2: 32768 -15,-3: 0: 819 - 3: 34952 + 2: 34952 -15,-2: 0: 13107 -15,-1: @@ -10703,41 +10703,41 @@ entities: 0: 65534 -14,-4: 0: 57344 - 3: 64 + 2: 64 -14,-2: - 3: 15 + 2: 15 0: 51328 -14,0: 0: 65535 -13,-4: 0: 28672 - 3: 144 + 2: 144 -10,-6: 0: 32768 -9,-6: 0: 61440 -8,-5: - 3: 255 + 2: 255 -16,-6: - 3: 15 + 2: 15 0: 63232 -17,-6: - 3: 74 + 2: 74 0: 61696 -17,-5: 0: 57561 -16,-7: - 3: 8192 + 2: 8192 -15,-6: - 3: 16400 + 2: 16400 0: 45056 -14,-6: 0: 4096 - 3: 8192 + 2: 8192 -14,-5: - 3: 4352 + 2: 4352 -17,0: - 3: 8 + 2: 8 0: 2240 -16,1: 0: 3824 @@ -10754,7 +10754,7 @@ entities: -16,4: 0: 65535 -15,1: - 3: 752 + 2: 752 0: 8456 -15,3: 0: 20447 @@ -10762,29 +10762,29 @@ entities: 0: 50786 -15,4: 0: 9830 - 3: 2048 + 2: 2048 -14,1: 0: 61439 -14,2: 0: 62606 - 3: 320 + 2: 320 -14,3: 0: 8191 - 3: 57344 + 2: 57344 -14,4: - 3: 1834 + 2: 1834 0: 34944 -13,4: 0: 24578 - 3: 544 + 2: 544 -18,-7: - 3: 2112 + 2: 2112 -18,-6: 0: 51396 -18,-5: 0: 12 -17,-7: - 3: 40064 + 2: 40064 -19,2: 0: 9319 -19,3: @@ -10852,7 +10852,7 @@ entities: 0: 7103 8,-9: 0: 57344 - 3: 224 + 2: 224 9,-8: 0: 53755 9,-7: @@ -10861,7 +10861,7 @@ entities: 0: 4081 9,-9: 0: 47296 - 3: 16 + 2: 16 10,-8: 0: 56343 10,-7: @@ -10991,22 +10991,22 @@ entities: 17,-2: 0: 34955 17,-1: - 3: 22016 + 2: 22016 0: 43208 17,0: 0: 30475 - 3: 4 + 2: 4 18,-3: 0: 30591 18,-2: 0: 25207 - 3: 5376 + 2: 5376 18,-1: 0: 61203 - 3: 4196 + 2: 4196 18,0: 0: 49117 - 3: 16418 + 2: 16418 19,-3: 0: 49087 19,-1: @@ -11041,7 +11041,7 @@ entities: 0: 65532 -13,8: 0: 43257 - 3: 1798 + 2: 1798 -11,9: 0: 3104 -10,9: @@ -11064,40 +11064,40 @@ entities: 0: 65394 -14,7: 0: 45736 - 3: 19522 + 2: 19522 -14,8: 0: 9386 - 3: 51780 + 2: 51780 -4,13: 0: 119 - 3: 62600 + 2: 62600 -5,13: 0: 30632 -4,14: - 3: 65023 + 2: 65023 -5,14: - 3: 21882 + 2: 21882 0: 5 -4,15: - 3: 4383 + 2: 4383 -5,15: - 3: 29772 + 2: 29772 -4,16: - 3: 18255 + 2: 18255 -3,13: - 3: 14071 + 2: 14071 -3,14: - 3: 13107 + 2: 13107 0: 34952 -3,15: - 3: 8739 + 2: 8739 0: 8 4: 34816 -3,16: - 3: 60963 + 2: 60963 4: 8 -2,13: - 3: 3324 + 2: 3324 0: 49152 -2,14: 0: 65535 @@ -11106,64 +11106,64 @@ entities: 4: 65280 -2,16: 4: 15 - 3: 65280 + 2: 65280 -1,16: 4: 15 - 3: 7936 + 2: 7936 -5,16: - 3: 7962 + 2: 7962 0: 16452 -4,17: - 3: 47332 + 2: 47332 0: 16384 -5,17: - 3: 42567 + 2: 42567 0: 16384 -4,18: - 3: 35820 + 2: 35820 0: 1024 -5,18: - 3: 4030 + 2: 4030 -4,19: - 3: 51400 + 2: 51400 -3,17: - 3: 49722 + 2: 49722 0: 12288 -3,18: - 3: 3631 + 2: 3631 0: 256 -3,19: - 3: 4112 + 2: 4112 -4,20: - 3: 51400 + 2: 51400 -2,17: - 3: 61453 + 2: 61453 -2,18: - 3: 3455 + 2: 3455 0: 512 -1,17: - 3: 57617 + 2: 57617 0: 4096 -1,18: - 3: 36767 + 2: 36767 -1,19: - 3: 51400 + 2: 51400 0,17: - 3: 30891 + 2: 30891 0: 32768 0,18: - 3: 185 + 2: 185 0: 256 0,19: - 3: 4112 + 2: 4112 -1,20: - 3: 51400 + 2: 51400 1,17: - 3: 4372 + 2: 4372 1,18: - 3: 99 + 2: 99 2,16: - 3: 1 + 2: 1 -8,12: 0: 65328 -9,12: @@ -11179,9 +11179,9 @@ entities: -6,14: 0: 35055 -6,15: - 3: 34952 + 2: 34952 -6,16: - 3: 7960 + 2: 7960 0: 32896 21,-4: 0: 4096 @@ -11228,14 +11228,14 @@ entities: 15,-13: 0: 65409 21,-8: - 3: 32903 + 2: 32903 0: 32624 21,-7: - 3: 7 + 2: 7 22,-8: - 3: 18241 + 2: 18241 22,-7: - 3: 1 + 2: 1 -16,5: 0: 14199 -17,5: @@ -11246,23 +11246,23 @@ entities: 0: 61198 -15,5: 0: 4402 - 3: 17984 + 2: 17984 -15,6: - 3: 16 + 2: 16 0: 236 -14,6: 0: 8208 - 3: 224 + 2: 224 -14,5: - 3: 8 + 2: 8 -8,16: - 3: 20288 + 2: 20288 -7,16: - 3: 24400 + 2: 24400 -6,17: - 3: 34952 + 2: 34952 -6,18: - 3: 136 + 2: 136 0: 2048 12,16: 0: 23955 @@ -11270,39 +11270,39 @@ entities: 0: 1535 9,18: 0: 48 - 3: 62528 + 2: 62528 10,17: 0: 273 10,18: - 3: 63616 + 2: 63616 11,18: - 3: 15904 + 2: 15904 0: 4 11,17: 0: 2048 12,17: 0: 48 12,18: - 3: 1809 + 2: 1809 -7,-6: 0: 36864 - 3: 26222 + 2: 26222 -7,-8: - 3: 26342 + 2: 26342 -7,-9: - 3: 28262 + 2: 28262 -7,-7: - 3: 26222 + 2: 26222 -6,-8: - 3: 8244 + 2: 8244 0: 52424 -6,-7: - 3: 17 + 2: 17 0: 63342 -6,-6: 0: 179 -6,-9: - 3: 20300 + 2: 20300 0: 32768 -5,-8: 0: 63863 @@ -11310,7 +11310,7 @@ entities: 0: 34968 -5,-9: 0: 16382 - 3: 1 + 2: 1 -4,-8: 0: 17417 -4,-6: @@ -11384,20 +11384,20 @@ entities: 17,-14: 0: 4096 -3,20: - 3: 4112 + 2: 4112 -4,21: - 3: 136 + 2: 136 0,20: - 3: 4112 + 2: 4112 -1,21: - 3: 136 + 2: 136 -7,-10: 0: 2050 - 3: 26348 + 2: 26348 -6,-10: - 3: 17663 + 2: 17663 -5,-10: - 3: 17 + 2: 17 0: 51456 -5,-11: 0: 4096 @@ -11423,7 +11423,7 @@ entities: 1: 3 0: 3712 16,0: - 3: 4 + 2: 4 0: 51208 16,1: 0: 2248 @@ -11431,31 +11431,31 @@ entities: 0: 1911 18,1: 0: 4081 - 3: 14 + 2: 14 19,1: - 3: 13 + 2: 13 0: 3826 20,0: 0: 62208 - 3: 3072 + 2: 3072 20,1: 0: 1023 - 3: 3072 + 2: 3072 21,0: - 3: 9472 + 2: 9472 0: 4096 21,1: 0: 31 - 3: 3360 + 2: 3360 22,1: 0: 1367 - 3: 520 + 2: 520 22,0: - 3: 4096 + 2: 4096 23,1: - 3: 17 + 2: 17 23,0: - 3: 4096 + 2: 4096 uniqueMixes: - volume: 2500 temperature: 293.15 @@ -11488,10 +11488,11 @@ entities: - 0 - 0 - volume: 2500 - temperature: 293.15 + immutable: True + temperature: 213.15 moles: - - 0 - - 6666.982 + - 21.824879 + - 82.10312 - 0 - 0 - 0 @@ -11503,11 +11504,10 @@ entities: - 0 - 0 - volume: 2500 - immutable: True - temperature: 213.15 + temperature: 293.15 moles: - - 21.824879 - - 82.10312 + - 0 + - 6666.982 - 0 - 0 - 0 @@ -11773,8 +11773,22 @@ entities: - 4145 - 4146 - 4147 + - uid: 6307 + components: + - type: MetaData + name: service room air alarm + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,0.5 + parent: 2 + - type: DeviceList + devices: + - 9373 + - 9448 - uid: 8610 components: + - type: MetaData + name: teg air alarm - type: Transform pos: -3.5,61.5 parent: 2 @@ -11783,6 +11797,8 @@ entities: - 4760 - uid: 17596 components: + - type: MetaData + name: tool room air alarm - type: Transform rot: -1.5707963267948966 rad pos: 33.5,36.5 @@ -11797,12 +11813,16 @@ entities: - 17600 - uid: 17597 components: + - type: MetaData + name: central hall air alarm - type: Transform rot: 1.5707963267948966 rad pos: 20.5,22.5 parent: 2 - uid: 17598 components: + - type: MetaData + name: east hall air alarm - type: Transform rot: -1.5707963267948966 rad pos: 36.5,21.5 @@ -11827,6 +11847,8 @@ entities: - 17550 - uid: 17604 components: + - type: MetaData + name: chapel air alarm - type: Transform pos: 32.5,-14.5 parent: 2 @@ -11837,6 +11859,8 @@ entities: - 8249 - uid: 17605 components: + - type: MetaData + name: medical air alarm - type: Transform pos: 9.5,-0.5 parent: 2 @@ -11855,6 +11879,8 @@ entities: - 9435 - uid: 17606 components: + - type: MetaData + name: cryogenics air alarm - type: Transform pos: -2.5,-5.5 parent: 2 @@ -11864,6 +11890,143 @@ entities: - 9375 - 9296 - 9453 + - uid: 17929 + components: + - type: MetaData + name: mime air alarm + - type: Transform + rot: 3.141592653589793 rad + pos: -22.5,-4.5 + parent: 2 + - type: DeviceList + devices: + - 9372 + - 9449 + - uid: 17930 + components: + - type: MetaData + name: clown air alarm + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-12.5 + parent: 2 + - type: DeviceList + devices: + - 9450 + - 9371 + - uid: 17931 + components: + - type: MetaData + name: public garden air alarm + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,-16.5 + parent: 2 + - type: DeviceList + devices: + - 9452 + - 9370 + - uid: 17932 + components: + - type: MetaData + name: boxing ring air alarm + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-14.5 + parent: 2 + - type: DeviceList + devices: + - 9369 + - 9451 + - uid: 17933 + components: + - type: MetaData + name: perma air alarm + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,17.5 + parent: 2 + - type: DeviceList + devices: + - 17936 + - 17935 + - 9293 + - 9437 + - 17937 + - 17934 + - uid: 17938 + components: + - type: MetaData + name: security air alarm + - type: Transform + pos: -17.5,20.5 + parent: 2 + - type: DeviceList + devices: + - 17939 + - 17940 + - 17942 + - 17943 + - 9368 + - 17944 + - uid: 17945 + components: + - type: MetaData + name: warden air alarm + - type: Transform + pos: -13.5,23.5 + parent: 2 + - type: DeviceList + devices: + - 9445 + - 9361 + - uid: 17946 + components: + - type: MetaData + name: brig air alarm + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,21.5 + parent: 2 + - type: DeviceList + devices: + - 17947 + - 9443 + - 17939 + - 17940 + - 6196 + - 14340 + - 17614 + - 14342 + - uid: 17948 + components: + - type: MetaData + name: security lobby air alarm + - type: Transform + pos: -3.5,31.5 + parent: 2 + - type: DeviceList + devices: + - 9330 + - 9409 + - 9438 + - 9362 + - uid: 17949 + components: + - type: MetaData + name: security dorms air alarm + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,35.5 + parent: 2 + - type: DeviceList + devices: + - 9440 + - 9366 + - 9364 + - 9441 + - 9365 + - 9442 - proto: AirAlarmAssembly entities: - uid: 12 @@ -13809,6 +13972,42 @@ entities: - type: DeviceNetwork deviceLists: - 8610 + - uid: 17934 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,12.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17933 + - uid: 17935 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,26.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17933 + - uid: 17936 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,26.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17933 + - uid: 17937 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,16.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17933 - proto: AltarSpawner entities: - uid: 241 @@ -15875,8 +16074,7 @@ entities: desc: Used for administering ten CCs of PAIN! name: The Doctor's Orders - type: Transform - rot: 3.141592653589793 rad - pos: 13.689892,-7.3280826 + pos: 13.626989,-7.2987084 parent: 2 - uid: 624 components: @@ -16364,6 +16562,13 @@ entities: - type: Transform pos: -1.5,49.5 parent: 2 +- proto: Biogenerator + entities: + - uid: 6400 + components: + - type: Transform + pos: 27.5,2.5 + parent: 2 - proto: BiomassReclaimer entities: - uid: 709 @@ -17207,6 +17412,14 @@ entities: - type: Transform pos: -6.5,23.5 parent: 2 +- proto: ButtonFrameExit + entities: + - uid: 12087 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,1.5 + parent: 2 - proto: CableApcExtension entities: - uid: 82 @@ -23297,22 +23510,7 @@ entities: - uid: 2062 components: - type: Transform - pos: -8.5,59.5 - parent: 2 - - uid: 2063 - components: - - type: Transform - pos: -7.5,59.5 - parent: 2 - - uid: 2064 - components: - - type: Transform - pos: -6.5,59.5 - parent: 2 - - uid: 2065 - components: - - type: Transform - pos: -5.5,59.5 + pos: -7.5,58.5 parent: 2 - uid: 2066 components: @@ -43406,12 +43604,6 @@ entities: - type: Transform pos: 76.5,-27.5 parent: 2 - - uid: 7117 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -5.5,58.5 - parent: 2 - uid: 7704 components: - type: Transform @@ -47504,6 +47696,12 @@ entities: parent: 2 - proto: ComputerAlert entities: + - uid: 14097 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -3.5,57.5 + parent: 2 - uid: 17148 components: - type: Transform @@ -47512,12 +47710,16 @@ entities: parent: 2 - proto: ComputerAnalysisConsole entities: - - uid: 6283 + - uid: 7117 components: - type: Transform - rot: 4.71238898038469 rad - pos: 36.5,-29.5 + rot: 1.5707963267948966 rad + pos: 34.5,-28.5 parent: 2 + - type: DeviceLinkSource + linkedPorts: + 2064: + - ArtifactAnalyzerSender: ArtifactAnalyzerReceiver - proto: computerBodyScanner entities: - uid: 6284 @@ -48437,11 +48639,6 @@ entities: - type: Transform pos: 26.5,6.5 parent: 2 - - uid: 6400 - components: - - type: Transform - pos: 27.5,2.5 - parent: 2 - proto: CrateHydroSecure entities: - uid: 6401 @@ -48958,6 +49155,13 @@ entities: - type: Transform pos: 66.5,-26.5 parent: 2 +- proto: CyborgEndoskeleton + entities: + - uid: 17978 + components: + - type: Transform + pos: 42.531734,-21.614733 + parent: 2 - proto: DeepFryerMachineCircuitboard entities: - uid: 6457 @@ -49360,11 +49564,6 @@ entities: parent: 2 - proto: DefaultStationBeaconSalvage entities: - - uid: 6307 - components: - - type: Transform - pos: 80.5,4.5 - parent: 2 - uid: 9958 components: - type: Transform @@ -49376,7 +49575,7 @@ entities: pos: 89.5,4.5 parent: 2 - type: NavMapBeacon - text: Salvage Arm + text: Salvage Magnet - proto: DefaultStationBeaconScience entities: - uid: 10226 @@ -54771,6 +54970,12 @@ entities: rot: -1.5707963267948966 rad pos: -23.5,43.5 parent: 2 + - uid: 17951 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-7.5 + parent: 2 - proto: EmergencyRollerBedSpawnFolded entities: - uid: 7221 @@ -54857,6 +55062,18 @@ entities: - type: Transform pos: -60.5,20.5 parent: 2 + - uid: 17591 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 37.5,-28.5 + parent: 2 + - uid: 17972 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,21.5 + parent: 2 - proto: ExtinguisherCabinetFilledOpen entities: - uid: 7236 @@ -54879,7 +55096,7 @@ entities: pos: 69.5,-7.5 parent: 2 - type: FaxMachine - name: Service, Reporter + name: Reporter's Office - uid: 7239 components: - type: Transform @@ -54921,21 +55138,21 @@ entities: pos: 20.5,-12.5 parent: 2 - type: FaxMachine - name: CMO's Room + name: Chief Medical Officer - uid: 7245 components: - type: Transform pos: 26.5,22.5 parent: 2 - type: FaxMachine - name: Service, HoP + name: Head of Personnel - uid: 7246 components: - type: Transform pos: 7.5,-13.5 parent: 2 - type: FaxMachine - name: Medical, Virology + name: Virology - uid: 7247 components: - type: Transform @@ -55135,6 +55352,18 @@ entities: - 17538 - 17537 - 17536 + - uid: 17941 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,17.5 + parent: 2 + - type: DeviceList + devices: + - 17939 + - 17940 + - 17942 + - 17943 - proto: FireAxeCabinetFilled entities: - uid: 7267 @@ -55168,6 +55397,27 @@ entities: deviceLists: - 10 - 9 +- proto: FirelockEdge + entities: + - uid: 17942 + components: + - type: Transform + pos: -22.5,18.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17941 + - 17938 + - uid: 17943 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,22.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17941 + - 17938 - proto: FirelockFrame entities: - uid: 7268 @@ -55439,6 +55689,26 @@ entities: deviceLists: - 11 - 17604 + - uid: 17939 + components: + - type: Transform + pos: -14.5,18.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17941 + - 17938 + - 17946 + - uid: 17940 + components: + - type: Transform + pos: -14.5,17.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17941 + - 17938 + - 17946 - proto: Fireplace entities: - uid: 7270 @@ -57837,14 +58107,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' - - uid: 5410 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,59.5 - parent: 2 - - type: AtmosPipeColor - color: '#DD2222FF' - uid: 5417 components: - type: Transform @@ -58633,13 +58895,6 @@ entities: rot: 1.5707963267948966 rad pos: -16.5,49.5 parent: 2 - - uid: 12260 - components: - - type: Transform - pos: -7.5,18.5 - parent: 2 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 12345 components: - type: Transform @@ -67489,14 +67744,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' - - uid: 8937 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -21.5,20.5 - parent: 2 - - type: AtmosPipeColor - color: '#990000FF' - uid: 8938 components: - type: Transform @@ -68965,22 +69212,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' - - uid: 17590 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,58.5 - parent: 2 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 17591 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -6.5,59.5 - parent: 2 - - type: AtmosPipeColor - color: '#990000FF' - uid: 17593 components: - type: Transform @@ -69157,6 +69388,14 @@ entities: parent: 2 - type: AtmosPipeColor color: '#DD2222FF' + - uid: 2065 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -4.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#DD2222FF' - uid: 2069 components: - type: Transform @@ -69224,6 +69463,14 @@ entities: rot: -1.5707963267948966 rad pos: -8.5,58.5 parent: 2 + - uid: 5410 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,59.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - uid: 5412 components: - type: Transform @@ -69393,6 +69640,14 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' + - uid: 8937 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,18.5 + parent: 2 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 9089 components: - type: Transform @@ -70486,6 +70741,14 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' + - uid: 12260 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,20.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - uid: 12670 components: - type: Transform @@ -70956,6 +71219,28 @@ entities: parent: 2 - proto: GasValve entities: + - uid: 2063 + components: + - type: MetaData + name: teg inlet valve + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,59.5 + parent: 2 + - type: GasValve + open: False + - type: AtmosPipeColor + color: '#DD2222FF' + - uid: 6283 + components: + - type: MetaData + name: waste valve + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,58.5 + parent: 2 + - type: AtmosPipeColor + color: '#990000FF' - uid: 9286 components: - type: Transform @@ -70998,6 +71283,9 @@ entities: rot: 1.5707963267948966 rad pos: -8.5,16.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17946 - type: AtmosPipeColor color: '#0055CCFF' - uid: 6332 @@ -71092,6 +71380,9 @@ entities: rot: 1.5707963267948966 rad pos: -26.5,19.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17933 - type: AtmosPipeColor color: '#0055CCFF' - uid: 9294 @@ -71388,6 +71679,9 @@ entities: rot: 3.141592653589793 rad pos: -1.5,26.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17948 - type: AtmosPipeColor color: '#0055CCFF' - uid: 9332 @@ -71614,6 +71908,9 @@ entities: rot: 1.5707963267948966 rad pos: -14.5,22.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17945 - type: AtmosPipeColor color: '#0055CCFF' - uid: 9362 @@ -71622,6 +71919,9 @@ entities: rot: -1.5707963267948966 rad pos: -7.5,34.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17948 - type: AtmosPipeColor color: '#0055CCFF' - uid: 9363 @@ -71637,6 +71937,9 @@ entities: rot: 1.5707963267948966 rad pos: -19.5,37.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17949 - type: AtmosPipeColor color: '#0055CCFF' - uid: 9365 @@ -71644,6 +71947,9 @@ entities: - type: Transform pos: -18.5,42.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17949 - type: AtmosPipeColor color: '#0055CCFF' - uid: 9366 @@ -71652,6 +71958,9 @@ entities: rot: 1.5707963267948966 rad pos: -22.5,31.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17949 - type: AtmosPipeColor color: '#0055CCFF' - uid: 9368 @@ -71659,6 +71968,9 @@ entities: - type: Transform pos: -19.5,21.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17938 - type: AtmosPipeColor color: '#0055CCFF' - uid: 9369 @@ -71667,6 +71979,9 @@ entities: rot: 3.141592653589793 rad pos: -13.5,-16.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17932 - type: AtmosPipeColor color: '#0055CCFF' - uid: 9370 @@ -71675,6 +71990,9 @@ entities: rot: 3.141592653589793 rad pos: -19.5,-16.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17931 - type: AtmosPipeColor color: '#0055CCFF' - uid: 9371 @@ -71683,6 +72001,9 @@ entities: rot: 1.5707963267948966 rad pos: -22.5,-9.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17930 - type: AtmosPipeColor color: '#0055CCFF' - uid: 9372 @@ -71691,6 +72012,9 @@ entities: rot: 1.5707963267948966 rad pos: -23.5,-2.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17929 - type: AtmosPipeColor color: '#0055CCFF' - uid: 9373 @@ -71699,6 +72023,9 @@ entities: rot: 1.5707963267948966 rad pos: -16.5,1.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 6307 - type: AtmosPipeColor color: '#0055CCFF' - uid: 9374 @@ -71766,6 +72093,9 @@ entities: rot: -1.5707963267948966 rad pos: -5.5,16.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17946 - type: AtmosPipeColor color: '#0055CCFF' - uid: 17864 @@ -71805,6 +72135,16 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 17947 + components: + - type: Transform + pos: -7.5,19.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17946 + - type: AtmosPipeColor + color: '#0055CCFF' - proto: GasVentScrubber entities: - uid: 5443 @@ -72124,6 +72464,9 @@ entities: rot: 3.141592653589793 rad pos: -3.5,25.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17948 - type: AtmosPipeColor color: '#990000FF' - uid: 9410 @@ -72369,6 +72712,9 @@ entities: rot: 1.5707963267948966 rad pos: -29.5,20.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17933 - type: AtmosPipeColor color: '#990000FF' - uid: 9438 @@ -72377,6 +72723,9 @@ entities: rot: 1.5707963267948966 rad pos: -7.5,32.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17948 - type: AtmosPipeColor color: '#990000FF' - uid: 9439 @@ -72392,6 +72741,9 @@ entities: rot: 1.5707963267948966 rad pos: -18.5,30.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17949 - type: AtmosPipeColor color: '#990000FF' - uid: 9441 @@ -72400,6 +72752,9 @@ entities: rot: 1.5707963267948966 rad pos: -18.5,36.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17949 - type: AtmosPipeColor color: '#990000FF' - uid: 9442 @@ -72407,6 +72762,9 @@ entities: - type: Transform pos: -17.5,41.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17949 - type: AtmosPipeColor color: '#990000FF' - uid: 9443 @@ -72415,6 +72773,9 @@ entities: rot: 3.141592653589793 rad pos: -6.5,19.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17946 - type: AtmosPipeColor color: '#990000FF' - uid: 9445 @@ -72423,6 +72784,9 @@ entities: rot: -1.5707963267948966 rad pos: -13.5,20.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17945 - type: AtmosPipeColor color: '#990000FF' - uid: 9447 @@ -72439,6 +72803,9 @@ entities: rot: 1.5707963267948966 rad pos: -18.5,-0.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 6307 - type: AtmosPipeColor color: '#990000FF' - uid: 9449 @@ -72447,6 +72814,9 @@ entities: rot: 1.5707963267948966 rad pos: -25.5,-3.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17929 - type: AtmosPipeColor color: '#990000FF' - uid: 9450 @@ -72455,6 +72825,9 @@ entities: rot: 1.5707963267948966 rad pos: -22.5,-10.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17930 - type: AtmosPipeColor color: '#990000FF' - uid: 9451 @@ -72463,6 +72836,9 @@ entities: rot: 3.141592653589793 rad pos: -12.5,-17.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17932 - type: AtmosPipeColor color: '#990000FF' - uid: 9452 @@ -72471,6 +72847,9 @@ entities: rot: 3.141592653589793 rad pos: -17.5,-17.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17931 - type: AtmosPipeColor color: '#990000FF' - uid: 9453 @@ -72500,6 +72879,9 @@ entities: rot: 1.5707963267948966 rad pos: -7.5,15.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17946 - type: AtmosPipeColor color: '#990000FF' - uid: 14342 @@ -72508,6 +72890,9 @@ entities: rot: -1.5707963267948966 rad pos: -4.5,15.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 17946 - type: AtmosPipeColor color: '#990000FF' - uid: 16450 @@ -72585,6 +72970,16 @@ entities: parent: 2 - type: AtmosPipeColor color: '#990000FF' + - uid: 17944 + components: + - type: Transform + pos: -21.5,21.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17938 + - type: AtmosPipeColor + color: '#990000FF' - proto: GasVolumePump entities: - uid: 4223 @@ -72814,11 +73209,6 @@ entities: - type: Transform pos: -13.734782,10.56881 parent: 2 - - uid: 9485 - components: - - type: Transform - pos: 42.850143,-31.586727 - parent: 2 - proto: Grille entities: - uid: 462 @@ -77557,10 +77947,10 @@ entities: parent: 2 - proto: MachineArtifactAnalyzer entities: - - uid: 10271 + - uid: 2064 components: - type: Transform - pos: 30.5,-28.5 + pos: 32.5,-28.5 parent: 2 - proto: MachineCentrifuge entities: @@ -78284,6 +78674,13 @@ entities: rot: 1.5707963267948966 rad pos: 42.5,45.5 parent: 2 +- proto: MMI + entities: + - uid: 17979 + components: + - type: Transform + pos: 44.46909,-24.395983 + parent: 2 - proto: MonkeyCubeWrapped entities: - uid: 10391 @@ -86290,15 +86687,15 @@ entities: parent: 2 - proto: Multitool entities: - - uid: 12086 + - uid: 10271 components: - type: Transform - pos: 44.53739,12.611739 + pos: 36.26866,-27.347355 parent: 2 - - uid: 12087 + - uid: 12086 components: - type: Transform - pos: 36.230858,-27.381313 + pos: 44.53739,12.611739 parent: 2 - uid: 12088 components: @@ -95269,21 +95666,6 @@ entities: - type: Transform pos: 26.5,25.5 parent: 2 - - uid: 13238 - components: - - type: Transform - pos: 37.5,10.5 - parent: 2 - - uid: 13239 - components: - - type: Transform - pos: 38.5,10.5 - parent: 2 - - uid: 13240 - components: - - type: Transform - pos: 42.5,9.5 - parent: 2 - uid: 13241 components: - type: Transform @@ -97463,6 +97845,16 @@ entities: 16350: - Pressed: AutoClose - Pressed: Toggle + - uid: 17590 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,1.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 195: + - Pressed: Open - proto: SignalSwitchDirectional entities: - uid: 10852 @@ -100751,7 +101143,7 @@ entities: setupAvailableNetworks: - SurveillanceCameraCommand nameSet: True - id: ai satellite 2 + id: AI Satellite 2 - uid: 10831 components: - type: Transform @@ -100762,7 +101154,7 @@ entities: setupAvailableNetworks: - SurveillanceCameraCommand nameSet: True - id: ai satellite 1 + id: AI Satellite 1 - uid: 10833 components: - type: Transform @@ -100773,7 +101165,7 @@ entities: setupAvailableNetworks: - SurveillanceCameraCommand nameSet: True - id: ai core + id: AI Core - uid: 11036 components: - type: Transform @@ -100784,7 +101176,7 @@ entities: setupAvailableNetworks: - SurveillanceCameraCommand nameSet: True - id: ai satellite 3 + id: AI Satellite 3 - uid: 14090 components: - type: Transform @@ -100827,7 +101219,7 @@ entities: setupAvailableNetworks: - SurveillanceCameraCommand nameSet: True - id: Control Room + id: Bridge - uid: 14094 components: - type: Transform @@ -100849,6 +101241,28 @@ entities: - SurveillanceCameraCommand nameSet: True id: Vault + - uid: 14101 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,40.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Chief Engineer's Office + - uid: 14109 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 25.5,-32.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Mysta's Room - uid: 16356 components: - type: Transform @@ -100858,7 +101272,40 @@ entities: setupAvailableNetworks: - SurveillanceCameraCommand nameSet: True - id: bridge exterior + id: Bridge Exterior + - uid: 17962 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,41.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Bridge Courtyard + - uid: 17963 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,65.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: AI Upload + - uid: 17969 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 52.5,13.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraCommand + nameSet: True + id: Logistics Officer's Office - proto: SurveillanceCameraEngineering entities: - uid: 5352 @@ -100894,16 +101341,6 @@ entities: - SurveillanceCameraEngineering nameSet: True id: Atmospherics Lobby - - uid: 14097 - components: - - type: Transform - pos: -2.5,56.5 - parent: 2 - - type: SurveillanceCamera - setupAvailableNetworks: - - SurveillanceCameraEngineering - nameSet: True - id: Atmospherics Experiment Chambers - uid: 14100 components: - type: Transform @@ -100915,17 +101352,6 @@ entities: - SurveillanceCameraEngineering nameSet: True id: AME Room - - uid: 14101 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 8.5,40.5 - parent: 2 - - type: SurveillanceCamera - setupAvailableNetworks: - - SurveillanceCameraEngineering - nameSet: True - id: Chief Engineer's Office - uid: 14102 components: - type: Transform @@ -100946,7 +101372,7 @@ entities: setupAvailableNetworks: - SurveillanceCameraEngineering nameSet: True - id: Robotics + id: Backup Power - uid: 14104 components: - type: Transform @@ -100969,8 +101395,71 @@ entities: - SurveillanceCameraEngineering nameSet: True id: Atmospheric Upper Courtyard + - uid: 14156 + components: + - type: Transform + pos: 10.5,56.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos Walkway + - uid: 17964 + components: + - type: Transform + pos: 9.5,51.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Telecomms + - uid: 17965 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 25.5,55.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Gravity + - uid: 17966 + components: + - type: Transform + pos: -4.5,66.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Solar Control + - uid: 17967 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,56.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: TEG Exterior - proto: SurveillanceCameraGeneral entities: + - uid: 13240 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 35.5,10.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Logistics Front - uid: 14106 components: - type: Transform @@ -100988,7 +101477,7 @@ entities: parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - - SurveillanceCameraGeneral + - SurveillanceCameraMedical nameSet: True id: Medical Front - uid: 14108 @@ -101000,17 +101489,6 @@ entities: - type: SurveillanceCamera nameSet: True id: Clothing Kiosk - - uid: 14109 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 35.5,10.5 - parent: 2 - - type: SurveillanceCamera - setupAvailableNetworks: - - SurveillanceCameraGeneral - nameSet: True - id: Cargo Front - uid: 14110 components: - type: Transform @@ -101064,6 +101542,60 @@ entities: - SurveillanceCameraGeneral nameSet: True id: Evacuation + - uid: 17953 + components: + - type: Transform + pos: 49.5,-12.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Cryosleep + - uid: 17955 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 37.5,-0.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Disposals + - uid: 17959 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 23.5,21.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Central Hall + - uid: 17960 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 21.5,10.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Botany Hall + - uid: 17961 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 32.5,35.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Tool Room - proto: SurveillanceCameraMedical entities: - uid: 13913 @@ -101164,6 +101696,17 @@ entities: - SurveillanceCameraMedical nameSet: True id: Chemistry Lab + - uid: 17950 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 10.5,-7.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Morgue - proto: SurveillanceCameraRouterCommand entities: - uid: 17901 @@ -101273,17 +101816,6 @@ entities: - SurveillanceCameraScience nameSet: True id: Lockers - - uid: 14135 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 30.5,-27.5 - parent: 2 - - type: SurveillanceCamera - setupAvailableNetworks: - - SurveillanceCameraScience - nameSet: True - id: Artifact Chamber - uid: 14136 components: - type: Transform @@ -101305,6 +101837,16 @@ entities: - SurveillanceCameraScience nameSet: True id: Forensic Mantis' Office + - uid: 17971 + components: + - type: Transform + pos: 34.5,-32.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraScience + nameSet: True + id: Artifact Lab - proto: SurveillanceCameraSecurity entities: - uid: 14139 @@ -101447,6 +101989,38 @@ entities: - SurveillanceCameraSecurity nameSet: True id: Courtroom + - uid: 17956 + components: + - type: Transform + pos: -21.5,18.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Perma Visitation + - uid: 17957 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,22.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Warden's Room + - uid: 17958 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,15.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSecurity + nameSet: True + id: Brig Cells - proto: SurveillanceCameraService entities: - uid: 14153 @@ -101481,41 +102055,63 @@ entities: - SurveillanceCameraService nameSet: True id: Hydroponics - - uid: 14156 + - uid: 14157 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 55.5,41.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraService + nameSet: True + id: Musician's Room + - uid: 14158 components: - type: Transform rot: -1.5707963267948966 rad - pos: 43.5,10.5 + pos: 7.5,15.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraService nameSet: True - id: Cargo - - uid: 14157 + id: Kitchen + - uid: 17952 components: - type: Transform rot: 1.5707963267948966 rad - pos: 55.5,41.5 + pos: 39.5,3.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraService nameSet: True - id: Musician's Room - - uid: 14158 + id: Janitor's Closet + - uid: 17954 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 7.5,15.5 + rot: 1.5707963267948966 rad + pos: 69.5,-9.5 parent: 2 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraService nameSet: True - id: Kitchen + id: Reporter's Office - proto: SurveillanceCameraSupply entities: + - uid: 14135 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,10.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Logistics - uid: 17375 components: - type: Transform @@ -101524,6 +102120,26 @@ entities: parent: 2 - type: SurveillanceCamera id: Salvage Dock + - uid: 17968 + components: + - type: Transform + pos: 48.5,14.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Salvage Equipment + - uid: 17970 + components: + - type: Transform + pos: 52.5,2.5 + parent: 2 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraSupply + nameSet: True + id: Cargo Shuttle Dock - proto: SurveillanceCameraWirelessRouterEntertainment entities: - uid: 8556 @@ -103040,6 +103656,11 @@ entities: - type: Transform pos: -0.5,-12.5 parent: 2 + - uid: 17980 + components: + - type: Transform + pos: 44.5,-24.5 + parent: 2 - proto: TableReinforcedGlass entities: - uid: 14461 @@ -113855,7 +114476,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -1095.1196 + secondsUntilStateChange: -4307.4097 state: Opening - type: Airlock autoClose: False @@ -113871,7 +114492,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -1094.553 + secondsUntilStateChange: -4306.8433 state: Opening - type: Airlock autoClose: False @@ -113893,7 +114514,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -1094.0863 + secondsUntilStateChange: -4306.3765 state: Opening - type: Airlock autoClose: False @@ -113909,7 +114530,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -1095.6196 + secondsUntilStateChange: -4307.9097 state: Opening - type: Airlock autoClose: False @@ -113955,11 +114576,26 @@ entities: - type: Transform pos: 2.5,-6.5 parent: 2 + - uid: 9485 + components: + - type: Transform + pos: 37.5,10.5 + parent: 2 - uid: 12145 components: - type: Transform pos: 42.5,-19.5 parent: 2 + - uid: 13238 + components: + - type: Transform + pos: 38.5,10.5 + parent: 2 + - uid: 13239 + components: + - type: Transform + pos: 42.5,9.5 + parent: 2 - uid: 16358 components: - type: Transform @@ -114599,6 +115235,34 @@ entities: rot: 1.5707963267948966 rad pos: 35.5,64.5 parent: 2 + - uid: 17973 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,11.5 + parent: 2 + - uid: 17974 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,13.5 + parent: 2 + - uid: 17975 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,12.5 + parent: 2 + - uid: 17976 + components: + - type: Transform + pos: 53.5,15.5 + parent: 2 + - uid: 17977 + components: + - type: Transform + pos: 52.5,15.5 + parent: 2 - proto: WindowTintedDirectional entities: - uid: 4638 diff --git a/Resources/Maps/hammurabi.yml b/Resources/Maps/hammurabi.yml index 0d4c80a132a..e9564653a0e 100644 --- a/Resources/Maps/hammurabi.yml +++ b/Resources/Maps/hammurabi.yml @@ -123,7 +123,7 @@ entities: version: 6 1,-1: ind: 1,-1 - tiles: fwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUgAAAAAAUgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAXgAAAAAAXgAAAAACfwAAAAAAZQAAAAAAXgAAAAACXgAAAAACXgAAAAAAZQAAAAAAZQAAAAAAfwAAAAAAUgAAAAAAUgAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAXgAAAAABXgAAAAABXgAAAAACXgAAAAACZQAAAAAAZQAAAAAAZQAAAAAAZQAAAAAAXgAAAAACXgAAAAACUgAAAAAAUgAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAZQAAAAAAZQAAAAAAfwAAAAAAXgAAAAADZQAAAAAAZQAAAAAAZQAAAAAAXgAAAAADXgAAAAACfwAAAAAAUgAAAAAAUgAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUgAAAAAAUgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAUgAAAAAAUgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAbQAAAAAAbQAAAAAAbwAAAAACQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAADXgAAAAABXgAAAAABXgAAAAABXgAAAAAAXgAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAACXgAAAAABXgAAAAADXgAAAAACXgAAAAABXgAAAAADfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAACXgAAAAAAXgAAAAAAXgAAAAACXgAAAAADXgAAAAADfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAADXgAAAAABXgAAAAADQwAAAAAAQwAAAAAAXgAAAAABfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXgAAAAABXgAAAAACXgAAAAADQwAAAAAAQwAAAAAAXgAAAAABfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAADXgAAAAAAXgAAAAABQwAAAAAAQwAAAAAAXgAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXgAAAAACXgAAAAABXgAAAAACXgAAAAABXgAAAAADXgAAAAADUAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAACXgAAAAAAXgAAAAACXgAAAAABXgAAAAACXgAAAAABUAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: fwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUgAAAAAAUgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAXgAAAAAAXgAAAAACfwAAAAAAZQAAAAAAXgAAAAACXgAAAAACXgAAAAAAZQAAAAAAZQAAAAAAfwAAAAAAUgAAAAAAUgAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAXgAAAAABXgAAAAABXgAAAAACXgAAAAACZQAAAAAAZQAAAAAAZQAAAAAAZQAAAAAAXgAAAAACXgAAAAACUgAAAAAAUgAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAZQAAAAAAZQAAAAAAfwAAAAAAXgAAAAADZQAAAAAAZQAAAAAAZQAAAAAAXgAAAAADXgAAAAACfwAAAAAAUgAAAAAAUgAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAZQAAAAAAZQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUgAAAAAAUgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAUgAAAAAAUgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAbQAAAAAAbQAAAAAAbwAAAAACQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAADXgAAAAABXgAAAAABXgAAAAABXgAAAAAAXgAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAACXgAAAAABXgAAAAADXgAAAAACXgAAAAABXgAAAAADfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAACXgAAAAAAXgAAAAAAXgAAAAACXgAAAAADXgAAAAADfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAADXgAAAAABXgAAAAADQwAAAAAAQwAAAAAAXgAAAAABfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXgAAAAABXgAAAAACXgAAAAADQwAAAAAAQwAAAAAAXgAAAAABfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAADXgAAAAAAXgAAAAABQwAAAAAAQwAAAAAAXgAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXgAAAAACXgAAAAABXgAAAAACXgAAAAABXgAAAAADXgAAAAADUAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAACXgAAAAAAXgAAAAACXgAAAAABXgAAAAACXgAAAAABUAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -1,1: ind: -1,1 @@ -391,7 +391,7 @@ entities: version: 6 -1,2: ind: -1,2 - tiles: fQAAAAABfQAAAAAAfQAAAAACfQAAAAADfQAAAAAAfwAAAAAAUwAAAAAAUwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfwAAAAAAfQAAAAACfQAAAAACfQAAAAABfQAAAAACfQAAAAABfwAAAAAAUwAAAAAAUwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfQAAAAABUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAXgAAAAACXgAAAAAAXgAAAAAAXgAAAAACXgAAAAABUAAAAAAAaQAAAAABaQAAAAACaQAAAAABaQAAAAABaQAAAAADaQAAAAABaQAAAAADaQAAAAAAaQAAAAACXgAAAAACXgAAAAADXgAAAAAAXgAAAAADXgAAAAADXgAAAAAAaQAAAAADaQAAAAADaQAAAAACaQAAAAAAaQAAAAACaQAAAAACaQAAAAAAaQAAAAACaQAAAAABaQAAAAACUAAAAAAAXgAAAAACXgAAAAAAXgAAAAADXgAAAAADXgAAAAAAUAAAAAAAaQAAAAAAaQAAAAAAaQAAAAACaQAAAAABaQAAAAAAaQAAAAACaQAAAAACaQAAAAACaQAAAAAAfwAAAAAAXgAAAAABXgAAAAABXgAAAAADXgAAAAAAXgAAAAADfwAAAAAAaQAAAAACaQAAAAABaQAAAAABaQAAAAACaQAAAAAAaQAAAAACaQAAAAABaQAAAAAAaQAAAAABfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAIAAAAAABIAAAAAADIAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAIAAAAAACIAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA + tiles: fQAAAAABfQAAAAAAfQAAAAACfQAAAAADfQAAAAAAfwAAAAAAUwAAAAAAUwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfwAAAAAAfQAAAAACfQAAAAACfQAAAAABfQAAAAACfQAAAAABfwAAAAAAUwAAAAAAUwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfQAAAAABUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAXgAAAAACXgAAAAAAXgAAAAAAXgAAAAACXgAAAAABUAAAAAAAaQAAAAABaQAAAAACaQAAAAABaQAAAAABaQAAAAADaQAAAAABaQAAAAADaQAAAAAAaQAAAAACXgAAAAACXgAAAAADXgAAAAAAXgAAAAADXgAAAAADXgAAAAAAaQAAAAADaQAAAAADaQAAAAACaQAAAAAAaQAAAAACaQAAAAACaQAAAAAAaQAAAAACaQAAAAABaQAAAAACUAAAAAAAXgAAAAACXgAAAAAAXgAAAAADXgAAAAADXgAAAAAAUAAAAAAAaQAAAAAAaQAAAAAAaQAAAAACaQAAAAABaQAAAAAAaQAAAAACaQAAAAACaQAAAAACaQAAAAAAfwAAAAAAXgAAAAABXgAAAAABXgAAAAADXgAAAAAAXgAAAAADfwAAAAAAaQAAAAACaQAAAAABaQAAAAABaQAAAAACaQAAAAAAaQAAAAACaQAAAAABaQAAAAAAaQAAAAABfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAIAAAAAABIAAAAAADIAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAIAAAAAACIAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAfgAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAA version: 6 -5,2: ind: -5,2 @@ -439,7 +439,7 @@ entities: version: 6 3,-4: ind: 3,-4 - tiles: bQAAAAAAUAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXgAAAAACUAAAAAAAXgAAAAABXgAAAAACXgAAAAAAXgAAAAADXgAAAAACUAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXgAAAAAAXgAAAAAAXgAAAAABXgAAAAADXgAAAAABXgAAAAADXgAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAXgAAAAAAXgAAAAABXgAAAAADXgAAAAACXgAAAAACXgAAAAABXgAAAAACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAXgAAAAADUAAAAAAAXgAAAAAAXgAAAAACXgAAAAABXgAAAAACXgAAAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAABQwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbwAAAAADbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbwAAAAACbQAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAbwAAAAACbQAAAAAAbQAAAAAAbQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAUAAAAAAAfwAAAAAA + tiles: bQAAAAAAUAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXgAAAAACUAAAAAAAXgAAAAABXgAAAAACXgAAAAAAXgAAAAADXgAAAAACUAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAXgAAAAAAXgAAAAAAXgAAAAABXgAAAAADXgAAAAABXgAAAAADXgAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAXgAAAAAAXgAAAAABXgAAAAADXgAAAAACXgAAAAACXgAAAAABXgAAAAACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAXgAAAAADUAAAAAAAXgAAAAAAXgAAAAACXgAAAAABXgAAAAACXgAAAAABUAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAAAZAAAAAABQwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbwAAAAADbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbwAAAAACbQAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAbwAAAAACbQAAAAAAbQAAAAAAbQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAbQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAbQAAAAAAUAAAAAAAfwAAAAAA version: 6 -3,-6: ind: -3,-6 @@ -451,7 +451,7 @@ entities: version: 6 3,-3: ind: 3,-3 - tiles: fwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAbQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbwAAAAAAbQAAAAAAbQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAbQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAbwAAAAABbQAAAAAAbQAAAAAAbwAAAAACbQAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAbwAAAAABbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: fwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbwAAAAAAbQAAAAAAbQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAbwAAAAABbQAAAAAAbQAAAAAAbwAAAAACbQAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAbwAAAAABbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAPAAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 3,-2: ind: 3,-2 @@ -475,7 +475,7 @@ entities: version: 6 -8,-2: ind: -8,-2 - tiles: QwAAAAAABQAAAAAJQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAQwAAAAAABQAAAAAIQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAZwAAAAAAZwAAAAAAZwAAAAABZwAAAAACZwAAAAAAZwAAAAAAZwAAAAADZwAAAAABZwAAAAADZwAAAAABBQAAAAAFBQAAAAABBQAAAAAOBQAAAAACBQAAAAANfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAABQAAAAAGQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAQwAAAAAABQAAAAAMQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAbQAAAAAAbQAAAAAAZwAAAAABfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAZwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAJQAAAAACfwAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAJQAAAAACJQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAUwAAAAAAUwAAAAAAUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAUwAAAAAAUwAAAAAAUwAAAAAA + tiles: QwAAAAAABQAAAAAJQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAQwAAAAAABQAAAAAIQwAAAAAAQwAAAAAAQwAAAAAAUAAAAAAAZwAAAAAAZwAAAAAAZwAAAAABZwAAAAACZwAAAAAAZwAAAAAAZwAAAAADZwAAAAABZwAAAAADZwAAAAABBQAAAAAFBQAAAAABBQAAAAAOBQAAAAACBQAAAAANfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAABQAAAAAGQwAAAAAAQwAAAAAAQwAAAAAAUAAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAQwAAAAAABQAAAAAMQwAAAAAAQwAAAAAAQwAAAAAAUAAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAbQAAAAAAbQAAAAAAZwAAAAABfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAZwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAJQAAAAACfwAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAJQAAAAACJQAAAAADAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAUwAAAAAAUwAAAAAAUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAUwAAAAAAUwAAAAAAUwAAAAAA version: 6 -5,-6: ind: -5,-6 @@ -535,7 +535,7 @@ entities: version: 6 -9,-3: ind: -9,-3 - tiles: fgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAQwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAQwAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAOQAAAAAAUAAAAAAAXgAAAAADfwAAAAAAXgAAAAACfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAPAAAAAAAPAAAAAAAUAAAAAAAOQAAAAAAUAAAAAAAXgAAAAAAfwAAAAAAXgAAAAABfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAPAAAAAAAPAAAAAAAUAAAAAAAOQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAOQAAAAAAUAAAAAAAXgAAAAABXgAAAAAAXgAAAAACXgAAAAABUAAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAXgAAAAACXgAAAAABXgAAAAACXgAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAA + tiles: fgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAQwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAQwAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAOQAAAAAAUAAAAAAAXgAAAAADfwAAAAAAXgAAAAACfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAPAAAAAAAPAAAAAAAUAAAAAAAOQAAAAAAUAAAAAAAXgAAAAAAfwAAAAAAXgAAAAABfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAPAAAAAAAPAAAAAAAUAAAAAAAOQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAOQAAAAAAUAAAAAAAXgAAAAABXgAAAAAAXgAAAAACXgAAAAABUAAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAXgAAAAACXgAAAAABXgAAAAACXgAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAA version: 6 -8,-4: ind: -8,-4 @@ -712,16 +712,13 @@ entities: - type: Broadphase - type: Physics bodyStatus: InAir - angularDamping: 10000 - linearDamping: 10000 + angularDamping: 0.05 + linearDamping: 0.05 fixedRotation: False bodyType: Dynamic - type: Fixtures fixtures: {} - type: OccluderTree - - type: Shuttle - angularDamping: 10000 - linearDamping: 10000 - type: GridPathfinding - type: Gravity gravityShakeSound: !type:SoundPathSpecifier @@ -1054,6 +1051,8 @@ entities: 6995: 19,-3 6996: 19,0 6997: 19,2 + 9471: -6,50 + 9472: -2,48 - node: angle: 1.5707963267948966 rad color: '#52B4E9FF' @@ -3933,6 +3932,12 @@ entities: id: Clandestine decals: 5978: -49.234955,-76.92839 + - node: + color: '#A4610696' + id: Delivery + decals: + 9463: -7,47 + 9464: -7,47 - node: color: '#FFFFFFFF' id: Delivery @@ -3961,6 +3966,7 @@ entities: 6349: 81,-52 6350: 81,-44 6351: 73,-44 + 9462: -10,23 - node: cleanable: True color: '#D5188DFF' @@ -12273,6 +12279,9 @@ entities: 7070: 36,1 7071: 36,2 7084: -8,43 + 9468: -7,50 + 9469: -7,49 + 9470: -7,48 - node: color: '#1D1D21FF' id: WarnLineGreyscaleE @@ -12469,6 +12478,9 @@ entities: 7057: 37,27 7059: 42,-3 7073: 36,2 + 9465: -7,50 + 9466: -7,49 + 9467: -7,48 - node: color: '#A46106DD' id: WarnLineW @@ -13724,7 +13736,7 @@ entities: -9,-12: 0: 53503 -8,-11: - 0: 64733 + 0: 64735 -9,-11: 0: 55773 -8,-10: @@ -14334,8 +14346,7 @@ entities: -14,-12: 0: 61412 -14,-11: - 0: 53212 - 4: 4096 + 0: 57308 -14,-10: 0: 57308 -14,-13: @@ -15528,7 +15539,8 @@ entities: -2,10: 0: 65535 -2,11: - 2: 63200 + 2: 55008 + 0: 8192 -2,12: 0: 36863 2: 12288 @@ -15581,7 +15593,7 @@ entities: -27,-13: 0: 57344 3: 48 - 5: 136 + 4: 136 -26,-12: 0: 4095 -26,-11: @@ -15590,8 +15602,8 @@ entities: 0: 61168 -26,-13: 0: 61440 - 5: 17 - 6: 204 + 4: 17 + 5: 204 -25,-13: 0: 62702 -40,-1: @@ -15916,7 +15928,7 @@ entities: 2: 3824 14,-15: 2: 13056 - 0: 32768 + 0: 34816 14,-14: 0: 16379 14,-13: @@ -15926,7 +15938,7 @@ entities: 15,-16: 2: 20208 15,-15: - 0: 47104 + 0: 47872 2: 12 15,-14: 0: 35839 @@ -16110,7 +16122,7 @@ entities: -32,-6: 0: 2184 -31,-8: - 0: 56785 + 0: 57297 -31,-7: 0: 64973 -31,-6: @@ -16153,7 +16165,7 @@ entities: -28,-17: 0: 65391 -28,-15: - 7: 7 + 6: 7 3: 1792 -28,-14: 3: 7 @@ -17067,21 +17079,6 @@ entities: - 0 - 0 - 0 - - volume: 2500 - temperature: 293.14975 - moles: - - 20.078888 - - 75.53487 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - volume: 2500 temperature: 293.15 moles: @@ -17133,6 +17130,7 @@ entities: - type: BecomesStation id: Hammurabi - type: SpreaderGrid + - type: Shuttle - uid: 34785 components: - type: MetaData @@ -19506,9 +19504,7 @@ entities: - 41608 - 41607 - 41600 - - 41603 - 41604 - - 41605 - 41506 - 41606 - 24748 @@ -19534,9 +19530,7 @@ entities: - type: DeviceList devices: - 41503 - - 41605 - 41604 - - 41603 - 16849 - 23025 - uid: 41619 @@ -20194,6 +20188,11 @@ entities: - type: Transform pos: 12.5,-19.5 parent: 1 + - uid: 32683 + components: + - type: Transform + pos: 8.5,-24.5 + parent: 1 - proto: AirlockAssembly entities: - uid: 4369 @@ -20461,6 +20460,11 @@ entities: - DoorStatus: DoorBolt 17976: - DoorStatus: DoorBolt + - uid: 32684 + components: + - type: Transform + pos: -122.5,-29.5 + parent: 1 - proto: AirlockChiefEngineerLocked entities: - uid: 9755 @@ -20802,6 +20806,10 @@ entities: - DoorStatus: DoorBolt 10673: - DoorStatus: DoorBolt + 10675: + - DoorStatus: DoorBolt + 10674: + - DoorStatus: DoorBolt - uid: 10671 components: - type: Transform @@ -20813,6 +20821,10 @@ entities: - DoorStatus: DoorBolt 10672: - DoorStatus: DoorBolt + 10675: + - DoorStatus: DoorBolt + 10674: + - DoorStatus: DoorBolt - proto: AirlockExternalGlass entities: - uid: 539 @@ -21087,6 +21099,8 @@ entities: - type: Transform pos: 62.5,-55.5 parent: 1 + - type: DeviceLinkSink + invokeCounter: 2 - type: DeviceLinkSource linkedPorts: 10673: @@ -21098,6 +21112,8 @@ entities: - type: Transform pos: 62.5,-54.5 parent: 1 + - type: DeviceLinkSink + invokeCounter: 2 - type: DeviceLinkSource linkedPorts: 10673: @@ -23398,13 +23414,6 @@ entities: - type: Transform pos: 14.5,-7.5 parent: 1 - - uid: 1576 - components: - - type: MetaData - name: glass airlock to The Hole - - type: Transform - pos: 8.5,-24.5 - parent: 1 - uid: 1577 components: - type: Transform @@ -26495,8 +26504,10 @@ entities: parent: 1 - proto: APCConstructed entities: - - uid: 18602 + - uid: 31263 components: + - type: MetaData + name: particle accelerator APC - type: Transform pos: 58.5,-52.5 parent: 1 @@ -27372,212 +27383,257 @@ entities: - type: Transform pos: 44.5,-6.5 parent: 1 -- proto: AtmosDeviceFanTiny +- proto: AtmosDeviceFanDirectional entities: - uid: 541 components: - type: Transform - pos: -72.5,45.5 + pos: -25.5,-24.5 parent: 1 - uid: 548 components: - type: Transform - pos: -64.5,45.5 + pos: -5.5,-65.5 parent: 1 - uid: 550 components: - type: Transform - pos: -46.5,45.5 + pos: 2.5,-65.5 parent: 1 - - uid: 2036 + - uid: 907 components: - type: Transform - pos: -30.5,42.5 + pos: 16.5,-65.5 parent: 1 - - uid: 2179 + - uid: 908 components: - type: Transform - pos: -74.5,45.5 + pos: 38.5,-65.5 parent: 1 - - uid: 2214 + - uid: 929 components: - type: Transform - pos: -66.5,45.5 + pos: -45.5,-78.5 parent: 1 - - uid: 2464 + - uid: 930 components: - type: Transform - pos: -48.5,45.5 + pos: -3.5,-65.5 parent: 1 - - uid: 5442 + - uid: 1576 components: - type: Transform - pos: -31.5,42.5 + pos: 4.5,-65.5 parent: 1 - - uid: 5579 + - uid: 2036 components: - type: Transform - pos: 3.5,51.5 + pos: 26.5,-65.5 parent: 1 - - uid: 5587 + - uid: 2179 components: - type: Transform - pos: -34.5,42.5 + pos: -41.5,-78.5 parent: 1 - - uid: 5661 + - uid: 2214 components: - type: Transform - pos: -33.5,42.5 + pos: 40.5,-65.5 parent: 1 - - uid: 5991 + - uid: 2464 components: - type: Transform - pos: 28.5,5.5 + pos: 24.5,-65.5 parent: 1 - - uid: 5992 + - uid: 3061 components: - type: Transform - pos: 28.5,9.5 + pos: 48.5,-65.5 parent: 1 - - uid: 9647 + - uid: 3082 + components: + - type: Transform + pos: 46.5,-65.5 + parent: 1 + - uid: 3117 components: - type: Transform + rot: -1.5707963267948966 rad pos: -25.5,10.5 parent: 1 - - uid: 10515 + - uid: 3281 components: - type: Transform + rot: -1.5707963267948966 rad pos: 22.5,-41.5 parent: 1 - - uid: 11108 + - uid: 3410 components: - type: Transform + rot: -1.5707963267948966 rad pos: -26.5,-23.5 parent: 1 - - uid: 12719 + - uid: 4394 components: - type: Transform - pos: -97.5,38.5 + rot: -1.5707963267948966 rad + pos: -137.5,-24.5 parent: 1 - - uid: 12720 + - uid: 5442 components: - type: Transform - pos: -87.5,45.5 + pos: 18.5,-65.5 parent: 1 - - uid: 12721 + - uid: 5579 components: - type: Transform - pos: -87.5,38.5 + pos: -49.5,-78.5 parent: 1 - - uid: 12788 + - uid: 5587 components: - type: Transform - pos: -97.5,45.5 + pos: -93.5,-89.5 parent: 1 - - uid: 16635 + - uid: 5661 components: - type: Transform - pos: -137.5,-24.5 + rot: -1.5707963267948966 rad + pos: -153.5,-33.5 parent: 1 - - uid: 19249 + - uid: 5991 components: - type: Transform - pos: -45.5,-78.5 + rot: 1.5707963267948966 rad + pos: -90.5,-86.5 parent: 1 - - uid: 24591 + - uid: 5992 components: - type: Transform - pos: -5.5,-65.5 + rot: 3.141592653589793 rad + pos: -72.5,45.5 parent: 1 - - uid: 24592 + - uid: 6150 components: - type: Transform - pos: -3.5,-65.5 + rot: 3.141592653589793 rad + pos: -34.5,42.5 parent: 1 - - uid: 24593 + - uid: 6151 components: - type: Transform - pos: 2.5,-65.5 + rot: 3.141592653589793 rad + pos: -64.5,45.5 parent: 1 - - uid: 24594 + - uid: 6152 components: - type: Transform - pos: 4.5,-65.5 + rot: 3.141592653589793 rad + pos: -48.5,45.5 parent: 1 - - uid: 24595 + - uid: 6153 components: - type: Transform - pos: 16.5,-65.5 + rot: 3.141592653589793 rad + pos: -46.5,45.5 parent: 1 - - uid: 24596 + - uid: 6611 components: - type: Transform - pos: 18.5,-65.5 + rot: 3.141592653589793 rad + pos: -33.5,42.5 parent: 1 - - uid: 24597 + - uid: 6615 components: - type: Transform - pos: 24.5,-65.5 + rot: 3.141592653589793 rad + pos: -66.5,45.5 parent: 1 - - uid: 24598 + - uid: 6617 components: - type: Transform - pos: 26.5,-65.5 + rot: 3.141592653589793 rad + pos: -30.5,42.5 parent: 1 - - uid: 24599 + - uid: 6618 components: - type: Transform - pos: 38.5,-65.5 + rot: 3.141592653589793 rad + pos: 3.5,51.5 parent: 1 - - uid: 24600 + - uid: 6619 components: - type: Transform - pos: 40.5,-65.5 + rot: 1.5707963267948966 rad + pos: 28.5,9.5 parent: 1 - - uid: 24601 + - uid: 6620 components: - type: Transform - pos: 46.5,-65.5 + rot: 1.5707963267948966 rad + pos: 28.5,5.5 parent: 1 - - uid: 24602 + - uid: 6629 components: - type: Transform - pos: 48.5,-65.5 + rot: 3.141592653589793 rad + pos: -74.5,45.5 parent: 1 - - uid: 24931 + - uid: 6632 components: - type: Transform - pos: -41.5,-78.5 + rot: -1.5707963267948966 rad + pos: -87.5,45.5 parent: 1 - - uid: 24947 + - uid: 6633 components: - type: Transform - pos: -49.5,-78.5 + rot: -1.5707963267948966 rad + pos: -153.5,-32.5 parent: 1 - - uid: 36459 + - uid: 6635 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -87.5,38.5 + parent: 1 + - uid: 6636 components: - type: Transform + rot: 3.141592653589793 rad pos: -124.5,27.5 parent: 1 - - uid: 36464 + - uid: 6639 components: - type: Transform - pos: -153.5,-32.5 + rot: 1.5707963267948966 rad + pos: -97.5,45.5 parent: 1 - - uid: 36465 + - uid: 6643 components: - type: Transform - pos: -153.5,-33.5 + rot: 1.5707963267948966 rad + pos: -97.5,38.5 parent: 1 - - uid: 41739 + - uid: 32687 components: - type: Transform - pos: -93.5,-89.5 + rot: 3.141592653589793 rad + pos: -31.5,42.5 parent: 1 - - uid: 41810 + - uid: 43123 components: - type: Transform - pos: -90.5,-86.5 + pos: -24.5,-24.5 + parent: 1 + - uid: 43124 + components: + - type: Transform + pos: -23.5,-24.5 + parent: 1 + - uid: 43125 + components: + - type: Transform + pos: -22.5,-24.5 parent: 1 - proto: AtmosFixBlockerMarker entities: @@ -28705,12 +28761,6 @@ entities: parent: 1 - proto: BaseGasCondenser entities: - - uid: 1743 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 3.5,-37.5 - parent: 1 - uid: 30039 components: - type: Transform @@ -28732,6 +28782,11 @@ entities: parent: 1 - proto: Beaker entities: + - uid: 22961 + components: + - type: Transform + pos: 3.9351196,-37.389565 + parent: 1 - uid: 32231 components: - type: Transform @@ -29648,6 +29703,13 @@ entities: rot: 3.141592653589793 rad pos: -65.50091,6.665364 parent: 1 +- proto: Biofabricator + entities: + - uid: 4780 + components: + - type: Transform + pos: -34.5,-11.5 + parent: 1 - proto: BiomassReclaimer entities: - uid: 1731 @@ -29951,10 +30013,11 @@ entities: parent: 1 - proto: BookAtmosAirAlarms entities: - - uid: 15400 + - uid: 2090 components: - type: Transform - pos: -94.90623,-39.386993 + rot: -1.5707963267948966 rad + pos: -94.47202,-41.99912 parent: 1 - proto: BookBartendersManual entities: @@ -30016,11 +30079,11 @@ entities: parent: 1 - proto: BookLeafLoversSecret entities: - - uid: 904 + - uid: 639 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -34.50293,-11.364823 + rot: -1.5707963267948966 rad + pos: -28.470697,-17.970749 parent: 1 - uid: 11025 components: @@ -30517,6 +30580,18 @@ entities: - type: Transform pos: -7.970074,38.58155 parent: 1 +- proto: BoxEnvelope + entities: + - uid: 32620 + components: + - type: Transform + pos: -49.340946,33.642918 + parent: 1 + - uid: 32622 + components: + - type: Transform + pos: -49.653446,33.663765 + parent: 1 - proto: BoxFlashbang entities: - uid: 12144 @@ -30844,11 +30919,6 @@ entities: - type: Transform pos: -46.74948,-33.33157 parent: 1 - - uid: 28648 - components: - - type: Transform - pos: -1.480845,-20.389856 - parent: 1 - uid: 29448 components: - type: Transform @@ -31135,6 +31205,20 @@ entities: rot: 1.5707963267948966 rad pos: -9.5,-36.5 parent: 1 +- proto: ButtonFrameGrey + entities: + - uid: 2300 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -65.5,22.5 + parent: 1 + - uid: 2301 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -65.5,22.5 + parent: 1 - proto: ButtonFrameJanitor entities: - uid: 42175 @@ -31197,6 +31281,12 @@ entities: rot: -1.5707963267948966 rad pos: -96.5,1.5 parent: 1 + - uid: 43177 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -54.5,0.5 + parent: 1 - proto: CableApcExtension entities: - uid: 1114 @@ -45509,6 +45599,16 @@ entities: - type: Transform pos: -6.5,17.5 parent: 1 + - uid: 28508 + components: + - type: Transform + pos: 2.5,-53.5 + parent: 1 + - uid: 28648 + components: + - type: Transform + pos: 60.5,-55.5 + parent: 1 - uid: 28649 components: - type: Transform @@ -54544,6 +54644,46 @@ entities: - type: Transform pos: -93.5,15.5 parent: 1 + - uid: 43169 + components: + - type: Transform + pos: 2.5,-52.5 + parent: 1 + - uid: 43170 + components: + - type: Transform + pos: 2.5,-51.5 + parent: 1 + - uid: 43171 + components: + - type: Transform + pos: 2.5,-50.5 + parent: 1 + - uid: 43172 + components: + - type: Transform + pos: 2.5,-54.5 + parent: 1 + - uid: 43173 + components: + - type: Transform + pos: 2.5,-55.5 + parent: 1 + - uid: 43174 + components: + - type: Transform + pos: 2.5,-56.5 + parent: 1 + - uid: 43175 + components: + - type: Transform + pos: 1.5,-56.5 + parent: 1 + - uid: 43176 + components: + - type: Transform + pos: -121.5,-30.5 + parent: 1 - proto: CableApcStack entities: - uid: 8848 @@ -54895,6 +55035,31 @@ entities: - type: Transform pos: -62.5,-40.5 parent: 1 + - uid: 10648 + components: + - type: Transform + pos: 61.5,-56.5 + parent: 1 + - uid: 10657 + components: + - type: Transform + pos: 59.5,-50.5 + parent: 1 + - uid: 10662 + components: + - type: Transform + pos: 58.5,-50.5 + parent: 1 + - uid: 10877 + components: + - type: Transform + pos: 59.5,-47.5 + parent: 1 + - uid: 10887 + components: + - type: Transform + pos: 60.5,-48.5 + parent: 1 - uid: 10921 components: - type: Transform @@ -55390,16 +55555,6 @@ entities: - type: Transform pos: 61.5,-55.5 parent: 1 - - uid: 14247 - components: - - type: Transform - pos: 61.5,-56.5 - parent: 1 - - uid: 14248 - components: - - type: Transform - pos: 60.5,-56.5 - parent: 1 - uid: 14249 components: - type: Transform @@ -55470,16 +55625,6 @@ entities: - type: Transform pos: 57.5,-49.5 parent: 1 - - uid: 14966 - components: - - type: Transform - pos: 58.5,-49.5 - parent: 1 - - uid: 14971 - components: - - type: Transform - pos: 59.5,-49.5 - parent: 1 - uid: 14973 components: - type: Transform @@ -55565,6 +55710,11 @@ entities: - type: Transform pos: 56.5,-42.5 parent: 1 + - uid: 15203 + components: + - type: Transform + pos: 57.5,-47.5 + parent: 1 - uid: 15206 components: - type: Transform @@ -55578,28 +55728,13 @@ entities: - uid: 15225 components: - type: Transform - pos: 57.5,-46.5 - parent: 1 - - uid: 15247 - components: - - type: Transform - pos: 58.5,-46.5 - parent: 1 - - uid: 15249 - components: - - type: Transform - pos: 59.5,-46.5 + pos: 58.5,-47.5 parent: 1 - uid: 15256 components: - type: Transform pos: 60.5,-46.5 parent: 1 - - uid: 15259 - components: - - type: Transform - pos: 60.5,-45.5 - parent: 1 - uid: 15265 components: - type: Transform @@ -58579,6 +58714,11 @@ entities: - type: Transform pos: 23.5,5.5 parent: 1 + - uid: 29517 + components: + - type: Transform + pos: 59.5,-57.5 + parent: 1 - uid: 29544 components: - type: Transform @@ -58589,11 +58729,21 @@ entities: - type: Transform pos: -79.5,-39.5 parent: 1 + - uid: 30380 + components: + - type: Transform + pos: 60.5,-57.5 + parent: 1 - uid: 30387 components: - type: Transform pos: 9.5,-38.5 parent: 1 + - uid: 30774 + components: + - type: Transform + pos: 61.5,-57.5 + parent: 1 - uid: 32309 components: - type: Transform @@ -63542,6 +63692,11 @@ entities: - type: Transform pos: -70.5,-7.5 parent: 1 + - uid: 10649 + components: + - type: Transform + pos: 59.5,-57.5 + parent: 1 - uid: 10957 components: - type: Transform @@ -71992,11 +72147,6 @@ entities: - type: Transform pos: -40.5,-75.5 parent: 1 - - uid: 39650 - components: - - type: Transform - pos: 58.5,-52.5 - parent: 1 - uid: 39651 components: - type: Transform @@ -73202,6 +73352,11 @@ entities: - type: Transform pos: -27.5,5.5 parent: 1 + - uid: 43155 + components: + - type: Transform + pos: 58.5,-52.5 + parent: 1 - proto: CableMVStack entities: - uid: 3219 @@ -73255,10 +73410,10 @@ entities: rot: 3.141592653589793 rad pos: -112.5,-22.5 parent: 1 - - uid: 10919 + - uid: 10890 components: - type: Transform - pos: 61.5,-55.5 + pos: 61.5,-56.5 parent: 1 - uid: 13298 components: @@ -76273,6 +76428,11 @@ entities: - type: Transform pos: -96.5,-28.5 parent: 1 + - uid: 19293 + components: + - type: Transform + pos: 59.5,-56.5 + parent: 1 - uid: 19927 components: - type: Transform @@ -83535,12 +83695,6 @@ entities: rot: 1.5707963267948966 rad pos: 60.690517,-43.173733 parent: 1 - - uid: 10896 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 60.45093,-49.412567 - parent: 1 - uid: 11034 components: - type: Transform @@ -83581,6 +83735,12 @@ entities: rot: 1.5707963267948966 rad pos: -95.2549,-40.368137 parent: 1 + - uid: 28739 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 60.387344,-50.33426 + parent: 1 - uid: 28742 components: - type: Transform @@ -84446,11 +84606,21 @@ entities: Quantity: 12 - proto: ChemistryHotplate entities: + - uid: 1742 + components: + - type: Transform + pos: 3.5,-37.5 + parent: 1 - uid: 4793 components: - type: Transform pos: -64.5,-21.5 parent: 1 + - uid: 13508 + components: + - type: Transform + pos: -63.5,-31.5 + parent: 1 - uid: 33452 components: - type: Transform @@ -84517,17 +84687,6 @@ entities: parent: 1 - proto: Cigarette entities: - - uid: 17689 - components: - - type: Transform - pos: -87.698425,-17.302172 - parent: 1 - - uid: 19293 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -88.51011,-46.27136 - parent: 1 - uid: 28706 components: - type: Transform @@ -84560,17 +84719,6 @@ entities: - type: Transform pos: -6.248913,11.525083 parent: 1 - - uid: 28739 - components: - - type: Transform - pos: 6.7320995,-15.165098 - parent: 1 - - uid: 29442 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 3.212751,-49.56133 - parent: 1 - proto: CigaretteBanana entities: - uid: 36443 @@ -84797,26 +84945,6 @@ entities: rot: 3.141592653589793 rad pos: -35.667667,-67.367386 parent: 1 - - uid: 31263 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -31.385698,17.652447 - parent: 1 -- proto: CigPackBlue - entities: - - uid: 15092 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -92.257256,25.130632 - parent: 1 - - uid: 30380 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -24.647594,-73.685814 - parent: 1 - proto: CigPackGreen entities: - uid: 14743 @@ -84832,12 +84960,6 @@ entities: rot: -1.5707963267948966 rad pos: 70.85632,1.4241102 parent: 1 - - uid: 30774 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -75.63711,-38.75398 - parent: 1 - proto: CigPackMixed entities: - uid: 2056 @@ -85997,6 +86119,26 @@ entities: - type: Transform pos: -0.54146147,-37.24413 parent: 1 +- proto: ClothingBackpackElectropack + entities: + - uid: 2695 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -0.3645833,-23.317299 + parent: 1 + - uid: 2698 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 13.646861,-21.428116 + parent: 1 + - uid: 2701 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -47.292618,-33.169548 + parent: 1 - proto: ClothingBeltSecurityFilled entities: - uid: 9509 @@ -86053,6 +86195,11 @@ entities: - type: Physics canCollide: False - type: InsideEntityStorage + - uid: 41603 + components: + - type: Transform + pos: 61.52096,-53.54917 + parent: 1 - proto: ClothingEyesHudSecurity entities: - uid: 9511 @@ -87307,6 +87454,11 @@ entities: - type: Transform pos: -103.5,11.5 parent: 1 + - uid: 7584 + components: + - type: Transform + pos: -95.5,-39.5 + parent: 1 - uid: 8223 components: - type: Transform @@ -87625,12 +87777,6 @@ entities: rot: -1.5707963267948966 rad pos: -104.5,-33.5 parent: 1 - - uid: 10890 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 59.5,-49.5 - parent: 1 - uid: 16180 components: - type: Transform @@ -87641,6 +87787,12 @@ entities: - type: Transform pos: -106.5,12.5 parent: 1 + - uid: 29442 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 59.5,-50.5 + parent: 1 - uid: 34245 components: - type: Transform @@ -87693,13 +87845,6 @@ entities: - type: Transform pos: -28.5,41.5 parent: 1 -- proto: ComputerShuttleSalvage - entities: - - uid: 13170 - components: - - type: Transform - pos: -3.5,51.5 - parent: 1 - proto: ComputerSolarControl entities: - uid: 16186 @@ -88854,58 +88999,65 @@ entities: rot: 3.141592653589793 rad pos: 3.5,31.5 parent: 1 - - uid: 6611 + - uid: 7123 components: - type: Transform - rot: 1.5707963267948966 rad + rot: -1.5707963267948966 rad pos: -5.5,23.5 parent: 1 - - uid: 6617 + - uid: 7157 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -9.5,23.5 + pos: -4.5,26.5 parent: 1 - - uid: 6618 + - uid: 7158 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -8.5,23.5 + pos: -4.5,25.5 parent: 1 - - uid: 6619 + - uid: 8505 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -7.5,23.5 + pos: 42.5,11.5 parent: 1 - - uid: 6620 + - uid: 8781 components: - type: Transform - rot: 1.5707963267948966 rad + pos: -4.5,24.5 + parent: 1 + - uid: 8967 + components: + - type: Transform + pos: -4.5,28.5 + parent: 1 + - uid: 9639 + components: + - type: Transform + rot: -1.5707963267948966 rad pos: -6.5,23.5 parent: 1 - - uid: 6633 + - uid: 9640 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -11.5,23.5 + pos: -4.5,27.5 parent: 1 - - uid: 6635 + - uid: 9642 components: - type: Transform rot: 3.141592653589793 rad - pos: -4.5,23.5 + pos: -6.5,48.5 parent: 1 - - uid: 6639 + - uid: 9647 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -10.5,23.5 + rot: 3.141592653589793 rad + pos: -6.5,49.5 parent: 1 - - uid: 8505 + - uid: 9848 components: - type: Transform - pos: 42.5,11.5 + rot: 3.141592653589793 rad + pos: -6.5,50.5 parent: 1 - uid: 10042 components: @@ -89034,19 +89186,35 @@ entities: rot: -1.5707963267948966 rad pos: 23.5,-3.5 parent: 1 + - uid: 10515 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,23.5 + parent: 1 - uid: 10656 components: - type: Transform pos: 42.5,7.5 parent: 1 + - uid: 11108 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,23.5 + parent: 1 + - uid: 11289 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,23.5 + parent: 1 - uid: 11292 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -12.5,23.5 + rot: -1.5707963267948966 rad + pos: -11.5,23.5 parent: 1 - - type: DeviceLinkSink - invokeCounter: 1 - uid: 11313 components: - type: Transform @@ -89198,20 +89366,8 @@ entities: - uid: 12021 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 13.5,-16.5 - parent: 1 - - uid: 12022 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 14.5,-16.5 - parent: 1 - - uid: 12023 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 15.5,-16.5 + rot: -1.5707963267948966 rad + pos: -12.5,23.5 parent: 1 - uid: 13108 components: @@ -89237,41 +89393,10 @@ entities: rot: -1.5707963267948966 rad pos: 6.5,27.5 parent: 1 - - uid: 15165 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,24.5 - parent: 1 - - uid: 15166 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,25.5 - parent: 1 - - uid: 15167 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,26.5 - parent: 1 - - uid: 15168 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,27.5 - parent: 1 - - uid: 15169 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,28.5 - parent: 1 - uid: 15170 components: - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,29.5 + pos: -4.5,23.5 parent: 1 - uid: 17138 components: @@ -89328,6 +89453,29 @@ entities: - type: Transform pos: 42.5,1.5 parent: 1 + - uid: 32629 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-16.5 + parent: 1 + - uid: 36830 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 13.5,-16.5 + parent: 1 + - uid: 41217 + components: + - type: Transform + pos: -4.5,29.5 + parent: 1 + - uid: 42850 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 15.5,-16.5 + parent: 1 - proto: CrateArtifactContainer entities: - uid: 6801 @@ -89521,6 +89669,24 @@ entities: - type: Transform pos: 59.5,-45.5 parent: 1 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - proto: CrateEngineeringSingularityCollector entities: - uid: 15890 @@ -90052,6 +90218,13 @@ entities: - 0 - 0 - 0 +- proto: CrateMaterialGlass + entities: + - uid: 43129 + components: + - type: Transform + pos: 52.5,-49.5 + parent: 1 - proto: CrateMedical entities: - uid: 9063 @@ -91789,24 +91962,6 @@ entities: rot: 1.5707963267948966 rad pos: 6.5,-30.5 parent: 1 - - uid: 6150 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -25.5,-14.5 - parent: 1 - - uid: 6151 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -24.5,-11.5 - parent: 1 - - uid: 6153 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -25.5,-11.5 - parent: 1 - uid: 8312 components: - type: Transform @@ -91847,6 +92002,24 @@ entities: rot: 1.5707963267948966 rad pos: -82.5,-35.5 parent: 1 + - uid: 12563 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -46.5,-57.5 + parent: 1 + - uid: 12720 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,-19.5 + parent: 1 + - uid: 12721 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,-16.5 + parent: 1 - uid: 13927 components: - type: Transform @@ -92307,6 +92480,12 @@ entities: rot: -1.5707963267948966 rad pos: -43.5,-25.5 parent: 1 + - uid: 16635 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,-13.5 + parent: 1 - uid: 16647 components: - type: Transform @@ -92342,6 +92521,35 @@ entities: - type: Transform pos: -42.5,42.5 parent: 1 + - uid: 19249 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-12.5 + parent: 1 + - uid: 24591 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -58.5,-68.5 + parent: 1 + - uid: 24592 + components: + - type: Transform + pos: -13.5,-9.5 + parent: 1 + - uid: 24597 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -52.5,-68.5 + parent: 1 + - uid: 24598 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -52.5,-66.5 + parent: 1 - uid: 28671 components: - type: Transform @@ -92618,6 +92826,12 @@ entities: rot: 1.5707963267948966 rad pos: -40.5,21.5 parent: 1 + - uid: 30185 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -46.5,-49.5 + parent: 1 - uid: 32468 components: - type: Transform @@ -92660,35 +92874,41 @@ entities: rot: -1.5707963267948966 rad pos: -58.5,-71.5 parent: 1 - - uid: 32544 + - uid: 32542 components: - type: Transform rot: 1.5707963267948966 rad - pos: -58.5,-66.5 + pos: -48.5,-57.5 parent: 1 - - uid: 32545 + - uid: 32543 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,-16.5 + parent: 1 + - uid: 32544 components: - type: Transform rot: -1.5707963267948966 rad - pos: -48.5,-66.5 + pos: -22.5,-19.5 parent: 1 - - uid: 32562 + - uid: 32545 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -48.5,-58.5 + rot: -1.5707963267948966 rad + pos: -48.5,-66.5 parent: 1 - - uid: 32563 + - uid: 32546 components: - type: Transform rot: -1.5707963267948966 rad - pos: -44.5,-58.5 + pos: -28.5,-21.5 parent: 1 - - uid: 32575 + - uid: 32547 components: - type: Transform rot: 1.5707963267948966 rad - pos: -44.5,-49.5 + pos: -38.5,-21.5 parent: 1 - uid: 32576 components: @@ -92735,88 +92955,61 @@ entities: - uid: 32607 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -38.5,-22.5 - parent: 1 - - uid: 32608 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -27.5,-22.5 + rot: 3.141592653589793 rad + pos: -23.5,-9.5 parent: 1 - - uid: 32609 + - uid: 32615 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -27.5,-20.5 + pos: -21.5,8.5 parent: 1 - - uid: 32610 + - uid: 32618 components: - type: Transform rot: -1.5707963267948966 rad - pos: -22.5,-20.5 - parent: 1 - - uid: 32611 - components: - - type: Transform - pos: -22.5,-15.5 - parent: 1 - - uid: 32612 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,-15.5 + pos: -21.5,0.5 parent: 1 - - uid: 32613 + - uid: 32619 components: - type: Transform - pos: -23.5,-14.5 + rot: 1.5707963267948966 rad + pos: -23.5,0.5 parent: 1 - - uid: 32645 + - uid: 32640 components: - type: Transform rot: 1.5707963267948966 rad - pos: -24.5,-3.5 + pos: -25.5,18.5 parent: 1 - - uid: 32646 + - uid: 32641 components: - type: Transform rot: -1.5707963267948966 rad - pos: -23.5,-3.5 - parent: 1 - - uid: 32658 - components: - - type: Transform - pos: -23.5,8.5 + pos: -19.5,18.5 parent: 1 - - uid: 32659 + - uid: 32644 components: - type: Transform - rot: 3.141592653589793 rad - pos: -25.5,8.5 + rot: -1.5707963267948966 rad + pos: -29.5,5.5 parent: 1 - - uid: 32660 + - uid: 32646 components: - type: Transform rot: 1.5707963267948966 rad - pos: -25.5,17.5 + pos: -29.5,7.5 parent: 1 - - uid: 32678 + - uid: 32650 components: - type: Transform rot: -1.5707963267948966 rad - pos: -14.5,17.5 - parent: 1 - - uid: 32679 - components: - - type: Transform - pos: -14.5,22.5 + pos: -27.5,7.5 parent: 1 - - uid: 32690 + - uid: 32659 components: - type: Transform rot: 3.141592653589793 rad - pos: -19.5,22.5 + pos: -25.5,8.5 parent: 1 - uid: 32691 components: @@ -93416,11 +93609,23 @@ entities: - type: Transform pos: -27.5,10.5 parent: 1 - - uid: 42849 + - uid: 42852 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,-10.5 + parent: 1 + - uid: 42853 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,-11.5 + parent: 1 + - uid: 42861 components: - type: Transform rot: -1.5707963267948966 rad - pos: -27.5,5.5 + pos: -25.5,-10.5 parent: 1 - uid: 42862 components: @@ -93480,6 +93685,56 @@ entities: - type: Transform pos: 13.5,-12.5 parent: 1 + - uid: 43068 + components: + - type: Transform + pos: -25.5,-0.5 + parent: 1 + - uid: 43069 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,-0.5 + parent: 1 + - uid: 43070 + components: + - type: Transform + pos: -26.5,3.5 + parent: 1 + - uid: 43071 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,3.5 + parent: 1 + - uid: 43072 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,5.5 + parent: 1 + - uid: 43077 + components: + - type: Transform + pos: -24.5,5.5 + parent: 1 + - uid: 43078 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -24.5,1.5 + parent: 1 + - uid: 43079 + components: + - type: Transform + pos: -20.5,1.5 + parent: 1 + - uid: 43080 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,-11.5 + parent: 1 - proto: DisposalJunction entities: - uid: 2416 @@ -94128,12 +94383,6 @@ entities: rot: -1.5707963267948966 rad pos: 3.5,-34.5 parent: 1 - - uid: 6152 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -25.5,-12.5 - parent: 1 - uid: 8309 components: - type: Transform @@ -94168,11 +94417,65 @@ entities: rot: 1.5707963267948966 rad pos: -81.5,-35.5 parent: 1 + - uid: 12025 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-12.5 + parent: 1 + - uid: 12027 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -53.5,-68.5 + parent: 1 - uid: 12152 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -44.5,-49.5 + parent: 1 + - uid: 12562 components: - type: Transform rot: 3.141592653589793 rad - pos: -25.5,-13.5 + pos: -46.5,-52.5 + parent: 1 + - uid: 12564 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,-19.5 + parent: 1 + - uid: 12565 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -34.5,-21.5 + parent: 1 + - uid: 12719 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -36.5,-21.5 + parent: 1 + - uid: 12788 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,-16.5 + parent: 1 + - uid: 13170 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,-16.5 + parent: 1 + - uid: 13222 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-5.5 parent: 1 - uid: 13564 components: @@ -97541,12 +97844,35 @@ entities: rot: 3.141592653589793 rad pos: -33.5,-13.5 parent: 1 + - uid: 15165 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,-3.5 + parent: 1 + - uid: 15166 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,4.5 + parent: 1 + - uid: 15169 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,18.5 + parent: 1 - uid: 16110 components: - type: Transform rot: -1.5707963267948966 rad pos: -8.5,36.5 parent: 1 + - uid: 16196 + components: + - type: Transform + pos: -29.5,6.5 + parent: 1 - uid: 16305 components: - type: Transform @@ -97689,6 +98015,54 @@ entities: rot: -1.5707963267948966 rad pos: -70.5,-24.5 parent: 1 + - uid: 24593 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -54.5,-68.5 + parent: 1 + - uid: 24594 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -55.5,-68.5 + parent: 1 + - uid: 24595 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -56.5,-68.5 + parent: 1 + - uid: 24596 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -57.5,-68.5 + parent: 1 + - uid: 24599 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -45.5,-49.5 + parent: 1 + - uid: 24600 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -46.5,-50.5 + parent: 1 + - uid: 24601 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -46.5,-51.5 + parent: 1 + - uid: 24602 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -46.5,-53.5 + parent: 1 - uid: 24740 components: - type: Transform @@ -97700,6 +98074,18 @@ entities: - type: Transform pos: -74.5,-28.5 parent: 1 + - uid: 24931 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -46.5,-54.5 + parent: 1 + - uid: 24947 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -46.5,-55.5 + parent: 1 - uid: 25027 components: - type: Transform @@ -97715,6 +98101,12 @@ entities: - type: Transform pos: -56.5,31.5 parent: 1 + - uid: 28279 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -46.5,-56.5 + parent: 1 - uid: 28655 components: - type: Transform @@ -97751,6 +98143,12 @@ entities: - type: Transform pos: -42.5,33.5 parent: 1 + - uid: 28841 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -47.5,-57.5 + parent: 1 - uid: 28844 components: - type: Transform @@ -99597,6 +99995,11 @@ entities: rot: 3.141592653589793 rad pos: -39.5,36.5 parent: 1 + - uid: 29514 + components: + - type: Transform + pos: -48.5,-58.5 + parent: 1 - uid: 29647 components: - type: Transform @@ -99773,53 +100176,28 @@ entities: rot: 3.141592653589793 rad pos: -58.5,-69.5 parent: 1 - - uid: 32542 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -58.5,-68.5 - parent: 1 - - uid: 32543 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -58.5,-67.5 - parent: 1 - - uid: 32546 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -57.5,-66.5 - parent: 1 - - uid: 32547 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -56.5,-66.5 - parent: 1 - uid: 32548 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -55.5,-66.5 + pos: -38.5,-22.5 parent: 1 - uid: 32549 components: - type: Transform rot: -1.5707963267948966 rad - pos: -54.5,-66.5 + pos: -37.5,-21.5 parent: 1 - uid: 32550 components: - type: Transform rot: -1.5707963267948966 rad - pos: -53.5,-66.5 + pos: -35.5,-21.5 parent: 1 - uid: 32551 components: - type: Transform rot: -1.5707963267948966 rad - pos: -52.5,-66.5 + pos: -33.5,-21.5 parent: 1 - uid: 32552 components: @@ -99881,63 +100259,89 @@ entities: rot: 3.141592653589793 rad pos: -48.5,-59.5 parent: 1 + - uid: 32562 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,-21.5 + parent: 1 + - uid: 32563 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,-21.5 + parent: 1 - uid: 32564 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -47.5,-58.5 + rot: -1.5707963267948966 rad + pos: -30.5,-21.5 parent: 1 - uid: 32565 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -46.5,-58.5 + rot: -1.5707963267948966 rad + pos: -29.5,-21.5 parent: 1 - uid: 32566 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -45.5,-58.5 + rot: 3.141592653589793 rad + pos: -28.5,-20.5 parent: 1 - uid: 32567 components: - type: Transform - pos: -44.5,-57.5 + rot: 1.5707963267948966 rad + pos: -27.5,-19.5 parent: 1 - uid: 32568 components: - type: Transform - pos: -44.5,-56.5 + rot: 1.5707963267948966 rad + pos: -26.5,-19.5 parent: 1 - uid: 32569 components: - type: Transform - pos: -44.5,-55.5 + rot: 1.5707963267948966 rad + pos: -25.5,-19.5 parent: 1 - uid: 32570 components: - type: Transform - pos: -44.5,-54.5 + rot: 1.5707963267948966 rad + pos: -24.5,-19.5 parent: 1 - uid: 32571 components: - type: Transform - pos: -44.5,-53.5 + rot: -1.5707963267948966 rad + pos: -17.5,-16.5 parent: 1 - uid: 32572 components: - type: Transform - pos: -44.5,-52.5 + rot: -1.5707963267948966 rad + pos: -18.5,-16.5 parent: 1 - uid: 32573 components: - type: Transform - pos: -44.5,-51.5 + rot: -1.5707963267948966 rad + pos: -19.5,-16.5 parent: 1 - uid: 32574 components: - type: Transform - pos: -44.5,-50.5 + rot: -1.5707963267948966 rad + pos: -20.5,-16.5 + parent: 1 + - uid: 32575 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,-16.5 parent: 1 - uid: 32579 components: @@ -100074,118 +100478,101 @@ entities: - type: Transform pos: -38.5,-24.5 parent: 1 - - uid: 32615 + - uid: 32608 components: - type: Transform rot: 3.141592653589793 rad - pos: -22.5,-16.5 + pos: -23.5,-4.5 parent: 1 - - uid: 32616 + - uid: 32609 components: - type: Transform rot: 3.141592653589793 rad - pos: -22.5,-17.5 + pos: -21.5,5.5 parent: 1 - - uid: 32617 + - uid: 32610 components: - type: Transform rot: 3.141592653589793 rad - pos: -22.5,-18.5 + pos: -21.5,6.5 parent: 1 - - uid: 32618 + - uid: 32611 components: - type: Transform rot: 3.141592653589793 rad - pos: -22.5,-19.5 + pos: -21.5,7.5 parent: 1 - - uid: 32619 + - uid: 32612 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -23.5,-20.5 + rot: -1.5707963267948966 rad + pos: -22.5,8.5 parent: 1 - - uid: 32620 + - uid: 32613 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -24.5,-20.5 + rot: -1.5707963267948966 rad + pos: -23.5,8.5 parent: 1 - - uid: 32621 + - uid: 32616 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -25.5,-20.5 + rot: 3.141592653589793 rad + pos: -22.5,-17.5 parent: 1 - - uid: 32622 + - uid: 32617 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -26.5,-20.5 + rot: 3.141592653589793 rad + pos: -22.5,-18.5 parent: 1 - uid: 32623 components: - type: Transform - pos: -27.5,-21.5 + rot: 3.141592653589793 rad + pos: -19.5,22.5 parent: 1 - uid: 32624 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -28.5,-22.5 + rot: 3.141592653589793 rad + pos: -19.5,21.5 parent: 1 - uid: 32625 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -29.5,-22.5 + rot: 3.141592653589793 rad + pos: -19.5,20.5 parent: 1 - uid: 32626 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -30.5,-22.5 + rot: 3.141592653589793 rad + pos: -19.5,19.5 parent: 1 - uid: 32627 components: - type: Transform rot: -1.5707963267948966 rad - pos: -31.5,-22.5 - parent: 1 - - uid: 32628 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -32.5,-22.5 - parent: 1 - - uid: 32629 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -33.5,-22.5 + pos: -20.5,18.5 parent: 1 - uid: 32630 components: - type: Transform rot: -1.5707963267948966 rad - pos: -34.5,-22.5 + pos: -21.5,18.5 parent: 1 - uid: 32631 components: - type: Transform rot: -1.5707963267948966 rad - pos: -35.5,-22.5 + pos: -22.5,18.5 parent: 1 - uid: 32632 components: - type: Transform rot: -1.5707963267948966 rad - pos: -36.5,-22.5 - parent: 1 - - uid: 32633 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -37.5,-22.5 + pos: -23.5,18.5 parent: 1 - uid: 32634 components: @@ -100193,47 +100580,28 @@ entities: rot: 3.141592653589793 rad pos: -38.5,-23.5 parent: 1 - - uid: 32638 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,-10.5 - parent: 1 - uid: 32639 components: - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,-9.5 - parent: 1 - - uid: 32640 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,-8.5 - parent: 1 - - uid: 32641 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,-7.5 + pos: -25.5,17.5 parent: 1 - uid: 32642 components: - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,-6.5 + rot: 1.5707963267948966 rad + pos: -25.5,-2.5 parent: 1 - uid: 32643 components: - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,-5.5 + rot: -1.5707963267948966 rad + pos: -16.5,-16.5 parent: 1 - - uid: 32644 + - uid: 32645 components: - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,-4.5 + rot: -1.5707963267948966 rad + pos: -28.5,7.5 parent: 1 - uid: 32647 components: @@ -100253,53 +100621,17 @@ entities: rot: 3.141592653589793 rad pos: -23.5,-0.5 parent: 1 - - uid: 32650 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,0.5 - parent: 1 - uid: 32651 components: - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,1.5 - parent: 1 - - uid: 32652 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,2.5 - parent: 1 - - uid: 32653 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,3.5 - parent: 1 - - uid: 32654 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,4.5 - parent: 1 - - uid: 32655 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,5.5 - parent: 1 - - uid: 32656 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,6.5 + rot: 1.5707963267948966 rad + pos: -26.5,-2.5 parent: 1 - - uid: 32657 + - uid: 32660 components: - type: Transform rot: 3.141592653589793 rad - pos: -23.5,7.5 + pos: -25.5,-8.5 parent: 1 - uid: 32661 components: @@ -100347,113 +100679,65 @@ entities: - type: Transform pos: -25.5,16.5 parent: 1 - - uid: 32670 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -24.5,17.5 - parent: 1 - - uid: 32671 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,17.5 - parent: 1 - uid: 32672 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -22.5,17.5 - parent: 1 - - uid: 32673 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -21.5,17.5 - parent: 1 - - uid: 32674 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,17.5 + rot: 3.141592653589793 rad + pos: -23.5,-8.5 parent: 1 - uid: 32675 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -19.5,17.5 + rot: 1.5707963267948966 rad + pos: -24.5,-11.5 parent: 1 - uid: 32676 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -18.5,17.5 - parent: 1 - - uid: 32677 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -17.5,17.5 - parent: 1 - - uid: 32680 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,17.5 - parent: 1 - - uid: 32681 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -15.5,17.5 - parent: 1 - - uid: 32682 components: - type: Transform rot: 3.141592653589793 rad - pos: -14.5,18.5 + pos: -23.5,-6.5 parent: 1 - - uid: 32683 + - uid: 32677 components: - type: Transform rot: 3.141592653589793 rad - pos: -14.5,19.5 + pos: -23.5,-7.5 parent: 1 - - uid: 32684 + - uid: 32678 components: - type: Transform - rot: 3.141592653589793 rad - pos: -14.5,20.5 + rot: 1.5707963267948966 rad + pos: -21.5,-9.5 parent: 1 - - uid: 32685 + - uid: 32679 components: - type: Transform - rot: 3.141592653589793 rad - pos: -14.5,21.5 + rot: 1.5707963267948966 rad + pos: -19.5,-9.5 parent: 1 - - uid: 32686 + - uid: 32680 components: - type: Transform rot: 1.5707963267948966 rad - pos: -15.5,22.5 + pos: -22.5,-9.5 parent: 1 - - uid: 32687 + - uid: 32681 components: - type: Transform rot: 1.5707963267948966 rad - pos: -16.5,22.5 + pos: -18.5,-9.5 parent: 1 - - uid: 32688 + - uid: 32682 components: - type: Transform rot: 1.5707963267948966 rad - pos: -17.5,22.5 + pos: -20.5,-9.5 parent: 1 - uid: 32689 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -18.5,22.5 + rot: 3.141592653589793 rad + pos: -25.5,-9.5 parent: 1 - uid: 32694 components: @@ -102477,12 +102761,6 @@ entities: rot: 3.141592653589793 rad pos: -39.5,21.5 parent: 1 - - uid: 38461 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -26.5,-2.5 - parent: 1 - uid: 38462 components: - type: Transform @@ -102911,12 +103189,6 @@ entities: rot: 1.5707963267948966 rad pos: -39.5,21.5 parent: 1 - - uid: 41407 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -24.5,-14.5 - parent: 1 - uid: 41408 components: - type: Transform @@ -104970,30 +105242,6 @@ entities: - type: Transform pos: -32.5,4.5 parent: 1 - - uid: 42850 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -29.5,5.5 - parent: 1 - - uid: 42851 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -28.5,5.5 - parent: 1 - - uid: 42852 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -27.5,6.5 - parent: 1 - - uid: 42853 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -27.5,7.5 - parent: 1 - uid: 42854 components: - type: Transform @@ -105022,11 +105270,29 @@ entities: - type: Transform pos: -29.5,12.5 parent: 1 + - uid: 42864 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-7.5 + parent: 1 + - uid: 42865 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-6.5 + parent: 1 - uid: 42866 components: - type: Transform pos: 10.5,-24.5 parent: 1 + - uid: 42867 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-5.5 + parent: 1 - uid: 42868 components: - type: Transform @@ -105333,6 +105599,283 @@ entities: rot: 3.141592653589793 rad pos: 9.5,7.5 parent: 1 + - uid: 43064 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-4.5 + parent: 1 + - uid: 43065 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-2.5 + parent: 1 + - uid: 43066 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-1.5 + parent: 1 + - uid: 43067 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -25.5,-3.5 + parent: 1 + - uid: 43073 + components: + - type: Transform + pos: -27.5,4.5 + parent: 1 + - uid: 43074 + components: + - type: Transform + pos: -26.5,2.5 + parent: 1 + - uid: 43075 + components: + - type: Transform + pos: -26.5,1.5 + parent: 1 + - uid: 43076 + components: + - type: Transform + pos: -26.5,0.5 + parent: 1 + - uid: 43081 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,-11.5 + parent: 1 + - uid: 43082 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,-11.5 + parent: 1 + - uid: 43083 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-10.5 + parent: 1 + - uid: 43084 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-9.5 + parent: 1 + - uid: 43085 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-8.5 + parent: 1 + - uid: 43086 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-7.5 + parent: 1 + - uid: 43087 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-6.5 + parent: 1 + - uid: 43088 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-5.5 + parent: 1 + - uid: 43089 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-4.5 + parent: 1 + - uid: 43090 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-3.5 + parent: 1 + - uid: 43091 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-2.5 + parent: 1 + - uid: 43092 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-1.5 + parent: 1 + - uid: 43093 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,-0.5 + parent: 1 + - uid: 43094 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,0.5 + parent: 1 + - uid: 43095 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,1.5 + parent: 1 + - uid: 43096 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,1.5 + parent: 1 + - uid: 43097 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,1.5 + parent: 1 + - uid: 43098 + components: + - type: Transform + pos: -24.5,2.5 + parent: 1 + - uid: 43099 + components: + - type: Transform + pos: -24.5,3.5 + parent: 1 + - uid: 43100 + components: + - type: Transform + pos: -24.5,4.5 + parent: 1 + - uid: 43101 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,-9.5 + parent: 1 + - uid: 43102 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,-9.5 + parent: 1 + - uid: 43103 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,-9.5 + parent: 1 + - uid: 43104 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,-9.5 + parent: 1 + - uid: 43105 + components: + - type: Transform + pos: -13.5,-10.5 + parent: 1 + - uid: 43106 + components: + - type: Transform + pos: -13.5,-11.5 + parent: 1 + - uid: 43107 + components: + - type: Transform + pos: -13.5,-12.5 + parent: 1 + - uid: 43108 + components: + - type: Transform + pos: -13.5,-13.5 + parent: 1 + - uid: 43109 + components: + - type: Transform + pos: -13.5,-14.5 + parent: 1 + - uid: 43110 + components: + - type: Transform + pos: -13.5,-15.5 + parent: 1 + - uid: 43111 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,3.5 + parent: 1 + - uid: 43112 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,2.5 + parent: 1 + - uid: 43113 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,1.5 + parent: 1 + - uid: 43114 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,0.5 + parent: 1 +- proto: DisposalRouterFlipped + entities: + - uid: 12023 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,-11.5 + parent: 1 + - type: DisposalRouter + tags: + - Common Hydroponics + - uid: 12024 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,-11.5 + parent: 1 + - type: DisposalRouter + tags: + - Prison Hydroponics + - uid: 40966 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,5.5 + parent: 1 + - type: DisposalRouter + tags: + - Common Kitchen + - uid: 42859 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,5.5 + parent: 1 + - type: DisposalRouter + tags: + - Prison Kitchen - proto: DisposalTagger entities: - uid: 4552 @@ -105604,12 +106147,6 @@ entities: - type: Transform pos: -28.5,-11.5 parent: 1 - - uid: 28841 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -25.5,-2.5 - parent: 1 - uid: 28856 components: - type: Transform @@ -105729,29 +106266,6 @@ entities: parent: 1 - proto: DisposalTrunk entities: - - uid: 3061 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -25.5,6.5 - parent: 1 - - uid: 3082 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -26.5,6.5 - parent: 1 - - uid: 3117 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,-13.5 - parent: 1 - - uid: 3281 - components: - - type: Transform - pos: -24.5,-12.5 - parent: 1 - uid: 6621 components: - type: Transform @@ -106169,6 +106683,28 @@ entities: rot: 3.141592653589793 rad pos: 22.5,-61.5 parent: 1 + - uid: 32652 + components: + - type: Transform + pos: -26.5,6.5 + parent: 1 + - uid: 32653 + components: + - type: Transform + pos: -25.5,6.5 + parent: 1 + - uid: 32654 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,-13.5 + parent: 1 + - uid: 32655 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,-12.5 + parent: 1 - uid: 32981 components: - type: Transform @@ -107179,6 +107715,18 @@ entities: - type: Transform pos: -87.573425,-17.312595 parent: 1 +- proto: DrinkCreamCartonXL + entities: + - uid: 43126 + components: + - type: Transform + pos: -22.355007,-23.196678 + parent: 1 + - uid: 43127 + components: + - type: Transform + pos: -22.636257,-23.207102 + parent: 1 - proto: DrinkDoctorsDelightGlass entities: - uid: 9692 @@ -107363,13 +107911,6 @@ entities: - type: Transform pos: -101.65036,-1.0470593 parent: 1 -- proto: DrinkMilkCarton - entities: - - uid: 41989 - components: - - type: Transform - pos: -24.361698,9.772873 - parent: 1 - proto: DrinkMugBlack entities: - uid: 30366 @@ -107550,13 +108091,6 @@ entities: - type: Transform pos: -58.353912,-80.77482 parent: 1 -- proto: DrinkOatMilkCarton - entities: - - uid: 9639 - components: - - type: Transform - pos: -24.46927,9.605224 - parent: 1 - proto: DrinkPatronBottleFull entities: - uid: 21261 @@ -107637,6 +108171,11 @@ entities: - type: Transform pos: -6.8075304,-57.165375 parent: 1 + - uid: 43128 + components: + - type: Transform + pos: -22.782091,-23.363462 + parent: 1 - proto: DrinkShinyFlask entities: - uid: 17539 @@ -108994,6 +109533,11 @@ entities: - type: PointLight enabled: True - type: ActiveEmergencyLight + - uid: 32658 + components: + - type: Transform + pos: -127.5,-33.5 + parent: 1 - uid: 33772 components: - type: Transform @@ -109206,11 +109750,6 @@ entities: rot: 3.141592653589793 rad pos: -14.5,-56.5 parent: 1 - - uid: 41196 - components: - - type: Transform - pos: -120.5,-32.5 - parent: 1 - uid: 41197 components: - type: Transform @@ -109328,11 +109867,6 @@ entities: rot: -1.5707963267948966 rad pos: -109.5,-38.5 parent: 1 - - uid: 41217 - components: - - type: Transform - pos: -127.5,-33.5 - parent: 1 - uid: 41218 components: - type: Transform @@ -109395,6 +109929,11 @@ entities: rot: 3.141592653589793 rad pos: -54.5,35.5 parent: 1 + - uid: 41605 + components: + - type: Transform + pos: -120.5,-32.5 + parent: 1 - uid: 42997 components: - type: Transform @@ -112176,9 +112715,7 @@ entities: devices: - 41606 - 41506 - - 41605 - 41604 - - 41603 - 41600 - 41607 - 41608 @@ -112208,9 +112745,7 @@ entities: - type: DeviceList devices: - 41503 - - 41605 - 41604 - - 41603 - uid: 41620 components: - type: Transform @@ -115955,17 +116490,6 @@ entities: - 7586 - 6689 - 29917 - - uid: 41603 - components: - - type: Transform - pos: -122.5,-30.5 - parent: 1 - - type: DeviceNetwork - deviceLists: - - 41597 - - 41596 - - 41602 - - 41601 - uid: 41604 components: - type: Transform @@ -115977,17 +116501,6 @@ entities: - 41596 - 41602 - 41601 - - uid: 41605 - components: - - type: Transform - pos: -122.5,-28.5 - parent: 1 - - type: DeviceNetwork - deviceLists: - - 41597 - - 41596 - - 41602 - - 41601 - uid: 41611 components: - type: Transform @@ -117016,13 +117529,6 @@ entities: parent: 1 - type: Fixtures fixtures: {} - - uid: 22961 - components: - - type: Transform - pos: 2.5,-38.5 - parent: 1 - - type: Fixtures - fixtures: {} - uid: 23746 components: - type: Transform @@ -117059,6 +117565,13 @@ entities: parent: 1 - type: Fixtures fixtures: {} + - uid: 43179 + components: + - type: Transform + pos: 0.5,-38.5 + parent: 1 + - type: Fixtures + fixtures: {} - proto: FloorTileItemBar entities: - uid: 29954 @@ -118765,23 +119278,6 @@ entities: - type: Transform pos: -24.36231,11.578384 parent: 1 -- proto: FoodCarrot - entities: - - uid: 12563 - components: - - type: Transform - pos: -26.355158,-6.3291545 - parent: 1 - - uid: 12564 - components: - - type: Transform - pos: -26.511408,-6.2978826 - parent: 1 - - uid: 12565 - components: - - type: Transform - pos: -26.563492,-6.2353396 - parent: 1 - proto: FoodCheese entities: - uid: 12453 @@ -118813,6 +119309,12 @@ entities: - type: Transform pos: 19.331057,-35.095882 parent: 1 + - uid: 43135 + components: + - type: Transform + parent: 43134 + - type: Physics + canCollide: False - proto: FoodCondimentBottleKetchup entities: - uid: 16231 @@ -118827,6 +119329,20 @@ entities: - type: Transform pos: -36.542675,-7.269909 parent: 1 +- proto: FoodCondimentPacketFrostoil + entities: + - uid: 43145 + components: + - type: Transform + parent: 43144 + - type: Physics + canCollide: False + - uid: 43146 + components: + - type: Transform + parent: 43144 + - type: Physics + canCollide: False - proto: FoodCondimentPacketHorseradish entities: - uid: 12437 @@ -118852,6 +119368,14 @@ entities: rot: 3.141592653589793 rad pos: 19.826754,-12.501836 parent: 1 +- proto: FoodCondimentPacketPepper + entities: + - uid: 43147 + components: + - type: Transform + parent: 43144 + - type: Physics + canCollide: False - proto: FoodContainerEgg entities: - uid: 1853 @@ -118899,6 +119423,22 @@ entities: rot: 3.141592653589793 rad pos: -69.73008,2.5374973 parent: 1 +- proto: FoodDonkpocketPizza + entities: + - uid: 43137 + components: + - type: Transform + parent: 43134 + - type: Physics + canCollide: False +- proto: FoodDonkpocketTeriyaki + entities: + - uid: 43136 + components: + - type: Transform + parent: 43134 + - type: Physics + canCollide: False - proto: FoodDonutJelly entities: - uid: 2912 @@ -119019,6 +119559,19 @@ entities: - type: Transform pos: -22.999104,-24.087002 parent: 1 +- proto: FoodKebabSkewer + entities: + - uid: 23691 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 68.86674,0.631893 + parent: 1 + - uid: 34157 + components: + - type: Transform + pos: -92.34517,-42.339275 + parent: 1 - proto: FoodLollipop entities: - uid: 4599 @@ -119167,38 +119720,6 @@ entities: - type: Transform pos: -39.45363,-67.880325 parent: 1 -- proto: FoodMeat - entities: - - uid: 9640 - components: - - type: Transform - pos: -23.522871,9.588505 - parent: 1 - - uid: 9641 - components: - - type: Transform - pos: -23.522871,9.588505 - parent: 1 - - uid: 9642 - components: - - type: Transform - pos: -23.522871,9.588505 - parent: 1 -- proto: FoodMeatLizardtailKebab - entities: - - uid: 23691 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 68.86674,0.631893 - parent: 1 -- proto: FoodMeatRatdoubleKebab - entities: - - uid: 34157 - components: - - type: Transform - pos: -92.34517,-42.339275 - parent: 1 - proto: FoodMeatSalami entities: - uid: 29515 @@ -119468,31 +119989,6 @@ entities: parent: 1 - proto: FoodPotato entities: - - uid: 907 - components: - - type: Transform - pos: -27.375992,-8.299273 - parent: 1 - - uid: 908 - components: - - type: Transform - pos: -27.365574,-8.45563 - parent: 1 - - uid: 929 - components: - - type: Transform - pos: -27.521824,-8.278425 - parent: 1 - - uid: 930 - components: - - type: Transform - pos: -27.490574,-8.486902 - parent: 1 - - uid: 12562 - components: - - type: Transform - pos: -27.594742,-8.445207 - parent: 1 - uid: 41390 components: - type: Transform @@ -119586,14 +120082,7 @@ entities: - type: Transform pos: -7.4966226,26.602148 parent: 1 -- proto: FoodTacoBeef - entities: - - uid: 36858 - components: - - type: Transform - pos: -108.51099,-15.411085 - parent: 1 -- proto: FoodTacoChickenSupreme +- proto: FoodTacoShell entities: - uid: 3327 components: @@ -119605,6 +120094,11 @@ entities: - type: Transform pos: -113.362076,-54.217827 parent: 1 + - uid: 36858 + components: + - type: Transform + pos: -108.51099,-15.411085 + parent: 1 - proto: FoodTinBeans entities: - uid: 31244 @@ -151449,14 +151943,6 @@ entities: parent: 1 - type: AtmosPipeColor color: '#3399FFFF' - - uid: 28279 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 8.5,-24.5 - parent: 1 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 28281 components: - type: Transform @@ -169272,12 +169758,6 @@ entities: rot: 3.141592653589793 rad pos: 1.5,-32.5 parent: 1 - - uid: 28508 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 2.5,-37.5 - parent: 1 - uid: 28703 components: - type: Transform @@ -182081,11 +182561,6 @@ entities: - type: Transform pos: 31.5,-43.5 parent: 1 - - uid: 10657 - components: - - type: Transform - pos: 59.5,-52.5 - parent: 1 - uid: 10658 components: - type: Transform @@ -183546,6 +184021,11 @@ entities: - type: Transform pos: -73.5,-16.5 parent: 1 + - uid: 15092 + components: + - type: Transform + pos: 59.5,-52.5 + parent: 1 - uid: 15100 components: - type: Transform @@ -186396,6 +186876,16 @@ entities: - type: Transform pos: -121.5,-50.5 parent: 1 + - uid: 32670 + components: + - type: Transform + pos: -122.5,-28.5 + parent: 1 + - uid: 32671 + components: + - type: Transform + pos: -122.5,-30.5 + parent: 1 - uid: 32918 components: - type: Transform @@ -189246,6 +189736,11 @@ entities: - type: Transform pos: 43.5,-0.5 parent: 1 + - uid: 41739 + components: + - type: Transform + pos: -122.5,-27.5 + parent: 1 - uid: 41869 components: - type: Transform @@ -190367,10 +190862,10 @@ entities: - type: Transform pos: 4.504354,-36.50383 parent: 1 - - uid: 4778 + - uid: 4754 components: - type: Transform - pos: -62.519745,-24.26304 + pos: -62.48309,-23.241377 parent: 1 - uid: 5581 components: @@ -190387,11 +190882,6 @@ entities: - type: Transform pos: -49.1553,32.613728 parent: 1 - - uid: 7584 - components: - - type: Transform - pos: -65.61705,23.486242 - parent: 1 - uid: 9044 components: - type: Transform @@ -190407,6 +190897,11 @@ entities: - type: Transform pos: -62.701748,-31.470161 parent: 1 + - uid: 43167 + components: + - type: Transform + pos: -65.534615,23.29667 + parent: 1 - proto: HappyHonk entities: - uid: 28661 @@ -190539,18 +191034,17 @@ entities: rot: 3.141592653589793 rad pos: 7.5583315,-10.995381 parent: 1 - - uid: 34876 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 0.45170987,-20.482744 - parent: 1 - uid: 34880 components: - type: Transform rot: 1.5707963267948966 rad pos: -49.58078,-41.406494 parent: 1 + - uid: 39650 + components: + - type: Transform + pos: -0.44299912,-20.356264 + parent: 1 - proto: HospitalCurtains entities: - uid: 4885 @@ -190903,11 +191397,6 @@ entities: parent: 1 - proto: InflatableDoor entities: - - uid: 13222 - components: - - type: Transform - pos: -122.5,-29.5 - parent: 1 - uid: 15724 components: - type: Transform @@ -190947,11 +191436,6 @@ entities: parent: 1 - proto: InflatableWall entities: - - uid: 8967 - components: - - type: Transform - pos: -122.5,-30.5 - parent: 1 - uid: 15705 components: - type: Transform @@ -190968,11 +191452,6 @@ entities: - type: Transform pos: -81.5,-70.5 parent: 1 - - uid: 16196 - components: - - type: Transform - pos: -122.5,-28.5 - parent: 1 - uid: 33893 components: - type: Transform @@ -191786,10 +192265,10 @@ entities: - type: Transform pos: -24.5,3.5 parent: 1 - - uid: 4754 + - uid: 4778 components: - type: Transform - pos: -62.5,-23.5 + pos: -63.5,-21.5 parent: 1 - uid: 9620 components: @@ -192154,6 +192633,20 @@ entities: - type: Transform pos: -9.708311,-58.46945 parent: 1 +- proto: LockableButtonSecurity + entities: + - uid: 43133 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 23.5,-11.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 43132: + - Pressed: Toggle + 43131: + - Pressed: Toggle - proto: LockerAtmosphericsFilledHardsuit entities: - uid: 6008 @@ -192201,6 +192694,18 @@ entities: - type: Transform pos: -55.5,-1.5 parent: 1 +- proto: LockerBotanistFilled + entities: + - uid: 38461 + components: + - type: Transform + pos: -27.5,-15.5 + parent: 1 + - uid: 43130 + components: + - type: Transform + pos: -27.5,-14.5 + parent: 1 - proto: LockerBrigmedicFilledHardsuit entities: - uid: 15212 @@ -193203,6 +193708,14 @@ entities: - type: Transform pos: -53.5,-75.5 parent: 1 +- proto: LootSpawnerMaterialsSurplus + entities: + - uid: 43148 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 51.5,-50.5 + parent: 1 - proto: Machete entities: - uid: 3223 @@ -193275,15 +193788,10 @@ entities: parent: 1 - proto: MachineCentrifuge entities: - - uid: 1742 - components: - - type: Transform - pos: -63.5,-21.5 - parent: 1 - - uid: 28174 + - uid: 2920 components: - type: Transform - pos: -63.5,-31.5 + pos: -62.5,-24.5 parent: 1 - uid: 28178 components: @@ -193314,10 +193822,15 @@ entities: - type: Transform pos: -62.5,-34.5 parent: 1 - - uid: 10898 + - uid: 10876 components: - type: Transform - pos: 60.5,-45.5 + pos: 58.5,-46.5 + parent: 1 + - uid: 10896 + components: + - type: Transform + pos: 60.5,-48.5 parent: 1 - uid: 10899 components: @@ -193329,11 +193842,6 @@ entities: - type: Transform pos: 60.5,-47.5 parent: 1 - - uid: 10901 - components: - - type: Transform - pos: 58.5,-45.5 - parent: 1 - uid: 10903 components: - type: Transform @@ -194155,13 +194663,6 @@ entities: - type: Transform pos: -68.354355,23.527685 parent: 1 -- proto: MaterialReclaimer - entities: - - uid: 6629 - components: - - type: Transform - pos: -11.5,23.5 - parent: 1 - proto: MaterialWoodPlank entities: - uid: 4234 @@ -194353,11 +194854,6 @@ entities: - type: Transform pos: -69.49619,-22.27755 parent: 1 - - uid: 13955 - components: - - type: Transform - pos: -65.6483,23.840654 - parent: 1 - uid: 28517 components: - type: Transform @@ -194368,6 +194864,11 @@ entities: - type: Transform pos: -108.11858,2.6922636 parent: 1 + - uid: 43166 + components: + - type: Transform + pos: -68.58669,23.724052 + parent: 1 - proto: MedkitBruteFilled entities: - uid: 29219 @@ -194674,6 +195175,11 @@ entities: - type: Transform pos: -81.5,-4.5 parent: 1 + - uid: 14971 + components: + - type: Transform + pos: -20.5,34.5 + parent: 1 - uid: 30717 components: - type: Transform @@ -197610,6 +198116,12 @@ entities: - type: Transform pos: -14.826958,23.972439 parent: 1 + - uid: 43139 + components: + - type: Transform + parent: 43138 + - type: Physics + canCollide: False - proto: Multitool entities: - uid: 2894 @@ -197887,11 +198399,6 @@ entities: parent: 1 - proto: OperatingTable entities: - - uid: 2920 - components: - - type: Transform - pos: 1.5,-38.5 - parent: 1 - uid: 3162 components: - type: Transform @@ -197917,6 +198424,11 @@ entities: - type: Transform pos: -76.5,-67.5 parent: 1 + - uid: 28174 + components: + - type: Transform + pos: 0.5,-38.5 + parent: 1 - proto: Oracle entities: - uid: 6936 @@ -203978,18 +204490,19 @@ entities: parent: 1 - proto: ParticleAcceleratorControlBox entities: - - uid: 10876 + - uid: 10663 components: - type: Transform - pos: 58.5,-47.5 + rot: 3.141592653589793 rad + pos: 58.5,-48.5 parent: 1 - proto: ParticleAcceleratorFuelChamberUnfinished entities: - - uid: 10877 + - uid: 15204 components: - type: Transform rot: 1.5707963267948966 rad - pos: 58.5,-46.5 + pos: 58.5,-47.5 parent: 1 - proto: PartRodMetal entities: @@ -204347,6 +204860,12 @@ entities: - type: Transform pos: -17.577652,-17.448551 parent: 1 + - uid: 43140 + components: + - type: Transform + parent: 43138 + - type: Physics + canCollide: False - proto: PhoneInstrument entities: - uid: 31064 @@ -204875,11 +205394,6 @@ entities: - type: Transform pos: 22.5,-3.5 parent: 1 - - uid: 6636 - components: - - type: Transform - pos: -5.5,23.5 - parent: 1 - uid: 9982 components: - type: Transform @@ -204972,6 +205486,12 @@ entities: - type: Transform pos: 3.5,34.5 parent: 1 + - uid: 32621 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,23.5 + parent: 1 - proto: PlasticFlapsOpaque entities: - uid: 15284 @@ -205942,11 +206462,6 @@ entities: - type: Transform pos: -108.5,-35.5 parent: 1 - - uid: 15267 - components: - - type: Transform - pos: 60.5,-56.5 - parent: 1 - uid: 15855 components: - type: Transform @@ -205962,6 +206477,11 @@ entities: - type: Transform pos: -110.5,-19.5 parent: 1 + - uid: 43154 + components: + - type: Transform + pos: 60.5,-57.5 + parent: 1 - proto: PortableGeneratorSuperPacman entities: - uid: 8277 @@ -207191,10 +207711,10 @@ entities: parent: 1 - proto: PowerCellRecharger entities: - - uid: 4780 + - uid: 641 components: - type: Transform - pos: -65.5,22.5 + pos: -65.5,23.5 parent: 1 - uid: 5832 components: @@ -207229,12 +207749,6 @@ entities: rot: 1.5707963267948966 rad pos: 61.5,-43.5 parent: 1 - - uid: 10916 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 61.5,-49.5 - parent: 1 - uid: 11298 components: - type: Transform @@ -207325,17 +207839,16 @@ entities: - type: Transform pos: 7.5,-11.5 parent: 1 - - uid: 18852 + - uid: 17689 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -112.5,-40.5 + pos: 61.5,-50.5 parent: 1 - - uid: 20327 + - uid: 18852 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -95.5,-39.5 + rot: -1.5707963267948966 rad + pos: -112.5,-40.5 parent: 1 - uid: 20366 components: @@ -208351,14 +208864,6 @@ entities: parent: 1 - type: ApcPowerReceiver powerLoad: 0 - - uid: 13508 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -53.5,0.5 - parent: 1 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 13510 components: - type: Transform @@ -210072,6 +210577,12 @@ entities: rot: 1.5707963267948966 rad pos: -95.5,15.5 parent: 1 + - uid: 43178 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -53.5,-0.5 + parent: 1 - proto: PoweredLightBlueInterior entities: - uid: 10066 @@ -210080,6 +210591,11 @@ entities: rot: 1.5707963267948966 rad pos: 41.5,-2.5 parent: 1 + - uid: 15167 + components: + - type: Transform + pos: -128.5,-33.5 + parent: 1 - uid: 15279 components: - type: Transform @@ -210112,6 +210628,11 @@ entities: parent: 1 - type: ApcPowerReceiver powerLoad: 0 + - uid: 32690 + components: + - type: Transform + pos: -119.5,-32.5 + parent: 1 - uid: 39809 components: - type: Transform @@ -210148,11 +210669,6 @@ entities: rot: -1.5707963267948966 rad pos: 43.5,35.5 parent: 1 - - uid: 40966 - components: - - type: Transform - pos: -128.5,-33.5 - parent: 1 - uid: 40970 components: - type: Transform @@ -210177,11 +210693,6 @@ entities: rot: 3.141592653589793 rad pos: -119.5,-43.5 parent: 1 - - uid: 41073 - components: - - type: Transform - pos: -119.5,-32.5 - parent: 1 - proto: PoweredLightColoredBlack entities: - uid: 16388 @@ -210596,15 +211107,15 @@ entities: - type: Transform pos: -111.5,6.5 parent: 1 - - uid: 15203 + - uid: 15259 components: - type: Transform - pos: 1.5,21.5 + pos: -2.5,20.5 parent: 1 - - uid: 15204 + - uid: 15267 components: - type: Transform - pos: -2.5,21.5 + pos: 1.5,20.5 parent: 1 - uid: 15900 components: @@ -211224,12 +211735,6 @@ entities: rot: 3.141592653589793 rad pos: 58.5,-40.5 parent: 1 - - uid: 41017 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 58.5,-54.5 - parent: 1 - uid: 41033 components: - type: Transform @@ -212746,6 +213251,11 @@ entities: - type: Transform pos: -110.5,-28.5 parent: 1 + - uid: 9036 + components: + - type: Transform + pos: 61.5,-53.5 + parent: 1 - uid: 9049 components: - type: Transform @@ -213682,65 +214192,17 @@ entities: - type: Transform pos: -44.5,-3.5 parent: 1 - - uid: 2090 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 48.5,-38.5 - parent: 1 - uid: 2101 components: - type: Transform rot: 3.141592653589793 rad pos: -32.5,21.5 parent: 1 - - uid: 2253 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 51.5,-38.5 - parent: 1 - - uid: 2289 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 45.5,-38.5 - parent: 1 - uid: 2290 components: - type: Transform rot: 3.141592653589793 rad - pos: 46.5,-38.5 - parent: 1 - - uid: 2300 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 47.5,-38.5 - parent: 1 - - uid: 2301 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 50.5,-38.5 - parent: 1 - - uid: 2304 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 49.5,-38.5 - parent: 1 - - uid: 2321 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 53.5,-38.5 - parent: 1 - - uid: 2325 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 52.5,-38.5 + pos: 45.5,-38.5 parent: 1 - uid: 5384 components: @@ -214015,16 +214477,6 @@ entities: rot: 3.141592653589793 rad pos: -1.5,21.5 parent: 1 - - uid: 12024 - components: - - type: Transform - pos: 15.5,-15.5 - parent: 1 - - uid: 12025 - components: - - type: Transform - pos: 14.5,-15.5 - parent: 1 - uid: 12330 components: - type: Transform @@ -214444,104 +214896,104 @@ entities: pos: 22.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42326 components: - type: Transform pos: 23.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42327 components: - type: Transform pos: 24.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42328 components: - type: Transform pos: 25.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42329 components: - type: Transform pos: 26.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42330 components: - type: Transform pos: 27.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42331 components: - type: Transform pos: 28.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42332 components: - type: Transform pos: 29.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42333 components: - type: Transform pos: 30.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42334 components: - type: Transform pos: 31.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42335 components: - type: Transform pos: 32.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42336 components: - type: Transform pos: 33.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42337 components: - type: Transform pos: 34.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42338 components: - type: Transform @@ -214549,8 +215001,8 @@ entities: pos: 22.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42339 components: - type: Transform @@ -214558,8 +215010,8 @@ entities: pos: 23.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42340 components: - type: Transform @@ -214567,8 +215019,8 @@ entities: pos: 24.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42341 components: - type: Transform @@ -214576,8 +215028,8 @@ entities: pos: 25.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42342 components: - type: Transform @@ -214585,8 +215037,8 @@ entities: pos: 26.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42343 components: - type: Transform @@ -214594,8 +215046,8 @@ entities: pos: 27.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42344 components: - type: Transform @@ -214603,8 +215055,8 @@ entities: pos: 28.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42345 components: - type: Transform @@ -214612,8 +215064,8 @@ entities: pos: 29.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42346 components: - type: Transform @@ -214621,8 +215073,8 @@ entities: pos: 30.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42347 components: - type: Transform @@ -214630,8 +215082,8 @@ entities: pos: 31.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42348 components: - type: Transform @@ -214639,8 +215091,8 @@ entities: pos: 32.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42349 components: - type: Transform @@ -214648,8 +215100,8 @@ entities: pos: 33.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable - uid: 42350 components: - type: Transform @@ -214657,8 +215109,56 @@ entities: pos: 34.5,1.5 parent: 1 missingComponents: - - Climbable - Construction + - Climbable + - uid: 43157 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 47.5,-38.5 + parent: 1 + - uid: 43159 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,-38.5 + parent: 1 + - uid: 43160 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,-38.5 + parent: 1 + - uid: 43161 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,-38.5 + parent: 1 + - uid: 43162 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 49.5,-38.5 + parent: 1 + - uid: 43163 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 48.5,-38.5 + parent: 1 + - uid: 43164 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,-38.5 + parent: 1 + - uid: 43165 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-38.5 + parent: 1 - proto: RailingCorner entities: - uid: 1477 @@ -215548,6 +216048,13 @@ entities: - type: Transform pos: -120.5,-48.5 parent: 1 +- proto: RandomIngredient + entities: + - uid: 32656 + components: + - type: Transform + pos: -24.490547,9.58144 + parent: 1 - proto: RandomInstruments entities: - uid: 8574 @@ -215749,6 +216256,14 @@ entities: - type: Transform pos: 42.5,34.5 parent: 1 +- proto: RandomMeat + entities: + - uid: 32657 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.480131,9.52932 + parent: 1 - proto: RandomPainting entities: - uid: 11681 @@ -216273,6 +216788,16 @@ entities: - type: Transform pos: -26.5,-8.5 parent: 1 + - uid: 32673 + components: + - type: Transform + pos: -27.5,-8.5 + parent: 1 + - uid: 32674 + components: + - type: Transform + pos: -26.5,-6.5 + parent: 1 - uid: 37380 components: - type: Transform @@ -221683,6 +222208,55 @@ entities: - type: Transform pos: 63.5,33.5 parent: 1 +- proto: RandomSmokables + entities: + - uid: 10898 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -87.71364,-17.604465 + parent: 1 + - uid: 10901 + components: + - type: Transform + pos: -88.303764,-46.31555 + parent: 1 + - uid: 10916 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.687157,-15.542501 + parent: 1 + - uid: 10918 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 3.2677426,-49.5005 + parent: 1 + - uid: 10919 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.336027,17.71119 + parent: 1 + - uid: 10920 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -92.30878,25.097778 + parent: 1 + - uid: 14247 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.660622,-73.661354 + parent: 1 + - uid: 14248 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -75.732475,-38.726807 + parent: 1 - proto: RandomSnacks entities: - uid: 3683 @@ -222238,17 +222812,23 @@ entities: parent: 1 - proto: Recycler entities: - - uid: 4394 + - uid: 12022 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 15.5,-16.5 + rot: 3.141592653589793 rad + pos: -6.5,49.5 parent: 1 - - uid: 6643 + - uid: 15168 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -8.5,23.5 + rot: -1.5707963267948966 rad + pos: -11.5,23.5 + parent: 1 + - uid: 41407 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 14.5,-16.5 parent: 1 - proto: ReinforcedGirder entities: @@ -226791,16 +227371,6 @@ entities: - type: Transform pos: 31.5,-43.5 parent: 1 - - uid: 10662 - components: - - type: Transform - pos: 59.5,-52.5 - parent: 1 - - uid: 10663 - components: - - type: Transform - pos: 60.5,-52.5 - parent: 1 - uid: 10664 components: - type: Transform @@ -227786,6 +228356,11 @@ entities: - type: Transform pos: 30.5,-24.5 parent: 1 + - uid: 14966 + components: + - type: Transform + pos: 59.5,-52.5 + parent: 1 - uid: 15074 components: - type: Transform @@ -227806,6 +228381,11 @@ entities: - type: Transform pos: -95.5,26.5 parent: 1 + - uid: 15249 + components: + - type: Transform + pos: 60.5,-52.5 + parent: 1 - uid: 15516 components: - type: Transform @@ -228926,6 +229506,16 @@ entities: - type: Transform pos: -134.5,-4.5 parent: 1 + - uid: 32685 + components: + - type: Transform + pos: -122.5,-27.5 + parent: 1 + - uid: 32686 + components: + - type: Transform + pos: -122.5,-30.5 + parent: 1 - uid: 32886 components: - type: Transform @@ -229971,6 +230561,11 @@ entities: - type: Transform pos: 47.5,-41.5 parent: 1 + - uid: 41073 + components: + - type: Transform + pos: -122.5,-28.5 + parent: 1 - uid: 41558 components: - type: Transform @@ -230455,6 +231050,54 @@ entities: - type: Transform pos: 23.5,-42.5 parent: 1 +- proto: SalvageSpawnerScrapCommon + entities: + - uid: 32628 + components: + - type: Transform + pos: 21.5,-13.5 + parent: 1 + - uid: 43116 + components: + - type: Transform + pos: 19.5,-12.5 + parent: 1 + - uid: 43121 + components: + - type: Transform + pos: 77.5,41.5 + parent: 1 +- proto: SalvageSpawnerScrapCommon75 + entities: + - uid: 43119 + components: + - type: Transform + pos: 77.5,37.5 + parent: 1 +- proto: SalvageSpawnerScrapValuable + entities: + - uid: 43117 + components: + - type: Transform + pos: 74.5,-0.5 + parent: 1 + - uid: 43118 + components: + - type: Transform + pos: 78.5,-11.5 + parent: 1 + - uid: 43122 + components: + - type: Transform + pos: 78.5,40.5 + parent: 1 +- proto: SalvageSpawnerScrapValuable75 + entities: + - uid: 43120 + components: + - type: Transform + pos: 90.5,30.5 + parent: 1 - proto: Saw entities: - uid: 9056 @@ -230873,12 +231516,6 @@ entities: - type: Transform pos: -75.37833,-33.457405 parent: 1 - - uid: 29514 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 51.5903,-50.36724 - parent: 1 - uid: 34554 components: - type: Transform @@ -231267,25 +231904,125 @@ entities: - type: Transform pos: -111.40744,-3.3558848 parent: 1 -- proto: ShockCollar +- proto: ShelfKitchen entities: - - uid: 2695 + - uid: 43144 components: - type: Transform - rot: 3.141592653589793 rad - pos: -0.3645833,-23.317299 + rot: -1.5707963267948966 rad + pos: -66.5,16.5 parent: 1 - - uid: 2698 + - type: Storage + storedItems: + 43145: + position: 0,0 + _rotation: South + 43146: + position: 1,0 + _rotation: South + 43147: + position: 2,0 + _rotation: South + - type: ContainerContainer + containers: + storagebase: !type:Container + showEnts: False + occludes: True + ents: + - 43145 + - 43146 + - 43147 +- proto: ShelfMetal + entities: + - uid: 10647 components: - type: Transform - rot: 3.141592653589793 rad - pos: 13.646861,-21.428116 + pos: -41.5,32.5 parent: 1 - - uid: 2701 + - uid: 39881 components: - type: Transform - rot: 3.141592653589793 rad - pos: -47.292618,-33.169548 + pos: -21.5,34.5 + parent: 1 + - type: Storage + storedItems: + 41017: + position: 0,0 + _rotation: East + - type: ContainerContainer + containers: + storagebase: !type:Container + showEnts: False + occludes: True + ents: + - 41017 + - uid: 43138 + components: + - type: Transform + pos: -7.5,27.5 + parent: 1 + - type: Storage + storedItems: + 43139: + position: 0,0 + _rotation: South + 43140: + position: 1,0 + _rotation: South + - type: ContainerContainer + containers: + storagebase: !type:Container + showEnts: False + occludes: True + ents: + - 43139 + - 43140 +- proto: ShelfRWood + entities: + - uid: 43134 + components: + - type: Transform + pos: -24.5,34.5 + parent: 1 + - type: Storage + storedItems: + 43135: + position: 0,0 + _rotation: South + 43136: + position: 1,0 + _rotation: South + 43137: + position: 2,0 + _rotation: South + - type: ContainerContainer + containers: + storagebase: !type:Container + showEnts: False + occludes: True + ents: + - 43135 + - 43136 + - 43137 +- proto: ShelfWood + entities: + - uid: 43141 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -50.5,27.5 + parent: 1 + - uid: 43142 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -46.5,27.5 + parent: 1 + - uid: 43143 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,27.5 parent: 1 - proto: Shovel entities: @@ -231342,6 +232079,16 @@ entities: - type: Transform pos: -61.5,-69.5 parent: 1 + - uid: 43131 + components: + - type: Transform + pos: 21.5,-11.5 + parent: 1 + - uid: 43132 + components: + - type: Transform + pos: 22.5,-11.5 + parent: 1 - proto: ShuttersNormalOpen entities: - uid: 1051 @@ -231349,6 +232096,31 @@ entities: - type: Transform pos: -12.5,-28.5 parent: 1 + - uid: 2289 + components: + - type: Transform + pos: -63.5,22.5 + parent: 1 + - uid: 2304 + components: + - type: Transform + pos: -63.5,19.5 + parent: 1 + - uid: 2321 + components: + - type: Transform + pos: -63.5,21.5 + parent: 1 + - uid: 2325 + components: + - type: Transform + pos: -63.5,23.5 + parent: 1 + - uid: 3595 + components: + - type: Transform + pos: -63.5,20.5 + parent: 1 - uid: 3604 components: - type: Transform @@ -231564,6 +232336,16 @@ entities: - type: Transform pos: -51.5,-22.5 parent: 1 + - uid: 43156 + components: + - type: Transform + pos: -70.5,21.5 + parent: 1 + - uid: 43158 + components: + - type: Transform + pos: -70.5,22.5 + parent: 1 - proto: ShuttersRadiationOpen entities: - uid: 10902 @@ -231724,6 +232506,36 @@ entities: - Pressed: DoorBolt - proto: SignalButtonDirectional entities: + - uid: 904 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -65.5,22.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 43158: + - Pressed: Toggle + 43156: + - Pressed: Toggle + - uid: 2253 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -65.5,22.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 2325: + - Pressed: Toggle + 2289: + - Pressed: Toggle + 2321: + - Pressed: Toggle + 3595: + - Pressed: Toggle + 2304: + - Pressed: Toggle - uid: 5773 components: - type: MetaData @@ -234409,8 +235221,6 @@ entities: - type: Transform pos: -98.5,-31.5 parent: 1 -- proto: SignAtmosMinsky - entities: - uid: 36728 components: - type: Transform @@ -234492,15 +235302,11 @@ entities: - type: Transform pos: 5.5,-36.5 parent: 1 -- proto: SignChemistry1 - entities: - uid: 23321 components: - type: Transform pos: -67.5,-32.5 parent: 1 -- proto: SignChemistry2 - entities: - uid: 28641 components: - type: Transform @@ -234520,20 +235326,6 @@ entities: - type: Transform pos: -68.5,-61.5 parent: 1 -- proto: SignCourt - entities: - - uid: 11796 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -88.5,10.5 - parent: 1 - - uid: 28169 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -82.5,10.5 - parent: 1 - proto: SignCryogenicsMed entities: - uid: 1130 @@ -234562,6 +235354,19 @@ entities: rot: 1.5707963267948966 rad pos: -14.5,7.5 parent: 1 +- proto: SignDirectionalAtmos + entities: + - uid: 32638 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -103.5,-24.5 + parent: 1 + - uid: 43115 + components: + - type: Transform + pos: -98.5,-25.5 + parent: 1 - proto: SignDirectionalBar entities: - uid: 6704 @@ -235292,13 +236097,6 @@ entities: - type: Transform pos: -5.5,24.5 parent: 1 -- proto: SignDrones - entities: - - uid: 9812 - components: - - type: Transform - pos: -112.5,-34.5 - parent: 1 - proto: SignElectrical entities: - uid: 15801 @@ -235591,11 +236389,6 @@ entities: - type: Transform pos: -12.5,16.5 parent: 1 - - uid: 9848 - components: - - type: Transform - pos: -122.5,-27.5 - parent: 1 - uid: 15807 components: - type: Transform @@ -235755,11 +236548,23 @@ entities: parent: 1 - proto: SignLawyer entities: + - uid: 11796 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -88.5,10.5 + parent: 1 - uid: 11949 components: - type: Transform pos: -86.5,-4.5 parent: 1 + - uid: 28169 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -82.5,10.5 + parent: 1 - proto: SignLibrary entities: - uid: 2624 @@ -235786,6 +236591,13 @@ entities: rot: 1.5707963267948966 rad pos: -50.5,35.5 parent: 1 +- proto: SignMaterials + entities: + - uid: 9812 + components: + - type: Transform + pos: -112.5,-34.5 + parent: 1 - proto: SignMedical entities: - uid: 16354 @@ -235866,11 +236678,6 @@ entities: parent: 1 - proto: SignRadiation entities: - - uid: 15795 - components: - - type: Transform - pos: 58.5,-57.5 - parent: 1 - uid: 15796 components: - type: Transform @@ -235891,6 +236698,11 @@ entities: - type: Transform pos: 54.5,-38.5 parent: 1 + - uid: 43153 + components: + - type: Transform + pos: 58.5,-58.5 + parent: 1 - proto: SignRedFive entities: - uid: 41237 @@ -236465,6 +237277,14 @@ entities: rot: 3.141592653589793 rad pos: -21.5,-73.5 parent: 1 +- proto: SmallLight + entities: + - uid: 15795 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 58.5,-54.5 + parent: 1 - proto: SmartFridge entities: - uid: 4707 @@ -236539,12 +237359,12 @@ entities: - type: Transform pos: -64.5,-42.5 parent: 1 - - uid: 10918 + - uid: 15247 components: - type: MetaData name: Particle Accelerator SMES - type: Transform - pos: 61.5,-56.5 + pos: 61.5,-57.5 parent: 1 - uid: 28642 components: @@ -236574,6 +237394,11 @@ entities: rot: 3.141592653589793 rad pos: -109.58488,-31.092873 parent: 1 + - uid: 20327 + components: + - type: Transform + pos: 61.46888,-53.30942 + parent: 1 - proto: SmokingPipeFilledCannabis entities: - uid: 11953 @@ -236593,6 +237418,14 @@ entities: - type: Transform pos: -58.56885,-41.41053 parent: 1 +- proto: SoapNT + entities: + - uid: 41017 + components: + - type: Transform + parent: 39881 + - type: Physics + canCollide: False - proto: SodaDispenser entities: - uid: 1531 @@ -238129,11 +238962,6 @@ entities: - type: Transform pos: -56.5,-27.5 parent: 1 - - uid: 36830 - components: - - type: Transform - pos: -126.5,-29.5 - parent: 1 - uid: 36831 components: - type: Transform @@ -239060,6 +239888,13 @@ entities: - type: Transform pos: -70.5,-27.5 parent: 1 +- proto: StationAnchor + entities: + - uid: 6644 + components: + - type: Transform + pos: -126.5,-29.5 + parent: 1 - proto: StationMap entities: - uid: 1827 @@ -239831,12 +240666,12 @@ entities: parent: 1 - proto: SubstationBasicEmpty entities: - - uid: 10920 + - uid: 18602 components: - type: MetaData name: particle accelerator substation - type: Transform - pos: 59.5,-56.5 + pos: 59.5,-57.5 parent: 1 - uid: 33510 components: @@ -242237,11 +243072,6 @@ entities: - type: Transform pos: -24.5,3.5 parent: 1 - - uid: 639 - components: - - type: Transform - pos: -34.5,-11.5 - parent: 1 - uid: 914 components: - type: Transform @@ -244199,12 +245029,6 @@ entities: - type: Transform pos: -104.5,4.5 parent: 1 - - uid: 9036 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -95.5,-39.5 - parent: 1 - uid: 9037 components: - type: Transform @@ -244360,24 +245184,12 @@ entities: rot: 1.5707963267948966 rad pos: 61.5,-50.5 parent: 1 - - uid: 10887 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 61.5,-49.5 - parent: 1 - uid: 10888 components: - type: Transform rot: 1.5707963267948966 rad pos: 59.5,-51.5 parent: 1 - - uid: 10889 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 59.5,-50.5 - parent: 1 - uid: 11081 components: - type: Transform @@ -244704,6 +245516,11 @@ entities: - type: Transform pos: 4.5,-36.5 parent: 1 + - uid: 1743 + components: + - type: Transform + pos: 3.5,-37.5 + parent: 1 - uid: 4564 components: - type: Transform @@ -246406,11 +247223,6 @@ entities: rot: 3.141592653589793 rad pos: -81.5,24.5 parent: 1 - - uid: 8781 - components: - - type: Transform - pos: -118.5,1.5 - parent: 1 - uid: 8949 components: - type: Transform @@ -246479,6 +247291,15 @@ entities: rot: -1.5707963267948966 rad pos: -20.5,-72.5 parent: 1 +- proto: ToiletGoldenEmpty + entities: + - uid: 41196 + components: + - type: Transform + pos: -118.5,1.5 + parent: 1 + - type: StealTarget + stealGroup: ToiletGoldenDirtyWater - proto: ToolboxElectricalFilled entities: - uid: 9862 @@ -246825,96 +247646,29 @@ entities: parent: 1 - proto: TwoWayLever entities: - - uid: 11289 + - uid: 9641 components: - type: Transform pos: -11.5,24.5 parent: 1 - type: DeviceLinkSource linkedPorts: - 11292: - - Left: Reverse - - Right: Forward - - Middle: Off - 6633: - - Left: Reverse - - Right: Forward - - Middle: Off - 6639: - - Left: Reverse - - Right: Forward - - Middle: Off - 6617: - - Left: Reverse - - Right: Forward - - Middle: Off - 6618: - - Left: Reverse - - Right: Forward - - Middle: Off - 6619: - - Left: Reverse - - Right: Forward - - Middle: Off - 6620: - - Left: Reverse - - Right: Forward - - Middle: Off - 6611: - - Left: Reverse - - Right: Forward - - Middle: Off - 6635: - - Left: Reverse - - Right: Forward - - Middle: Off - 15165: - - Left: Reverse - - Right: Forward + 12021: + - Left: Forward + - Right: Reverse - Middle: Off - 15166: - - Left: Reverse - - Right: Forward + 11292: + - Left: Forward + - Right: Reverse - Middle: Off - 15167: - - Left: Reverse - - Right: Forward + 11289: + - Left: Forward + - Right: Reverse - Middle: Off 15168: - - Left: Reverse - - Right: Forward - - Middle: Off - 15169: - - Left: Reverse - - Right: Forward - - Middle: Off - 15170: - - Left: Reverse - - Right: Forward - - Middle: Off - - uid: 12027 - components: - - type: Transform - pos: 15.5,-15.5 - parent: 1 - - type: DeviceLinkSource - linkedPorts: - 4394: - Left: Forward - Right: Reverse - Middle: Off - 12021: - - Left: Reverse - - Right: Forward - - Middle: Off - 12022: - - Left: Reverse - - Right: Forward - - Middle: Off - 12023: - - Left: Reverse - - Right: Forward - - Middle: Off - uid: 18589 components: - type: Transform @@ -246985,6 +247739,103 @@ entities: - Left: Forward - Right: Reverse - Middle: Off + - uid: 32633 + components: + - type: Transform + pos: -8.5,24.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 11108: + - Left: Forward + - Right: Reverse + - Middle: Off + 10515: + - Left: Forward + - Right: Reverse + - Middle: Off + 9639: + - Left: Forward + - Right: Reverse + - Middle: Off + 7123: + - Left: Forward + - Right: Reverse + - Middle: Off + 15170: + - Left: Forward + - Right: Reverse + - Middle: Off + 8781: + - Left: Forward + - Right: Reverse + - Middle: Off + 7158: + - Left: Forward + - Right: Reverse + - Middle: Off + 7157: + - Left: Forward + - Right: Reverse + - Middle: Off + 9640: + - Left: Forward + - Right: Reverse + - Middle: Off + 8967: + - Left: Forward + - Right: Reverse + - Middle: Off + 41217: + - Left: Forward + - Right: Reverse + - Middle: Off + - uid: 32688 + components: + - type: Transform + pos: 14.5,-15.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 36830: + - Left: Forward + - Right: Reverse + - Middle: Off + 32629: + - Left: Forward + - Right: Reverse + - Middle: Off + 42850: + - Left: Forward + - Right: Reverse + - Middle: Off + 41407: + - Left: Forward + - Right: Reverse + - Middle: Off + - uid: 36465 + components: + - type: Transform + pos: -5.5,50.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 9848: + - Left: Forward + - Right: Reverse + - Middle: Off + 9647: + - Left: Forward + - Right: Reverse + - Middle: Off + 9642: + - Left: Forward + - Right: Reverse + - Middle: Off + 12022: + - Left: Forward + - Right: Reverse + - Middle: Off - proto: UnfinishedMachineFrame entities: - uid: 9849 @@ -256485,16 +257336,6 @@ entities: - type: Transform pos: 20.5,-11.5 parent: 1 - - uid: 7123 - components: - - type: Transform - pos: 21.5,-11.5 - parent: 1 - - uid: 7124 - components: - - type: Transform - pos: 22.5,-11.5 - parent: 1 - uid: 7125 components: - type: Transform @@ -259245,21 +260086,6 @@ entities: - type: Transform pos: 58.5,-57.5 parent: 1 - - uid: 10647 - components: - - type: Transform - pos: 59.5,-57.5 - parent: 1 - - uid: 10648 - components: - - type: Transform - pos: 60.5,-57.5 - parent: 1 - - uid: 10649 - components: - - type: Transform - pos: 61.5,-57.5 - parent: 1 - uid: 10650 components: - type: Transform @@ -259435,6 +260261,11 @@ entities: - type: Transform pos: 23.5,-52.5 parent: 1 + - uid: 10889 + components: + - type: Transform + pos: 58.5,-52.5 + parent: 1 - uid: 11022 components: - type: Transform @@ -264390,11 +265221,6 @@ entities: - type: Transform pos: 22.5,-2.5 parent: 1 - - uid: 39881 - components: - - type: Transform - pos: 58.5,-52.5 - parent: 1 - uid: 40049 components: - type: Transform @@ -264470,6 +265296,11 @@ entities: - type: Transform pos: -0.5,29.5 parent: 1 + - uid: 42863 + components: + - type: Transform + pos: -129.5,-33.5 + parent: 1 - uid: 43003 components: - type: Transform @@ -264480,6 +265311,26 @@ entities: - type: Transform pos: -97.5,-3.5 parent: 1 + - uid: 43149 + components: + - type: Transform + pos: 58.5,-58.5 + parent: 1 + - uid: 43150 + components: + - type: Transform + pos: 59.5,-58.5 + parent: 1 + - uid: 43151 + components: + - type: Transform + pos: 60.5,-58.5 + parent: 1 + - uid: 43152 + components: + - type: Transform + pos: 61.5,-58.5 + parent: 1 - proto: WallSolid entities: - uid: 301 @@ -266197,11 +267048,6 @@ entities: - type: Transform pos: -118.5,-8.5 parent: 1 - - uid: 3410 - components: - - type: Transform - pos: -122.5,-27.5 - parent: 1 - uid: 3415 components: - type: Transform @@ -271619,11 +272465,11 @@ entities: - type: Physics canCollide: False - type: InsideEntityStorage - - uid: 29517 + - uid: 34876 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 59.523373,-50.694332 + rot: 3.141592653589793 rad + pos: 61.595676,-50.803333 parent: 1 - proto: WeaponLauncherRocket entities: @@ -271758,7 +272604,7 @@ entities: - uid: 640 components: - type: Transform - pos: -34.71126,-10.728965 + pos: -34.640953,-10.110379 parent: 1 - uid: 947 components: @@ -272239,6 +273085,11 @@ entities: rot: 1.5707963267948966 rad pos: -136.5,-46.5 parent: 1 + - uid: 36459 + components: + - type: Transform + pos: 15.5,-15.5 + parent: 1 - uid: 36761 components: - type: Transform @@ -272422,23 +273273,11 @@ entities: parent: 1 - proto: WindoorSecureJanitorLocked entities: - - uid: 6615 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -10.5,23.5 - parent: 1 - - uid: 6644 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -7.5,23.5 - parent: 1 - - uid: 7158 + - uid: 7124 components: - type: Transform rot: 3.141592653589793 rad - pos: -6.5,23.5 + pos: -9.5,23.5 parent: 1 - uid: 29934 components: @@ -272582,6 +273421,22 @@ entities: parent: 1 - proto: WindoorSecureSecurityLawyerLocked entities: + - uid: 4241 + components: + - type: MetaData + name: secure windoor (with justice access) + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,-35.5 + parent: 1 + - uid: 4242 + components: + - type: MetaData + name: secure windoor (with justice access) + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,-36.5 + parent: 1 - uid: 7912 components: - type: Transform @@ -272600,6 +273455,12 @@ entities: rot: -1.5707963267948966 rad pos: -81.5,16.5 parent: 1 + - uid: 15400 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -42.5,-28.5 + parent: 1 - uid: 29570 components: - type: Transform @@ -272663,12 +273524,6 @@ entities: rot: 3.141592653589793 rad pos: -6.5,-53.5 parent: 1 - - uid: 3595 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -42.5,-28.5 - parent: 1 - uid: 3939 components: - type: MetaData @@ -272685,22 +273540,20 @@ entities: parent: 1 - uid: 4240 components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -42.5,-36.5 - parent: 1 - - uid: 4241 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -42.5,-35.5 - parent: 1 - - uid: 4242 - components: + - type: MetaData + name: secure windoor (security access only) - type: Transform rot: -1.5707963267948966 rad pos: -42.5,-34.5 parent: 1 + - type: DeviceLinkSource + lastSignals: + DoorStatus: True + - type: Door + secondsUntilStateChange: -1360.2653 + state: Opening + - type: Airlock + autoClose: False - uid: 5792 components: - type: Transform @@ -275572,24 +276425,12 @@ entities: - type: Transform pos: -72.5,25.5 parent: 1 - - uid: 6632 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -9.5,23.5 - parent: 1 - uid: 6750 components: - type: Transform rot: 1.5707963267948966 rad pos: -114.5,-38.5 parent: 1 - - uid: 7157 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -8.5,23.5 - parent: 1 - uid: 7304 components: - type: Transform @@ -276154,6 +276995,11 @@ entities: rot: -1.5707963267948966 rad pos: -12.5,23.5 parent: 1 + - uid: 36464 + components: + - type: Transform + pos: 14.5,-15.5 + parent: 1 - uid: 36471 components: - type: Transform @@ -276190,6 +277036,30 @@ entities: rot: 1.5707963267948966 rad pos: -122.5,-60.5 parent: 1 + - uid: 41810 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -10.5,23.5 + parent: 1 + - uid: 41989 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,23.5 + parent: 1 + - uid: 42849 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,23.5 + parent: 1 + - uid: 42851 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,23.5 + parent: 1 - uid: 42972 components: - type: Transform @@ -276201,6 +277071,11 @@ entities: - type: Transform pos: -89.5,19.5 parent: 1 + - uid: 43168 + components: + - type: Transform + pos: -42.5,-34.5 + parent: 1 - proto: WindowTintedDirectional entities: - uid: 4126 @@ -276377,11 +277252,6 @@ entities: parent: 1 - proto: Wrench entities: - - uid: 641 - components: - - type: Transform - pos: -34.50293,-10.572606 - parent: 1 - uid: 1226 components: - type: Transform @@ -276416,6 +277286,11 @@ entities: - type: Transform pos: -37.47136,-41.748615 parent: 1 + - uid: 13955 + components: + - type: Transform + pos: -34.58887,-10.464792 + parent: 1 - uid: 30614 components: - type: Transform diff --git a/Resources/Maps/hive.yml b/Resources/Maps/hive.yml index 910be260221..58d5eb71518 100644 --- a/Resources/Maps/hive.yml +++ b/Resources/Maps/hive.yml @@ -223,11 +223,11 @@ entities: version: 6 0,-4: ind: 0,-4 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAQQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAQQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATgAAAAAAQQAAAAAATgAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAATgAAAAAAQQAAAAAATgAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfAAAAAAAQQAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAAfAAAAAAAQQAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAAZQAAAAADQQAAAAAAZQAAAAADZQAAAAAAZQAAAAABZQAAAAADZQAAAAADZQAAAAABQQAAAAAAZQAAAAACZQAAAAACZQAAAAACZQAAAAACZQAAAAABZQAAAAACZQAAAAAAZQAAAAABZQAAAAABZQAAAAADZQAAAAAAZQAAAAABZQAAAAABZQAAAAACZQAAAAABZQAAAAACZQAAAAADZQAAAAAAZQAAAAACZQAAAAACZQAAAAAAZQAAAAAAZQAAAAAD + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAQQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAATgAAAAAAQQAAAAAATgAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAATgAAAAAATgAAAAAATgAAAAAAfAAAAAAAQQAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAAfAAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAAZQAAAAADZQAAAAAAZQAAAAADZQAAAAAAQQAAAAAAZQAAAAADZQAAAAADZQAAAAABZQAAAAAAZQAAAAACZQAAAAACZQAAAAACZQAAAAACZQAAAAABZQAAAAACZQAAAAAAZQAAAAABZQAAAAABZQAAAAADZQAAAAAAZQAAAAABZQAAAAABZQAAAAACZQAAAAABZQAAAAACZQAAAAADZQAAAAAAZQAAAAACZQAAAAACZQAAAAAAZQAAAAAAZQAAAAAD version: 6 -1,-4: ind: -1,-4 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAZQAAAAABZQAAAAABZQAAAAAAZQAAAAADZQAAAAABZQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAawAAAAAAQQAAAAAAQQAAAAAAfAAAAAAAZQAAAAABZQAAAAAAZQAAAAADZQAAAAAAZQAAAAACZQAAAAAB + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAQQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAATgAAAAAAQQAAAAAATgAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfAAAAAAATgAAAAAATgAAAAAAfAAAAAAAQQAAAAAAfAAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAZQAAAAABZQAAAAABZQAAAAAAQQAAAAAAZQAAAAABZQAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAawAAAAAAQQAAAAAAQQAAAAAAfAAAAAAAZQAAAAABZQAAAAAAZQAAAAADZQAAAAAAZQAAAAACZQAAAAAB version: 6 -1,-3: ind: -1,-3 @@ -307,7 +307,7 @@ entities: version: 6 -4,0: ind: -4,0 - tiles: fAAAAAAAfAAAAAAAeQAAAAABeQAAAAAAeQAAAAACeQAAAAACfAAAAAAAHgAAAAACHgAAAAADHgAAAAADHgAAAAACTgAAAAAAXAAAAAAAXAAAAAAAXAAAAAABXAAAAAABfAAAAAAAfAAAAAAATgAAAAAAKwAAAAAATgAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAXAAAAAABXAAAAAACTgAAAAAAXAAAAAAAfAAAAAAAfAAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAfAAAAAAAZQAAAAABZQAAAAABZQAAAAADZQAAAAABZQAAAAAATgAAAAAAXAAAAAADXAAAAAACTgAAAAAAXAAAAAABfAAAAAAAfAAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAfAAAAAAAZQAAAAADZQAAAAADZQAAAAAAZQAAAAACZQAAAAAAZQAAAAACXAAAAAABXAAAAAADfAAAAAAAXAAAAAABfAAAAAAAfAAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAfAAAAAAAZQAAAAABZQAAAAAAZQAAAAAAZQAAAAADZQAAAAABTgAAAAAAXAAAAAAAXAAAAAAAfAAAAAAAXAAAAAACawAAAAAAfAAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAfAAAAAAAZQAAAAABZQAAAAADZQAAAAADZQAAAAABZQAAAAABTgAAAAAAXAAAAAACXAAAAAABfAAAAAAAfAAAAAAAawAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAAfAAAAAAAXAAAAAACXAAAAAADfAAAAAAAZQAAAAAAawAAAAAAfAAAAAAAYwAAAAAAXAAAAAABXAAAAAACXAAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAAXAAAAAADXAAAAAADfAAAAAAAZQAAAAACawAAAAAAfAAAAAAAXAAAAAAAXAAAAAABbQAAAAACXAAAAAAAfAAAAAAAQQAAAAAAQQAAAAAAQQAAAAAATgAAAAAATgAAAAAAXAAAAAADXAAAAAADTgAAAAAAZQAAAAABawAAAAAAfAAAAAAAYwAAAAAAXAAAAAABXAAAAAABXAAAAAAAfAAAAAAAQQAAAAAAQQAAAAAAQQAAAAAATgAAAAAATgAAAAAAXAAAAAADXAAAAAADZQAAAAADZQAAAAADQQAAAAAAfAAAAAAAYwAAAAAAXAAAAAAAXAAAAAACYwAAAAAAfAAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAAfAAAAAAAXAAAAAADXAAAAAACTgAAAAAAZQAAAAABawAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAYwAAAAAAYwAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAXAAAAAADXAAAAAAAfAAAAAAAZQAAAAABawAAAAAAawAAAAAAQQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAAfAAAAAAAXAAAAAADXAAAAAACfAAAAAAAfAAAAAAAQQAAAAAAawAAAAAAawAAAAAAQQAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAQQAAAAAAQQAAAAAAfAAAAAAAXAAAAAAAXAAAAAAAfAAAAAAAUQAAAAAAQQAAAAAAQQAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAXAAAAAABXAAAAAACfAAAAAAAUQAAAAAAQQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAXAAAAAAAXAAAAAAAfAAAAAAAfAAAAAAA + tiles: fAAAAAAAfAAAAAAAeQAAAAABeQAAAAAAeQAAAAACeQAAAAACfAAAAAAAHgAAAAACHgAAAAADHgAAAAADHgAAAAACTgAAAAAAXAAAAAAAXAAAAAAAXAAAAAABXAAAAAABfAAAAAAAfAAAAAAATgAAAAAAKwAAAAAATgAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAXAAAAAABXAAAAAACTgAAAAAAXAAAAAAAfAAAAAAAfAAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAfAAAAAAAZQAAAAABZQAAAAABZQAAAAADZQAAAAABZQAAAAAATgAAAAAAXAAAAAADXAAAAAACTgAAAAAAXAAAAAABfAAAAAAAfAAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAfAAAAAAAZQAAAAADZQAAAAADZQAAAAAAZQAAAAACZQAAAAAAZQAAAAACXAAAAAABXAAAAAADfAAAAAAAXAAAAAABfAAAAAAAfAAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAfAAAAAAAZQAAAAABZQAAAAAAZQAAAAAAZQAAAAADZQAAAAABTgAAAAAAXAAAAAAAXAAAAAAAfAAAAAAAXAAAAAACawAAAAAAfAAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAfAAAAAAAZQAAAAABZQAAAAADZQAAAAADZQAAAAABZQAAAAABTgAAAAAAXAAAAAACXAAAAAABfAAAAAAAfAAAAAAAawAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAAfAAAAAAAXAAAAAACXAAAAAADfAAAAAAAZQAAAAAAawAAAAAAfAAAAAAAYwAAAAAAXAAAAAABXAAAAAACXAAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAAXAAAAAADXAAAAAADfAAAAAAAZQAAAAACawAAAAAAfAAAAAAAXAAAAAAAXAAAAAABbQAAAAACXAAAAAAAfAAAAAAAQQAAAAAAQQAAAAAAQQAAAAAATgAAAAAATgAAAAAAXAAAAAADXAAAAAADTgAAAAAAZQAAAAABawAAAAAAfAAAAAAAYwAAAAAAXAAAAAABXAAAAAABXAAAAAAAfAAAAAAAQQAAAAAAQQAAAAAAQQAAAAAATgAAAAAATgAAAAAAXAAAAAADXAAAAAADZQAAAAADZQAAAAADQQAAAAAAfAAAAAAAYwAAAAAAXAAAAAAAXAAAAAACYwAAAAAAfAAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAAfAAAAAAAXAAAAAADXAAAAAACTgAAAAAAZQAAAAABawAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAYwAAAAAAYwAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAXAAAAAADXAAAAAAAfAAAAAAAZQAAAAABawAAAAAAawAAAAAAQQAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAAfAAAAAAAXAAAAAADXAAAAAACfAAAAAAAfAAAAAAAQQAAAAAAawAAAAAAawAAAAAAQQAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAQQAAAAAAQQAAAAAAfAAAAAAAXAAAAAAAXAAAAAAAfAAAAAAAUQAAAAAAQQAAAAAAQQAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAXAAAAAABXAAAAAACfAAAAAAAUQAAAAAAQQAAAAAAfAAAAAAAfAAAAAAAawAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAXAAAAAAAXAAAAAAAfAAAAAAAfAAAAAAA version: 6 -4,-2: ind: -4,-2 @@ -319,7 +319,7 @@ entities: version: 6 -4,1: ind: -4,1 - tiles: fAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATgAAAAAAMwAAAAAAXAAAAAABXAAAAAACXAAAAAABfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATgAAAAAAMwAAAAADXAAAAAABXAAAAAAAXAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATgAAAAAAMwAAAAABXAAAAAADXAAAAAACXAAAAAABMwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATgAAAAAAMwAAAAACXAAAAAADXAAAAAACXAAAAAADMwAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATgAAAAAAMwAAAAAAXAAAAAADXAAAAAADXAAAAAAAMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAATgAAAAAATgAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAATgAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAfAAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAAfAAAAAAAawAAAAAAawAAAAAAfAAAAAAAfAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfAAAAAAAawAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAfAAAAAAAawAAAAAAfAAAAAAAfAAAAAAAawAAAAAAfAAAAAAAawAAAAAAfAAAAAAAawAAAAAAawAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAAawAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAAawAAAAAAawAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAAawAAAAAAawAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAATgAAAAAATgAAAAAATgAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAAfAAAAAAATgAAAAAAfAAAAAAATgAAAAAAfAAAAAAATgAAAAAAfAAAAAAAewAAAAAATgAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAAewAAAAAATgAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAA + tiles: fAAAAAAAfAAAAAAAQQAAAAAAawAAAAAAawAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATgAAAAAAMwAAAAAAXAAAAAABXAAAAAACXAAAAAABfAAAAAAAewAAAAAAfAAAAAAAQQAAAAAAawAAAAAAawAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATgAAAAAAMwAAAAADXAAAAAABXAAAAAAAXAAAAAAAfAAAAAAAewAAAAAAfAAAAAAAQQAAAAAAawAAAAAAawAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATgAAAAAAMwAAAAABXAAAAAADXAAAAAACXAAAAAABMwAAAAABewAAAAAAfAAAAAAAfAAAAAAAawAAAAAAawAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATgAAAAAAMwAAAAACXAAAAAADXAAAAAACXAAAAAADMwAAAAADewAAAAAAAAAAAAAAfAAAAAAAawAAAAAAawAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATgAAAAAAMwAAAAAAXAAAAAADXAAAAAADXAAAAAAAMwAAAAAAewAAAAAAAAAAAAAAfAAAAAAAawAAAAAAawAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAATgAAAAAATgAAAAAAfAAAAAAAewAAAAAAAAAAAAAAfAAAAAAAawAAAAAAawAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAATgAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAewAAAAAAAAAAAAAAfAAAAAAAawAAAAAAawAAAAAAfAAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAAfAAAAAAAawAAAAAAawAAAAAAfAAAAAAAfAAAAAAAewAAAAAAAAAAAAAAfAAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAAfAAAAAAAfAAAAAAAewAAAAAAewAAAAAAfAAAAAAAQQAAAAAAQQAAAAAAfAAAAAAAawAAAAAAfAAAAAAAfAAAAAAAawAAAAAAfAAAAAAAawAAAAAAfAAAAAAAawAAAAAAawAAAAAAfAAAAAAAewAAAAAAewAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAAawAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAAawAAAAAAawAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAAawAAAAAAawAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAATgAAAAAATgAAAAAATgAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAAfAAAAAAATgAAAAAAfAAAAAAATgAAAAAAfAAAAAAATgAAAAAAfAAAAAAAewAAAAAATgAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAAewAAAAAATgAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAawAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAA version: 6 -3,1: ind: -3,1 @@ -395,7 +395,7 @@ entities: version: 6 -5,1: ind: -5,1 - tiles: AAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAA + tiles: AAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAA version: 6 -5,2: ind: -5,2 @@ -516,16 +516,13 @@ entities: - type: Broadphase - type: Physics bodyStatus: InAir - angularDamping: 10000 - linearDamping: 10000 + angularDamping: 0.05 + linearDamping: 0.05 fixedRotation: False bodyType: Dynamic - type: Fixtures fixtures: {} - type: OccluderTree - - type: Shuttle - angularDamping: 10000 - linearDamping: 10000 - type: GridPathfinding - type: Gravity gravityShakeSound: !type:SoundPathSpecifier @@ -762,12 +759,6 @@ entities: decals: 88: -10,45 89: -8,45 - - node: - color: '#FFFFFFFF' - id: BrickLineOverlayS - decals: - 5488: 87,-9 - 5489: 88,-9 - node: color: '#FFFFFFFF' id: BrickTileSteelCornerNe @@ -863,10 +854,10 @@ entities: color: '#FFFFFFFF' id: BrickTileSteelLineW decals: - 450: 8,-26 478: 7,-27 479: 7,-26 480: 7,-25 + 6232: 8,-26 - node: color: '#52B4E996' id: BrickTileWhiteBox @@ -2601,8 +2592,8 @@ entities: 5486: 86,-10 5487: 89,-10 5494: 87,-8 - 5495: 88,-8 5502: 87,-7 + 6244: 88,-8 - node: color: '#6B2833DD' id: BrickTileWhiteLineN @@ -2943,7 +2934,7 @@ entities: id: BrickTileWhiteLineN decals: 5490: 87,-8 - 5491: 88,-8 + 6239: 88,-8 - node: color: '#334E6DC8' id: BrickTileWhiteLineS @@ -3004,11 +2995,11 @@ entities: 736: 0,-50 737: 2,-50 738: 3,-50 - 739: 4,-50 740: 5,-50 - 741: 6,-50 - 742: 7,-50 - 743: 9,-50 + 6254: 1,-50 + 6255: -1,-50 + 6256: -2,-50 + 6257: -4,-50 - node: color: '#52B4E996' id: BrickTileWhiteLineS @@ -3062,10 +3053,10 @@ entities: 5475: 66,-5 5484: 86,-7 5485: 89,-7 - 5498: 87,-9 - 5499: 88,-9 5500: 87,-10 5501: 88,-10 + 6242: 87,-9 + 6243: 88,-9 - node: color: '#6B2833DD' id: BrickTileWhiteLineS @@ -3346,6 +3337,12 @@ entities: 5441: 72,-16 5442: 71,-16 5443: 70,-16 + - node: + color: '#FFFFFFFF' + id: BrickTileWhiteLineS + decals: + 6240: 87,-9 + 6241: 88,-9 - node: color: '#334E6DC8' id: BrickTileWhiteLineW @@ -4167,6 +4164,12 @@ entities: 4902: -88,4 5230: -46,-41 5233: -47,-43 + - node: + color: '#A4610696' + id: DeliveryGreyscale + decals: + 6247: -37,-39 + 6248: -35,-43 - node: color: '#DE3A3A96' id: DeliveryGreyscale @@ -4210,6 +4213,8 @@ entities: 5237: 63,-21 5238: 63,-22 5239: 63,-23 + 6245: -37,-39 + 6246: -35,-43 - node: color: '#169C9CFF' id: DiagonalCheckerAOverlay @@ -5454,8 +5459,6 @@ entities: color: '#FFFFFFFF' id: DirtHeavy decals: - 1849: 8.025802,-52.01098 - 1850: 8.025802,-52.01098 1873: 1.9995551,-37.991898 1874: 3.9683056,-38.0336 1875: 3.9683056,-38.0336 @@ -5601,12 +5604,6 @@ entities: 1795: 1.5304413,-50.037285 1796: 1.4625741,-49.516083 1797: 1.4625741,-49.516083 - 1798: 7.519104,-50.600174 - 1799: 7.56077,-50.495934 - 1800: 7.56077,-50.339577 - 1801: 8.477437,-50.391693 - 1802: 8.456603,-50.235336 - 1803: 8.43577,-50.07898 1804: 8.050354,-49.57863 1805: 7.99827,-49.47439 1806: 7.894104,-49.49524 @@ -5652,11 +5649,6 @@ entities: 1846: 25.367579,-53.330887 1847: 25.346746,-53.16411 1848: 26.782354,-51.990128 - 1851: 0.56068707,-51.619858 - 1852: 1.435687,-51.60943 - 1853: 1.498187,-52.047234 - 1854: 1.3627704,-52.40165 - 1855: 0.8523537,-52.370377 1856: 4.981906,-45.67549 1857: 4.9923224,-45.477432 1858: 10.532811,-46.511147 @@ -8210,11 +8202,6 @@ entities: 5666: 41,15 5667: 42,15 5668: 43,15 - - node: - color: '#FFFFFFFF' - id: MiniTileSteelLineE - decals: - 637: 8,-26 - node: color: '#9FED5896' id: Omni @@ -8463,6 +8450,7 @@ entities: decals: 149: 0,43 5157: -8,-6 + 6253: -35,-39 - node: color: '#FFFFFFFF' id: WarnEndE @@ -8602,6 +8590,7 @@ entities: 6190: 136,2 6191: 137,2 6192: 138,2 + 6252: -36,-39 - node: color: '#FFFFFFFF' id: WarnLineS @@ -8639,6 +8628,9 @@ entities: 5224: -46,-46 5231: -46,-42 5232: -46,-43 + 6249: -35,-42 + 6250: -35,-41 + 6251: -35,-40 - node: angle: 3.141592653589793 rad color: '#FFFFFFFF' @@ -9018,7 +9010,7 @@ entities: 0: 65039 0,4: 0: 33279 - 1: 12288 + 2: 12288 0,-1: 0: 61166 1,0: @@ -9066,13 +9058,15 @@ entities: 4,3: 0: 52639 0,-4: - 0: 64764 + 0: 60668 0,-5: 0: 65359 + -1,-4: + 0: 54597 0,-3: - 0: 65167 + 0: 65166 -1,-3: - 0: 56645 + 0: 56653 0,-2: 0: 61006 -1,-2: @@ -9115,17 +9109,17 @@ entities: 0: 39743 -8,-9: 0: 65280 - 2: 4 + 1: 4 -9,-8: 0: 65416 -8,-7: 0: 4369 - 2: 52428 + 1: 52428 -9,-7: 0: 48056 -8,-6: 0: 4593 - 2: 49152 + 1: 49152 -9,-6: 0: 63931 -8,-5: @@ -9137,13 +9131,13 @@ entities: -7,-8: 0: 21839 -7,-7: - 2: 65521 + 1: 65521 0: 4 -7,-6: - 2: 65535 + 1: 65535 -7,-5: 0: 61681 - 2: 14 + 1: 14 -7,-9: 0: 65535 -7,-4: @@ -9151,49 +9145,49 @@ entities: -6,-8: 0: 65535 -6,-7: - 2: 65520 + 1: 65520 -6,-6: - 2: 16383 + 1: 16383 -6,-5: - 2: 1 + 1: 1 0: 47290 -6,-9: 0: 65297 - 2: 4 + 1: 4 -6,-4: 0: 65225 -5,-8: 0: 13119 - 2: 34816 + 1: 34816 -5,-7: - 2: 30712 + 1: 30712 -5,-6: - 2: 7 + 1: 7 0: 60928 -5,-5: 0: 4479 - 1: 49152 + 2: 49152 -5,-9: 0: 65416 -5,-4: 0: 4881 - 1: 52428 + 2: 52428 -4,-8: 0: 15 - 2: 65280 + 1: 65280 -4,-6: 0: 65294 -4,-5: 0: 34947 - 1: 13056 + 2: 13056 -4,-4: - 1: 4403 + 2: 4403 0: 49288 -4,-3: - 1: 1 + 2: 1 0: 32524 -5,-3: - 1: 12 + 2: 12 0: 64272 -4,-2: 0: 63255 @@ -9206,9 +9200,9 @@ entities: -4,0: 0: 65287 -3,-4: - 0: 63709 + 0: 55517 -3,-3: - 0: 65485 + 0: 65487 -3,-2: 0: 65535 -3,-1: @@ -9229,10 +9223,8 @@ entities: 0: 65407 -2,-5: 0: 49660 - -1,-4: - 0: 21830 -1,-5: - 0: 25719 + 0: 21623 4,4: 0: 47357 5,0: @@ -9317,7 +9309,7 @@ entities: 0: 63351 -8,-1: 0: 21572 - 2: 17 + 1: 17 -9,0: 0: 65501 -8,1: @@ -9326,15 +9318,15 @@ entities: 0: 56831 -8,2: 0: 17477 - 2: 4352 + 1: 4352 -9,2: 0: 284 - 2: 52224 + 1: 52224 -8,3: - 2: 23 + 1: 23 0: 31744 -9,3: - 2: 255 + 1: 255 0: 53504 -8,4: 0: 57460 @@ -9379,19 +9371,19 @@ entities: -4,3: 0: 65287 -9,-4: - 2: 65248 + 1: 65248 -8,-3: 0: 17873 - 2: 4096 + 1: 4096 -9,-3: - 2: 65535 + 1: 65535 -8,-2: - 2: 30583 + 1: 30583 -9,-2: - 2: 52462 + 1: 52462 0: 785 -9,-1: - 2: 204 + 1: 204 0: 49425 -7,-3: 0: 30591 @@ -9421,10 +9413,10 @@ entities: 0: 61160 -1,4: 0: 4607 - 1: 49152 + 2: 49152 -9,4: 0: 196 - 2: 61713 + 1: 61713 -8,5: 0: 65534 -8,6: @@ -9437,62 +9429,61 @@ entities: 0: 56558 -8,8: 0: 141 - 2: 57856 + 1: 57856 -7,5: 0: 511 - 2: 49152 + 1: 49152 -7,7: 0: 12289 - 2: 35054 + 1: 35054 -7,6: - 2: 61166 + 1: 61166 -7,8: 0: 55 - 2: 63624 + 1: 63624 -6,5: 0: 3827 -6,6: - 2: 30481 + 1: 30481 0: 102 -6,7: - 2: 65527 + 1: 65527 -6,8: - 2: 65535 + 1: 65535 -5,5: 0: 15344 -5,6: 0: 49151 -5,7: - 2: 65328 + 1: 65328 0: 8 -5,8: - 2: 8191 + 1: 8191 -4,5: 0: 52700 -4,6: 0: 65311 -4,7: 0: 79 - 2: 28928 + 1: 28928 0,5: - 1: 51 + 2: 51 0: 63628 -1,5: - 1: 204 + 2: 204 0: 61457 0,6: 0: 62702 -1,6: - 0: 62345 - 3: 2 + 0: 62347 0,7: 0: 3087 - 2: 13056 + 1: 13056 -1,7: 0: 13103 - 2: 34816 + 1: 34816 0,8: - 2: 4095 + 1: 4095 1,5: 0: 61183 1,6: @@ -9500,7 +9491,7 @@ entities: 1,7: 0: 53007 1,8: - 2: 273 + 1: 273 0: 3276 2,5: 0: 56575 @@ -9530,21 +9521,21 @@ entities: 0: 58976 -3,-8: 0: 3299 - 2: 4096 + 1: 4096 -3,-7: - 2: 52479 + 1: 52479 0: 4096 -3,-6: 0: 65281 - 2: 12 + 1: 12 -3,-9: 0: 40160 -2,-8: 0: 20465 -2,-7: - 2: 65393 + 1: 65393 -2,-6: - 2: 15 + 1: 15 0: 65280 -2,-9: 0: 56784 @@ -9552,18 +9543,18 @@ entities: 0: 49136 -1,-7: 0: 3 - 2: 65408 + 1: 65408 -1,-6: - 2: 15 + 1: 15 0: 65280 -1,-9: 0: 48058 0,-8: 0: 4080 0,-7: - 2: 16382 + 1: 16382 0,-6: - 2: 3 + 1: 3 0: 65292 0,-9: 0: 61199 @@ -9598,7 +9589,7 @@ entities: 4,-6: 0: 65295 -4,8: - 2: 4095 + 1: 4095 -3,5: 0: 54551 -3,6: @@ -9606,7 +9597,7 @@ entities: -3,7: 0: 33727 -3,8: - 2: 4095 + 1: 4095 -2,5: 0: 55807 -2,6: @@ -9614,10 +9605,10 @@ entities: -2,7: 0: 28783 -2,8: - 2: 247 + 1: 247 0: 10240 -1,8: - 2: 248 + 1: 248 0: 16640 -12,0: 0: 32767 @@ -9639,7 +9630,7 @@ entities: 0: 15291 -12,4: 0: 7 - 2: 61064 + 1: 61064 -11,0: 0: 65535 -11,1: @@ -9651,7 +9642,7 @@ entities: -11,-1: 0: 64796 -11,4: - 2: 65535 + 1: 65535 -10,0: 0: 61438 -10,1: @@ -9661,30 +9652,30 @@ entities: -10,3: 0: 35591 -10,4: - 2: 65535 + 1: 65535 -10,-1: 0: 36591 4,8: 0: 819 - 2: 2184 + 1: 2184 5,5: 0: 49617 5,6: 0: 64433 5,7: 0: 783 - 2: 52224 + 1: 52224 5,8: - 2: 4095 + 1: 4095 6,5: 0: 48120 6,6: 0: 16305 6,7: 0: 79 - 2: 28928 + 1: 28928 6,8: - 2: 255 + 1: 255 0: 10240 7,5: 0: 47931 @@ -9692,9 +9683,9 @@ entities: 0: 33720 7,7: 0: 959 - 2: 32768 + 1: 32768 7,8: - 2: 255 + 1: 255 0: 16640 8,4: 0: 65485 @@ -9704,9 +9695,9 @@ entities: 0: 63803 8,7: 0: 15 - 2: 65024 + 1: 65024 8,8: - 2: 255 + 1: 255 0: 3840 9,4: 0: 65535 @@ -9719,7 +9710,7 @@ entities: 9,3: 0: 65359 9,8: - 2: 30719 + 1: 30719 10,4: 0: 65535 10,5: @@ -9728,20 +9719,20 @@ entities: 0: 65520 10,7: 0: 271 - 2: 60928 + 1: 60928 10,3: 0: 65294 10,8: - 2: 51 + 1: 51 0: 63616 11,4: 0: 53213 11,6: 0: 4371 - 2: 52360 + 1: 52360 11,7: 0: 1 - 2: 4044 + 1: 4044 11,3: 0: 53709 11,5: @@ -9752,9 +9743,9 @@ entities: 0: 30583 12,5: 0: 7 - 2: 15872 + 1: 15872 12,6: - 2: 3 + 1: 3 0: 61320 12,7: 0: 18190 @@ -9763,20 +9754,20 @@ entities: 12,8: 0: 65535 13,4: - 2: 29491 + 1: 29491 0: 136 13,5: - 2: 1911 + 1: 1911 13,6: 0: 48059 13,7: 0: 65419 13,3: - 2: 13107 + 1: 13107 0: 32844 13,8: 0: 13107 - 2: 34944 + 1: 34944 14,4: 0: 48059 14,5: @@ -9785,7 +9776,7 @@ entities: 0: 65535 14,7: 0: 287 - 2: 1024 + 1: 1024 14,3: 0: 16360 15,4: @@ -9796,7 +9787,7 @@ entities: 0: 48059 15,7: 0: 139 - 2: 512 + 1: 512 15,3: 0: 7163 16,4: @@ -9845,20 +9836,20 @@ entities: 0: 55807 13,2: 0: 49629 - 2: 12288 + 1: 12288 13,-1: 0: 56592 - 2: 15 + 1: 15 14,0: 0: 65435 14,1: 0: 47359 14,2: 0: 35003 - 2: 12288 + 1: 12288 14,-1: 0: 48012 - 2: 1 + 1: 1 15,0: 0: 65485 15,1: @@ -9901,24 +9892,24 @@ entities: 0: 65535 11,-5: 0: 61440 - 2: 238 + 1: 238 12,-4: 0: 4096 - 2: 35942 + 1: 35942 12,-3: 0: 28531 12,-2: 0: 26215 12,-5: - 2: 26227 + 1: 26227 0: 12 13,-4: 0: 15 - 2: 30464 + 1: 30464 13,-3: - 2: 26215 + 1: 26215 13,-2: - 2: 65399 + 1: 65399 13,-5: 0: 15245 14,-4: @@ -9952,33 +9943,33 @@ entities: 7,-8: 0: 49136 8,-7: - 2: 65534 + 1: 65534 7,-7: - 2: 65408 + 1: 65408 0: 3 8,-6: - 2: 15 + 1: 15 0: 65280 7,-6: - 2: 15 + 1: 15 0: 65280 9,-8: 0: 1775 9,-7: - 2: 8191 + 1: 8191 9,-6: - 2: 1 + 1: 1 0: 65422 9,-9: 0: 64733 10,-8: 0: 61439 10,-7: - 2: 18224 + 1: 18224 0: 8 10,-6: 0: 61699 - 2: 204 + 1: 204 10,-9: 0: 4369 11,-8: @@ -9986,7 +9977,7 @@ entities: 11,-7: 0: 61247 11,-6: - 2: 58992 + 1: 58992 0: 128 12,-8: 0: 65535 @@ -9994,25 +9985,24 @@ entities: 0: 65295 12,-6: 0: 51258 - 2: 12288 + 1: 12288 4,-9: 0: 48027 5,-8: 0: 4080 5,-7: - 2: 53247 + 1: 53247 5,-6: 0: 65283 - 2: 12 + 1: 12 5,-9: - 0: 47929 - 3: 2 + 0: 47931 6,-8: 0: 20466 6,-7: - 2: 65393 + 1: 65393 6,-6: - 2: 15 + 1: 15 0: 65280 6,-9: 0: 30471 @@ -10043,64 +10033,64 @@ entities: 18,4: 0: 14327 19,0: - 2: 15 + 1: 15 0: 65280 19,1: 0: 12543 - 2: 32768 + 1: 32768 19,2: 0: 65283 - 2: 8 + 1: 8 19,3: 0: 30479 19,-1: - 2: 61440 + 1: 61440 0: 191 19,4: 0: 1919 20,0: - 2: 15 + 1: 15 0: 65280 20,1: 0: 255 - 2: 61440 + 1: 61440 20,2: - 2: 1 + 1: 1 0: 56576 20,3: 0: 65309 20,-1: - 2: 61440 + 1: 61440 0: 187 20,4: 0: 64511 21,0: - 2: 15 + 1: 15 0: 65280 21,1: 0: 255 - 2: 61440 + 1: 61440 21,2: 0: 4352 - 2: 34952 + 1: 34952 21,3: 0: 54721 21,-1: - 2: 63488 + 1: 63488 0: 55 21,4: 0: 56541 22,0: - 2: 3 + 1: 3 0: 65416 22,1: 0: 51455 - 2: 4096 + 1: 4096 22,2: - 2: 12561 + 1: 12561 0: 32972 22,-1: - 2: 13107 + 1: 13107 0: 34952 22,3: 0: 43688 @@ -10171,8 +10161,8 @@ entities: 0,-12: 0: 45311 0,-13: - 0: 65282 - 2: 8 + 0: 65280 + 1: 7 -1,-12: 0: 57583 0,-11: @@ -10190,8 +10180,8 @@ entities: 1,-10: 0: 56575 1,-13: - 0: 65280 - 2: 7 + 0: 65281 + 1: 12 2,-12: 0: 55551 2,-11: @@ -10199,8 +10189,8 @@ entities: 2,-10: 0: 8191 2,-13: - 0: 65281 - 2: 12 + 0: 65280 + 1: 15 3,-12: 0: 45567 3,-11: @@ -10209,7 +10199,7 @@ entities: 0: 36863 3,-13: 0: 65280 - 2: 15 + 1: 15 4,-12: 0: 63743 4,-11: @@ -10220,7 +10210,7 @@ entities: 0: 47359 8,-13: 0: 28672 - 2: 200 + 1: 200 7,-12: 0: 53631 8,-11: @@ -10239,15 +10229,15 @@ entities: 0: 56829 10,-12: 0: 4352 - 2: 35023 + 1: 35023 10,-11: 0: 12561 - 2: 35016 + 1: 35016 10,-10: 0: 13107 - 2: 34952 + 1: 34952 10,-13: - 2: 43694 + 1: 43694 4,12: 0: 3838 5,9: @@ -10346,7 +10336,7 @@ entities: 0: 61951 13,-7: 0: 13070 - 2: 2048 + 1: 2048 13,-6: 0: 56559 13,-8: @@ -10355,7 +10345,7 @@ entities: 0: 65523 14,-7: 0: 34831 - 2: 768 + 1: 768 14,-6: 0: 47935 14,-9: @@ -10376,7 +10366,7 @@ entities: 0: 4380 16,-9: 0: 4352 - 2: 19456 + 1: 19456 17,-8: 0: 4401 17,-7: @@ -10398,26 +10388,26 @@ entities: 20,-5: 0: 4092 8,-14: - 2: 36608 + 1: 36608 7,-14: - 2: 3584 + 1: 3584 9,-14: - 2: 3840 + 1: 3840 9,-13: - 2: 272 + 1: 272 10,-14: - 2: 28416 + 1: 28416 11,-14: - 2: 4352 + 1: 4352 11,-13: - 2: 17 + 1: 17 4,-14: 0: 43520 4,-13: 0: 65450 5,-13: 0: 65280 - 2: 14 + 1: 14 5,-12: 0: 64767 6,-13: @@ -10428,29 +10418,30 @@ entities: 0: 65535 7,-13: 0: 30464 - 2: 8 - 0,-14: - 0: 8192 + 1: 8 -1,-13: - 0: 65280 - 2,-14: + 1: 8 + 0: 65282 + 1,-14: 0: 4096 -4,-14: - 2: 61440 + 1: 61440 -5,-14: - 2: 61440 + 1: 61440 -3,-14: - 2: 28672 + 1: 28672 -3,-13: - 2: 498 + 1: 498 0: 49152 -3,-12: 0: 14206 -2,-13: - 2: 18 + 1: 18 0: 56320 -2,-12: 0: 65295 + -1,-14: + 0: 8192 -4,-12: 0: 48112 -4,-11: @@ -10471,26 +10462,26 @@ entities: 0: 63351 -9,-9: 0: 32768 - 2: 17 + 1: 17 -8,-10: - 2: 17484 + 1: 17484 -8,-12: - 2: 34952 + 1: 34952 -8,-13: - 2: 34956 + 1: 34956 -8,-11: - 2: 34952 + 1: 34952 -7,-10: 0: 65280 -6,-10: 0: 4352 - 2: 17478 + 1: 17478 -6,-12: - 2: 8738 + 1: 8738 -6,-13: - 2: 8743 + 1: 8743 -6,-11: - 2: 8738 + 1: 8738 5,-11: 0: 52511 5,-10: @@ -10521,7 +10512,7 @@ entities: 0: 7631 23,-2: 0: 49425 - 2: 68 + 1: 68 24,-4: 0: 61438 24,-3: @@ -10575,37 +10566,37 @@ entities: 21,-6: 0: 47359 21,-8: - 2: 3822 + 1: 3822 0: 24576 21,-7: 0: 36590 22,-8: - 2: 49971 + 1: 49971 22,-7: 0: 273 - 2: 49152 + 1: 49152 22,-6: - 2: 3720 + 1: 3720 22,-9: - 2: 8738 + 1: 8738 23,-8: - 2: 61440 + 1: 61440 23,-7: - 2: 29218 + 1: 29218 23,-6: - 2: 256 + 1: 256 0: 3264 23,-5: 0: 3822 24,-8: - 2: 61440 + 1: 61440 24,-5: 0: 33655 8,12: 0: 6015 9,9: 0: 65280 - 2: 6 + 1: 6 9,10: 0: 48015 9,11: @@ -10616,12 +10607,12 @@ entities: 0: 4095 10,10: 0: 12288 - 2: 34 + 1: 34 10,11: 0: 13107 10,12: 0: 273 - 2: 16384 + 1: 16384 11,9: 0: 34944 11,10: @@ -10640,15 +10631,15 @@ entities: 0: 8 9,13: 0: 819 - 2: 32768 + 1: 32768 9,14: - 2: 12 + 1: 12 10,13: - 2: 61998 + 1: 61998 11,13: - 2: 64719 + 1: 64719 12,13: - 2: 61455 + 1: 61455 -4,9: 0: 52701 -5,9: @@ -10685,27 +10676,27 @@ entities: 0: 30576 -9,9: 0: 35071 - 2: 12288 + 1: 12288 -8,10: 0: 207 -9,10: 0: 8 - 2: 48 + 1: 48 -8,11: - 2: 28672 + 1: 28672 -9,11: - 2: 61696 + 1: 61696 -8,12: - 2: 35946 + 1: 35946 -7,9: - 2: 255 + 1: 255 0: 33536 -7,10: 0: 14591 -7,11: 0: 61439 -6,9: - 2: 119 + 1: 119 0: 28672 -6,10: 0: 14335 @@ -10716,13 +10707,13 @@ entities: -5,12: 0: 52364 -7,12: - 2: 12560 + 1: 12560 -7,13: - 2: 2246 + 1: 2246 -6,13: - 2: 3840 + 1: 3840 -5,13: - 2: 25360 + 1: 25360 0: 140 -4,13: 0: 4095 @@ -10771,33 +10762,33 @@ entities: 13,10: 0: 119 14,8: - 2: 16 + 1: 16 0: 57344 14,9: 0: 65534 14,10: 0: 61183 14,11: - 2: 32768 + 1: 32768 14,12: - 2: 4972 + 1: 4972 15,11: - 2: 8030 + 1: 8030 15,10: - 2: 32768 + 1: 32768 16,10: - 2: 5100 + 1: 5100 16,11: - 2: 3968 + 1: 3968 -12,-4: 0: 255 - 2: 57344 + 1: 57344 -12,-5: 0: 65520 -13,-4: 0: 62327 -12,-3: - 2: 35054 + 1: 35054 0: 28672 -13,-3: 0: 63487 @@ -10809,18 +10800,18 @@ entities: 0: 48051 -11,-4: 0: 255 - 2: 61440 + 1: 61440 -11,-3: - 2: 65535 + 1: 65535 -11,-2: 0: 65520 -11,-5: 0: 65520 -10,-4: - 2: 61440 + 1: 61440 0: 238 -10,-3: - 2: 65535 + 1: 65535 -10,-2: 0: 30576 -10,-5: @@ -10828,7 +10819,7 @@ entities: -16,-4: 0: 61030 -17,-4: - 2: 2296 + 1: 2296 -16,-3: 0: 61166 -16,-2: @@ -10868,30 +10859,30 @@ entities: -13,-5: 0: 63346 -20,-4: - 2: 4096 + 1: 4096 -20,-3: - 2: 61299 + 1: 61299 -21,-4: - 2: 61440 + 1: 61440 -21,-3: - 2: 4528 + 1: 4528 -20,-1: 0: 65329 - 2: 8 + 1: 8 -21,-1: 0: 31 - 2: 4576 + 1: 4576 -20,0: 0: 43955 - 2: 4096 + 1: 4096 -20,-2: - 2: 34956 + 1: 34956 -19,-3: - 2: 4096 + 1: 4096 -19,-2: - 2: 4369 + 1: 4369 -19,-1: - 2: 1 + 1: 1 0: 48896 -19,0: 0: 65522 @@ -10900,45 +10891,45 @@ entities: -18,0: 0: 64434 -18,-4: - 2: 17604 + 1: 17604 -18,-5: - 2: 17476 + 1: 17476 -18,-3: - 2: 12 + 1: 12 -17,-3: - 2: 1 + 1: 1 -17,0: 0: 64441 -21,0: 0: 9 - 2: 37142 + 1: 37142 -20,1: - 2: 16 + 1: 16 0: 15274 -21,1: - 2: 4496 + 1: 4496 0: 9 -20,2: 0: 15291 -21,2: 0: 4105 - 2: 57622 + 1: 57622 -20,3: 0: 1 - 2: 34952 + 1: 34952 -21,3: 0: 255 - 2: 4864 + 1: 4864 -19,1: 0: 4095 -19,2: 0: 187 -19,3: - 2: 4369 + 1: 4369 -20,4: - 2: 32748 + 1: 32748 -19,4: - 2: 17 + 1: 17 -18,1: 0: 3007 -18,2: @@ -10954,13 +10945,18 @@ entities: -16,2: 0: 7647 -16,3: - 0: 8183 + 0: 40951 + -16,4: + 0: 36044 + 1: 4368 -15,1: 0: 45277 -15,2: 0: 13243 -15,3: 0: 4080 + -15,4: + 0: 4369 -14,1: 0: 61559 -14,2: @@ -10972,15 +10968,15 @@ entities: -13,4: 0: 65407 -16,-8: - 2: 39 + 1: 39 0: 34816 -17,-8: - 2: 15 + 1: 15 -16,-7: - 2: 4384 + 1: 4384 0: 51336 -16,-6: - 2: 4369 + 1: 4369 0: 52236 -15,-8: 0: 65520 @@ -11001,7 +10997,7 @@ entities: -13,-6: 0: 32631 -13,-9: - 2: 51200 + 1: 51200 0: 8 -12,-8: 0: 64988 @@ -11010,7 +11006,7 @@ entities: -12,-6: 0: 65295 -12,-9: - 2: 4352 + 1: 4352 0: 52431 -11,-8: 0: 65523 @@ -11028,80 +11024,86 @@ entities: 0: 62379 -10,-9: 0: 30579 + -17,4: + 1: 128 + -16,5: + 1: 4369 + 0: 34952 -16,6: - 2: 15 - 0: 32768 + 1: 817 + 0: 32904 + -17,5: + 1: 32768 -17,6: - 2: 15 + 1: 2063 -16,7: 0: 52367 - 2: 4352 + 1: 4352 -17,7: 0: 26120 - 2: 7 + 1: 7 -16,8: - 2: 17153 + 1: 17153 0: 140 + -15,5: + 0: 4369 + 3: 2048 -15,6: - 2: 17 - 0: 64716 + 0: 64735 -15,7: 0: 65535 - -15,5: - 2: 4096 - 4: 2048 -15,8: 0: 65535 -14,5: - 4: 1792 + 3: 1792 0: 8 -14,6: 0: 65535 -14,7: 0: 4383 - 5: 17408 + 4: 17408 -14,8: 0: 65297 - 5: 4 + 4: 4 -13,5: 0: 65311 -13,6: 0: 65535 -13,7: 0: 15 - 6: 4352 - 4: 17408 + 5: 4352 + 3: 17408 -13,8: - 6: 1 - 4: 4 + 5: 1 + 3: 4 0: 65280 -12,5: 0: 65280 - 2: 14 + 1: 14 -12,6: 0: 65535 -12,7: 0: 15 - 7: 4352 - 4: 17408 + 6: 4352 + 3: 17408 -12,8: - 7: 1 - 4: 4 + 6: 1 + 3: 4 0: 65280 -11,5: - 2: 3 + 1: 3 0: 65292 -11,6: 0: 65535 -11,7: 0: 52431 - 4: 4352 + 3: 4352 -11,8: - 4: 1 + 3: 1 0: 65484 -10,5: 0: 65283 - 2: 12 + 1: 12 -10,6: 0: 65535 -10,7: @@ -11109,47 +11111,47 @@ entities: -10,8: 0: 30591 -9,5: - 2: 1 + 1: 1 0: 17732 -17,8: - 2: 3840 + 1: 3840 0: 6 -16,9: - 2: 29696 + 1: 29696 -16,10: - 2: 36079 + 1: 36079 -17,9: - 2: 61440 + 1: 61440 -15,9: 0: 4095 -15,10: - 2: 4097 + 1: 4097 -15,11: - 2: 35939 + 1: 35939 -14,9: 0: 3569 -14,11: - 2: 12834 + 1: 12834 -14,10: - 2: 8743 + 1: 8743 -14,12: - 2: 8866 + 1: 8866 0: 2056 -13,9: 0: 3568 -13,10: - 2: 132 + 1: 132 0: 8 -12,9: 0: 4080 -12,10: 0: 19655 - 2: 9008 + 1: 9008 -12,11: 0: 17476 -12,12: 0: 17733 - 2: 176 + 1: 176 -11,9: 0: 4080 -11,10: @@ -11158,19 +11160,19 @@ entities: 0: 6128 -10,10: 0: 819 - 2: 34952 + 1: 34952 -10,11: - 2: 34956 + 1: 34956 -10,12: - 2: 35000 + 1: 35000 0: 771 -9,12: - 2: 1 + 1: 1 -12,-12: - 2: 48 + 1: 48 0: 52416 -13,-12: - 2: 20208 + 1: 20208 -12,-11: 0: 30576 -13,-11: @@ -11181,77 +11183,77 @@ entities: 0: 35071 -11,-12: 0: 13104 - 2: 52428 + 1: 52428 -11,-11: 0: 48051 - 2: 8 + 1: 8 -11,-10: 0: 48059 -11,-13: - 2: 52224 + 1: 52224 0: 238 -10,-12: 0: 48048 - 2: 17472 + 1: 17472 -10,-11: 0: 65467 - 2: 68 + 1: 68 -10,-10: 0: 191 - 2: 47872 + 1: 47872 -9,-12: 0: 4368 -9,-11: 0: 13105 -9,-10: 0: 51 - 2: 4352 + 1: 4352 -13,12: 0: 3855 - 2: 240 + 1: 240 -12,13: 0: 17733 - 2: 176 + 1: 176 -13,13: 0: 3855 - 2: 240 + 1: 240 -12,14: 0: 17733 - 2: 176 + 1: 176 -13,14: 0: 3855 - 2: 240 + 1: 240 -12,15: 0: 325 - 2: 17584 + 1: 17584 -13,15: 0: 3855 - 2: 240 + 1: 240 -12,16: - 2: 61444 + 1: 61444 -11,12: - 2: 240 + 1: 240 0: 3855 -11,13: - 2: 240 + 1: 240 0: 3855 -11,14: - 2: 240 + 1: 240 0: 3855 -11,15: - 2: 240 + 1: 240 0: 3855 -10,13: 0: 771 - 2: 35000 + 1: 35000 -10,14: 0: 771 - 2: 35000 + 1: 35000 -10,15: 0: 771 - 2: 35000 + 1: 35000 -10,16: - 2: 64648 + 1: 64648 -11,-14: 0: 57344 -10,-14: @@ -11268,70 +11270,70 @@ entities: 0: 12526 21,8: 0: 19 - 2: 29696 + 1: 29696 22,6: 0: 13311 22,7: 0: 3 - 2: 36352 + 1: 36352 22,5: 0: 3816 23,7: - 2: 36608 + 1: 36608 22,8: - 2: 234 + 1: 234 23,5: 0: 1646 23,6: - 2: 10 + 1: 10 24,5: 0: 4087 24,7: - 2: 36608 + 1: 36608 23,8: - 2: 248 + 1: 248 24,6: 0: 238 25,5: 0: 8184 25,6: 0: 17 - 2: 1028 + 1: 1028 25,7: - 2: 36608 + 1: 36608 24,8: - 2: 248 + 1: 248 26,5: 0: 30590 26,6: 0: 30706 26,7: 0: 7 - 2: 36608 + 1: 36608 25,8: - 2: 248 + 1: 248 27,5: 0: 1 - 2: 63232 + 1: 63232 27,6: 0: 30576 27,7: 0: 7 - 2: 36608 + 1: 36608 26,8: - 2: 248 + 1: 248 28,4: 0: 4351 - 2: 8192 + 1: 8192 28,5: - 2: 63630 + 1: 63630 28,6: - 2: 117 + 1: 117 0: 12288 28,7: - 2: 36672 + 1: 36672 27,8: - 2: 248 + 1: 248 25,-4: 0: 52243 25,-3: @@ -11350,10 +11352,10 @@ entities: 0: 3581 26,-5: 0: 63255 - 2: 8 + 1: 8 27,-4: 0: 15 - 2: 8704 + 1: 8704 27,-3: 0: 65504 27,-2: @@ -11362,7 +11364,7 @@ entities: 0: 4095 27,-5: 0: 61440 - 2: 15 + 1: 15 28,-4: 0: 34959 28,-3: @@ -11373,10 +11375,10 @@ entities: 0: 2039 28,-5: 0: 65024 - 2: 1 + 1: 1 29,-4: 0: 62225 - 2: 4 + 1: 4 29,-3: 0: 29371 29,-2: @@ -11385,15 +11387,15 @@ entities: 0: 65399 29,-5: 0: 4352 - 2: 50176 + 1: 50176 29,0: 0: 65535 30,-4: 0: 4096 - 2: 33010 + 1: 33010 30,-3: 0: 28979 - 2: 136 + 1: 136 30,-2: 0: 63255 30,-1: @@ -11401,11 +11403,11 @@ entities: 30,0: 0: 65535 30,-5: - 2: 28672 + 1: 28672 31,-4: - 2: 240 + 1: 240 31,-3: - 2: 61441 + 1: 61441 31,-2: 0: 65520 31,-1: @@ -11413,15 +11415,15 @@ entities: 31,0: 0: 65535 32,-4: - 2: 20222 + 1: 20222 32,-3: - 2: 63044 + 1: 63044 32,-2: 0: 4368 - 2: 17476 + 1: 17476 32,-1: 0: 13185 - 2: 4 + 1: 4 28,3: 0: 34952 29,1: @@ -11432,66 +11434,66 @@ entities: 0: 16382 29,4: 0: 3 - 2: 4096 + 1: 4096 30,1: 0: 65535 30,2: 0: 3839 30,3: 0: 273 - 2: 50252 + 1: 50252 31,1: 0: 61135 31,3: - 2: 61440 + 1: 61440 32,0: 0: 13107 32,1: 0: 13065 - 2: 50368 + 1: 50368 32,3: - 2: 62528 + 1: 62528 29,5: - 2: 61441 + 1: 61441 29,7: - 2: 36608 + 1: 36608 28,8: - 2: 248 + 1: 248 30,5: - 2: 61440 + 1: 61440 30,7: - 2: 36608 + 1: 36608 29,8: - 2: 248 + 1: 248 31,5: - 2: 61440 + 1: 61440 31,7: - 2: 36608 + 1: 36608 30,8: - 2: 248 + 1: 248 32,5: - 2: 63044 + 1: 63044 32,7: - 2: 1860 + 1: 1860 31,8: - 2: 248 + 1: 248 32,6: - 2: 50246 + 1: 50246 32,4: - 2: 17476 + 1: 17476 33,5: - 2: 4369 + 1: 4369 33,6: - 2: 4369 + 1: 4369 33,4: - 2: 4369 + 1: 4369 33,3: - 2: 4352 + 1: 4352 33,7: - 2: 1 + 1: 1 33,1: 0: 3 - 2: 12848 + 1: 12848 33,0: 0: 43690 33,-1: @@ -11502,447 +11504,447 @@ entities: 0: 30464 35,0: 0: 17 - 1: 65262 + 2: 65262 35,1: - 1: 15 + 2: 15 34,1: - 2: 2048 + 1: 2048 35,-1: - 1: 61424 + 2: 61424 36,0: - 1: 4369 + 2: 4369 36,1: - 1: 1 - 2: 524 + 2: 1 + 1: 524 32,-5: - 2: 17484 + 1: 17484 33,-4: - 2: 9011 + 1: 9011 33,-3: - 2: 12834 + 1: 12834 33,-5: - 2: 8739 + 1: 8739 33,-2: - 2: 2 + 1: 2 34,-2: - 2: 32768 + 1: 32768 36,-1: - 1: 4368 - 2: 192 + 2: 4368 + 1: 192 32,-7: - 2: 61440 + 1: 61440 31,-7: - 2: 61440 + 1: 61440 32,-6: - 2: 18176 + 1: 18176 31,-6: - 2: 3976 + 1: 3976 33,-7: - 2: 12288 + 1: 12288 33,-6: - 2: 8706 + 1: 8706 24,-7: - 2: 30498 + 1: 30498 24,-6: 0: 12000 25,-8: - 2: 62532 + 1: 62532 25,-7: - 2: 65252 + 1: 65252 25,-6: - 2: 3722 + 1: 3722 25,-9: - 2: 50244 + 1: 50244 26,-8: - 2: 4369 + 1: 4369 26,-7: - 2: 61713 + 1: 61713 26,-6: - 2: 36744 + 1: 36744 26,-9: - 2: 4369 + 1: 4369 27,-7: - 2: 61440 + 1: 61440 27,-6: - 2: 3976 + 1: 3976 28,-7: - 2: 61440 + 1: 61440 28,-6: - 2: 8072 + 1: 8072 29,-7: - 2: 61440 + 1: 61440 29,-6: - 2: 3976 + 1: 3976 30,-7: - 2: 61440 + 1: 61440 30,-6: - 2: 3976 + 1: 3976 -20,5: - 2: 19 + 1: 19 -21,4: - 2: 45329 + 1: 45329 -21,5: - 2: 240 + 1: 240 -19,5: - 2: 19456 + 1: 19456 -19,6: - 2: 17484 + 1: 17484 -19,7: - 2: 19660 + 1: 19660 -19,8: - 2: 19660 + 1: 19660 -18,6: - 2: 15 + 1: 15 -18,7: - 2: 36092 + 1: 36092 -18,8: - 2: 3324 + 1: 3324 -19,9: - 2: 52292 + 1: 52292 -19,10: - 2: 3148 + 1: 3148 -18,9: - 2: 61440 + 1: 61440 20,9: 0: 4099 - 2: 26112 + 1: 26112 19,9: 0: 255 - 2: 61440 + 1: 61440 20,10: - 2: 17478 + 1: 17478 20,11: - 2: 1996 + 1: 1996 19,11: - 2: 3840 + 1: 3840 21,11: - 2: 1 + 1: 1 21,10: - 2: 16034 + 1: 16034 21,9: - 2: 8738 + 1: 8738 22,10: - 2: 19 + 1: 19 22,9: - 2: 8192 + 1: 8192 16,9: - 2: 35012 + 1: 35012 17,9: - 2: 41728 + 1: 41728 0: 142 17,10: - 2: 4371 + 1: 4371 17,11: - 2: 3889 + 1: 3889 18,9: 0: 255 - 2: 61440 + 1: 61440 18,11: - 2: 3840 + 1: 3840 -14,-12: - 2: 128 + 1: 128 -14,-11: 0: 2048 -14,-10: 0: 8 -14,13: - 2: 8866 + 1: 8866 0: 2056 -14,14: - 2: 8866 + 1: 8866 0: 2056 -14,15: - 2: 8866 + 1: 8866 0: 2056 -14,16: - 2: 58914 + 1: 58914 -13,16: - 2: 61440 + 1: 61440 -12,17: - 2: 240 + 1: 240 -13,17: - 2: 240 + 1: 240 -11,16: - 2: 61440 + 1: 61440 -11,17: - 2: 240 + 1: 240 -10,17: - 2: 242 + 1: 242 17,-9: - 2: 3840 + 1: 3840 18,-9: - 2: 3840 + 1: 3840 19,-9: - 2: 3954 + 1: 3954 19,-12: - 2: 8738 + 1: 8738 19,-13: - 2: 8738 + 1: 8738 19,-11: - 2: 8738 + 1: 8738 19,-10: - 2: 8738 + 1: 8738 20,-9: - 2: 3840 + 1: 3840 32,8: - 2: 240 + 1: 240 33,8: - 2: 17 + 1: 17 13,13: - 2: 4975 + 1: 4975 13,12: - 2: 32768 + 1: 32768 -14,17: - 2: 232 + 1: 232 -8,-14: - 2: 49152 + 1: 49152 -7,-14: - 2: 61440 + 1: 61440 -7,-13: - 2: 1 + 1: 1 -6,-14: - 2: 61440 + 1: 61440 20,-12: 0: 49344 - 2: 3072 + 1: 3072 20,-11: 0: 49344 - 2: 3072 + 1: 3072 20,-10: 0: 49344 - 2: 3072 + 1: 3072 21,-12: 0: 61680 - 2: 3840 + 1: 3840 21,-11: 0: 61680 - 2: 3840 + 1: 3840 21,-10: 0: 61680 - 2: 3840 + 1: 3840 21,-9: - 2: 256 + 1: 256 22,-12: - 2: 12066 + 1: 12066 0: 32896 22,-11: - 2: 12066 + 1: 12066 0: 32896 22,-10: - 2: 12066 + 1: 12066 0: 32896 22,-13: - 2: 12066 + 1: 12066 0: 32896 23,-12: 0: 61680 - 2: 3840 + 1: 3840 23,-11: 0: 61680 - 2: 3840 + 1: 3840 23,-10: 0: 61680 - 2: 3840 + 1: 3840 24,-12: 0: 4112 - 2: 256 + 1: 256 24,-11: 0: 4112 - 2: 256 + 1: 256 24,-10: 0: 4112 - 2: 256 + 1: 256 19,-15: - 2: 62960 + 1: 62960 19,-14: - 2: 8743 + 1: 8743 20,-15: - 2: 62704 + 1: 62704 -24,0: 0: 22355 - 2: 8236 + 1: 8236 -24,-1: 0: 4415 - 2: 192 + 1: 192 -25,0: 0: 61166 - 2: 1 + 1: 1 -24,1: 0: 22353 - 2: 8238 + 1: 8238 -25,1: 0: 61166 - 2: 1 + 1: 1 -24,2: 0: 12563 - 2: 49164 + 1: 49164 -25,2: 0: 61166 - 2: 1 + 1: 1 -24,3: 0: 255 - 2: 2048 + 1: 2048 -25,3: 0: 140 -23,0: 0: 32769 - 2: 4382 + 1: 4382 -23,1: 0: 137 - 2: 4374 + 1: 4374 -23,2: 0: 24065 - 2: 41246 + 1: 41246 -23,3: 0: 255 - 2: 4864 + 1: 4864 -23,-1: - 2: 4512 + 1: 4512 0: 3679 -23,4: - 2: 12561 + 1: 12561 -22,0: 0: 12289 - 2: 286 + 1: 286 -22,1: 0: 51 - 2: 4364 + 1: 4364 -22,2: 0: 19969 - 2: 45342 + 1: 45342 -22,3: 0: 255 - 2: 2048 + 1: 2048 -22,-1: - 2: 4528 + 1: 4528 0: 3663 -24,-4: - 2: 61440 + 1: 61440 -25,-4: - 2: 49152 + 1: 49152 -24,-2: 0: 61440 - 2: 2048 + 1: 2048 -25,-2: 0: 32768 - 2: 1 + 1: 1 -25,-1: 0: 61164 -23,-4: - 2: 61440 + 1: 61440 -24,-3: - 2: 128 + 1: 128 -23,-3: - 2: 4400 + 1: 4400 -23,-2: - 2: 785 + 1: 785 0: 61440 -22,-4: - 2: 61440 + 1: 61440 -22,-2: 0: 61440 - 2: 2048 + 1: 2048 -22,-3: - 2: 128 + 1: 128 -21,-2: - 2: 785 + 1: 785 0: 61440 -26,-3: - 2: 51200 + 1: 51200 -26,-2: - 2: 17476 + 1: 17476 -26,-1: - 2: 17476 + 1: 17476 -26,0: - 2: 17476 + 1: 17476 -25,-3: - 2: 14326 + 1: 14326 -26,1: - 2: 17476 + 1: 17476 -26,2: - 2: 17476 + 1: 17476 -26,3: - 2: 17476 + 1: 17476 -26,4: - 2: 2244 + 1: 2244 -24,5: - 2: 240 + 1: 240 -25,5: - 2: 198 + 1: 198 -24,4: - 2: 32768 + 1: 32768 -23,5: - 2: 240 + 1: 240 -22,5: - 2: 240 + 1: 240 -22,4: - 2: 32768 + 1: 32768 -25,4: - 2: 63281 + 1: 63281 20,-13: 0: 49344 - 2: 3072 + 1: 3072 21,-15: - 2: 62704 + 1: 62704 21,-13: 0: 61680 - 2: 3840 + 1: 3840 22,-15: - 2: 62704 + 1: 62704 22,-14: - 2: 8192 + 1: 8192 23,-15: - 2: 62704 + 1: 62704 23,-13: 0: 61680 - 2: 3840 + 1: 3840 24,-15: - 2: 62704 + 1: 62704 24,-13: 0: 4112 - 2: 256 + 1: 256 25,-12: - 2: 50244 + 1: 50244 25,-13: - 2: 50244 + 1: 50244 25,-11: - 2: 50244 + 1: 50244 25,-10: - 2: 50244 + 1: 50244 26,-12: - 2: 4369 + 1: 4369 26,-11: - 2: 4369 + 1: 4369 26,-10: - 2: 4369 + 1: 4369 26,-13: - 2: 4369 + 1: 4369 25,-15: - 2: 62576 + 1: 62576 25,-14: - 2: 50244 + 1: 50244 26,-15: - 2: 4368 + 1: 4368 26,-14: - 2: 4369 + 1: 4369 -18,-8: - 2: 17484 + 1: 17484 -18,-9: - 2: 17600 + 1: 17600 -18,-7: - 2: 17476 + 1: 17476 -18,-6: - 2: 17476 + 1: 17476 -17,-9: - 2: 16 + 1: 16 37,2: - 2: 1 + 1: 1 37,1: - 2: 8192 + 1: 8192 36,-2: - 2: 8192 + 1: 8192 37,-2: - 2: 528 + 1: 528 uniqueMixes: - volume: 2500 temperature: 293.15 @@ -11959,21 +11961,6 @@ entities: - 0 - 0 - 0 - - volume: 2500 - temperature: 235 - moles: - - 21.824879 - - 82.10312 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - volume: 2500 immutable: True moles: @@ -11990,10 +11977,10 @@ entities: - 0 - 0 - volume: 2500 - temperature: 293.14975 + temperature: 235 moles: - - 20.078888 - - 75.53487 + - 21.824879 + - 82.10312 - 0 - 0 - 0 @@ -12070,6 +12057,7 @@ entities: - type: BecomesStation id: TheHive - type: SpreaderGrid + - type: Shuttle - uid: 8 components: - type: MetaData @@ -13029,6 +13017,8 @@ entities: - 10844 - 10843 - 10866 + - 673 + - 28529 - uid: 22250 components: - type: Transform @@ -14932,15 +14922,15 @@ entities: - DoorStatus: DoorBolt - proto: AirlockExternalGlassShuttleArrivals entities: - - uid: 9169 + - uid: 498 components: - type: Transform - pos: 1.5,-52.5 + pos: 4.5,-52.5 parent: 1 - - uid: 9170 + - uid: 28484 components: - type: Transform - pos: 8.5,-52.5 + pos: -2.5,-52.5 parent: 1 - proto: AirlockExternalGlassShuttleEmergencyLocked entities: @@ -15781,6 +15771,11 @@ entities: - type: Transform pos: -35.5,25.5 parent: 1 + - uid: 6505 + components: + - type: Transform + pos: -58.5,24.5 + parent: 1 - proto: AirlockMaintBarLocked entities: - uid: 2896 @@ -15897,6 +15892,11 @@ entities: rot: 1.5707963267948966 rad pos: -63.5,-2.5 parent: 1 + - uid: 3827 + components: + - type: Transform + pos: -60.5,15.5 + parent: 1 - uid: 4617 components: - type: Transform @@ -17496,6 +17496,15 @@ entities: - 28339 - 28342 - 28341 + - uid: 28529 + components: + - type: Transform + pos: -60.5,20.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 22248 + - 22249 - proto: AirTankFilled entities: - uid: 12467 @@ -18279,6 +18288,11 @@ entities: parent: 1 - proto: AtmosDeviceFanDirectional entities: + - uid: 497 + components: + - type: Transform + pos: 4.5,-52.5 + parent: 1 - uid: 3354 components: - type: Transform @@ -18296,11 +18310,6 @@ entities: - type: Transform pos: -68.5,-2.5 parent: 1 - - uid: 9167 - components: - - type: Transform - pos: 1.5,-52.5 - parent: 1 - uid: 9168 components: - type: Transform @@ -18391,10 +18400,10 @@ entities: rot: -1.5707963267948966 rad pos: 140.5,0.5 parent: 1 - - uid: 28060 + - uid: 28485 components: - type: Transform - pos: 8.5,-52.5 + pos: -2.5,-52.5 parent: 1 - proto: AtmosDeviceFanTiny entities: @@ -19981,6 +19990,13 @@ entities: - type: Transform pos: 55.749737,-17.289125 parent: 1 +- proto: Biofabricator + entities: + - uid: 28477 + components: + - type: Transform + pos: 6.5,14.5 + parent: 1 - proto: BiomassReclaimer entities: - uid: 7642 @@ -21441,12 +21457,12 @@ entities: - uid: 121 components: - type: Transform - pos: -62.5,12.5 + pos: -63.5,13.5 parent: 1 - uid: 183 components: - type: Transform - pos: -61.5,13.5 + pos: -62.5,14.5 parent: 1 - uid: 189 components: @@ -21908,6 +21924,11 @@ entities: - type: Transform pos: -10.5,-8.5 parent: 1 + - uid: 5030 + components: + - type: Transform + pos: -63.5,14.5 + parent: 1 - uid: 5053 components: - type: Transform @@ -21978,6 +21999,46 @@ entities: - type: Transform pos: 30.5,5.5 parent: 1 + - uid: 6415 + components: + - type: Transform + pos: -61.5,14.5 + parent: 1 + - uid: 6417 + components: + - type: Transform + pos: -60.5,20.5 + parent: 1 + - uid: 6531 + components: + - type: Transform + pos: -60.5,17.5 + parent: 1 + - uid: 6532 + components: + - type: Transform + pos: -60.5,22.5 + parent: 1 + - uid: 6534 + components: + - type: Transform + pos: -60.5,21.5 + parent: 1 + - uid: 6538 + components: + - type: Transform + pos: -60.5,15.5 + parent: 1 + - uid: 6539 + components: + - type: Transform + pos: -60.5,19.5 + parent: 1 + - uid: 6588 + components: + - type: Transform + pos: -60.5,16.5 + parent: 1 - uid: 6614 components: - type: Transform @@ -22023,6 +22084,11 @@ entities: - type: Transform pos: 31.5,19.5 parent: 1 + - uid: 7186 + components: + - type: Transform + pos: -60.5,14.5 + parent: 1 - uid: 7221 components: - type: Transform @@ -23021,17 +23087,12 @@ entities: - uid: 17638 components: - type: Transform - pos: -61.5,12.5 + pos: -60.5,23.5 parent: 1 - uid: 17640 components: - type: Transform - pos: -60.5,13.5 - parent: 1 - - uid: 17641 - components: - - type: Transform - pos: -59.5,13.5 + pos: -60.5,18.5 parent: 1 - uid: 17642 components: @@ -56634,6 +56695,17 @@ entities: parent: 1 - proto: Chair entities: + - uid: 499 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,-49.5 + parent: 1 + - uid: 519 + components: + - type: Transform + pos: -5.5,-48.5 + parent: 1 - uid: 835 components: - type: Transform @@ -56857,6 +56929,18 @@ entities: rot: -1.5707963267948966 rad pos: 20.5,-8.5 parent: 1 + - uid: 9166 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 6.5,-49.5 + parent: 1 + - uid: 9167 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 8.5,-49.5 + parent: 1 - uid: 9309 components: - type: Transform @@ -56880,30 +56964,6 @@ entities: rot: 1.5707963267948966 rad pos: -2.5,-46.5 parent: 1 - - uid: 9363 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -5.5,-49.5 - parent: 1 - - uid: 9364 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -2.5,-49.5 - parent: 1 - - uid: 9365 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -0.5,-49.5 - parent: 1 - - uid: 9366 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -3.5,-49.5 - parent: 1 - uid: 9369 components: - type: Transform @@ -57882,6 +57942,12 @@ entities: rot: -1.5707963267948966 rad pos: 78.735176,31.755037 parent: 1 + - uid: 28517 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -59.30682,22.872543 + parent: 1 - proto: ChairFoldingSpawnFolded entities: - uid: 2989 @@ -59600,15 +59666,15 @@ entities: - type: Transform pos: 61.5,11.5 parent: 1 - - uid: 9358 + - uid: 9165 components: - type: Transform - pos: 3.5,-49.5 + pos: -0.5,-49.5 parent: 1 - - uid: 9359 + - uid: 9354 components: - type: Transform - pos: 4.5,-49.5 + pos: 0.5,-49.5 parent: 1 - uid: 9385 components: @@ -59671,10 +59737,15 @@ entities: parent: 1 - proto: ClosetFireFilled entities: - - uid: 6505 + - uid: 501 + components: + - type: Transform + pos: 2.5,-49.5 + parent: 1 + - uid: 639 components: - type: Transform - pos: -57.5,24.5 + pos: -56.5,38.5 parent: 1 - uid: 6783 components: @@ -59726,11 +59797,6 @@ entities: - type: Transform pos: 60.5,-0.5 parent: 1 - - uid: 9360 - components: - - type: Transform - pos: 6.5,-49.5 - parent: 1 - uid: 9386 components: - type: Transform @@ -60408,6 +60474,14 @@ entities: - type: Transform pos: 48.5,-8.5 parent: 1 +- proto: ClothingBackpackElectropack + entities: + - uid: 3797 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.49539,19.696146 + parent: 1 - proto: ClothingBeltBandolier entities: - uid: 3253 @@ -61230,6 +61304,16 @@ entities: - type: Transform pos: -4.4101806,34.616287 parent: 1 + - uid: 28530 + components: + - type: Transform + pos: -40.5154,-1.4141922 + parent: 1 + - uid: 28531 + components: + - type: Transform + pos: -41.525818,-1.4871597 + parent: 1 - proto: ClothingShoesSlippers entities: - uid: 5382 @@ -61737,6 +61821,12 @@ entities: rot: -1.5707963267948966 rad pos: 126.5,2.5 parent: 1 + - uid: 28060 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -48.5,22.5 + parent: 1 - proto: ComputerAnalysisConsole entities: - uid: 4631 @@ -62079,14 +62169,6 @@ entities: rot: 1.5707963267948966 rad pos: -48.5,-35.5 parent: 1 -- proto: ComputerShuttleSalvage - entities: - - uid: 5887 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -39.5,-51.5 - parent: 1 - proto: ComputerSolarControl entities: - uid: 2548 @@ -62524,6 +62606,27 @@ entities: - type: Transform pos: -9.5,24.5 parent: 1 + - uid: 23535 + components: + - type: Transform + pos: -34.5,-41.5 + parent: 1 + - uid: 23897 + components: + - type: Transform + pos: -34.5,-40.5 + parent: 1 + - uid: 23898 + components: + - type: Transform + pos: -34.5,-39.5 + parent: 1 + - uid: 23899 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -34.5,-38.5 + parent: 1 - uid: 25590 components: - type: Transform @@ -62554,6 +62657,12 @@ entities: rot: -1.5707963267948966 rad pos: -40.5,-37.5 parent: 1 + - uid: 25757 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -35.5,-38.5 + parent: 1 - uid: 26861 components: - type: Transform @@ -62734,6 +62843,11 @@ entities: - type: Transform pos: 94.5,-21.5 parent: 1 + - uid: 28508 + components: + - type: Transform + pos: -59.5,25.5 + parent: 1 - proto: CrateEngineeringAMEJar entities: - uid: 6393 @@ -63527,6 +63641,23 @@ entities: - type: Transform pos: -40.5,13.5 parent: 1 +- proto: CurtainsOrangeOpen + entities: + - uid: 6530 + components: + - type: Transform + pos: -59.5,-2.5 + parent: 1 + - uid: 16018 + components: + - type: Transform + pos: -58.5,-2.5 + parent: 1 + - uid: 17641 + components: + - type: Transform + pos: -60.5,-2.5 + parent: 1 - proto: CurtainSpawner entities: - uid: 12360 @@ -64268,6 +64399,8 @@ entities: - type: Transform pos: -60.5,3.5 parent: 1 + - type: NavMapBeacon + text: Anchor - proto: DefaultStationBeaconTheater entities: - uid: 25893 @@ -75710,20 +75843,17 @@ entities: - type: Transform pos: 27.5,12.5 parent: 1 - - uid: 3052 + - uid: 2620 components: - type: Transform - pos: 22.5,19.5 + rot: -1.5707963267948966 rad + pos: 20.5,-42.5 parent: 1 - - uid: 5441 + - uid: 3052 components: - type: Transform - rot: 3.141592653589793 rad - pos: 18.5,-44.5 + pos: 22.5,19.5 parent: 1 - - type: PointLight - enabled: True - - type: ActiveEmergencyLight - uid: 5593 components: - type: Transform @@ -75736,6 +75866,12 @@ entities: rot: 1.5707963267948966 rad pos: 84.5,-8.5 parent: 1 + - uid: 9164 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -1.5,-49.5 + parent: 1 - uid: 9654 components: - type: Transform @@ -75774,12 +75910,6 @@ entities: rot: 1.5707963267948966 rad pos: 1.5,-7.5 parent: 1 - - uid: 20148 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 0.5,-49.5 - parent: 1 - uid: 20527 components: - type: Transform @@ -76515,63 +76645,7 @@ entities: - type: Transform pos: -13.006062,36.40738 parent: 1 -- proto: EncryptionKeyCargo - entities: - - uid: 6540 - components: - - type: Transform - parent: 6538 - - type: Physics - canCollide: False -- proto: EncryptionKeyCommand - entities: - - uid: 6533 - components: - - type: Transform - parent: 6532 - - type: Physics - canCollide: False -- proto: EncryptionKeyCommon - entities: - - uid: 6542 - components: - - type: Transform - parent: 6541 - - type: Physics - canCollide: False -- proto: EncryptionKeyEngineering - entities: - - uid: 21478 - components: - - type: Transform - parent: 6530 - - type: Physics - canCollide: False -- proto: EncryptionKeyJustice - entities: - - uid: 28392 - components: - - type: Transform - parent: 6534 - - type: Physics - canCollide: False -- proto: EncryptionKeyMedical - entities: - - uid: 6417 - components: - - type: Transform - parent: 6415 - - type: Physics - canCollide: False - proto: EncryptionKeyRobo - entities: - - uid: 6531 - components: - - type: Transform - parent: 6536 - - type: Physics - canCollide: False -- proto: EncryptionKeyScience entities: - uid: 6537 components: @@ -76579,22 +76653,6 @@ entities: parent: 6536 - type: Physics canCollide: False -- proto: EncryptionKeySecurity - entities: - - uid: 6535 - components: - - type: Transform - parent: 6534 - - type: Physics - canCollide: False -- proto: EncryptionKeyService - entities: - - uid: 6539 - components: - - type: Transform - parent: 6538 - - type: Physics - canCollide: False - proto: ExosuitFabricator entities: - uid: 7339 @@ -77069,6 +77127,11 @@ entities: - type: Transform pos: 74.5,18.5 parent: 1 + - uid: 28513 + components: + - type: Transform + pos: -61.5,17.5 + parent: 1 - proto: filingCabinetRandom entities: - uid: 2002 @@ -77873,6 +77936,8 @@ entities: - 22246 - 22244 - 22245 + - 673 + - 28529 - uid: 22251 components: - type: Transform @@ -78435,6 +78500,15 @@ entities: parent: 1 - proto: Firelock entities: + - uid: 673 + components: + - type: Transform + pos: -58.5,24.5 + parent: 1 + - type: DeviceNetwork + deviceLists: + - 22248 + - 22249 - uid: 1302 components: - type: Transform @@ -80699,15 +80773,15 @@ entities: parent: 1 - proto: Floodlight entities: - - uid: 15759 + - uid: 6542 components: - type: Transform - pos: -47.93802,-4.385198 + pos: -38.65661,-12.441925 parent: 1 - - uid: 16018 + - uid: 15759 components: - type: Transform - pos: -39.255226,-12.371965 + pos: -47.93802,-4.385198 parent: 1 - uid: 16391 components: @@ -81367,6 +81441,12 @@ entities: rot: 1.5707963267948966 rad pos: 45.37556,8.424944 parent: 1 + - uid: 28512 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -60.973488,16.837103 + parent: 1 - proto: FoodApple entities: - uid: 16795 @@ -81801,6 +81881,13 @@ entities: rot: 3.141592653589793 rad pos: 50.361702,35.768944 parent: 1 +- proto: FoodKebabSkewer + entities: + - uid: 22779 + components: + - type: Transform + pos: -24.100885,16.586544 + parent: 1 - proto: FoodLollipop entities: - uid: 7633 @@ -81942,21 +82029,6 @@ entities: - type: Physics canCollide: False - type: InsideEntityStorage - - uid: 1083 - components: - - type: Transform - pos: 0.45228082,21.685434 - parent: 1 - - uid: 1084 - components: - - type: Transform - pos: 0.36894748,21.612469 - parent: 1 - - uid: 1085 - components: - - type: Transform - pos: 0.29603082,21.508228 - parent: 1 - uid: 22491 components: - type: Transform @@ -82087,18 +82159,6 @@ entities: - type: Physics canCollide: False - type: InsideEntityStorage -- proto: FoodMeatFish - entities: - - uid: 1081 - components: - - type: Transform - pos: -1.5998026,21.633316 - parent: 1 - - uid: 1082 - components: - - type: Transform - pos: -1.4643859,21.466534 - parent: 1 - proto: FoodMeatMeatball entities: - uid: 5192 @@ -82158,13 +82218,6 @@ entities: parent: 28448 - type: Physics canCollide: False -- proto: FoodMeatRatKebab - entities: - - uid: 22779 - components: - - type: Transform - pos: -24.100885,16.586544 - parent: 1 - proto: FoodMothBakedCheesePlatter entities: - uid: 6613 @@ -82388,10 +82441,10 @@ entities: - type: InsideEntityStorage - proto: FoodSnackRaisins entities: - - uid: 4303 + - uid: 9355 components: - type: Transform - pos: -4.5202436,-49.423706 + pos: -5.600837,-49.436836 parent: 1 - proto: FoodSnackSus entities: @@ -121780,36 +121833,11 @@ entities: - type: Transform pos: 7.5,44.5 parent: 1 - - uid: 497 - components: - - type: Transform - pos: 3.5,-50.5 - parent: 1 - - uid: 498 - components: - - type: Transform - pos: 11.5,-50.5 - parent: 1 - - uid: 501 - components: - - type: Transform - pos: 5.5,-50.5 - parent: 1 - - uid: 505 - components: - - type: Transform - pos: 4.5,-50.5 - parent: 1 - uid: 506 components: - type: Transform pos: 6.5,-50.5 parent: 1 - - uid: 511 - components: - - type: Transform - pos: -1.5,-50.5 - parent: 1 - uid: 512 components: - type: Transform @@ -121825,25 +121853,15 @@ entities: - type: Transform pos: -5.5,-50.5 parent: 1 - - uid: 517 - components: - - type: Transform - pos: 10.5,-50.5 - parent: 1 - uid: 520 components: - type: Transform pos: -4.5,-50.5 parent: 1 - - uid: 521 - components: - - type: Transform - pos: -2.5,-50.5 - parent: 1 - uid: 525 components: - type: Transform - pos: -3.5,-50.5 + pos: 7.5,-50.5 parent: 1 - uid: 544 components: @@ -121935,6 +121953,26 @@ entities: - type: Transform pos: -0.5,13.5 parent: 1 + - uid: 1081 + components: + - type: Transform + pos: 0.5,-50.5 + parent: 1 + - uid: 1082 + components: + - type: Transform + pos: 1.5,-50.5 + parent: 1 + - uid: 1083 + components: + - type: Transform + pos: -3.5,-51.5 + parent: 1 + - uid: 1084 + components: + - type: Transform + pos: 9.5,-50.5 + parent: 1 - uid: 1119 components: - type: Transform @@ -123665,6 +123703,11 @@ entities: - type: Transform pos: -51.5,-43.5 parent: 1 + - uid: 5887 + components: + - type: Transform + pos: -1.5,-51.5 + parent: 1 - uid: 5898 components: - type: Transform @@ -123895,6 +123938,11 @@ entities: - type: Transform pos: -65.5,33.5 parent: 1 + - uid: 6535 + components: + - type: Transform + pos: 66.5,1.5 + parent: 1 - uid: 6558 components: - type: Transform @@ -124130,11 +124178,6 @@ entities: - type: Transform pos: 65.5,1.5 parent: 1 - - uid: 7181 - components: - - type: Transform - pos: 66.5,1.5 - parent: 1 - uid: 7182 components: - type: Transform @@ -124285,25 +124328,15 @@ entities: - type: Transform pos: -0.5,6.5 parent: 1 - - uid: 9157 - components: - - type: Transform - pos: 0.5,-51.5 - parent: 1 - - uid: 9158 - components: - - type: Transform - pos: 2.5,-51.5 - parent: 1 - - uid: 9159 + - uid: 9149 components: - type: Transform - pos: 7.5,-51.5 + pos: 2.5,-50.5 parent: 1 - - uid: 9160 + - uid: 9151 components: - type: Transform - pos: 9.5,-51.5 + pos: 8.5,-50.5 parent: 1 - uid: 9187 components: @@ -124400,6 +124433,11 @@ entities: - type: Transform pos: 108.5,-4.5 parent: 1 + - uid: 9366 + components: + - type: Transform + pos: 5.5,-51.5 + parent: 1 - uid: 9546 components: - type: Transform @@ -125820,6 +125858,11 @@ entities: - type: Transform pos: -77.5,2.5 parent: 1 + - uid: 16921 + components: + - type: Transform + pos: 3.5,-51.5 + parent: 1 - uid: 17033 components: - type: Transform @@ -127710,6 +127753,51 @@ entities: - type: Transform pos: 145.5,3.5 parent: 1 + - uid: 28487 + components: + - type: Transform + pos: -58.5,20.5 + parent: 1 + - uid: 28488 + components: + - type: Transform + pos: -58.5,19.5 + parent: 1 + - uid: 28489 + components: + - type: Transform + pos: -58.5,18.5 + parent: 1 + - uid: 28490 + components: + - type: Transform + pos: -58.5,17.5 + parent: 1 + - uid: 28491 + components: + - type: Transform + pos: -58.5,16.5 + parent: 1 + - uid: 28495 + components: + - type: Transform + pos: -61.5,24.5 + parent: 1 + - uid: 28496 + components: + - type: Transform + pos: -61.5,23.5 + parent: 1 + - uid: 28497 + components: + - type: Transform + pos: -61.5,22.5 + parent: 1 + - uid: 28498 + components: + - type: Transform + pos: -61.5,21.5 + parent: 1 - proto: GrilleBroken entities: - uid: 10310 @@ -130820,6 +130908,12 @@ entities: - type: Transform pos: 100.5,-5.5 parent: 1 + - uid: 28519 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -59.5,20.5 + parent: 1 - proto: LootSpawnerIndustrialFluff entities: - uid: 26860 @@ -130827,6 +130921,21 @@ entities: - type: Transform pos: 98.5,-12.5 parent: 1 +- proto: LootSpawnerMaterialsSurplus + entities: + - uid: 28518 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -59.5,16.5 + parent: 1 +- proto: LootSpawnerRandomCrateEngineering + entities: + - uid: 28507 + components: + - type: Transform + pos: -60.5,25.5 + parent: 1 - proto: LunchboxServiceFilledRandom entities: - uid: 28399 @@ -130965,6 +131074,11 @@ entities: - type: Transform pos: 97.5,-22.5 parent: 1 + - uid: 28510 + components: + - type: Transform + pos: -61.5,16.5 + parent: 1 - proto: MachineParticleAcceleratorEndCapCircuitboard entities: - uid: 24539 @@ -131572,21 +131686,6 @@ entities: - type: Transform pos: -27.56744,-29.258795 parent: 1 -- proto: MaterialReclaimer - entities: - - uid: 4115 - components: - - type: Transform - pos: -19.5,16.5 - parent: 1 -- proto: MaterialReclaimerMachineCircuitboard - entities: - - uid: 26575 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 74.434875,37.72442 - parent: 1 - proto: MaterialWoodPlank entities: - uid: 1973 @@ -132335,6 +132434,11 @@ entities: - type: StepTriggerActive - proto: Multitool entities: + - uid: 672 + components: + - type: Transform + pos: -64.03919,15.593154 + parent: 1 - uid: 2562 components: - type: Transform @@ -132362,11 +132466,6 @@ entities: rot: -1.5707963267948966 rad pos: -63.493557,30.22321 parent: 1 - - uid: 15819 - components: - - type: Transform - pos: -61.104473,14.268036 - parent: 1 - uid: 23468 components: - type: Transform @@ -132564,16 +132663,6 @@ entities: Quantity: 500 - proto: OatBushel entities: - - uid: 1086 - components: - - type: Transform - pos: -0.57993686,19.644781 - parent: 1 - - uid: 1089 - components: - - type: Transform - pos: -0.4653536,19.613508 - parent: 1 - uid: 4279 components: - type: Transform @@ -133694,6 +133783,42 @@ entities: rot: 3.141592653589793 rad pos: 121.267975,-8.274277 parent: 1 +- proto: PaperCNCSheet + entities: + - uid: 509 + components: + - type: Transform + pos: 33.744312,-15.581722 + parent: 1 + - uid: 511 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.37973,-15.362821 + parent: 1 + - uid: 513 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 33.37973,-14.518484 + parent: 1 + - uid: 517 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.619312,-14.612299 + parent: 1 + - uid: 518 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 34.66098,-15.289854 + parent: 1 + - uid: 28478 + components: + - type: Transform + pos: 34.41098,-15.498331 + parent: 1 - proto: PaperRolling1 entities: - uid: 1110 @@ -134022,6 +134147,24 @@ entities: - type: Transform pos: 100.689575,9.321493 parent: 1 + - uid: 28479 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.796398,-16.269701 + parent: 1 + - uid: 28480 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.775564,-16.384363 + parent: 1 + - uid: 28481 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 31.785982,-16.467754 + parent: 1 - proto: PersonalAI entities: - uid: 9884 @@ -135477,6 +135620,11 @@ entities: - type: Transform pos: 108.5,-3.5 parent: 1 + - uid: 9357 + components: + - type: Transform + pos: 9.5,-49.5 + parent: 1 - uid: 9387 components: - type: Transform @@ -136009,6 +136157,12 @@ entities: rot: 3.141592653589793 rad pos: 75.5,-9.5 parent: 1 + - uid: 9157 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 3.5,-49.5 + parent: 1 - uid: 10065 components: - type: Transform @@ -136154,14 +136308,6 @@ entities: parent: 1 - type: ApcPowerReceiver powerLoad: 0 - - uid: 16919 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 2.5,-49.5 - parent: 1 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 16920 components: - type: Transform @@ -137577,6 +137723,11 @@ entities: parent: 1 - proto: PoweredLightBlueInterior entities: + - uid: 1773 + components: + - type: Transform + pos: 11.5,-51.5 + parent: 1 - uid: 6757 components: - type: Transform @@ -137594,13 +137745,6 @@ entities: - type: Transform pos: 31.5,-51.5 parent: 1 - - uid: 16921 - components: - - type: Transform - pos: 12.5,-51.5 - parent: 1 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 17245 components: - type: Transform @@ -138058,6 +138202,14 @@ entities: parent: 1 - type: ApcPowerReceiver powerLoad: 0 + - uid: 6533 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -60.5,-3.5 + parent: 1 + - type: DeviceLinkSink + invokeCounter: 1 - uid: 6807 components: - type: Transform @@ -139056,8 +139208,20 @@ entities: rot: 1.5707963267948966 rad pos: 90.5,7.5 parent: 1 + - uid: 28506 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -59.5,25.5 + parent: 1 - proto: PoweredSmallLightMaintenanceRed entities: + - uid: 680 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -61.5,16.5 + parent: 1 - uid: 910 components: - type: Transform @@ -140627,12 +140791,6 @@ entities: - type: Transform pos: 85.5,-20.5 parent: 1 - - uid: 20580 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 123.5,5.5 - parent: 1 - uid: 21448 components: - type: Transform @@ -140844,6 +141002,11 @@ entities: rot: -1.5707963267948966 rad pos: 100.5,-10.5 parent: 1 + - uid: 28509 + components: + - type: Transform + pos: -61.5,18.5 + parent: 1 - proto: RadiationCollector entities: - uid: 24370 @@ -141742,6 +141905,11 @@ entities: - type: Transform pos: -0.5,-26.5 parent: 1 + - uid: 28515 + components: + - type: Transform + pos: -61.5,18.5 + parent: 1 - proto: RandomBook entities: - uid: 5519 @@ -142146,6 +142314,13 @@ entities: - type: Transform pos: -3.5,-32.5 parent: 1 +- proto: RandomIngredient + entities: + - uid: 3360 + components: + - type: Transform + pos: -0.46056283,19.584528 + parent: 1 - proto: RandomInstruments entities: - uid: 2286 @@ -142368,12 +142543,6 @@ entities: - type: Transform pos: 35.5,8.5 parent: 1 - - uid: 22631 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 123.5,5.5 - parent: 1 - uid: 22680 components: - type: Transform @@ -142410,6 +142579,18 @@ entities: - type: Transform pos: 97.5,-12.5 parent: 1 +- proto: RandomMeat + entities: + - uid: 2619 + components: + - type: Transform + pos: 0.46652067,21.544222 + parent: 1 + - uid: 4303 + components: + - type: Transform + pos: -1.4605628,21.544222 + parent: 1 - proto: RandomPainting entities: - uid: 3015 @@ -142693,6 +142874,11 @@ entities: - type: Transform pos: -3.5,-17.5 parent: 1 + - uid: 28514 + components: + - type: Transform + pos: -61.5,19.5 + parent: 1 - proto: RandomPosterLegit entities: - uid: 3219 @@ -142893,25 +143079,20 @@ entities: parent: 1 - proto: RandomProduce entities: - - uid: 5176 - components: - - type: Transform - pos: 73.5,25.5 - parent: 1 - - uid: 7326 + - uid: 3695 components: - type: Transform pos: -1.5,19.5 parent: 1 - - uid: 7327 + - uid: 4115 components: - type: Transform pos: -1.5,19.5 parent: 1 - - uid: 7328 + - uid: 5176 components: - type: Transform - pos: -1.5,19.5 + pos: 73.5,25.5 parent: 1 - uid: 18958 components: @@ -142923,11 +143104,6 @@ entities: - type: Transform pos: 73.5,25.5 parent: 1 - - uid: 25757 - components: - - type: Transform - pos: -1.5,19.5 - parent: 1 - uid: 28371 components: - type: Transform @@ -142999,6 +143175,13 @@ entities: - type: Transform pos: -22.5,25.5 parent: 1 +- proto: RandomSoakedCigarette + entities: + - uid: 28516 + components: + - type: Transform + pos: -61.83807,18.025427 + parent: 1 - proto: RandomSoap entities: - uid: 6344 @@ -143286,6 +143469,11 @@ entities: - type: Transform pos: -13.5,32.5 parent: 1 + - uid: 28511 + components: + - type: Transform + pos: -59.5,23.5 + parent: 1 - proto: RandomVending entities: - uid: 7064 @@ -143303,10 +143491,10 @@ entities: - type: Transform pos: 29.5,-9.5 parent: 1 - - uid: 9357 + - uid: 9169 components: - type: Transform - pos: 5.5,-49.5 + pos: 1.5,-49.5 parent: 1 - uid: 9367 components: @@ -143471,6 +143659,11 @@ entities: parent: 1 - proto: Recycler entities: + - uid: 507 + components: + - type: Transform + pos: -34.5,-40.5 + parent: 1 - uid: 3555 components: - type: Transform @@ -144999,25 +145192,15 @@ entities: - type: Transform pos: -55.5,23.5 parent: 1 - - uid: 509 - components: - - type: Transform - pos: -1.5,-50.5 - parent: 1 - uid: 510 components: - type: Transform pos: -5.5,-50.5 parent: 1 - - uid: 513 - components: - - type: Transform - pos: -2.5,-50.5 - parent: 1 - - uid: 519 + - uid: 521 components: - type: Transform - pos: -3.5,-50.5 + pos: 1.5,-50.5 parent: 1 - uid: 523 components: @@ -145044,6 +145227,16 @@ entities: - type: Transform pos: 13.5,-36.5 parent: 1 + - uid: 1085 + components: + - type: Transform + pos: -3.5,-51.5 + parent: 1 + - uid: 1089 + components: + - type: Transform + pos: 5.5,-51.5 + parent: 1 - uid: 1257 components: - type: Transform @@ -145889,6 +146082,11 @@ entities: - type: Transform pos: 88.5,1.5 parent: 1 + - uid: 5999 + components: + - type: Transform + pos: -1.5,-51.5 + parent: 1 - uid: 6016 components: - type: Transform @@ -146124,6 +146322,16 @@ entities: - type: Transform pos: 105.5,-3.5 parent: 1 + - uid: 7327 + components: + - type: Transform + pos: 2.5,-50.5 + parent: 1 + - uid: 7328 + components: + - type: Transform + pos: 0.5,-50.5 + parent: 1 - uid: 7478 components: - type: Transform @@ -146204,36 +146412,16 @@ entities: - type: Transform pos: -0.5,6.5 parent: 1 - - uid: 9149 - components: - - type: Transform - pos: 3.5,-50.5 - parent: 1 - uid: 9150 components: - type: Transform - pos: 4.5,-50.5 - parent: 1 - - uid: 9151 - components: - - type: Transform - pos: 5.5,-50.5 + pos: 7.5,-50.5 parent: 1 - uid: 9152 components: - type: Transform pos: 6.5,-50.5 parent: 1 - - uid: 9153 - components: - - type: Transform - pos: 10.5,-50.5 - parent: 1 - - uid: 9154 - components: - - type: Transform - pos: 11.5,-50.5 - parent: 1 - uid: 9155 components: - type: Transform @@ -146244,25 +146432,10 @@ entities: - type: Transform pos: 14.5,-50.5 parent: 1 - - uid: 9161 - components: - - type: Transform - pos: 0.5,-51.5 - parent: 1 - - uid: 9162 - components: - - type: Transform - pos: 2.5,-51.5 - parent: 1 - uid: 9163 components: - type: Transform - pos: 7.5,-51.5 - parent: 1 - - uid: 9164 - components: - - type: Transform - pos: 9.5,-51.5 + pos: 3.5,-51.5 parent: 1 - uid: 9202 components: @@ -147114,6 +147287,11 @@ entities: - type: Transform pos: 57.5,34.5 parent: 1 + - uid: 16919 + components: + - type: Transform + pos: 9.5,-50.5 + parent: 1 - uid: 17126 components: - type: Transform @@ -147164,6 +147342,11 @@ entities: - type: Transform pos: -63.5,-8.5 parent: 1 + - uid: 20148 + components: + - type: Transform + pos: 8.5,-50.5 + parent: 1 - uid: 20231 components: - type: Transform @@ -147539,6 +147722,51 @@ entities: - type: Transform pos: 79.5,40.5 parent: 1 + - uid: 28520 + components: + - type: Transform + pos: -58.5,16.5 + parent: 1 + - uid: 28521 + components: + - type: Transform + pos: -58.5,17.5 + parent: 1 + - uid: 28522 + components: + - type: Transform + pos: -58.5,18.5 + parent: 1 + - uid: 28523 + components: + - type: Transform + pos: -58.5,19.5 + parent: 1 + - uid: 28524 + components: + - type: Transform + pos: -58.5,20.5 + parent: 1 + - uid: 28525 + components: + - type: Transform + pos: -61.5,24.5 + parent: 1 + - uid: 28526 + components: + - type: Transform + pos: -61.5,23.5 + parent: 1 + - uid: 28527 + components: + - type: Transform + pos: -61.5,22.5 + parent: 1 + - uid: 28528 + components: + - type: Transform + pos: -61.5,21.5 + parent: 1 - proto: RemoteSignaller entities: - uid: 11599 @@ -147657,6 +147885,13 @@ entities: - type: Transform pos: 102.49735,24.384338 parent: 1 +- proto: Roboisseur + entities: + - uid: 2617 + components: + - type: Transform + pos: 10.5,22.5 + parent: 1 - proto: RobustHarvestChemistryBottle entities: - uid: 1208 @@ -147707,6 +147942,14 @@ entities: - type: Transform pos: 78.49963,25.49577 parent: 1 +- proto: RubberChicken + entities: + - uid: 508 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.567345,-28.532404 + parent: 1 - proto: SalvageCanisterSpawner entities: - uid: 6512 @@ -148900,14 +149143,6 @@ entities: rot: 3.141592653589793 rad pos: 29.332079,26.503263 parent: 1 -- proto: ShockCollar - entities: - - uid: 3797 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 64.49539,19.696146 - parent: 1 - proto: Shovel entities: - uid: 1203 @@ -150094,7 +150329,7 @@ entities: parent: 1 - type: DeviceLinkSource linkedPorts: - 17115: + 6533: - Status: Toggle - uid: 17178 components: @@ -151344,42 +151579,37 @@ entities: parent: 1 - proto: SignNanotrasen1 entities: - - uid: 2616 + - uid: 9162 components: - type: Transform - rot: 3.141592653589793 rad pos: 42.5,1.5 parent: 1 - proto: SignNanotrasen2 entities: - - uid: 2617 + - uid: 9161 components: - type: Transform - rot: 3.141592653589793 rad pos: 43.5,1.5 parent: 1 - proto: SignNanotrasen3 entities: - - uid: 2618 + - uid: 9160 components: - type: Transform - rot: 3.141592653589793 rad pos: 44.5,1.5 parent: 1 - proto: SignNanotrasen4 entities: - - uid: 2619 + - uid: 9159 components: - type: Transform - rot: 3.141592653589793 rad pos: 45.5,1.5 parent: 1 - proto: SignNanotrasen5 entities: - - uid: 2620 + - uid: 9158 components: - type: Transform - rot: 3.141592653589793 rad pos: 46.5,1.5 parent: 1 - proto: SignNews @@ -151725,13 +151955,6 @@ entities: - type: Transform pos: 78.5,-19.5 parent: 1 -- proto: SignTelecomms - entities: - - uid: 6588 - components: - - type: Transform - pos: -60.5,6.5 - parent: 1 - proto: SignToolStorage entities: - uid: 26236 @@ -151749,15 +151972,15 @@ entities: parent: 1 - proto: SilverDoor entities: - - uid: 9165 + - uid: 21480 components: - type: Transform - pos: 1.5,-50.5 + pos: 4.5,-50.5 parent: 1 - - uid: 9166 + - uid: 28486 components: - type: Transform - pos: 8.5,-50.5 + pos: -2.5,-50.5 parent: 1 - proto: SilverOre1 entities: @@ -153719,35 +153942,35 @@ entities: parent: 1 - proto: SpawnPointLatejoin entities: - - uid: 1763 + - uid: 500 components: - type: Transform - pos: 2.5,-49.5 + pos: -2.5,-49.5 parent: 1 - - uid: 1773 + - uid: 504 components: - type: Transform - pos: 7.5,-49.5 + pos: 5.5,-49.5 parent: 1 - - uid: 2984 + - uid: 505 components: - type: Transform - pos: 8.5,-49.5 + pos: 3.5,-49.5 parent: 1 - - uid: 3360 + - uid: 5441 components: - type: Transform - pos: 0.5,-49.5 + pos: 4.5,-49.5 parent: 1 - - uid: 3695 + - uid: 9358 components: - type: Transform - pos: 9.5,-49.5 + pos: -1.5,-49.5 parent: 1 - - uid: 5999 + - uid: 9364 components: - type: Transform - pos: 1.5,-49.5 + pos: -3.5,-49.5 parent: 1 - uid: 19601 components: @@ -153820,6 +154043,11 @@ entities: - type: Transform pos: 29.5,-13.5 parent: 1 + - uid: 9360 + components: + - type: Transform + pos: -4.5,-49.5 + parent: 1 - uid: 9505 components: - type: Transform @@ -153860,11 +154088,6 @@ entities: - type: Transform pos: 36.5,-36.5 parent: 1 - - uid: 21556 - components: - - type: Transform - pos: -5.5,-49.5 - parent: 1 - uid: 21557 components: - type: Transform @@ -153937,6 +154160,11 @@ entities: - type: Transform pos: 87.5,-14.5 parent: 1 + - uid: 9359 + components: + - type: Transform + pos: 6.5,-49.5 + parent: 1 - uid: 11575 components: - type: Transform @@ -153968,11 +154196,6 @@ entities: - type: Transform pos: 84.5,-14.5 parent: 1 - - uid: 23897 - components: - - type: Transform - pos: -0.5,-49.5 - parent: 1 - proto: SpawnPointMedicalIntern entities: - uid: 12107 @@ -154002,18 +154225,23 @@ entities: parent: 1 - proto: SpawnPointMime entities: - - uid: 13793 + - uid: 503 components: - type: Transform - pos: 20.5,-33.5 + pos: 12.5,-49.5 parent: 1 - - uid: 23898 + - uid: 13793 components: - type: Transform - pos: -2.5,-49.5 + pos: 20.5,-33.5 parent: 1 - proto: SpawnPointMusician entities: + - uid: 502 + components: + - type: Transform + pos: 8.5,-49.5 + parent: 1 - uid: 10037 components: - type: Transform @@ -154034,11 +154262,6 @@ entities: - type: Transform pos: 30.5,-36.5 parent: 1 - - uid: 23899 - components: - - type: Transform - pos: -3.5,-49.5 - parent: 1 - proto: SpawnPointObserver entities: - uid: 4719 @@ -154801,6 +155024,13 @@ entities: - type: Transform pos: -61.51701,-0.9163426 parent: 1 +- proto: StationAnchor + entities: + - uid: 7181 + components: + - type: Transform + pos: -60.5,4.5 + parent: 1 - proto: StationMap entities: - uid: 20588 @@ -155756,7 +155986,7 @@ entities: setupAvailableNetworks: - SurveillanceCameraEngineering nameSet: True - id: Telecomms Server Room + id: Station Anchor Room - uid: 618 components: - type: Transform @@ -155800,16 +156030,6 @@ entities: - SurveillanceCameraEngineering nameSet: True id: Battery Room - - uid: 680 - components: - - type: Transform - pos: -57.5,24.5 - parent: 1 - - type: SurveillanceCamera - setupAvailableNetworks: - - SurveillanceCameraEngineering - nameSet: True - id: Atmos 2 - uid: 716 components: - type: Transform @@ -155864,8 +156084,29 @@ entities: - SurveillanceCameraEngineering nameSet: True id: Hallway-(Engine) + - uid: 28504 + components: + - type: Transform + pos: -52.5,24.5 + parent: 1 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraEngineering + nameSet: True + id: Atmos 2 - proto: SurveillanceCameraGeneral entities: + - uid: 2984 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 2.5,-46.5 + parent: 1 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraGeneral + nameSet: True + id: Arrivals - uid: 14395 components: - type: Transform @@ -156035,16 +156276,6 @@ entities: - SurveillanceCameraGeneral nameSet: True id: Hallway-(Park/Arcade) - - uid: 21505 - components: - - type: Transform - pos: 2.5,-49.5 - parent: 1 - - type: SurveillanceCamera - setupAvailableNetworks: - - SurveillanceCameraGeneral - nameSet: True - id: Arrivals - uid: 21511 components: - type: Transform @@ -158247,23 +158478,21 @@ entities: - type: Transform pos: 53.5,27.5 parent: 1 - - uid: 9354 + - uid: 9170 components: - type: Transform - rot: 3.141592653589793 rad - pos: -4.5,-49.5 + pos: 7.5,-49.5 parent: 1 - - uid: 9355 + - uid: 9356 components: - type: Transform rot: 3.141592653589793 rad - pos: -1.5,-49.5 + pos: -1.5,-46.5 parent: 1 - - uid: 9356 + - uid: 9363 components: - type: Transform - rot: 3.141592653589793 rad - pos: -1.5,-46.5 + pos: -5.5,-49.5 parent: 1 - uid: 9368 components: @@ -160191,103 +160420,19 @@ entities: rot: -1.5707963267948966 rad pos: -5.5,-37.5 parent: 1 -- proto: TelecomServer +- proto: TelecomServerCircuitboard entities: - - uid: 6415 - components: - - type: MetaData - name: medical telecommunication server - - type: Transform - pos: -61.5,3.5 - parent: 1 - - type: ContainerContainer - containers: - key_slots: !type:Container - showEnts: False - occludes: True - ents: - - 6417 - machine_board: !type:Container - showEnts: False - occludes: True - ents: [] - machine_parts: !type:Container - showEnts: False - occludes: True - ents: [] - - uid: 6530 - components: - - type: MetaData - name: engineering telecommunication server - - type: Transform - pos: -59.5,5.5 - parent: 1 - - type: ContainerContainer - containers: - key_slots: !type:Container - showEnts: False - occludes: True - ents: - - 21478 - machine_board: !type:Container - showEnts: False - occludes: True - ents: [] - machine_parts: !type:Container - showEnts: False - occludes: True - ents: [] - - uid: 6532 + - uid: 6571 components: - - type: MetaData - name: command telecommunication server - type: Transform - pos: -60.5,5.5 - parent: 1 - - type: ContainerContainer - containers: - key_slots: !type:Container - showEnts: False - occludes: True - ents: - - 6533 - machine_board: !type:Container - showEnts: False - occludes: True - ents: [] - machine_parts: !type:Container - showEnts: False - occludes: True - ents: [] - - uid: 6534 - components: - - type: MetaData - name: security telecommunication server - - type: Transform - pos: -61.5,5.5 + pos: -61.504536,-1.4635959 parent: 1 - - type: ContainerContainer - containers: - key_slots: !type:Container - showEnts: False - occludes: True - ents: - - 6535 - - 28392 - machine_board: !type:Container - showEnts: False - occludes: True - ents: [] - machine_parts: !type:Container - showEnts: False - occludes: True - ents: [] +- proto: TelecomServerFilled + entities: - uid: 6536 components: - - type: MetaData - name: epistemics telecommunication server - type: Transform - pos: -59.5,3.5 + pos: 123.5,5.5 parent: 1 - type: ContainerContainer containers: @@ -160296,52 +160441,6 @@ entities: occludes: True ents: - 6537 - - 6531 - machine_board: !type:Container - showEnts: False - occludes: True - ents: [] - machine_parts: !type:Container - showEnts: False - occludes: True - ents: [] - - uid: 6538 - components: - - type: MetaData - name: logistics/service telecommunication server - - type: Transform - pos: -61.5,2.5 - parent: 1 - - type: ContainerContainer - containers: - key_slots: !type:Container - showEnts: False - occludes: True - ents: - - 6540 - - 6539 - machine_board: !type:Container - showEnts: False - occludes: True - ents: [] - machine_parts: !type:Container - showEnts: False - occludes: True - ents: [] - - uid: 6541 - components: - - type: MetaData - name: common telecommunication server - - type: Transform - pos: -59.5,2.5 - parent: 1 - - type: ContainerContainer - containers: - key_slots: !type:Container - showEnts: False - occludes: True - ents: - - 6542 machine_board: !type:Container showEnts: False occludes: True @@ -160350,13 +160449,6 @@ entities: showEnts: False occludes: True ents: [] -- proto: TelecomServerCircuitboard - entities: - - uid: 6571 - components: - - type: Transform - pos: -61.504536,-1.4635959 - parent: 1 - proto: ThermomachineHeaterMachineCircuitBoard entities: - uid: 6499 @@ -160972,6 +161064,37 @@ entities: - Left: Forward - Right: Reverse - Middle: Off + - uid: 26575 + components: + - type: Transform + pos: -35.5,-40.5 + parent: 1 + - type: DeviceLinkSource + linkedPorts: + 23535: + - Left: Forward + - Right: Reverse + - Middle: Off + 507: + - Left: Forward + - Right: Reverse + - Middle: Off + 23897: + - Left: Forward + - Right: Reverse + - Middle: Off + 23898: + - Left: Forward + - Right: Reverse + - Middle: Off + 23899: + - Left: Forward + - Right: Reverse + - Middle: Off + 25757: + - Left: Forward + - Right: Reverse + - Middle: Off - proto: UnfinishedMachineFrame entities: - uid: 12302 @@ -160989,11 +161112,6 @@ entities: - type: Transform pos: -11.5,10.5 parent: 1 - - uid: 15813 - components: - - type: Transform - pos: -60.5,14.5 - parent: 1 - uid: 20597 components: - type: Transform @@ -161015,6 +161133,11 @@ entities: rot: 1.5707963267948966 rad pos: 97.5,-15.5 parent: 1 + - uid: 28505 + components: + - type: Transform + pos: -58.5,13.5 + parent: 1 - proto: UniformJabroni entities: - uid: 15982 @@ -162367,51 +162490,11 @@ entities: - type: Transform pos: -14.5,20.5 parent: 1 - - uid: 499 - components: - - type: Transform - pos: 2.5,-52.5 - parent: 1 - - uid: 500 - components: - - type: Transform - pos: 0.5,-50.5 - parent: 1 - - uid: 502 - components: - - type: Transform - pos: 9.5,-50.5 - parent: 1 - - uid: 503 - components: - - type: Transform - pos: 7.5,-52.5 - parent: 1 - - uid: 504 - components: - - type: Transform - pos: 2.5,-50.5 - parent: 1 - - uid: 507 - components: - - type: Transform - pos: 9.5,-52.5 - parent: 1 - - uid: 508 - components: - - type: Transform - pos: 7.5,-50.5 - parent: 1 - uid: 516 components: - type: Transform pos: -6.5,-50.5 parent: 1 - - uid: 518 - components: - - type: Transform - pos: 0.5,-52.5 - parent: 1 - uid: 522 components: - type: Transform @@ -162682,11 +162765,6 @@ entities: - type: Transform pos: -59.5,-7.5 parent: 1 - - uid: 639 - components: - - type: Transform - pos: -60.5,-7.5 - parent: 1 - uid: 649 components: - type: Transform @@ -162737,16 +162815,6 @@ entities: - type: Transform pos: -65.5,10.5 parent: 1 - - uid: 672 - components: - - type: Transform - pos: -60.5,15.5 - parent: 1 - - uid: 673 - components: - - type: Transform - pos: -59.5,15.5 - parent: 1 - uid: 674 components: - type: Transform @@ -163222,6 +163290,11 @@ entities: - type: Transform pos: 9.5,-34.5 parent: 1 + - uid: 1086 + components: + - type: Transform + pos: -3.5,-50.5 + parent: 1 - uid: 1087 components: - type: Transform @@ -164087,6 +164160,11 @@ entities: - type: Transform pos: -23.5,-7.5 parent: 1 + - uid: 1763 + components: + - type: Transform + pos: 3.5,-52.5 + parent: 1 - uid: 1770 components: - type: Transform @@ -165012,6 +165090,16 @@ entities: - type: Transform pos: -40.5,-2.5 parent: 1 + - uid: 2616 + components: + - type: Transform + pos: 11.5,-50.5 + parent: 1 + - uid: 2618 + components: + - type: Transform + pos: 10.5,-50.5 + parent: 1 - uid: 2691 components: - type: Transform @@ -166032,11 +166120,6 @@ entities: - type: Transform pos: -58.5,26.5 parent: 1 - - uid: 3682 - components: - - type: Transform - pos: -58.5,24.5 - parent: 1 - uid: 3687 components: - type: Transform @@ -166502,16 +166585,6 @@ entities: - type: Transform pos: -64.5,-5.5 parent: 1 - - uid: 3827 - components: - - type: Transform - pos: -62.5,15.5 - parent: 1 - - uid: 3828 - components: - - type: Transform - pos: -61.5,15.5 - parent: 1 - uid: 3830 components: - type: Transform @@ -167942,11 +168015,6 @@ entities: - type: Transform pos: -41.5,-13.5 parent: 1 - - uid: 5030 - components: - - type: Transform - pos: -40.5,-13.5 - parent: 1 - uid: 5033 components: - type: Transform @@ -169642,6 +169710,11 @@ entities: - type: Transform pos: -20.5,27.5 parent: 1 + - uid: 6541 + components: + - type: Transform + pos: -40.5,-13.5 + parent: 1 - uid: 6554 components: - type: Transform @@ -169917,6 +169990,11 @@ entities: - type: Transform pos: 56.5,-4.5 parent: 1 + - uid: 7326 + components: + - type: Transform + pos: -1.5,-50.5 + parent: 1 - uid: 7331 components: - type: Transform @@ -170632,6 +170710,16 @@ entities: - type: Transform pos: 43.5,39.5 parent: 1 + - uid: 9153 + components: + - type: Transform + pos: 3.5,-50.5 + parent: 1 + - uid: 9154 + components: + - type: Transform + pos: 5.5,-52.5 + parent: 1 - uid: 9171 components: - type: Transform @@ -170727,6 +170815,11 @@ entities: - type: Transform pos: 107.5,9.5 parent: 1 + - uid: 9365 + components: + - type: Transform + pos: 5.5,-50.5 + parent: 1 - uid: 9547 components: - type: Transform @@ -173597,11 +173690,6 @@ entities: - type: Transform pos: -63.5,-7.5 parent: 1 - - uid: 22836 - components: - - type: Transform - pos: -62.5,-7.5 - parent: 1 - uid: 22838 components: - type: Transform @@ -174717,6 +174805,56 @@ entities: - type: Transform pos: 135.5,7.5 parent: 1 + - uid: 28482 + components: + - type: Transform + pos: -1.5,-52.5 + parent: 1 + - uid: 28483 + components: + - type: Transform + pos: -3.5,-52.5 + parent: 1 + - uid: 28492 + components: + - type: Transform + pos: -58.5,21.5 + parent: 1 + - uid: 28493 + components: + - type: Transform + pos: -58.5,22.5 + parent: 1 + - uid: 28494 + components: + - type: Transform + pos: -61.5,25.5 + parent: 1 + - uid: 28499 + components: + - type: Transform + pos: -61.5,20.5 + parent: 1 + - uid: 28500 + components: + - type: Transform + pos: -61.5,19.5 + parent: 1 + - uid: 28501 + components: + - type: Transform + pos: -62.5,19.5 + parent: 1 + - uid: 28502 + components: + - type: Transform + pos: -62.5,18.5 + parent: 1 + - uid: 28503 + components: + - type: Transform + pos: -62.5,17.5 + parent: 1 - proto: WallSolid entities: - uid: 2 @@ -177839,6 +177977,11 @@ entities: - type: Transform pos: 32.5,38.5 parent: 1 + - uid: 3682 + components: + - type: Transform + pos: -62.5,-7.5 + parent: 1 - uid: 3686 components: - type: Transform @@ -177869,6 +178012,11 @@ entities: - type: Transform pos: 87.5,14.5 parent: 1 + - uid: 3828 + components: + - type: Transform + pos: -61.5,15.5 + parent: 1 - uid: 3875 components: - type: Transform @@ -180139,6 +180287,16 @@ entities: - type: Transform pos: -62.5,7.5 parent: 1 + - uid: 15813 + components: + - type: Transform + pos: -62.5,15.5 + parent: 1 + - uid: 15819 + components: + - type: Transform + pos: -59.5,15.5 + parent: 1 - uid: 16127 components: - type: Transform @@ -180654,6 +180812,11 @@ entities: - type: Transform pos: -64.5,11.5 parent: 1 + - uid: 22836 + components: + - type: Transform + pos: -60.5,-7.5 + parent: 1 - uid: 23448 components: - type: Transform @@ -180793,15 +180956,15 @@ entities: - type: Transform pos: 79.5,13.5 parent: 1 - - uid: 21480 + - uid: 21505 components: - type: Transform - pos: 76.5,23.5 + pos: 77.5,23.5 parent: 1 - - uid: 23535 + - uid: 21556 components: - type: Transform - pos: 77.5,23.5 + pos: 76.5,23.5 parent: 1 - proto: WallWood entities: @@ -182319,7 +182482,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -12887.691 + secondsUntilStateChange: -22246.982 state: Opening - uid: 5096 components: @@ -182341,7 +182504,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -12887.691 + secondsUntilStateChange: -22246.982 state: Opening - uid: 5498 components: @@ -182357,7 +182520,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -12611.309 + secondsUntilStateChange: -21970.6 state: Opening - uid: 8696 components: @@ -182390,7 +182553,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -12609.425 + secondsUntilStateChange: -21968.717 state: Opening - uid: 18835 components: @@ -182402,7 +182565,7 @@ entities: lastSignals: DoorStatus: True - type: Door - secondsUntilStateChange: -12606.426 + secondsUntilStateChange: -21965.717 state: Opening - uid: 23917 components: @@ -183141,6 +183304,11 @@ entities: - type: Transform pos: -44.5,11.5 parent: 1 + - uid: 6540 + components: + - type: Transform + pos: 66.5,1.5 + parent: 1 - uid: 6740 components: - type: Transform @@ -183196,11 +183364,6 @@ entities: - type: Transform pos: 65.5,1.5 parent: 1 - - uid: 7186 - components: - - type: Transform - pos: 66.5,1.5 - parent: 1 - uid: 7187 components: - type: Transform @@ -184166,6 +184329,21 @@ entities: rot: 3.141592653589793 rad pos: 71.5,-16.5 parent: 1 + - uid: 28474 + components: + - type: Transform + pos: -58.5,36.5 + parent: 1 + - uid: 28475 + components: + - type: Transform + pos: -57.5,36.5 + parent: 1 + - uid: 28476 + components: + - type: Transform + pos: -59.5,36.5 + parent: 1 - proto: Wirecutter entities: - uid: 21445 diff --git a/Resources/Maps/lighthouse.yml b/Resources/Maps/lighthouse.yml index c8d13daba11..f599ec505e3 100644 --- a/Resources/Maps/lighthouse.yml +++ b/Resources/Maps/lighthouse.yml @@ -62,6 +62,7 @@ tilemap: 114: FloorWhiteDiagonal 118: FloorWhiteMono 119: FloorWhiteOffset + 9: FloorWhitePlastic 123: FloorWood 3: FloorWoodLarge 125: FloorWoodTile @@ -145,7 +146,7 @@ entities: version: 6 -2,1: ind: -2,1 - tiles: XgAAAAACXgAAAAABMAAAAAADXgAAAAACXgAAAAAAfwAAAAAAQAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAACXgAAAAABMgAAAAAAMgAAAAAAAQAAAAAAXgAAAAAAXgAAAAABXgAAAAACXgAAAAAAXgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAADXgAAAAABXgAAAAACXgAAAAAAAQAAAAAAXgAAAAADXgAAAAACXgAAAAACXgAAAAACXgAAAAACXgAAAAACXgAAAAACXgAAAAACXgAAAAADXgAAAAAAXgAAAAABXgAAAAADXgAAAAABXgAAAAACXgAAAAADAQAAAAAAXgAAAAAAXgAAAAABMAAAAAAAXgAAAAADXgAAAAAAXgAAAAAAMAAAAAADXgAAAAACXgAAAAACXgAAAAADfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAABXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAADXgAAAAADXgAAAAACXgAAAAACXgAAAAADXgAAAAABIAAAAAADIAAAAAADIAAAAAACIAAAAAABIAAAAAADIAAAAAADXgAAAAABXgAAAAAAXgAAAAACXgAAAAAAXgAAAAAAXgAAAAACXgAAAAADXgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAIAAAAAACIAAAAAACIAAAAAABIAAAAAACPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAPwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAXgAAAAADXgAAAAACXgAAAAACIAAAAAADIAAAAAABIAAAAAAAIAAAAAABPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAXgAAAAABXgAAAAACXgAAAAADUAAAAAAAIAAAAAACIAAAAAAAIAAAAAACIAAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAXgAAAAABXgAAAAAAXgAAAAACXgAAAAADOgAAAAADOgAAAAABOgAAAAADOgAAAAADPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAXgAAAAADXgAAAAAAXgAAAAACXgAAAAAAOgAAAAABOgAAAAADOgAAAAAAOgAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAfwAAAAAAXgAAAAAAXgAAAAABXgAAAAADXgAAAAACOgAAAAACOgAAAAAAOgAAAAADOgAAAAABPwAAAAAAPwAAAAAAfwAAAAAALwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAADXgAAAAABXgAAAAAAXgAAAAABXgAAAAACOgAAAAABOgAAAAACOgAAAAABOgAAAAADPwAAAAAAPwAAAAAAfwAAAAAALwAAAAAALwAAAAAALwAAAAAAfwAAAAAAfwAAAAAAXgAAAAADfwAAAAAAXgAAAAADXgAAAAACOgAAAAACOgAAAAADOgAAAAABOgAAAAAAPQAAAAAAPwAAAAAAfwAAAAAALwAAAAAALwAAAAAALwAAAAAALwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAXgAAAAAAXgAAAAADXgAAAAAAXgAAAAABXgAAAAACXgAAAAABPQAAAAAAPQAAAAAAfwAAAAAAfwAAAAAALwAAAAAALwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAXgAAAAADXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAACXgAAAAADPQAAAAAAPQAAAAAAPQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAXgAAAAABXgAAAAACXgAAAAACXgAAAAADXgAAAAABXgAAAAACXgAAAAAA + tiles: XgAAAAACXgAAAAABMAAAAAADXgAAAAACXgAAAAAAfwAAAAAAQAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAACXgAAAAABMgAAAAAAMgAAAAAAAQAAAAAAXgAAAAAAXgAAAAABXgAAAAACXgAAAAAAXgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAADXgAAAAABXgAAAAACXgAAAAAAAQAAAAAAXgAAAAADXgAAAAACXgAAAAACXgAAAAACXgAAAAACXgAAAAACXgAAAAACXgAAAAACXgAAAAADXgAAAAAAXgAAAAABXgAAAAADXgAAAAABXgAAAAACXgAAAAADAQAAAAAAXgAAAAAAXgAAAAABMAAAAAAAXgAAAAADXgAAAAAAXgAAAAAAMAAAAAADXgAAAAACXgAAAAACXgAAAAADfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAABXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAADXgAAAAADXgAAAAACXgAAAAACXgAAAAADXgAAAAABXgAAAAAAfwAAAAAAIAAAAAACIAAAAAABIAAAAAADIAAAAAADXgAAAAABXgAAAAAAXgAAAAACXgAAAAAAXgAAAAAAXgAAAAACXgAAAAADXgAAAAAAfwAAAAAAXgAAAAAAfwAAAAAAfwAAAAAAIAAAAAACIAAAAAACIAAAAAABIAAAAAACPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAPwAAAAAAUAAAAAAAfwAAAAAAXgAAAAAAXgAAAAADXgAAAAACXgAAAAACIAAAAAADIAAAAAABIAAAAAAAIAAAAAABPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAXgAAAAABXgAAAAACXgAAAAADUAAAAAAAIAAAAAACIAAAAAAAIAAAAAACIAAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAXgAAAAABXgAAAAAAXgAAAAACXgAAAAADOgAAAAADOgAAAAABOgAAAAADOgAAAAADPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAXgAAAAADXgAAAAAAXgAAAAACXgAAAAAAOgAAAAABOgAAAAADOgAAAAAAOgAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAfwAAAAAAXgAAAAAAXgAAAAABXgAAAAADXgAAAAACOgAAAAACOgAAAAAAOgAAAAADOgAAAAABPwAAAAAAPwAAAAAAfwAAAAAALwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAADXgAAAAABXgAAAAAAXgAAAAABXgAAAAACOgAAAAABOgAAAAACOgAAAAABOgAAAAADPwAAAAAAPwAAAAAAfwAAAAAALwAAAAAALwAAAAAALwAAAAAAfwAAAAAAfwAAAAAAXgAAAAADfwAAAAAAXgAAAAADXgAAAAACOgAAAAACOgAAAAADOgAAAAABOgAAAAAAPQAAAAAAPwAAAAAAfwAAAAAALwAAAAAALwAAAAAALwAAAAAALwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAXgAAAAAAXgAAAAADXgAAAAAAXgAAAAABXgAAAAACXgAAAAABPQAAAAAAPQAAAAAAfwAAAAAAfwAAAAAALwAAAAAALwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAXgAAAAADXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAACXgAAAAADPQAAAAAAPQAAAAAAPQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAXgAAAAABXgAAAAACXgAAAAACXgAAAAADXgAAAAABXgAAAAACXgAAAAAA version: 6 1,1: ind: 1,1 @@ -153,7 +154,7 @@ entities: version: 6 -1,2: ind: -1,2 - tiles: fwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAcQAAAAADcQAAAAADUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAXgAAAAABMAAAAAADXgAAAAADfwAAAAAAfwAAAAAAcQAAAAAAcQAAAAABcQAAAAADcQAAAAADcQAAAAACcQAAAAABcQAAAAACcQAAAAADcQAAAAABcQAAAAABfwAAAAAAXgAAAAACAQAAAAAAXgAAAAAAfwAAAAAAfwAAAAAAcQAAAAAAcQAAAAABcQAAAAACcQAAAAAAcQAAAAADcQAAAAADcQAAAAADcQAAAAADcQAAAAACcQAAAAAAUAAAAAAAXgAAAAADAQAAAAAAXgAAAAADfwAAAAAAfwAAAAAAcQAAAAADcQAAAAADcQAAAAAAcQAAAAABcQAAAAACcQAAAAAAcQAAAAABcQAAAAAAcQAAAAACcQAAAAADcQAAAAAAXgAAAAAAAQAAAAAAXgAAAAADfwAAAAAAcQAAAAABcQAAAAAAcQAAAAABcQAAAAAAcQAAAAACcQAAAAAAcQAAAAAAcQAAAAACcQAAAAAAcQAAAAACcQAAAAACcQAAAAABXgAAAAADAQAAAAAAXgAAAAACfwAAAAAAUAAAAAAAcQAAAAACcQAAAAABcQAAAAADcQAAAAABcQAAAAABcQAAAAABcQAAAAABcQAAAAABcQAAAAABcQAAAAACcQAAAAABXgAAAAACAQAAAAAAXgAAAAADfwAAAAAAfwAAAAAAcQAAAAAAcQAAAAABcQAAAAABcQAAAAAAcQAAAAABcQAAAAAAcQAAAAADcQAAAAAAcQAAAAADcQAAAAABcQAAAAAAXgAAAAABAQAAAAAAXgAAAAACIAAAAAACfwAAAAAAcQAAAAADcQAAAAABfwAAAAAAcQAAAAACcQAAAAAAfwAAAAAAcQAAAAACUAAAAAAAcQAAAAADfwAAAAAAfwAAAAAAXgAAAAABAQAAAAAAXgAAAAAAIAAAAAACcQAAAAADcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAABfwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAUAAAAAAAXgAAAAABAQAAAAAAXgAAAAADfwAAAAAAcQAAAAABcQAAAAABcQAAAAABcQAAAAACcQAAAAACfwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAUAAAAAAAXgAAAAAAMAAAAAAAXgAAAAADfwAAAAAAcQAAAAADcQAAAAADcQAAAAAAcQAAAAAAcQAAAAAAfwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAfwAAAAAAXgAAAAACAQAAAAAAXgAAAAABfwAAAAAAcQAAAAACcQAAAAAAcQAAAAADcQAAAAACfwAAAAAAfwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAfwAAAAAAXgAAAAACAQAAAAAAUAAAAAAAfwAAAAAAcQAAAAADcQAAAAACcQAAAAADcQAAAAADdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAfwAAAAAAXgAAAAAAAQAAAAAAXgAAAAAAUAAAAAAAcQAAAAACcQAAAAADcQAAAAAAcQAAAAABdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAfwAAAAAAXgAAAAAAAQAAAAAAXgAAAAAAcQAAAAAAcQAAAAABcQAAAAABcQAAAAADfwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAdwAAAAAAfwAAAAAAXgAAAAABAQAAAAAAXgAAAAAAUAAAAAAAcQAAAAACcQAAAAABUAAAAAAAUAAAAAAAcQAAAAADcQAAAAADcQAAAAACcQAAAAADcQAAAAACcQAAAAABfwAAAAAAfwAAAAAAAQAAAAAAAQAAAAAAXgAAAAABfwAAAAAA + tiles: fwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAcQAAAAAAcQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAXgAAAAABMAAAAAADXgAAAAADfwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAfwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAfwAAAAAAXgAAAAACAQAAAAAAXgAAAAAAfwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAfwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAUAAAAAAAXgAAAAADAQAAAAAAXgAAAAADfwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAUAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAXgAAAAAAAQAAAAAAXgAAAAADfwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAbQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAABXgAAAAADAQAAAAAAXgAAAAACfwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAfwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAABXgAAAAACAQAAAAAAXgAAAAADfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAcQAAAAAAcQAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAUAAAAAAAcQAAAAAAXgAAAAABAQAAAAAAXgAAAAACIAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAfwAAAAAAXgAAAAABAQAAAAAAXgAAAAAAIAAAAAACcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAUAAAAAAAXgAAAAABAQAAAAAAXgAAAAADfwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAUAAAAAAAXgAAAAAAMAAAAAAAXgAAAAADfwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAfwAAAAAAXgAAAAACAQAAAAAAXgAAAAABfwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAXgAAAAACAQAAAAAAUAAAAAAAfwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAUAAAAAAAcQAAAAAAcQAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAXgAAAAAAAQAAAAAAXgAAAAAAUAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAUAAAAAAAXgAAAAAAAQAAAAAAXgAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAUAAAAAAAcQAAAAAAcQAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAUAAAAAAAXgAAAAABAQAAAAAAXgAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAewAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAQAAAAAAAQAAAAAAXgAAAAABfwAAAAAA version: 6 0,2: ind: 0,2 @@ -161,7 +162,7 @@ entities: version: 6 -2,2: ind: -2,2 - tiles: PQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAcQAAAAADcQAAAAABcQAAAAABcQAAAAADNAAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAcQAAAAABcQAAAAADcQAAAAABcQAAAAADNAAAAAAANAAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAcQAAAAADcQAAAAAAcQAAAAAAcQAAAAACNAAAAAAANAAAAAAANAAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAZQAAAAAAZQAAAAAAZQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAABcQAAAAABcQAAAAABcQAAAAABNAAAAAAANAAAAAAANAAAAAAANAAAAAAAPQAAAAAAPQAAAAAAZQAAAAAAZQAAAAAAZQAAAAAAcQAAAAACcQAAAAAAcQAAAAAAcQAAAAADcQAAAAACcQAAAAACcQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAcQAAAAABcQAAAAABcQAAAAACcQAAAAADcQAAAAAAcQAAAAACfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAcQAAAAABfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAALwAAAAAAfwAAAAAAcQAAAAACfwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAcQAAAAACcQAAAAADcQAAAAAALwAAAAAALwAAAAAALwAAAAAAcQAAAAADcQAAAAADfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAcQAAAAAAcQAAAAABcQAAAAAALwAAAAAALwAAAAAALwAAAAAAfwAAAAAAcQAAAAADfwAAAAAAfwAAAAAAfwAAAAAAIAAAAAACIAAAAAACIAAAAAACIAAAAAACUAAAAAAAcQAAAAAAcQAAAAABfwAAAAAALwAAAAAALwAAAAAALwAAAAAALwAAAAAAcQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAIAAAAAACIAAAAAABIAAAAAADIAAAAAABIAAAAAADcQAAAAAAcQAAAAACfwAAAAAALwAAAAAALwAAAAAALwAAAAAALwAAAAAAcQAAAAACfwAAAAAAfwAAAAAAfwAAAAAAIAAAAAACIAAAAAADfwAAAAAAfwAAAAAAfwAAAAAAcQAAAAAAcQAAAAADfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAcQAAAAABXgAAAAABfwAAAAAAIAAAAAADIAAAAAADIAAAAAAAIAAAAAAAIAAAAAABIAAAAAADcQAAAAABcQAAAAADcQAAAAAAcQAAAAABcQAAAAACcQAAAAABcQAAAAABcQAAAAACXgAAAAABfwAAAAAAIAAAAAABIAAAAAACIAAAAAAAIAAAAAACIAAAAAADIAAAAAABcQAAAAAAcQAAAAABcQAAAAABcQAAAAAAcQAAAAABcQAAAAAAcQAAAAAAcQAAAAAAXgAAAAABfwAAAAAAIAAAAAADIAAAAAABIAAAAAACfwAAAAAAcQAAAAACcQAAAAADUAAAAAAAcQAAAAAAUAAAAAAAcQAAAAACcQAAAAACUAAAAAAAUAAAAAAAcQAAAAAB + tiles: PQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAANAAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAANAAAAAAANAAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAANAAAAAAANAAAAAAANAAAAAAAPQAAAAAAPQAAAAAAPQAAAAAAZQAAAAAAbQAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAUAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAANAAAAAAANAAAAAAANAAAAAAANAAAAAAAPQAAAAAAPQAAAAAAZQAAAAAAbQAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAcQAAAAAAcQAAAAAACQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAfwAAAAAAfwAAAAAAcQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAfwAAAAAAIAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAfwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAUAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAIAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAIAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAIAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAUAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAXgAAAAABfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAfwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAXgAAAAABfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAfwAAAAAAUAAAAAAAcQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAXgAAAAABfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAfwAAAAAACQAAAAAAfwAAAAAAfwAAAAAACQAAAAAAfwAAAAAAcQAAAAAAcQAAAAAAfwAAAAAA version: 6 -3,0: ind: -3,0 @@ -181,11 +182,11 @@ entities: version: 6 -1,3: ind: -1,3 - tiles: cQAAAAADcQAAAAAAcQAAAAACfwAAAAAAcQAAAAADcQAAAAAAcQAAAAABcQAAAAACcQAAAAADfwAAAAAAXgAAAAABXgAAAAABAQAAAAAAXgAAAAADXgAAAAADfwAAAAAAcQAAAAAAcQAAAAADcQAAAAADcQAAAAABcQAAAAAAcQAAAAADcQAAAAABcQAAAAABcQAAAAADfwAAAAAAXgAAAAACAQAAAAAAMAAAAAABXgAAAAADXgAAAAABfwAAAAAAcQAAAAABcQAAAAADcQAAAAACfwAAAAAAcQAAAAACcQAAAAABcQAAAAAAcQAAAAACcQAAAAABfwAAAAAAXgAAAAAAAQAAAAAAXgAAAAAAXgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAcQAAAAAAfwAAAAAAfwAAAAAAXgAAAAACAQAAAAAAXgAAAAAAfwAAAAAAfwAAAAAAMgAAAAAAXgAAAAABXgAAAAACXgAAAAADXgAAAAAAXgAAAAACXgAAAAABXgAAAAAAXgAAAAACXgAAAAADXgAAAAAAXgAAAAAAAQAAAAAAXgAAAAABMgAAAAAAMgAAAAAAMgAAAAAAMAAAAAADAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAMAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAMAAAAAACAQAAAAAAXgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAAQAAAAAAXgAAAAABXgAAAAADXgAAAAADXgAAAAABXgAAAAACXgAAAAACXgAAAAACXgAAAAACXgAAAAABXgAAAAABXgAAAAAAXgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAAQAAAAAAXgAAAAADfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAIAAAAAAAfwAAAAAAfwAAAAAAXgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAQAAAAAAXgAAAAAAfwAAAAAAIAAAAAAAIAAAAAABIAAAAAACIAAAAAACIAAAAAABfwAAAAAAIAAAAAACIAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAAQAAAAAAXgAAAAAAUAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAACIAAAAAADBAAAAAAAIAAAAAADIAAAAAACfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAATwAAAAABXgAAAAABUAAAAAAAIAAAAAADIAAAAAABIAAAAAAAIAAAAAAAIAAAAAABfwAAAAAAIAAAAAADIAAAAAACfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAAQAAAAAAXgAAAAACXgAAAAADIAAAAAAAIAAAAAAAIAAAAAABIAAAAAADIAAAAAADfwAAAAAAIAAAAAABIAAAAAABfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAAQAAAAAAXgAAAAADUAAAAAAAIAAAAAADIAAAAAAAIAAAAAADIAAAAAACIAAAAAADfwAAAAAAIAAAAAACIAAAAAADUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAAQAAAAAAXgAAAAABUAAAAAAAIAAAAAABIAAAAAAAIAAAAAACIAAAAAADIAAAAAACfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAAQAAAAAAXgAAAAAAUAAAAAAAIAAAAAACIAAAAAADIAAAAAACIAAAAAAAIAAAAAABfwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAUAAAAAAAXgAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAA + tiles: CQAAAAAAcQAAAAAAcQAAAAAAIAAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAXgAAAAABXgAAAAABAQAAAAAAXgAAAAADXgAAAAADfwAAAAAACQAAAAAAcQAAAAAAcQAAAAAAIAAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAXgAAAAACAQAAAAAAMAAAAAABXgAAAAADXgAAAAABfwAAAAAACQAAAAAAcQAAAAAAcQAAAAAAIAAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAXgAAAAAAAQAAAAAAXgAAAAAAXgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAACAQAAAAAAXgAAAAAAfwAAAAAAfwAAAAAAMgAAAAAAXgAAAAABXgAAAAACXgAAAAADXgAAAAAAXgAAAAACXgAAAAABXgAAAAAAXgAAAAACXgAAAAADXgAAAAAAXgAAAAAAAQAAAAAAXgAAAAABMgAAAAAAMgAAAAAAMgAAAAAAMAAAAAADAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAMAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAMAAAAAACAQAAAAAAXgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAAQAAAAAAXgAAAAABXgAAAAADXgAAAAADXgAAAAABXgAAAAACXgAAAAACXgAAAAACXgAAAAACXgAAAAABXgAAAAABXgAAAAAAXgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAAQAAAAAAXgAAAAADfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAIAAAAAAAfwAAAAAAfwAAAAAAXgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAQAAAAAAXgAAAAAAfwAAAAAAIAAAAAAAIAAAAAABIAAAAAACIAAAAAACIAAAAAABfwAAAAAAIAAAAAACIAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAAQAAAAAAXgAAAAAAUAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAACIAAAAAADBAAAAAAAIAAAAAADIAAAAAACfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAATwAAAAABXgAAAAABUAAAAAAAIAAAAAADIAAAAAABIAAAAAAAIAAAAAAAIAAAAAABfwAAAAAAIAAAAAADIAAAAAACfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAAQAAAAAAXgAAAAACXgAAAAADIAAAAAAAIAAAAAAAIAAAAAABIAAAAAADIAAAAAADfwAAAAAAIAAAAAABIAAAAAABfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAAQAAAAAAXgAAAAADUAAAAAAAIAAAAAADIAAAAAAAIAAAAAADIAAAAAACIAAAAAADfwAAAAAAIAAAAAACIAAAAAADUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAAQAAAAAAXgAAAAABUAAAAAAAIAAAAAABIAAAAAAAIAAAAAACIAAAAAADIAAAAAACfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAAQAAAAAAXgAAAAAAUAAAAAAAIAAAAAACIAAAAAADIAAAAAACIAAAAAAAIAAAAAABfwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAQwAAAAAAUAAAAAAAXgAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAA version: 6 -2,3: ind: -2,3 - tiles: XgAAAAADfwAAAAAAcQAAAAABcQAAAAAAcQAAAAADfwAAAAAAcQAAAAADcQAAAAABcQAAAAABcQAAAAAAcQAAAAABcQAAAAAAcQAAAAACcQAAAAABcQAAAAACcQAAAAAAXgAAAAABfwAAAAAAcQAAAAADcQAAAAAAcQAAAAABcQAAAAAAcQAAAAABcQAAAAABcQAAAAABcQAAAAAAcQAAAAACcQAAAAADcQAAAAACcQAAAAAAcQAAAAAAcQAAAAADXgAAAAAAfwAAAAAAfwAAAAAAcQAAAAACcQAAAAABcQAAAAAAcQAAAAADcQAAAAAAcQAAAAABcQAAAAACcQAAAAACcQAAAAAAcQAAAAAAcQAAAAACcQAAAAAAcQAAAAACXgAAAAADXgAAAAABfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAcQAAAAAAXgAAAAADXgAAAAADXgAAAAADXgAAAAACXgAAAAAAXgAAAAACXgAAAAAAXgAAAAABXgAAAAABXgAAAAACXgAAAAABXgAAAAAAXgAAAAADXgAAAAAAXgAAAAABXgAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAMAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAMAAAAAACAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAXgAAAAACXgAAAAAAXgAAAAADXgAAAAABXgAAAAACXgAAAAACXgAAAAADXgAAAAADXgAAAAABXgAAAAACXgAAAAABXgAAAAACXgAAAAADXgAAAAAAXgAAAAADXgAAAAABfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAABXgAAAAABfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAXgAAAAADIAAAAAAAIAAAAAADfwAAAAAAIAAAAAABIAAAAAABfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAABfwAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAfwAAAAAAXgAAAAAAIAAAAAACIAAAAAACfwAAAAAAIAAAAAACIAAAAAAAfwAAAAAAIAAAAAACIAAAAAAAIAAAAAADUAAAAAAANAAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAUAAAAAAAXgAAAAADIAAAAAADIAAAAAACfwAAAAAATwAAAAAATwAAAAAAIAAAAAACIAAAAAAAIAAAAAADIAAAAAADUAAAAAAANAAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAUAAAAAAAXgAAAAABfwAAAAAAIAAAAAAAfwAAAAAAIAAAAAABIAAAAAADIAAAAAACIAAAAAABIAAAAAADIAAAAAADfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAXgAAAAADIAAAAAAAIAAAAAAATwAAAAABIAAAAAACIAAAAAABIAAAAAABIAAAAAADIAAAAAACIAAAAAABfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAADIAAAAAAAIAAAAAADTwAAAAADIAAAAAADIAAAAAABIAAAAAABIAAAAAADIAAAAAACIAAAAAADUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAADUAAAAAAAfwAAAAAAfwAAAAAAIAAAAAACIAAAAAACIAAAAAACIAAAAAABIAAAAAACIAAAAAACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAACKQAAAAADfwAAAAAAfwAAAAAAfwAAAAAAbgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAXgAAAAAD + tiles: XgAAAAADfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAfwAAAAAALwAAAAAALwAAAAAALwAAAAAACQAAAAAAUAAAAAAAcQAAAAAAcQAAAAAAfwAAAAAAXgAAAAABfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAfwAAAAAALwAAAAAALwAAAAAALwAAAAAACQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAXgAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAfwAAAAAALwAAAAAALwAAAAAALwAAAAAACQAAAAAAUAAAAAAAcQAAAAAAcQAAAAAAfwAAAAAAXgAAAAADfwAAAAAAfwAAAAAAIAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAcQAAAAAAUAAAAAAAfwAAAAAAXgAAAAADXgAAAAADXgAAAAADXgAAAAACXgAAAAAAXgAAAAACXgAAAAAAXgAAAAABXgAAAAABXgAAAAACXgAAAAABXgAAAAAAXgAAAAADXgAAAAAAXgAAAAABXgAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAMAAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAMAAAAAACAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAQAAAAAAXgAAAAACXgAAAAAAXgAAAAADXgAAAAABXgAAAAACXgAAAAACXgAAAAADXgAAAAADXgAAAAABXgAAAAACXgAAAAABXgAAAAACXgAAAAADXgAAAAAAXgAAAAADXgAAAAABfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAABXgAAAAABfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAXgAAAAADIAAAAAAAIAAAAAADfwAAAAAAIAAAAAABIAAAAAABfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAABfwAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAfwAAAAAAXgAAAAAAIAAAAAACIAAAAAACfwAAAAAAIAAAAAACIAAAAAAAfwAAAAAAIAAAAAACIAAAAAAAIAAAAAADUAAAAAAANAAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAUAAAAAAAXgAAAAADIAAAAAADIAAAAAACfwAAAAAATwAAAAAATwAAAAAAIAAAAAACIAAAAAAAIAAAAAADIAAAAAADUAAAAAAANAAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAUAAAAAAAXgAAAAABfwAAAAAAIAAAAAAAfwAAAAAAIAAAAAABIAAAAAADIAAAAAACIAAAAAABIAAAAAADIAAAAAADfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAXgAAAAADIAAAAAAAIAAAAAAATwAAAAABIAAAAAACIAAAAAABIAAAAAABIAAAAAADIAAAAAACIAAAAAABfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAADIAAAAAAAIAAAAAADTwAAAAADIAAAAAADIAAAAAABIAAAAAABIAAAAAADIAAAAAACIAAAAAADUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAADUAAAAAAAfwAAAAAAfwAAAAAAIAAAAAACIAAAAAACIAAAAAACIAAAAAABIAAAAAACIAAAAAACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAXgAAAAACKQAAAAADfwAAAAAAfwAAAAAAfwAAAAAAbgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAXgAAAAAD version: 6 -3,3: ind: -3,3 @@ -532,6 +533,12 @@ entities: id: Arrows decals: 2475: -22,-63 + - node: + angle: 3.141592653589793 rad + color: '#52B4E996' + id: ArrowsGreyscale + decals: + 2788: -8,37 - node: color: '#FFFFFFFF' id: Bot @@ -560,15 +567,6 @@ entities: 2461: -36,-12 2462: -33,-12 2463: -33,-11 - - node: - color: '#52B4E996' - id: BotGreyscale - decals: - 1345: -12,50 - 1346: -11,50 - 1347: -10,50 - 1348: -9,50 - 1349: -8,50 - node: angle: 1.5707963267948966 rad color: '#7C99BDC7' @@ -629,6 +627,77 @@ entities: 1597: 0,-53 1598: -1,-53 1599: -2,-53 + - node: + color: '#37789BFF' + id: BoxGreyscale + decals: + 2682: -12,40 + 2683: -12,39 + - node: + color: '#52B4E996' + id: BrickCornerOverlayNE + decals: + 2542: -6,37 + - node: + color: '#52B4E996' + id: BrickCornerOverlayNW + decals: + 2543: -9,37 + - node: + color: '#52B4E996' + id: BrickCornerOverlaySE + decals: + 2547: -6,33 + - node: + color: '#52B4E996' + id: BrickCornerOverlaySW + decals: + 2544: -11,33 + - node: + color: '#52B4E996' + id: BrickLineOverlayE + decals: + 2548: -6,34 + 2549: -10,37 + - node: + color: '#E8E85393' + id: BrickLineOverlayE + decals: + 2745: -18,44 + 2746: -18,45 + 2747: -18,46 + - node: + color: '#52B4E996' + id: BrickLineOverlayN + decals: + 2540: -8,37 + 2541: -7,37 + - node: + color: '#E8E85393' + id: BrickLineOverlayN + decals: + 2735: -16,42 + 2736: -15,42 + 2737: -14,42 + 2738: -13,42 + - node: + color: '#52B4E996' + id: BrickLineOverlayS + decals: + 2545: -10,33 + 2546: -7,33 + - node: + color: '#52B4E996' + id: BrickLineOverlayW + decals: + 2550: -11,34 + 2551: -11,37 + - node: + color: '#FA750096' + id: BrickLineOverlayW + decals: + 2588: -11,36 + 2790: -11,35 - node: color: '#DE3A3A96' id: BrickTileWhiteCornerNe @@ -1307,28 +1376,28 @@ entities: 465: -12,68 466: -10,70 - node: - color: '#52B4E996' + color: '#E8E85393' id: CheckerNESW decals: - 1324: -30,49 - 1325: -29,50 - 1326: -29,49 - 1327: -28,50 - 1328: -28,49 - 1329: -27,50 - 1330: -27,49 - 1331: -26,50 - 1332: -26,49 - 1333: -26,48 - 1334: -25,48 - 1335: -25,49 - 1336: -25,50 - 1337: -24,50 - 1338: -24,49 - 1339: -24,48 - 1340: -23,48 - 1341: -23,49 - 1342: -23,50 + 2714: -15,46 + 2715: -14,46 + 2716: -13,46 + 2718: -15,45 + 2719: -14,45 + 2720: -13,45 + 2722: -15,44 + 2723: -14,44 + 2724: -13,44 + 2725: -13,43 + 2726: -14,43 + 2727: -15,43 + 2728: -16,43 + 2732: -16,46 + 2733: -16,45 + 2748: -16,44 + 2749: -17,44 + 2750: -17,45 + 2751: -17,46 - node: color: '#334E6DC8' id: CheckerNWSE @@ -1339,6 +1408,31 @@ entities: 451: -17,68 463: -10,68 464: -12,70 + - node: + color: '#52B4E996' + id: CheckerNWSE + decals: + 2616: -19,39 + 2617: -18,39 + 2618: -19,40 + 2619: -18,40 + 2620: -19,41 + 2621: -18,41 + 2622: -19,42 + 2623: -18,42 + 2624: -19,43 + 2625: -18,43 + 2626: -19,44 + 2628: -19,45 + 2630: -19,46 + 2632: -19,47 + 2633: -18,47 + 2634: -18,48 + 2635: -19,48 + 2636: -19,49 + 2637: -19,50 + 2638: -18,50 + 2639: -18,49 - node: color: '#334E6DC8' id: Damaged @@ -1569,7 +1663,6 @@ entities: 2255: -7,28 2256: -8,28 2259: -8,26 - 2323: -15,33 2324: 26,50 2325: 27,46 2326: 28,44 @@ -1686,7 +1779,6 @@ entities: 706: -34,48 707: -34,40 708: -37,40 - 709: -20,37 710: -15,61 711: -17,67 712: -9,70 @@ -1720,14 +1812,9 @@ entities: 1160: -29,56 1161: -26,62 1162: -47,61 - 1478: -24,39 - 1479: -20,43 - 1480: -6,38 1481: -14,37 1482: -29,45 1483: -26,43 - 1484: -27,50 - 1485: -18,49 1486: 0,25 1487: -10,-19 1488: -14,-28 @@ -1872,7 +1959,6 @@ entities: 1157: -43,63 1158: -49,60 1164: -42,60 - 1477: -23,46 1494: 7,-43 1495: 13,-48 1496: -2,-40 @@ -2588,21 +2674,9 @@ entities: color: '#52B4E996' id: FullTileOverlayGreyscale decals: - 1275: -17,40 - 1276: -16,40 - 1277: -15,39 - 1278: -14,39 1279: -5,36 1280: -5,35 1281: -9,32 - 1282: -10,32 - 1283: -13,44 - 1284: -15,47 - 1285: -17,47 - 1286: -23,47 - 1287: -25,43 - 1288: -25,39 - 1289: -24,39 - node: color: '#604628CA' id: FullTileOverlayGreyscale @@ -2778,63 +2852,6 @@ entities: 1571: -52,-7 1914: -30,-4 1915: -30,-3 - - node: - color: '#A49F9B76' - id: FullTileOverlayGreyscale - decals: - 1379: -12,48 - 1380: -11,48 - 1381: -10,48 - 1382: -9,48 - 1383: -8,48 - 1384: -8,49 - 1385: -9,49 - 1386: -9,50 - 1387: -8,50 - 1388: -10,50 - 1389: -10,49 - 1390: -11,49 - 1391: -11,50 - 1392: -12,50 - 1393: -12,49 - 1394: -13,49 - - node: - color: '#BDBFD376' - id: FullTileOverlayGreyscale - decals: - 1364: -18,49 - 1365: -19,49 - 1366: -19,48 - 1367: -18,48 - 1368: -17,48 - 1369: -17,49 - 1370: -17,50 - 1371: -18,50 - 1372: -19,50 - 1373: -20,50 - 1374: -21,50 - 1375: -21,49 - 1376: -20,49 - 1377: -20,48 - 1378: -21,48 - - node: - color: '#BDFFD347' - id: FullTileOverlayGreyscale - decals: - 1350: -18,43 - 1351: -18,42 - 1352: -19,42 - 1353: -19,43 - 1354: -20,43 - 1355: -21,43 - 1356: -21,42 - 1357: -20,42 - 1358: -20,41 - 1359: -21,41 - 1360: -19,41 - 1361: -19,40 - 1362: -20,40 - 1363: -21,40 - node: color: '#C3AF3DD3' id: FullTileOverlayGreyscale @@ -2978,6 +2995,11 @@ entities: 1215: 5,-31 1216: 5,-30 1217: 6,-30 + - node: + color: '#FA750096' + id: FullTileOverlayGreyscale + decals: + 2791: -18,38 - node: color: '#FFFF1FE6' id: FullTileOverlayGreyscale @@ -3182,33 +3204,7 @@ entities: 1242: -20,-33 1243: -19,-33 1244: -17,-32 - 1267: -14,38 - 1268: -13,38 - 1269: -12,38 - 1270: -11,38 - 1271: -10,38 - 1272: -9,38 - 1273: -8,38 - 1274: -7,38 - 1301: -23,46 - 1302: -22,46 - 1303: -21,46 - 1304: -20,46 - 1305: -19,46 - 1306: -17,46 - 1307: -16,46 - 1308: -15,46 - 1475: -18,46 1850: -5,31 - 2272: -13,42 - 2277: -13,45 - 2308: -9,39 - 2309: -7,39 - 2316: -9,35 - 2317: -10,36 - 2318: -9,37 - 2319: -9,36 - 2320: -8,36 - node: color: '#6B2833DD' id: HalfTileOverlayGreyscale @@ -3269,14 +3265,11 @@ entities: 1178: -15,-25 1179: -14,-25 - node: - color: '#F2CF66B7' + color: '#FA750096' id: HalfTileOverlayGreyscale decals: - 2333: -21,38 - 2334: -20,38 - 2335: -19,38 - 2336: -17,39 - 2337: -18,38 + 2648: -15,37 + 2649: -14,37 - node: color: '#334E6DC8' id: HalfTileOverlayGreyscale180 @@ -3302,12 +3295,6 @@ entities: color: '#52B4E996' id: HalfTileOverlayGreyscale180 decals: - 554: -14,33 - 555: -13,33 - 556: -12,33 - 557: -11,33 - 558: -8,33 - 1049: -7,33 1223: -16,-30 1224: -17,-30 1225: -18,-30 @@ -3320,24 +3307,6 @@ entities: 1249: -19,-35 1250: -18,-35 1251: -17,-35 - 1260: -10,33 - 1261: -9,33 - 1309: -22,45 - 1310: -21,45 - 1311: -20,45 - 1312: -19,45 - 1313: -17,45 - 1314: -14,40 - 1476: -18,45 - 2271: -13,40 - 2278: -13,45 - 2310: -9,39 - 2311: -7,39 - 2312: -9,35 - 2313: -8,36 - 2314: -9,37 - 2315: -10,36 - 2321: -9,36 - node: color: '#6B2833DD' id: HalfTileOverlayGreyscale180 @@ -3411,13 +3380,16 @@ entities: 1186: -14,-29 1255: -15,-29 - node: - color: '#F2CF66B7' + color: '#FA750096' id: HalfTileOverlayGreyscale180 decals: - 2330: -21,36 - 2331: -18,33 - 2332: -19,33 - 2355: -17,39 + 2656: -18,33 + 2657: -17,33 + 2660: -14,33 + 2667: -15,33 + 2671: -16,33 + 2757: -17,37 + 2762: -19,33 - node: color: '#334E6DC8' id: HalfTileOverlayGreyscale270 @@ -3446,20 +3418,9 @@ entities: color: '#52B4E996' id: HalfTileOverlayGreyscale270 decals: - 559: -15,36 - 560: -15,35 - 561: -15,34 1231: -23,-30 1232: -23,-29 1252: -23,-34 - 1259: -15,37 - 1292: -24,41 - 1293: -15,41 - 1294: -16,43 - 1295: -16,44 - 1296: -24,42 - 1297: -24,43 - 1298: -24,44 1852: -4,32 1853: -4,33 1854: -4,34 @@ -3475,7 +3436,6 @@ entities: 1864: -4,44 1865: -4,45 1866: -4,46 - 2023: -24,45 - node: color: '#A4610696' id: HalfTileOverlayGreyscale270 @@ -3508,15 +3468,11 @@ entities: 1174: -18,-25 1256: -17,-27 - node: - color: '#F2CF66B7' + color: '#FA750096' id: HalfTileOverlayGreyscale270 decals: - 2329: -20,35 - 2338: -20,34 - 2339: -23,37 - 2340: -23,36 - 2346: -16,36 - 2353: -22,37 + 2653: -19,36 + 2654: -19,35 - node: color: '#334E6DC8' id: HalfTileOverlayGreyscale90 @@ -3544,20 +3500,8 @@ entities: color: '#52B4E996' id: HalfTileOverlayGreyscale90 decals: - 1048: -6,34 1253: -16,-34 1254: -16,-33 - 1262: -6,35 - 1263: -6,36 - 1264: -6,37 - 1316: -14,45 - 1317: -14,44 - 1318: -23,41 - 1319: -23,42 - 1320: -23,43 - 1321: -23,44 - 1473: -14,43 - 2276: -12,41 - node: color: '#A4610696' id: HalfTileOverlayGreyscale90 @@ -3620,16 +3564,12 @@ entities: 1182: -13,-27 1183: -13,-28 - node: - color: '#F2CF66B7' + color: '#FA750096' id: HalfTileOverlayGreyscale90 decals: - 2341: -23,37 - 2342: -23,36 - 2343: -17,34 - 2344: -17,35 - 2345: -16,36 - 2347: -17,37 - 2354: -17,36 + 2650: -13,36 + 2651: -13,35 + 2652: -13,34 - node: color: '#334E6DC8' id: HerringboneOverlay @@ -3714,41 +3654,6 @@ entities: id: OffsetCheckerBOverlay decals: 2065: -32,70 - - node: - color: '#52B4E996' - id: OffsetCheckerBOverlay - decals: - 2279: -10,40 - 2280: -9,40 - 2281: -8,40 - 2282: -7,40 - 2283: -6,40 - 2284: -6,41 - 2285: -6,42 - 2286: -6,43 - 2287: -6,44 - 2288: -6,45 - 2289: -6,46 - 2290: -7,46 - 2291: -8,46 - 2292: -9,46 - 2293: -10,46 - 2294: -11,46 - 2295: -12,46 - 2296: -12,45 - 2297: -12,44 - 2298: -11,44 - 2299: -10,41 - 2300: -10,44 - 2301: -9,44 - 2302: -9,43 - 2303: -9,42 - 2304: -8,42 - 2305: -8,44 - 2306: -7,42 - 2307: -7,44 - 2327: -10,43 - 2328: -10,42 - node: color: '#DE3A3A96' id: OffsetCheckerBOverlay @@ -3765,6 +3670,9 @@ entities: decals: 1245: -18,-33 1851: -4,31 + 2752: -18,44 + 2753: -18,45 + 2754: -18,46 - node: color: '#6B2833DD' id: QuarterTileOverlayGreyscale @@ -3786,6 +3694,11 @@ entities: 365: 12,33 370: 11,35 373: 10,34 + - node: + color: '#FA750096' + id: QuarterTileOverlayGreyscale + decals: + 2763: -19,34 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale180 @@ -3796,7 +3709,6 @@ entities: id: QuarterTileOverlayGreyscale180 decals: 1234: -20,-30 - 1322: -23,45 - node: color: '#6B2833DD' id: QuarterTileOverlayGreyscale180 @@ -3816,12 +3728,6 @@ entities: 407: 14,25 432: 14,34 2022: 20,38 - - node: - color: '#52B4E996' - id: QuarterTileOverlayGreyscale270 - decals: - 1323: -16,45 - 1474: -15,42 - node: color: '#A4610696' id: QuarterTileOverlayGreyscale270 @@ -3839,22 +3745,12 @@ entities: id: QuarterTileOverlayGreyscale270 decals: 1258: -17,-26 - - node: - color: '#F2CF66B7' - id: QuarterTileOverlayGreyscale270 - decals: - 2356: -20,36 - node: color: '#334E6DC8' id: QuarterTileOverlayGreyscale90 decals: 303: 20,5 474: -9,79 - - node: - color: '#52B4E996' - id: QuarterTileOverlayGreyscale90 - decals: - 2275: -14,42 - node: color: '#A4610696' id: QuarterTileOverlayGreyscale90 @@ -4082,17 +3978,184 @@ entities: 1601: -3,-49 2419: -14,-2 2420: -14,0 - - node: - color: '#52B4E996' - id: StandClearGreyscale - decals: - 1343: -20,50 - 1344: -17,50 - node: color: '#7C99BDC7' id: StandClearGreyscale decals: 312: 21,2 + - node: + color: '#52B4E996' + id: ThickCornerEastOverlayTrimline + decals: + 2533: -7,35 + - node: + color: '#52B4E996' + id: ThickCornerInnerNorthEastOverlayTrimline + decals: + 2534: -8,35 + - node: + color: '#52B4E996' + id: ThickCornerInnerNorthWestOverlayTrimline + decals: + 2535: -8,35 + - node: + color: '#52B4E996' + id: ThickCornerInnerSouthEastOverlayTrimline + decals: + 2536: -8,35 + 2613: -13,41 + - node: + color: '#37789BFF' + id: ThickCornerInnerSouthWestOverlayTrimline + decals: + 2782: -19,49 + - node: + color: '#52B4E996' + id: ThickCornerInnerSouthWestOverlayTrimline + decals: + 2537: -8,35 + 2611: -11,41 + - node: + color: '#E86C5393' + id: ThickCornerInnerSouthWestOverlayTrimline + decals: + 2767: -19,43 + - node: + color: '#52B4E996' + id: ThickCornerNorthEastOverlayTrimline + decals: + 2594: -17,42 + - node: + color: '#52B4E996' + id: ThickCornerNorthOverlayTrimline + decals: + 2532: -8,36 + - node: + color: '#52B4E996' + id: ThickCornerNorthWestTrimline + decals: + 2595: -10,42 + - node: + color: '#E86C5393' + id: ThickCornerNorthWestTrimline + decals: + 2770: -21,45 + - node: + color: '#52B4E996' + id: ThickCornerSouthOverlayTrimline + decals: + 2530: -8,34 + - node: + color: '#52B4E996' + id: ThickCornerSouthWestOverlayTrimline + decals: + 2708: -22,48 + - node: + color: '#E86C5393' + id: ThickCornerSouthWestOverlayTrimline + decals: + 2771: -21,41 + - node: + color: '#52B4E996' + id: ThickCornerWestOverlayTrimline + decals: + 2531: -9,35 + - node: + color: '#52B4E996' + id: ThickEastOverlayTrimline + decals: + 2606: -10,39 + 2607: -10,38 + 2614: -13,40 + 2615: -13,39 + 2680: -10,41 + 2681: -10,40 + 2704: -22,50 + 2705: -22,49 + - node: + color: '#E86C5393' + id: ThickEastOverlayTrimline + decals: + 2774: -21,44 + 2775: -21,43 + 2776: -21,42 + - node: + color: '#FA750096' + id: ThickEastOverlayTrimline + decals: + 2764: -18,39 + 2765: -18,40 + - node: + color: '#52B4E996' + id: ThickNorthOverlayTrimline + decals: + 2599: -12,42 + 2600: -11,42 + - node: + color: '#FA750096' + id: ThickShrinkEastTwoOverlayTrimline + decals: + 2766: -18,41 + - node: + color: '#E86C5393' + id: ThickShrinkNorthTwoOverlayTrimline + decals: + 2773: -22,45 + - node: + color: '#37789BFF' + id: ThickShrinkSouthTwoOverlayTrimline + decals: + 2784: -21,49 + - node: + color: '#E86C5393' + id: ThickShrinkSouthTwoOverlayTrimline + decals: + 2772: -22,41 + - node: + color: '#37789BFF' + id: ThickShrinkWestTwoOverlayTrimline + decals: + 2785: -19,44 + - node: + color: '#E86C5393' + id: ThickShrinkWestTwoOverlayTrimline + decals: + 2768: -19,42 + - node: + color: '#37789BFF' + id: ThickSouthOverlayTrimline + decals: + 2783: -20,49 + - node: + color: '#52B4E996' + id: ThickSouthOverlayTrimline + decals: + 2612: -12,41 + 2706: -24,48 + 2707: -23,48 + - node: + color: '#E86C5393' + id: ThickSouthOverlayTrimline + decals: + 2769: -20,43 + - node: + color: '#37789BFF' + id: ThickWestOverlayTrimline + decals: + 2777: -19,45 + 2778: -19,46 + 2779: -19,47 + 2780: -19,48 + - node: + color: '#52B4E996' + id: ThickWestOverlayTrimline + decals: + 2596: -17,41 + 2597: -17,40 + 2598: -17,39 + 2608: -11,38 + 2609: -11,39 + 2610: -11,40 - node: color: '#334E6DC8' id: ThreeQuarterTileOverlayGreyscale @@ -4110,8 +4173,6 @@ entities: 1233: -23,-28 1236: -23,-33 1237: -18,-32 - 1265: -15,38 - 2024: -24,46 - node: color: '#6B2833DD' id: ThreeQuarterTileOverlayGreyscale @@ -4141,10 +4202,12 @@ entities: 609: 9,-33 1175: -18,-24 - node: - color: '#F2CF66B7' + color: '#FA750096' id: ThreeQuarterTileOverlayGreyscale decals: - 2349: -22,38 + 2640: -19,37 + 2761: -20,34 + 2787: -16,37 - node: color: '#334E6DC8' id: ThreeQuarterTileOverlayGreyscale180 @@ -4159,11 +4222,8 @@ entities: color: '#52B4E996' id: ThreeQuarterTileOverlayGreyscale180 decals: - 1050: -6,33 1229: -20,-31 1235: -16,-35 - 1291: -23,40 - 2274: -12,40 - node: color: '#6B2833DD' id: ThreeQuarterTileOverlayGreyscale180 @@ -4189,10 +4249,10 @@ entities: 1170: 12,-36 1184: -13,-29 - node: - color: '#F2CF66B7' + color: '#FA750096' id: ThreeQuarterTileOverlayGreyscale180 decals: - 2352: -17,33 + 2643: -13,33 - node: color: '#334E6DC8' id: ThreeQuarterTileOverlayGreyscale270 @@ -4210,10 +4270,6 @@ entities: decals: 1230: -23,-31 1238: -23,-35 - 1290: -24,40 - 1299: -15,40 - 1315: -16,42 - 2322: -15,33 - node: color: '#6B2833DD' id: ThreeQuarterTileOverlayGreyscale270 @@ -4239,11 +4295,10 @@ entities: 1169: 9,-36 1257: -18,-26 - node: - color: '#F2CF66B7' + color: '#FA750096' id: ThreeQuarterTileOverlayGreyscale270 decals: - 2350: -22,36 - 2351: -20,33 + 2760: -20,33 - node: color: '#334E6DC8' id: ThreeQuarterTileOverlayGreyscale90 @@ -4259,9 +4314,6 @@ entities: id: ThreeQuarterTileOverlayGreyscale90 decals: 1239: -16,-32 - 1266: -6,38 - 1300: -14,46 - 2273: -12,42 - node: color: '#A4610696' id: ThreeQuarterTileOverlayGreyscale90 @@ -4286,10 +4338,11 @@ entities: 1177: -16,-24 1180: -13,-25 - node: - color: '#F2CF66B7' + color: '#FA750096' id: ThreeQuarterTileOverlayGreyscale90 decals: - 2348: -17,38 + 2644: -13,37 + 2786: -18,37 - node: color: '#FFFFFFFF' id: WarnEndE @@ -4323,6 +4376,14 @@ entities: 1580: -46,-26 1581: -45,-26 1582: -45,-25 + - node: + color: '#52B4E9FF' + id: WarnLineGreyscaleW + decals: + 2792: -9,42 + 2793: -9,41 + 2794: -9,40 + 2795: -9,39 - node: color: '#FFFFFFFF' id: WarnLineN @@ -4351,6 +4412,9 @@ entities: 2246: -6,23 2247: -6,24 2252: -6,25 + 2691: -10,50 + 2692: -10,49 + 2693: -10,48 - node: color: '#FFFFFFFF' id: WoodTrimThinLineS @@ -4361,6 +4425,9 @@ entities: 2261: -6,26 2405: 29,-42 2406: 30,-42 + 2675: -8,43 + 2676: -7,43 + 2677: -6,43 - node: color: '#FFFFFFFF' id: WoodTrimThinLineW @@ -4370,6 +4437,9 @@ entities: 2253: -9,25 2403: 28,-41 2404: 28,-40 + 2672: -9,44 + 2673: -9,45 + 2674: -9,46 - node: color: '#534F53FF' id: brush @@ -5185,8 +5255,6 @@ entities: 0: 65535 -3,7: 0: 65399 - -3,8: - 0: 65532 -2,4: 0: 4080 -2,5: @@ -5195,6 +5263,10 @@ entities: 0: 65535 -2,7: 0: 65419 + -3,8: + 0: 61160 + -2,8: + 0: 63345 -1,7: 0: 30579 -1,8: @@ -5217,7 +5289,7 @@ entities: -9,7: 0: 63351 -7,5: - 0: 29439 + 0: 29311 -7,6: 0: 33655 -7,7: @@ -5226,7 +5298,7 @@ entities: -7,8: 0: 24025 -6,5: - 0: 32271 + 0: 32551 -6,6: 0: 65535 -6,7: @@ -5272,35 +5344,33 @@ entities: 8,7: 1: 12559 -4,8: - 0: 61152 - -5,8: 0: 65520 + -5,8: + 0: 61424 -4,9: - 0: 28399 + 0: 61695 -5,9: - 0: 45055 + 0: 63230 -4,10: - 0: 32751 + 0: 65535 -5,10: - 0: 32571 + 0: 32494 -4,11: - 0: 10239 + 0: 4095 -5,11: - 0: 36848 + 0: 28398 -4,12: - 0: 9958 + 0: 4095 -3,9: - 0: 36863 + 0: 63215 -3,10: - 0: 52701 - -3,11: 0: 4095 + -3,11: + 0: 20222 -3,12: - 0: 4095 - -2,8: - 0: 63344 + 0: 3822 -2,9: - 0: 10111 + 0: 29567 -2,10: 0: 30583 -2,11: @@ -5357,33 +5427,33 @@ entities: -9,9: 0: 61303 -8,10: - 0: 48686 + 0: 32358 -9,10: 0: 61166 -8,11: - 0: 56792 + 0: 56784 -9,11: 0: 52990 -8,12: - 0: 14801 + 0: 40413 -7,9: - 0: 62719 + 0: 29951 -7,10: - 0: 63239 + 0: 32624 -7,11: - 0: 6129 + 0: 30705 -7,12: - 0: 4092 + 0: 1911 -6,9: - 0: 7423 + 0: 65535 -6,10: - 0: 48059 + 0: 65522 -6,11: - 0: 12275 + 0: 62207 -6,12: - 0: 3003 + 0: 4095 -5,12: - 0: 36863 + 0: 9974 -12,0: 0: 47288 -12,-1: @@ -7298,6 +7368,35 @@ entities: - 3116 - 10694 - 10808 + - uid: 6162 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,47.5 + parent: 100 + - type: DeviceList + devices: + - 21497 + - 21498 + - 17354 + - 17325 + - 20540 + - 20542 + - 20539 + - 20541 + - 20865 + - 20863 + - 20860 + - 20808 + - 20864 + - 20862 + - 20531 + - 20533 + - 20537 + - 20535 + - 15345 + - 21499 + - 21517 - uid: 9601 components: - type: Transform @@ -7322,6 +7421,124 @@ entities: - 12411 - 12370 - 17291 + - uid: 15269 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,37.5 + parent: 100 + - type: DeviceList + devices: + - 16730 + - 16752 + - 20536 + - 20533 + - 11957 + - 20537 + - 11195 + - 11073 + - 20867 + - 20534 + - 20866 + - uid: 15272 + components: + - type: Transform + pos: -16.5,38.5 + parent: 100 + - type: DeviceList + devices: + - 15340 + - 15338 + - 20536 + - 20531 + - uid: 15273 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,40.5 + parent: 100 + - type: DeviceList + devices: + - 15374 + - 15376 + - 20524 + - 20527 + - 20541 + - 20525 + - uid: 15274 + components: + - type: Transform + pos: -26.5,51.5 + parent: 100 + - type: DeviceList + devices: + - 15377 + - 15361 + - 20526 + - 20524 + - 20544 + - uid: 15275 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,35.5 + parent: 100 + - type: DeviceList + devices: + - 15342 + - 15360 + - 20527 + - uid: 15279 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,43.5 + parent: 100 + - type: DeviceList + devices: + - 15378 + - 15380 + - 20544 + - uid: 15280 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,48.5 + parent: 100 + - type: DeviceList + devices: + - 20525 + - 20540 + - 21418 + - 15311 + - uid: 15281 + components: + - type: Transform + pos: -8.5,47.5 + parent: 100 + - type: DeviceList + devices: + - 17304 + - 17355 + - 20867 + - 20534 + - 20535 + - 20538 + - 21443 + - 21444 + - 21442 + - 17375 + - 17384 + - uid: 15282 + components: + - type: Transform + pos: -9.5,51.5 + parent: 100 + - type: DeviceList + devices: + - 20538 + - 17588 + - 17379 - uid: 15884 components: - type: MetaData @@ -8199,7 +8416,6 @@ entities: devices: - 12170 - 12171 - - 12169 - 5979 - 5980 - 5966 @@ -8404,7 +8620,6 @@ entities: - 11073 - 11195 - 11957 - - 11951 - 5051 - 4445 - 12052 @@ -8589,121 +8804,6 @@ entities: - 2323 - 2320 - 15798 - - uid: 17367 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,35.5 - parent: 100 - - type: DeviceList - devices: - - 6314 - - 9033 - - 6445 - - 1306 - - 6897 - - 10769 - - 6918 - - uid: 17368 - components: - - type: MetaData - name: morgue air alarm - - type: Transform - pos: -26.5,44.5 - parent: 100 - - type: DeviceList - devices: - - 9607 - - uid: 17371 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -21.5,49.5 - parent: 100 - - type: DeviceList - devices: - - 9609 - - 15420 - - 15421 - - uid: 17372 - components: - - type: MetaData - name: metempsychosis air alarm - - type: Transform - rot: -1.5707963267948966 rad - pos: -15.5,49.5 - parent: 100 - - type: DeviceList - devices: - - 9614 - - 15382 - - 15387 - - 15373 - - 10663 - - uid: 17376 - components: - - type: MetaData - name: cryogenics air alarm - - type: Transform - rot: 1.5707963267948966 rad - pos: -21.5,41.5 - parent: 100 - - type: DeviceList - devices: - - 15362 - - 10688 - - 20869 - - uid: 17378 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -16.5,44.5 - parent: 100 - - type: DeviceList - devices: - - 9607 - - 9609 - - 9614 - - 10663 - - 10688 - - 10817 - - 10818 - - 15361 - - uid: 17383 - components: - - type: MetaData - name: chemistry air alarm - - type: Transform - rot: 1.5707963267948966 rad - pos: -17.5,40.5 - parent: 100 - - type: DeviceList - devices: - - 6445 - - 9033 - - 10819 - - 6219 - - 6125 - - 20869 - - uid: 17385 - components: - - type: MetaData - name: medical air alarm - - type: Transform - rot: 1.5707963267948966 rad - pos: -15.5,34.5 - parent: 100 - - type: DeviceList - devices: - - 11951 - - 11957 - - 11195 - - 11073 - - 10818 - - 10817 - - 10819 - - 6266 - - 15334 - uid: 17387 components: - type: Transform @@ -8827,6 +8927,16 @@ entities: - 2966 - 3425 - 3422 + - uid: 20868 + components: + - type: Transform + pos: -14.5,51.5 + parent: 100 + - type: DeviceList + devices: + - 20542 + - 15419 + - 15420 - uid: 20891 components: - type: MetaData @@ -9356,14 +9466,25 @@ entities: rot: 3.141592653589793 rad pos: 2.5,-19.5 parent: 100 -- proto: AirlockChemistryLocked +- proto: AirlockChemistryGlassLocked entities: - - uid: 1199 + - uid: 5120 components: - type: MetaData name: Chemistry - type: Transform - pos: -15.5,40.5 + rot: 1.5707963267948966 rad + pos: -17.5,38.5 + parent: 100 +- proto: AirlockChemistryLocked + entities: + - uid: 1616 + components: + - type: MetaData + name: Medical Storage + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,37.5 parent: 100 - proto: AirlockChiefEngineerLocked entities: @@ -9401,12 +9522,13 @@ entities: parent: 100 - proto: AirlockChiefMedicalOfficerLocked entities: - - uid: 5172 + - uid: 1359 components: - type: MetaData - name: Chief Medical Officer's Office + name: CMO's Bedroom - type: Transform - pos: -22.5,47.5 + rot: -1.5707963267948966 rad + pos: -9.5,47.5 parent: 100 - proto: AirlockClownLocked entities: @@ -10630,6 +10752,13 @@ entities: - type: Transform pos: -12.5,26.5 parent: 100 + - uid: 1332 + components: + - type: MetaData + name: Boxing Arena + - type: Transform + pos: -22.5,21.5 + parent: 100 - uid: 2790 components: - type: MetaData @@ -11743,17 +11872,9 @@ entities: - uid: 477 components: - type: MetaData - name: Medical Maintenance + name: Cloning Maintenance - type: Transform - rot: 1.5707963267948966 rad - pos: -29.5,42.5 - parent: 100 - - uid: 1456 - components: - - type: MetaData - name: Medical Maintenance - - type: Transform - pos: -24.5,39.5 + pos: -28.5,42.5 parent: 100 - proto: AirlockMaintResearchDirectorLocked entities: @@ -11855,26 +11976,26 @@ entities: - type: Transform pos: -21.5,-26.5 parent: 100 - - uid: 1431 + - uid: 1255 components: - type: MetaData name: Medical Lobby - type: Transform - pos: -8.5,32.5 + pos: -7.5,32.5 parent: 100 - - uid: 1615 + - uid: 1431 components: - type: MetaData name: Medical Lobby - type: Transform - pos: -4.5,35.5 + pos: -8.5,32.5 parent: 100 - - uid: 1624 + - uid: 1615 components: - type: MetaData name: Medical Lobby - type: Transform - pos: -9.5,32.5 + pos: -4.5,35.5 parent: 100 - uid: 4362 components: @@ -11892,107 +12013,121 @@ entities: - type: Transform pos: -17.5,-30.5 parent: 100 - - uid: 1552 + - uid: 1526 components: - type: MetaData - name: Treatment Room + name: Medical - type: Transform - pos: -12.5,44.5 + rot: -1.5707963267948966 rad + pos: -9.5,38.5 parent: 100 - - uid: 1630 + - uid: 1578 components: - type: MetaData - name: Treatment Room + name: Medical - type: Transform - pos: -6.5,39.5 + rot: -1.5707963267948966 rad + pos: -10.5,38.5 parent: 100 - - uid: 1634 +- proto: AirlockMedicalLocked + entities: + - uid: 1320 components: - type: MetaData - name: Treatment Room + name: Cloning - type: Transform - pos: -8.5,39.5 + rot: -1.5707963267948966 rad + pos: -24.5,42.5 parent: 100 - - uid: 1643 + - uid: 1350 components: - type: MetaData - name: Medical + name: Cryogenics - type: Transform - pos: -14.5,39.5 + rot: -1.5707963267948966 rad + pos: -19.5,49.5 parent: 100 - - uid: 1651 + - uid: 1375 components: - type: MetaData - name: Medical + name: Medical Storage - type: Transform - pos: -13.5,39.5 + rot: -1.5707963267948966 rad + pos: -22.5,40.5 parent: 100 - - uid: 6157 + - uid: 1381 components: - type: MetaData - name: Metempsychosis + name: Medical Storage - type: Transform - pos: -16.5,47.5 + rot: -1.5707963267948966 rad + pos: -19.5,39.5 parent: 100 - - uid: 8317 + - uid: 1434 components: - type: MetaData - name: Treatment Room + name: Intensive Care - type: Transform - pos: -12.5,45.5 + rot: 1.5707963267948966 rad + pos: -19.5,43.5 parent: 100 - - uid: 14836 + - uid: 1492 components: - type: MetaData - name: Storage Room + name: On-Call Room - type: Transform - pos: -12.5,49.5 + rot: -1.5707963267948966 rad + pos: -11.5,45.5 parent: 100 - - uid: 16788 + - uid: 1600 components: - type: MetaData - desc: Press the button to leave unattended. - name: Metempsychosis Exit + name: Cryogenics - type: Transform rot: -1.5707963267948966 rad - pos: -16.5,51.5 + pos: -22.5,46.5 parent: 100 -- proto: AirlockMedicalLocked - entities: - - uid: 1255 + - uid: 1628 components: - type: MetaData name: Morgue - type: Transform - pos: -24.5,43.5 + rot: -1.5707963267948966 rad + pos: -27.5,44.5 parent: 100 - - uid: 1332 + - uid: 1663 components: - type: MetaData - name: Medical + name: Morgue - type: Transform - pos: -14.5,47.5 + rot: -1.5707963267948966 rad + pos: -24.5,45.5 parent: 100 - - uid: 1501 + - uid: 2863 components: - type: MetaData - name: Medical + name: Surgery - type: Transform - pos: -14.5,51.5 + rot: -1.5707963267948966 rad + pos: -16.5,49.5 parent: 100 - - uid: 12568 + - uid: 15155 components: - type: MetaData - name: Morgue + name: Medical North - type: Transform - pos: -24.5,45.5 + rot: 1.5707963267948966 rad + pos: -18.5,51.5 parent: 100 - - uid: 16730 +- proto: AirlockMedicalMorgueLocked + entities: + - uid: 1585 components: - type: MetaData - name: Medical Cryogenics + name: Morgue North - type: Transform - pos: -16.5,42.5 + rot: -1.5707963267948966 rad + pos: -28.5,51.5 parent: 100 - proto: AirlockMimeLocked entities: @@ -12086,13 +12221,6 @@ entities: parent: 100 - proto: AirlockReporterGlassLocked entities: - - uid: 1234 - components: - - type: MetaData - name: Reporter's Room - - type: Transform - pos: -21.5,20.5 - parent: 100 - uid: 1266 components: - type: MetaData @@ -12776,6 +12904,16 @@ entities: - type: DeviceNetwork deviceLists: - 21360 + - uid: 21517 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,42.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 6162 + - 15423 - proto: AirSensorVox entities: - uid: 21122 @@ -12891,6 +13029,37 @@ entities: rot: 1.5707963267948966 rad pos: -32.5,-3.5 parent: 100 + - uid: 6239 + components: + - type: MetaData + name: Chemistry APC + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,35.5 + parent: 100 + - uid: 6241 + components: + - type: MetaData + name: Medical East APC + - type: Transform + pos: -11.5,43.5 + parent: 100 + - uid: 6244 + components: + - type: MetaData + name: Medical West APC + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,40.5 + parent: 100 + - uid: 6251 + components: + - type: MetaData + name: Cryogenics APC + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,46.5 + parent: 100 - uid: 8017 components: - type: MetaData @@ -12935,22 +13104,6 @@ entities: - type: Transform pos: -28.5,38.5 parent: 100 - - uid: 11743 - components: - - type: MetaData - name: Medbay APC - - type: Transform - rot: 1.5707963267948966 rad - pos: -10.5,42.5 - parent: 100 - - uid: 12058 - components: - - type: MetaData - name: Morgue APC - - type: Transform - rot: 1.5707963267948966 rad - pos: -24.5,41.5 - parent: 100 - uid: 12975 components: - type: MetaData @@ -13032,14 +13185,6 @@ entities: - type: Transform pos: -2.5,-44.5 parent: 100 - - uid: 16866 - components: - - type: MetaData - name: Chemistry APC - - type: Transform - rot: -1.5707963267948966 rad - pos: -15.5,38.5 - parent: 100 - uid: 18456 components: - type: MetaData @@ -13838,6 +13983,12 @@ entities: rot: 1.5707963267948966 rad pos: -39.5,48.5 parent: 100 + - uid: 21503 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,49.5 + parent: 100 - proto: BarSign entities: - uid: 1577 @@ -13868,6 +14019,11 @@ entities: parent: 100 - proto: BaseGasCondenser entities: + - uid: 6232 + components: + - type: Transform + pos: -19.5,34.5 + parent: 100 - uid: 18653 components: - type: Transform @@ -13897,15 +14053,10 @@ entities: parent: 100 - proto: Beaker entities: - - uid: 1596 - components: - - type: Transform - pos: -19.813206,38.600273 - parent: 100 - - uid: 1597 + - uid: 15309 components: - type: Transform - pos: -16.815845,35.776382 + pos: -20.256132,50.667633 parent: 100 - proto: Bed entities: @@ -13957,11 +14108,6 @@ entities: - type: Transform pos: 1.5,35.5 parent: 100 - - uid: 3046 - components: - - type: Transform - pos: -28.5,50.5 - parent: 100 - uid: 4142 components: - type: Transform @@ -13982,6 +14128,16 @@ entities: - type: Transform pos: -51.5,-11.5 parent: 100 + - uid: 6135 + components: + - type: Transform + pos: -7.5,46.5 + parent: 100 + - uid: 6205 + components: + - type: Transform + pos: -7.5,50.5 + parent: 100 - uid: 6252 components: - type: Transform @@ -14155,10 +14311,10 @@ entities: parent: 100 - proto: BedsheetCMO entities: - - uid: 3040 + - uid: 6206 components: - type: Transform - pos: -28.5,50.5 + pos: -7.5,50.5 parent: 100 - proto: BedsheetCosmos entities: @@ -14181,11 +14337,6 @@ entities: parent: 100 - proto: BedsheetMedical entities: - - uid: 1445 - components: - - type: Transform - pos: -5.5,43.5 - parent: 100 - uid: 8923 components: - type: Transform @@ -14198,10 +14349,35 @@ entities: rot: 1.5707963267948966 rad pos: 0.5,43.5 parent: 100 - - uid: 15359 + - uid: 15132 components: - type: Transform - pos: -7.5,44.5 + rot: -1.5707963267948966 rad + pos: -20.5,41.5 + parent: 100 + - uid: 15133 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,39.5 + parent: 100 + - uid: 15134 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,39.5 + parent: 100 + - uid: 15135 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,46.5 + parent: 100 + - uid: 15136 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,46.5 parent: 100 - uid: 15502 components: @@ -14213,11 +14389,6 @@ entities: - type: Transform pos: -22.5,-32.5 parent: 100 - - uid: 17304 - components: - - type: Transform - pos: -5.5,45.5 - parent: 100 - proto: BedsheetMime entities: - uid: 1133 @@ -14385,6 +14556,38 @@ entities: - type: Transform pos: 40.5,-4.5 parent: 100 +- proto: BenchBlueComfy + entities: + - uid: 1552 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,33.5 + parent: 100 + - uid: 1646 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,37.5 + parent: 100 + - uid: 1647 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,34.5 + parent: 100 + - uid: 1649 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,34.5 + parent: 100 + - uid: 1657 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,37.5 + parent: 100 - proto: BikeHornInstrument entities: - uid: 5176 @@ -14394,10 +14597,10 @@ entities: parent: 100 - proto: BiomassReclaimer entities: - - uid: 1347 + - uid: 1471 components: - type: Transform - pos: -27.5,44.5 + pos: -27.5,47.5 parent: 100 - proto: BlastDoor entities: @@ -14525,6 +14728,18 @@ entities: - type: Transform pos: 3.6405568,-20.290806 parent: 100 +- proto: BodyBagFolded + entities: + - uid: 20562 + components: + - type: Transform + pos: -8.307921,39.867046 + parent: 100 + - uid: 20683 + components: + - type: Transform + pos: -8.471984,39.85142 + parent: 100 - proto: Bola entities: - uid: 12084 @@ -14785,15 +15000,15 @@ entities: parent: 100 - proto: BoxBeaker entities: - - uid: 1598 + - uid: 20757 components: - type: Transform - pos: -19.29758,38.7409 + pos: -17.428625,-34.54117 parent: 100 - - uid: 20757 + - uid: 21511 components: - type: Transform - pos: -17.428625,-34.54117 + pos: -14.524511,34.717087 parent: 100 - proto: BoxBeanbag entities: @@ -14806,10 +15021,10 @@ entities: unspawnedCount: 12 - proto: BoxBodyBag entities: - - uid: 1208 + - uid: 15152 components: - type: Transform - pos: -25.489424,46.742687 + pos: -25.5,46.5 parent: 100 - proto: BoxCandle entities: @@ -14846,11 +15061,6 @@ entities: - type: Transform pos: 7.593841,-15.20207 parent: 100 - - uid: 6022 - components: - - type: Transform - pos: -11.625086,36.165047 - parent: 100 - uid: 11804 components: - type: Transform @@ -14959,6 +15169,11 @@ entities: - type: Transform pos: -10.557137,58.851032 parent: 100 + - uid: 21510 + components: + - type: Transform + pos: -7.4785333,38.548794 + parent: 100 - proto: BoxFolderYellow entities: - uid: 3178 @@ -14978,20 +15193,6 @@ entities: - type: Transform pos: 11.357761,33.6287 parent: 100 -- proto: BoxPillCanister - entities: - - uid: 13550 - components: - - type: Transform - pos: -19.26633,38.52215 - parent: 100 -- proto: BoxSyringe - entities: - - uid: 1591 - components: - - type: Transform - pos: -19.281956,38.881523 - parent: 100 - proto: BoxZiptie entities: - uid: 3591 @@ -15153,17 +15354,11 @@ entities: parent: 100 - proto: ButtonFrameExit entities: - - uid: 11405 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -12.5,39.5 - parent: 100 - - uid: 11427 + - uid: 15265 components: - type: Transform rot: 3.141592653589793 rad - pos: -7.5,39.5 + pos: -11.5,38.5 parent: 100 - proto: ButtonFrameJanitor entities: @@ -15184,18 +15379,18 @@ entities: - type: Transform pos: -47.5,0.5 parent: 100 - - uid: 13361 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -11.5,43.5 - parent: 100 - uid: 15055 components: - type: Transform rot: -1.5707963267948966 rad pos: -11.5,-27.5 parent: 100 + - uid: 20546 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,41.5 + parent: 100 - proto: CableApcExtension entities: - uid: 66 @@ -15518,10 +15713,15 @@ entities: - type: Transform pos: 34.5,20.5 parent: 100 - - uid: 931 + - uid: 977 components: - type: Transform - pos: -7.5,30.5 + pos: -23.5,44.5 + parent: 100 + - uid: 997 + components: + - type: Transform + pos: -28.5,51.5 parent: 100 - uid: 1077 components: @@ -15553,11 +15753,6 @@ entities: - type: Transform pos: -26.5,30.5 parent: 100 - - uid: 1204 - components: - - type: Transform - pos: -7.5,44.5 - parent: 100 - uid: 1239 components: - type: Transform @@ -15573,11 +15768,6 @@ entities: - type: Transform pos: -36.5,-14.5 parent: 100 - - uid: 1320 - components: - - type: Transform - pos: -7.5,45.5 - parent: 100 - uid: 1340 components: - type: Transform @@ -16038,11 +16228,6 @@ entities: - type: Transform pos: -17.5,-18.5 parent: 100 - - uid: 6150 - components: - - type: Transform - pos: -7.5,43.5 - parent: 100 - uid: 6229 components: - type: Transform @@ -16063,11 +16248,6 @@ entities: - type: Transform pos: 32.5,23.5 parent: 100 - - uid: 6466 - components: - - type: Transform - pos: -24.5,41.5 - parent: 100 - uid: 6789 components: - type: Transform @@ -16078,21 +16258,16 @@ entities: - type: Transform pos: 24.5,20.5 parent: 100 - - uid: 6936 + - uid: 6856 components: - type: Transform - pos: -14.5,42.5 + pos: -20.5,37.5 parent: 100 - uid: 6955 components: - type: Transform pos: -23.5,-45.5 parent: 100 - - uid: 7090 - components: - - type: Transform - pos: -16.5,42.5 - parent: 100 - uid: 7120 components: - type: Transform @@ -16126,7 +16301,12 @@ entities: - uid: 7795 components: - type: Transform - pos: -15.5,42.5 + pos: -18.5,35.5 + parent: 100 + - uid: 7825 + components: + - type: Transform + pos: -17.5,35.5 parent: 100 - uid: 7858 components: @@ -17143,11 +17323,21 @@ entities: - type: Transform pos: -7.5,-14.5 parent: 100 + - uid: 8311 + components: + - type: Transform + pos: -17.5,36.5 + parent: 100 - uid: 8312 components: - type: Transform pos: 6.5,-1.5 parent: 100 + - uid: 8313 + components: + - type: Transform + pos: -17.5,37.5 + parent: 100 - uid: 8314 components: - type: Transform @@ -17158,6 +17348,11 @@ entities: - type: Transform pos: -6.5,6.5 parent: 100 + - uid: 8317 + components: + - type: Transform + pos: -17.5,34.5 + parent: 100 - uid: 8322 components: - type: Transform @@ -19253,6 +19448,16 @@ entities: - type: Transform pos: -21.5,29.5 parent: 100 + - uid: 9033 + components: + - type: Transform + pos: -16.5,34.5 + parent: 100 + - uid: 9049 + components: + - type: Transform + pos: -15.5,34.5 + parent: 100 - uid: 9067 components: - type: Transform @@ -19603,6 +19808,11 @@ entities: - type: Transform pos: -55.5,-2.5 parent: 100 + - uid: 9209 + components: + - type: Transform + pos: -14.5,34.5 + parent: 100 - uid: 9212 components: - type: Transform @@ -19648,6 +19858,16 @@ entities: - type: Transform pos: -45.5,-17.5 parent: 100 + - uid: 9223 + components: + - type: Transform + pos: -13.5,34.5 + parent: 100 + - uid: 9224 + components: + - type: Transform + pos: -13.5,35.5 + parent: 100 - uid: 9225 components: - type: Transform @@ -20463,6 +20683,21 @@ entities: - type: Transform pos: -27.5,18.5 parent: 100 + - uid: 9418 + components: + - type: Transform + pos: -13.5,36.5 + parent: 100 + - uid: 9419 + components: + - type: Transform + pos: -23.5,41.5 + parent: 100 + - uid: 9435 + components: + - type: Transform + pos: -22.5,41.5 + parent: 100 - uid: 9436 components: - type: Transform @@ -20863,6 +21098,11 @@ entities: - type: Transform pos: -30.5,43.5 parent: 100 + - uid: 9527 + components: + - type: Transform + pos: -22.5,40.5 + parent: 100 - uid: 9531 components: - type: Transform @@ -20886,37 +21126,37 @@ entities: - uid: 9555 components: - type: Transform - pos: -19.5,39.5 + pos: -22.5,39.5 parent: 100 - uid: 9556 components: - type: Transform - pos: -19.5,38.5 + pos: -22.5,38.5 parent: 100 - uid: 9557 components: - type: Transform - pos: -19.5,37.5 + pos: -22.5,37.5 parent: 100 - uid: 9558 components: - type: Transform - pos: -19.5,36.5 + pos: -21.5,37.5 parent: 100 - uid: 9559 components: - type: Transform - pos: -18.5,36.5 + pos: -23.5,43.5 parent: 100 - uid: 9560 components: - type: Transform - pos: -17.5,36.5 + pos: -20.5,44.5 parent: 100 - uid: 9561 components: - type: Transform - pos: -16.5,36.5 + pos: -22.5,44.5 parent: 100 - uid: 9575 components: @@ -20931,22 +21171,22 @@ entities: - uid: 9580 components: - type: Transform - pos: -16.5,37.5 + pos: -21.5,44.5 parent: 100 - uid: 9581 components: - type: Transform - pos: -16.5,38.5 + pos: -23.5,42.5 parent: 100 - uid: 9582 components: - type: Transform - pos: -15.5,36.5 + pos: -24.5,42.5 parent: 100 - uid: 9583 components: - type: Transform - pos: -16.5,35.5 + pos: -25.5,42.5 parent: 100 - uid: 9588 components: @@ -20968,6 +21208,26 @@ entities: - type: Transform pos: 32.5,22.5 parent: 100 + - uid: 9599 + components: + - type: Transform + pos: -26.5,42.5 + parent: 100 + - uid: 9607 + components: + - type: Transform + pos: -27.5,42.5 + parent: 100 + - uid: 9609 + components: + - type: Transform + pos: -27.5,43.5 + parent: 100 + - uid: 9614 + components: + - type: Transform + pos: -27.5,44.5 + parent: 100 - uid: 9617 components: - type: Transform @@ -20976,22 +21236,22 @@ entities: - uid: 9625 components: - type: Transform - pos: -9.5,32.5 + pos: -27.5,45.5 parent: 100 - uid: 9626 components: - type: Transform - pos: -10.5,34.5 + pos: -28.5,45.5 parent: 100 - uid: 9627 components: - type: Transform - pos: -11.5,34.5 + pos: -28.5,46.5 parent: 100 - uid: 9628 components: - type: Transform - pos: -12.5,34.5 + pos: -28.5,47.5 parent: 100 - uid: 9629 components: @@ -21121,22 +21381,22 @@ entities: - uid: 9654 components: - type: Transform - pos: -9.5,31.5 + pos: -28.5,48.5 parent: 100 - uid: 9655 components: - type: Transform - pos: -8.5,31.5 + pos: -28.5,49.5 parent: 100 - uid: 9656 components: - type: Transform - pos: -7.5,31.5 + pos: -28.5,50.5 parent: 100 - uid: 9657 components: - type: Transform - pos: -6.5,31.5 + pos: -26.5,50.5 parent: 100 - uid: 9659 components: @@ -21263,6 +21523,11 @@ entities: - type: Transform pos: -37.5,52.5 parent: 100 + - uid: 9704 + components: + - type: Transform + pos: -26.5,49.5 + parent: 100 - uid: 9705 components: - type: Transform @@ -21301,12 +21566,12 @@ entities: - uid: 9719 components: - type: Transform - pos: -29.5,52.5 + pos: -26.5,48.5 parent: 100 - uid: 9720 components: - type: Transform - pos: -28.5,52.5 + pos: -26.5,47.5 parent: 100 - uid: 9721 components: @@ -22878,6 +23143,11 @@ entities: - type: Transform pos: -17.5,58.5 parent: 100 + - uid: 10092 + components: + - type: Transform + pos: -26.5,46.5 + parent: 100 - uid: 10093 components: - type: Transform @@ -22918,6 +23188,11 @@ entities: - type: Transform pos: -50.5,29.5 parent: 100 + - uid: 10103 + components: + - type: Transform + pos: -26.5,45.5 + parent: 100 - uid: 10107 components: - type: Transform @@ -23063,11 +23338,41 @@ entities: - type: Transform pos: -38.5,57.5 parent: 100 + - uid: 10404 + components: + - type: Transform + pos: -20.5,43.5 + parent: 100 + - uid: 10405 + components: + - type: Transform + pos: -20.5,42.5 + parent: 100 + - uid: 10406 + components: + - type: Transform + pos: -11.5,42.5 + parent: 100 + - uid: 10407 + components: + - type: Transform + pos: -12.5,42.5 + parent: 100 - uid: 10452 components: - type: Transform pos: -24.5,16.5 parent: 100 + - uid: 10595 + components: + - type: Transform + pos: -13.5,42.5 + parent: 100 + - uid: 10644 + components: + - type: Transform + pos: -14.5,42.5 + parent: 100 - uid: 10645 components: - type: Transform @@ -23138,6 +23443,26 @@ entities: - type: Transform pos: 4.5,13.5 parent: 100 + - uid: 10663 + components: + - type: Transform + pos: -15.5,42.5 + parent: 100 + - uid: 10667 + components: + - type: Transform + pos: -16.5,42.5 + parent: 100 + - uid: 10688 + components: + - type: Transform + pos: -17.5,42.5 + parent: 100 + - uid: 10689 + components: + - type: Transform + pos: -17.5,43.5 + parent: 100 - uid: 10696 components: - type: Transform @@ -23193,11 +23518,31 @@ entities: - type: Transform pos: -50.5,32.5 parent: 100 + - uid: 10777 + components: + - type: Transform + pos: -17.5,44.5 + parent: 100 - uid: 10795 components: - type: Transform pos: 10.5,26.5 parent: 100 + - uid: 10817 + components: + - type: Transform + pos: -17.5,45.5 + parent: 100 + - uid: 10818 + components: + - type: Transform + pos: -17.5,46.5 + parent: 100 + - uid: 10819 + components: + - type: Transform + pos: -17.5,47.5 + parent: 100 - uid: 11019 components: - type: Transform @@ -23213,6 +23558,46 @@ entities: - type: Transform pos: -56.5,-4.5 parent: 100 + - uid: 11175 + components: + - type: Transform + pos: -17.5,48.5 + parent: 100 + - uid: 11177 + components: + - type: Transform + pos: -17.5,49.5 + parent: 100 + - uid: 11180 + components: + - type: Transform + pos: -16.5,49.5 + parent: 100 + - uid: 11196 + components: + - type: Transform + pos: -15.5,49.5 + parent: 100 + - uid: 11197 + components: + - type: Transform + pos: -14.5,49.5 + parent: 100 + - uid: 11257 + components: + - type: Transform + pos: -13.5,49.5 + parent: 100 + - uid: 11258 + components: + - type: Transform + pos: -13.5,43.5 + parent: 100 + - uid: 11264 + components: + - type: Transform + pos: -13.5,44.5 + parent: 100 - uid: 11275 components: - type: Transform @@ -23248,6 +23633,11 @@ entities: - type: Transform pos: -56.5,-19.5 parent: 100 + - uid: 11317 + components: + - type: Transform + pos: -13.5,45.5 + parent: 100 - uid: 11318 components: - type: Transform @@ -23283,6 +23673,51 @@ entities: - type: Transform pos: -9.5,2.5 parent: 100 + - uid: 11355 + components: + - type: Transform + pos: -12.5,45.5 + parent: 100 + - uid: 11360 + components: + - type: Transform + pos: -11.5,45.5 + parent: 100 + - uid: 11362 + components: + - type: Transform + pos: -10.5,45.5 + parent: 100 + - uid: 11372 + components: + - type: Transform + pos: -9.5,45.5 + parent: 100 + - uid: 11391 + components: + - type: Transform + pos: -8.5,45.5 + parent: 100 + - uid: 11405 + components: + - type: Transform + pos: -7.5,45.5 + parent: 100 + - uid: 11407 + components: + - type: Transform + pos: -6.5,45.5 + parent: 100 + - uid: 11413 + components: + - type: Transform + pos: -6.5,44.5 + parent: 100 + - uid: 11427 + components: + - type: Transform + pos: -6.5,43.5 + parent: 100 - uid: 11430 components: - type: Transform @@ -23308,6 +23743,11 @@ entities: - type: Transform pos: -41.5,-13.5 parent: 100 + - uid: 11474 + components: + - type: Transform + pos: -6.5,42.5 + parent: 100 - uid: 11484 components: - type: Transform @@ -23328,6 +23768,11 @@ entities: - type: Transform pos: -4.5,-9.5 parent: 100 + - uid: 11576 + components: + - type: Transform + pos: -6.5,41.5 + parent: 100 - uid: 11588 components: - type: Transform @@ -23348,6 +23793,11 @@ entities: - type: Transform pos: 7.5,28.5 parent: 100 + - uid: 11644 + components: + - type: Transform + pos: -6.5,40.5 + parent: 100 - uid: 11663 components: - type: Transform @@ -23363,6 +23813,11 @@ entities: - type: Transform pos: 0.5,6.5 parent: 100 + - uid: 11717 + components: + - type: Transform + pos: -6.5,39.5 + parent: 100 - uid: 11741 components: - type: Transform @@ -23373,11 +23828,26 @@ entities: - type: Transform pos: 11.5,26.5 parent: 100 + - uid: 11743 + components: + - type: Transform + pos: -7.5,39.5 + parent: 100 + - uid: 11744 + components: + - type: Transform + pos: -6.5,38.5 + parent: 100 - uid: 11746 components: - type: Transform pos: -15.5,0.5 parent: 100 + - uid: 11793 + components: + - type: Transform + pos: -6.5,37.5 + parent: 100 - uid: 11799 components: - type: Transform @@ -23393,11 +23863,41 @@ entities: - type: Transform pos: 31.5,-24.5 parent: 100 + - uid: 11921 + components: + - type: Transform + pos: -6.5,36.5 + parent: 100 + - uid: 11922 + components: + - type: Transform + pos: -6.5,35.5 + parent: 100 - uid: 11924 components: - type: Transform pos: 22.5,17.5 parent: 100 + - uid: 11951 + components: + - type: Transform + pos: -6.5,34.5 + parent: 100 + - uid: 12058 + components: + - type: Transform + pos: -7.5,34.5 + parent: 100 + - uid: 12169 + components: + - type: Transform + pos: -8.5,34.5 + parent: 100 + - uid: 12226 + components: + - type: Transform + pos: -9.5,34.5 + parent: 100 - uid: 12253 components: - type: Transform @@ -23413,6 +23913,11 @@ entities: - type: Transform pos: 25.5,22.5 parent: 100 + - uid: 12302 + components: + - type: Transform + pos: -8.5,39.5 + parent: 100 - uid: 12303 components: - type: Transform @@ -23428,6 +23933,11 @@ entities: - type: Transform pos: 20.5,20.5 parent: 100 + - uid: 12397 + components: + - type: Transform + pos: -8.5,40.5 + parent: 100 - uid: 12404 components: - type: Transform @@ -23438,6 +23948,36 @@ entities: - type: Transform pos: 24.5,47.5 parent: 100 + - uid: 12438 + components: + - type: Transform + pos: -8.5,41.5 + parent: 100 + - uid: 12441 + components: + - type: Transform + pos: -9.5,39.5 + parent: 100 + - uid: 12442 + components: + - type: Transform + pos: -10.5,39.5 + parent: 100 + - uid: 12443 + components: + - type: Transform + pos: -13.5,37.5 + parent: 100 + - uid: 12444 + components: + - type: Transform + pos: -12.5,36.5 + parent: 100 + - uid: 12446 + components: + - type: Transform + pos: -8.5,33.5 + parent: 100 - uid: 12450 components: - type: Transform @@ -23478,6 +24018,11 @@ entities: - type: Transform pos: -4.5,77.5 parent: 100 + - uid: 12525 + components: + - type: Transform + pos: -5.5,36.5 + parent: 100 - uid: 12539 components: - type: Transform @@ -23493,6 +24038,36 @@ entities: - type: Transform pos: -31.5,-24.5 parent: 100 + - uid: 12568 + components: + - type: Transform + pos: -9.5,35.5 + parent: 100 + - uid: 12580 + components: + - type: Transform + pos: -9.5,36.5 + parent: 100 + - uid: 12596 + components: + - type: Transform + pos: -9.5,37.5 + parent: 100 + - uid: 12602 + components: + - type: Transform + pos: -15.5,41.5 + parent: 100 + - uid: 12608 + components: + - type: Transform + pos: -15.5,40.5 + parent: 100 + - uid: 12609 + components: + - type: Transform + pos: -13.5,41.5 + parent: 100 - uid: 12638 components: - type: Transform @@ -23508,6 +24083,11 @@ entities: - type: Transform pos: 18.5,-7.5 parent: 100 + - uid: 12644 + components: + - type: Transform + pos: -13.5,40.5 + parent: 100 - uid: 12650 components: - type: Transform @@ -23623,6 +24203,11 @@ entities: - type: Transform pos: -47.5,-46.5 parent: 100 + - uid: 12951 + components: + - type: Transform + pos: -9.5,46.5 + parent: 100 - uid: 12952 components: - type: Transform @@ -23648,6 +24233,11 @@ entities: - type: Transform pos: -55.5,-36.5 parent: 100 + - uid: 12998 + components: + - type: Transform + pos: -9.5,47.5 + parent: 100 - uid: 12999 components: - type: Transform @@ -23823,6 +24413,11 @@ entities: - type: Transform pos: -52.5,-3.5 parent: 100 + - uid: 13361 + components: + - type: Transform + pos: -9.5,48.5 + parent: 100 - uid: 13367 components: - type: Transform @@ -23928,6 +24523,11 @@ entities: - type: Transform pos: -39.5,56.5 parent: 100 + - uid: 13550 + components: + - type: Transform + pos: -9.5,49.5 + parent: 100 - uid: 13571 components: - type: Transform @@ -23968,11 +24568,26 @@ entities: - type: Transform pos: 7.5,27.5 parent: 100 + - uid: 13637 + components: + - type: Transform + pos: -8.5,49.5 + parent: 100 - uid: 13859 components: - type: Transform pos: 25.5,17.5 parent: 100 + - uid: 13861 + components: + - type: Transform + pos: -14.5,45.5 + parent: 100 + - uid: 13866 + components: + - type: Transform + pos: -15.5,45.5 + parent: 100 - uid: 13908 components: - type: Transform @@ -25263,11 +25878,6 @@ entities: - type: Transform pos: -6.5,-39.5 parent: 100 - - uid: 15016 - components: - - type: Transform - pos: -9.5,43.5 - parent: 100 - uid: 15032 components: - type: Transform @@ -25323,391 +25933,6 @@ entities: - type: Transform pos: -54.5,29.5 parent: 100 - - uid: 15068 - components: - - type: Transform - pos: -9.5,42.5 - parent: 100 - - uid: 15069 - components: - - type: Transform - pos: -9.5,44.5 - parent: 100 - - uid: 15071 - components: - - type: Transform - pos: -8.5,43.5 - parent: 100 - - uid: 15081 - components: - - type: Transform - pos: -9.5,34.5 - parent: 100 - - uid: 15082 - components: - - type: Transform - pos: -9.5,33.5 - parent: 100 - - uid: 15084 - components: - - type: Transform - pos: -14.5,35.5 - parent: 100 - - uid: 15085 - components: - - type: Transform - pos: -14.5,36.5 - parent: 100 - - uid: 15097 - components: - - type: Transform - pos: -22.5,48.5 - parent: 100 - - uid: 15098 - components: - - type: Transform - pos: -23.5,48.5 - parent: 100 - - uid: 15099 - components: - - type: Transform - pos: -23.5,47.5 - parent: 100 - - uid: 15100 - components: - - type: Transform - pos: -23.5,46.5 - parent: 100 - - uid: 15101 - components: - - type: Transform - pos: -23.5,45.5 - parent: 100 - - uid: 15102 - components: - - type: Transform - pos: -23.5,44.5 - parent: 100 - - uid: 15103 - components: - - type: Transform - pos: -23.5,43.5 - parent: 100 - - uid: 15104 - components: - - type: Transform - pos: -24.5,43.5 - parent: 100 - - uid: 15105 - components: - - type: Transform - pos: -25.5,43.5 - parent: 100 - - uid: 15106 - components: - - type: Transform - pos: -24.5,45.5 - parent: 100 - - uid: 15107 - components: - - type: Transform - pos: -23.5,39.5 - parent: 100 - - uid: 15108 - components: - - type: Transform - pos: -25.5,45.5 - parent: 100 - - uid: 15109 - components: - - type: Transform - pos: -26.5,45.5 - parent: 100 - - uid: 15110 - components: - - type: Transform - pos: -27.5,45.5 - parent: 100 - - uid: 15111 - components: - - type: Transform - pos: -28.5,45.5 - parent: 100 - - uid: 15112 - components: - - type: Transform - pos: -28.5,46.5 - parent: 100 - - uid: 15113 - components: - - type: Transform - pos: -28.5,47.5 - parent: 100 - - uid: 15115 - components: - - type: Transform - pos: -19.5,48.5 - parent: 100 - - uid: 15116 - components: - - type: Transform - pos: -19.5,49.5 - parent: 100 - - uid: 15117 - components: - - type: Transform - pos: -18.5,49.5 - parent: 100 - - uid: 15118 - components: - - type: Transform - pos: -17.5,49.5 - parent: 100 - - uid: 15119 - components: - - type: Transform - pos: -16.5,49.5 - parent: 100 - - uid: 15120 - components: - - type: Transform - pos: -16.5,48.5 - parent: 100 - - uid: 15121 - components: - - type: Transform - pos: -16.5,47.5 - parent: 100 - - uid: 15122 - components: - - type: Transform - pos: -16.5,46.5 - parent: 100 - - uid: 15123 - components: - - type: Transform - pos: -16.5,45.5 - parent: 100 - - uid: 15124 - components: - - type: Transform - pos: -15.5,45.5 - parent: 100 - - uid: 15125 - components: - - type: Transform - pos: -14.5,45.5 - parent: 100 - - uid: 15126 - components: - - type: Transform - pos: -13.5,45.5 - parent: 100 - - uid: 15127 - components: - - type: Transform - pos: -12.5,45.5 - parent: 100 - - uid: 15128 - components: - - type: Transform - pos: -11.5,45.5 - parent: 100 - - uid: 15129 - components: - - type: Transform - pos: -10.5,45.5 - parent: 100 - - uid: 15130 - components: - - type: Transform - pos: -10.5,44.5 - parent: 100 - - uid: 15131 - components: - - type: Transform - pos: -13.5,46.5 - parent: 100 - - uid: 15132 - components: - - type: Transform - pos: -13.5,47.5 - parent: 100 - - uid: 15133 - components: - - type: Transform - pos: -13.5,48.5 - parent: 100 - - uid: 15134 - components: - - type: Transform - pos: -12.5,48.5 - parent: 100 - - uid: 15135 - components: - - type: Transform - pos: -11.5,48.5 - parent: 100 - - uid: 15136 - components: - - type: Transform - pos: -10.5,48.5 - parent: 100 - - uid: 15137 - components: - - type: Transform - pos: -9.5,48.5 - parent: 100 - - uid: 15138 - components: - - type: Transform - pos: -8.5,48.5 - parent: 100 - - uid: 15139 - components: - - type: Transform - pos: -8.5,49.5 - parent: 100 - - uid: 15140 - components: - - type: Transform - pos: -17.5,45.5 - parent: 100 - - uid: 15141 - components: - - type: Transform - pos: -18.5,45.5 - parent: 100 - - uid: 15143 - components: - - type: Transform - pos: -18.5,43.5 - parent: 100 - - uid: 15144 - components: - - type: Transform - pos: -18.5,42.5 - parent: 100 - - uid: 15145 - components: - - type: Transform - pos: -18.5,41.5 - parent: 100 - - uid: 15146 - components: - - type: Transform - pos: -18.5,40.5 - parent: 100 - - uid: 15148 - components: - - type: Transform - pos: -18.5,38.5 - parent: 100 - - uid: 15152 - components: - - type: Transform - pos: -9.5,41.5 - parent: 100 - - uid: 15153 - components: - - type: Transform - pos: -8.5,41.5 - parent: 100 - - uid: 15154 - components: - - type: Transform - pos: -7.5,41.5 - parent: 100 - - uid: 15155 - components: - - type: Transform - pos: -7.5,40.5 - parent: 100 - - uid: 15156 - components: - - type: Transform - pos: -7.5,39.5 - parent: 100 - - uid: 15157 - components: - - type: Transform - pos: -7.5,37.5 - parent: 100 - - uid: 15158 - components: - - type: Transform - pos: -7.5,38.5 - parent: 100 - - uid: 15159 - components: - - type: Transform - pos: -8.5,38.5 - parent: 100 - - uid: 15160 - components: - - type: Transform - pos: -9.5,38.5 - parent: 100 - - uid: 15161 - components: - - type: Transform - pos: -10.5,38.5 - parent: 100 - - uid: 15162 - components: - - type: Transform - pos: -11.5,38.5 - parent: 100 - - uid: 15163 - components: - - type: Transform - pos: -12.5,38.5 - parent: 100 - - uid: 15164 - components: - - type: Transform - pos: -13.5,38.5 - parent: 100 - - uid: 15165 - components: - - type: Transform - pos: -7.5,36.5 - parent: 100 - - uid: 15166 - components: - - type: Transform - pos: -6.5,36.5 - parent: 100 - - uid: 15167 - components: - - type: Transform - pos: -5.5,36.5 - parent: 100 - - uid: 15168 - components: - - type: Transform - pos: -5.5,35.5 - parent: 100 - - uid: 15169 - components: - - type: Transform - pos: -17.5,42.5 - parent: 100 - - uid: 15170 - components: - - type: Transform - pos: -16.5,39.5 - parent: 100 - - uid: 15171 - components: - - type: Transform - pos: -13.5,39.5 - parent: 100 - - uid: 15172 - components: - - type: Transform - pos: -13.5,40.5 - parent: 100 - uid: 15266 components: - type: Transform @@ -28243,51 +28468,6 @@ entities: - type: Transform pos: -60.5,77.5 parent: 100 - - uid: 20539 - components: - - type: Transform - pos: -14.5,43.5 - parent: 100 - - uid: 20540 - components: - - type: Transform - pos: -14.5,44.5 - parent: 100 - - uid: 20541 - components: - - type: Transform - pos: -10.5,42.5 - parent: 100 - - uid: 20542 - components: - - type: Transform - pos: -15.5,38.5 - parent: 100 - - uid: 20543 - components: - - type: Transform - pos: -7.5,35.5 - parent: 100 - - uid: 20544 - components: - - type: Transform - pos: -7.5,34.5 - parent: 100 - - uid: 20545 - components: - - type: Transform - pos: -8.5,34.5 - parent: 100 - - uid: 20546 - components: - - type: Transform - pos: -23.5,41.5 - parent: 100 - - uid: 20547 - components: - - type: Transform - pos: -23.5,42.5 - parent: 100 - uid: 20587 components: - type: Transform @@ -28923,6 +29103,71 @@ entities: - type: Transform pos: 6.5,-56.5 parent: 100 + - uid: 21470 + components: + - type: Transform + pos: -21.5,47.5 + parent: 100 + - uid: 21471 + components: + - type: Transform + pos: -21.5,48.5 + parent: 100 + - uid: 21472 + components: + - type: Transform + pos: -21.5,49.5 + parent: 100 + - uid: 21473 + components: + - type: Transform + pos: -21.5,50.5 + parent: 100 + - uid: 21474 + components: + - type: Transform + pos: -22.5,49.5 + parent: 100 + - uid: 21475 + components: + - type: Transform + pos: -23.5,49.5 + parent: 100 + - uid: 21476 + components: + - type: Transform + pos: -20.5,49.5 + parent: 100 + - uid: 21483 + components: + - type: Transform + pos: -21.5,46.5 + parent: 100 + - uid: 21484 + components: + - type: Transform + pos: -23.5,40.5 + parent: 100 + - uid: 21485 + components: + - type: Transform + pos: -19.5,35.5 + parent: 100 + - uid: 21486 + components: + - type: Transform + pos: -11.5,43.5 + parent: 100 + - uid: 21491 + components: + - type: Transform + pos: -20.5,38.5 + parent: 100 + - uid: 21492 + components: + - type: Transform + pos: -20.5,39.5 + parent: 100 - proto: CableApcStack entities: - uid: 10832 @@ -35168,10 +35413,165 @@ entities: - type: Transform pos: -40.5,-10.5 parent: 100 - - uid: 5741 + - uid: 6253 components: - type: Transform - pos: -24.5,41.5 + pos: -23.5,37.5 + parent: 100 + - uid: 6260 + components: + - type: Transform + pos: -22.5,39.5 + parent: 100 + - uid: 6261 + components: + - type: Transform + pos: -22.5,41.5 + parent: 100 + - uid: 6262 + components: + - type: Transform + pos: -23.5,41.5 + parent: 100 + - uid: 6263 + components: + - type: Transform + pos: -22.5,40.5 + parent: 100 + - uid: 6264 + components: + - type: Transform + pos: -22.5,45.5 + parent: 100 + - uid: 6265 + components: + - type: Transform + pos: -22.5,42.5 + parent: 100 + - uid: 6266 + components: + - type: Transform + pos: -22.5,43.5 + parent: 100 + - uid: 6267 + components: + - type: Transform + pos: -22.5,44.5 + parent: 100 + - uid: 6268 + components: + - type: Transform + pos: -21.5,47.5 + parent: 100 + - uid: 6272 + components: + - type: Transform + pos: -22.5,47.5 + parent: 100 + - uid: 6348 + components: + - type: Transform + pos: -22.5,46.5 + parent: 100 + - uid: 6424 + components: + - type: Transform + pos: -22.5,38.5 + parent: 100 + - uid: 6445 + components: + - type: Transform + pos: -22.5,37.5 + parent: 100 + - uid: 6453 + components: + - type: Transform + pos: -21.5,37.5 + parent: 100 + - uid: 6454 + components: + - type: Transform + pos: -20.5,37.5 + parent: 100 + - uid: 6460 + components: + - type: Transform + pos: -19.5,37.5 + parent: 100 + - uid: 6461 + components: + - type: Transform + pos: -18.5,37.5 + parent: 100 + - uid: 6466 + components: + - type: Transform + pos: -18.5,36.5 + parent: 100 + - uid: 6855 + components: + - type: Transform + pos: -18.5,35.5 + parent: 100 + - uid: 6936 + components: + - type: Transform + pos: -17.5,37.5 + parent: 100 + - uid: 6945 + components: + - type: Transform + pos: -17.5,38.5 + parent: 100 + - uid: 6946 + components: + - type: Transform + pos: -17.5,39.5 + parent: 100 + - uid: 6947 + components: + - type: Transform + pos: -17.5,40.5 + parent: 100 + - uid: 6948 + components: + - type: Transform + pos: -17.5,41.5 + parent: 100 + - uid: 6950 + components: + - type: Transform + pos: -17.5,42.5 + parent: 100 + - uid: 7006 + components: + - type: Transform + pos: -16.5,42.5 + parent: 100 + - uid: 7090 + components: + - type: Transform + pos: -15.5,42.5 + parent: 100 + - uid: 7091 + components: + - type: Transform + pos: -14.5,42.5 + parent: 100 + - uid: 7245 + components: + - type: Transform + pos: -13.5,42.5 + parent: 100 + - uid: 7327 + components: + - type: Transform + pos: -12.5,42.5 + parent: 100 + - uid: 7335 + components: + - type: Transform + pos: -11.5,42.5 parent: 100 - uid: 7681 components: @@ -36118,20 +36518,10 @@ entities: - type: Transform pos: -29.5,9.5 parent: 100 - - uid: 9418 - components: - - type: Transform - pos: -23.5,40.5 - parent: 100 - - uid: 9419 - components: - - type: Transform - pos: -23.5,39.5 - parent: 100 - uid: 9420 components: - type: Transform - pos: -24.5,39.5 + pos: -24.5,37.5 parent: 100 - uid: 9421 components: @@ -36433,21 +36823,6 @@ entities: - type: Transform pos: -1.5,6.5 parent: 100 - - uid: 11744 - components: - - type: Transform - pos: -10.5,42.5 - parent: 100 - - uid: 11921 - components: - - type: Transform - pos: -11.5,42.5 - parent: 100 - - uid: 11922 - components: - - type: Transform - pos: -12.5,42.5 - parent: 100 - uid: 12306 components: - type: Transform @@ -36748,31 +37123,6 @@ entities: - type: Transform pos: 20.5,24.5 parent: 100 - - uid: 15086 - components: - - type: Transform - pos: -23.5,41.5 - parent: 100 - - uid: 15087 - components: - - type: Transform - pos: -23.5,42.5 - parent: 100 - - uid: 15088 - components: - - type: Transform - pos: -23.5,43.5 - parent: 100 - - uid: 15089 - components: - - type: Transform - pos: -23.5,44.5 - parent: 100 - - uid: 15090 - components: - - type: Transform - pos: -23.5,45.5 - parent: 100 - uid: 15195 components: - type: Transform @@ -37648,106 +37998,6 @@ entities: - type: Transform pos: 5.5,30.5 parent: 100 - - uid: 20517 - components: - - type: Transform - pos: -14.5,44.5 - parent: 100 - - uid: 20518 - components: - - type: Transform - pos: -14.5,43.5 - parent: 100 - - uid: 20519 - components: - - type: Transform - pos: -15.5,38.5 - parent: 100 - - uid: 20520 - components: - - type: Transform - pos: -13.5,42.5 - parent: 100 - - uid: 20521 - components: - - type: Transform - pos: -14.5,41.5 - parent: 100 - - uid: 20522 - components: - - type: Transform - pos: -14.5,40.5 - parent: 100 - - uid: 20523 - components: - - type: Transform - pos: -15.5,40.5 - parent: 100 - - uid: 20524 - components: - - type: Transform - pos: -16.5,40.5 - parent: 100 - - uid: 20525 - components: - - type: Transform - pos: -14.5,42.5 - parent: 100 - - uid: 20526 - components: - - type: Transform - pos: -16.5,38.5 - parent: 100 - - uid: 20527 - components: - - type: Transform - pos: -16.5,39.5 - parent: 100 - - uid: 20530 - components: - - type: Transform - pos: -14.5,45.5 - parent: 100 - - uid: 20531 - components: - - type: Transform - pos: -15.5,45.5 - parent: 100 - - uid: 20532 - components: - - type: Transform - pos: -16.5,45.5 - parent: 100 - - uid: 20533 - components: - - type: Transform - pos: -17.5,45.5 - parent: 100 - - uid: 20534 - components: - - type: Transform - pos: -18.5,45.5 - parent: 100 - - uid: 20535 - components: - - type: Transform - pos: -19.5,45.5 - parent: 100 - - uid: 20536 - components: - - type: Transform - pos: -20.5,45.5 - parent: 100 - - uid: 20537 - components: - - type: Transform - pos: -21.5,45.5 - parent: 100 - - uid: 20538 - components: - - type: Transform - pos: -22.5,45.5 - parent: 100 - uid: 20568 components: - type: Transform @@ -38578,6 +38828,26 @@ entities: - type: Transform pos: 2.5,-57.5 parent: 100 + - uid: 21487 + components: + - type: Transform + pos: -21.5,46.5 + parent: 100 + - uid: 21488 + components: + - type: Transform + pos: -23.5,40.5 + parent: 100 + - uid: 21489 + components: + - type: Transform + pos: -19.5,35.5 + parent: 100 + - uid: 21490 + components: + - type: Transform + pos: -11.5,43.5 + parent: 100 - proto: CableTerminal entities: - uid: 10857 @@ -38628,6 +38898,11 @@ entities: rot: -1.5707963267948966 rad pos: -22.450928,-29.338076 parent: 100 + - uid: 21462 + components: + - type: Transform + pos: -11.5,36.5 + parent: 100 - proto: CannabisSeeds entities: - uid: 2177 @@ -39277,6 +39552,26 @@ entities: rot: -1.5707963267948966 rad pos: -10.5,11.5 parent: 100 + - uid: 15169 + components: + - type: Transform + pos: -8.5,50.5 + parent: 100 + - uid: 15170 + components: + - type: Transform + pos: -8.5,49.5 + parent: 100 + - uid: 15171 + components: + - type: Transform + pos: -7.5,49.5 + parent: 100 + - uid: 15172 + components: + - type: Transform + pos: -7.5,50.5 + parent: 100 - uid: 20916 components: - type: Transform @@ -42368,6 +42663,16 @@ entities: - type: Transform pos: -17.5,-57.5 parent: 100 + - uid: 21514 + components: + - type: Transform + pos: -22.5,47.5 + parent: 100 + - uid: 21515 + components: + - type: Transform + pos: -21.5,47.5 + parent: 100 - proto: Chair entities: - uid: 629 @@ -42448,35 +42753,11 @@ entities: rot: 1.5707963267948966 rad pos: -0.5,26.5 parent: 100 - - uid: 1338 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,34.5 - parent: 100 - - uid: 1390 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -13.5,33.5 - parent: 100 - - uid: 1414 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -6.5,33.5 - parent: 100 - uid: 1614 components: - type: Transform pos: -40.5,3.5 parent: 100 - - uid: 1650 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -11.5,33.5 - parent: 100 - uid: 1773 components: - type: Transform @@ -42537,18 +42818,6 @@ entities: rot: 3.141592653589793 rad pos: -35.5,-7.5 parent: 100 - - uid: 6043 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -12.5,33.5 - parent: 100 - - uid: 6239 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -7.5,33.5 - parent: 100 - uid: 10408 components: - type: Transform @@ -42691,6 +42960,16 @@ entities: - type: Transform pos: -53.5,26.5 parent: 100 + - uid: 15065 + components: + - type: Transform + pos: -9.5,42.5 + parent: 100 + - uid: 15067 + components: + - type: Transform + pos: -10.5,42.5 + parent: 100 - uid: 15247 components: - type: Transform @@ -42999,6 +43278,12 @@ entities: parent: 100 - proto: ChairOfficeDark entities: + - uid: 1501 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,36.5 + parent: 100 - uid: 1659 components: - type: Transform @@ -43177,6 +43462,11 @@ entities: - type: Transform pos: -10.5,62.5 parent: 100 + - uid: 6150 + components: + - type: Transform + pos: -6.5,39.5 + parent: 100 - uid: 10176 components: - type: Transform @@ -43258,6 +43548,12 @@ entities: rot: 1.5707963267948966 rad pos: -9.5,-40.5 parent: 100 + - uid: 15098 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,33.5 + parent: 100 - uid: 15979 components: - type: Transform @@ -43327,35 +43623,6 @@ entities: rot: 3.141592653589793 rad pos: -12.5,7.5 parent: 100 - - uid: 1496 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -19.5,49.5 - parent: 100 - - uid: 1584 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -20.5,37.5 - parent: 100 - - uid: 1585 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -16.5,36.5 - parent: 100 - - uid: 1628 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,48.5 - parent: 100 - - uid: 3038 - components: - - type: Transform - pos: -18.5,34.5 - parent: 100 - uid: 5092 components: - type: Transform @@ -43368,10 +43635,11 @@ entities: rot: 3.141592653589793 rad pos: -17.5,22.5 parent: 100 - - uid: 6120 + - uid: 6147 components: - type: Transform - pos: -12.5,36.5 + rot: 3.141592653589793 rad + pos: -5.5,45.5 parent: 100 - uid: 12621 components: @@ -43720,28 +43988,6 @@ entities: - type: Transform pos: -15.498283,-32.23485 parent: 100 -- proto: CheapRollerBedSpawnFolded - entities: - - uid: 2264 - components: - - type: Transform - pos: -11.755601,40.88546 - parent: 100 - - uid: 2355 - components: - - type: Transform - pos: -11.255601,40.463585 - parent: 100 - - uid: 16752 - components: - - type: Transform - pos: -11.724351,40.47921 - parent: 100 - - uid: 16753 - components: - - type: Transform - pos: -11.318101,40.85421 - parent: 100 - proto: CheckerBoard entities: - uid: 12102 @@ -43751,24 +43997,34 @@ entities: parent: 100 - proto: ChemDispenser entities: - - uid: 1399 + - uid: 6208 components: - type: Transform - pos: -16.5,37.5 + pos: -13.5,37.5 + parent: 100 + - uid: 15099 + components: + - type: Transform + pos: -16.5,34.5 parent: 100 - proto: ChemistryHotplate entities: - - uid: 943 + - uid: 15101 components: - type: Transform - pos: -19.5,33.5 + pos: -12.5,35.5 parent: 100 - proto: ChemMaster entities: - - uid: 1578 + - uid: 6207 components: - type: Transform - pos: -17.5,37.5 + pos: -12.5,37.5 + parent: 100 + - uid: 15100 + components: + - type: Transform + pos: -16.5,33.5 parent: 100 - uid: 20756 components: @@ -44206,11 +44462,6 @@ entities: parent: 100 - proto: CigPackBlack entities: - - uid: 1599 - components: - - type: Transform - pos: -16.347095,35.792007 - parent: 100 - uid: 9533 components: - type: Transform @@ -44271,6 +44522,11 @@ entities: - type: Transform pos: -6.5,-8.5 parent: 100 + - uid: 1305 + components: + - type: Transform + pos: -29.5,43.5 + parent: 100 - uid: 2383 components: - type: Transform @@ -44376,11 +44632,6 @@ entities: - type: Transform pos: 17.5,-43.5 parent: 100 - - uid: 17062 - components: - - type: Transform - pos: -27.5,40.5 - parent: 100 - uid: 17513 components: - type: Transform @@ -44677,6 +44928,16 @@ entities: - type: Transform pos: -11.5,8.5 parent: 100 + - uid: 15312 + components: + - type: Transform + pos: -20.5,47.5 + parent: 100 + - uid: 21516 + components: + - type: Transform + pos: -20.5,48.5 + parent: 100 - proto: ClosetTool entities: - uid: 12263 @@ -44747,30 +45008,11 @@ entities: parent: 100 - proto: ClothingBackpackDuffelSurgeryFilled entities: - - uid: 6232 + - uid: 20547 components: - type: Transform - pos: -26.145674,46.758312 + pos: -29.49446,45.694763 parent: 100 - - type: GroupExamine - group: - - hoverMessage: "" - contextText: verb-examine-group-other - icon: /Textures/Interface/examine-star.png - components: - - Armor - - ClothingSpeedModifier - entries: - - message: >- - It provides the following protection: - - - [color=orange]Explosion[/color] damage [color=white]to contents[/color] reduced by [color=lightblue]10%[/color]. - priority: 0 - component: Armor - - message: This decreases your running speed by [color=yellow]10%[/color]. - priority: 0 - component: ClothingSpeedModifier - title: null - proto: ClothingBeltBandolier entities: - uid: 15017 @@ -44853,11 +45095,6 @@ entities: - type: Transform pos: 12.845927,-66.21211 parent: 100 - - uid: 17777 - components: - - type: Transform - pos: -19.150377,33.784508 - parent: 100 - uid: 17778 components: - type: Transform @@ -44873,11 +45110,6 @@ entities: - type: Transform pos: -5.468807,-29.852093 parent: 100 - - uid: 19163 - components: - - type: Transform - pos: -9.528376,40.921482 - parent: 100 - uid: 19696 components: - type: Transform @@ -44922,10 +45154,10 @@ entities: parent: 100 - proto: ClothingEyesHudMedical entities: - - uid: 19818 + - uid: 21454 components: - type: Transform - pos: -9.312887,41.206745 + pos: -5.5022683,46.523598 parent: 100 - proto: ClothingEyesHudSecurity entities: @@ -44993,11 +45225,6 @@ entities: parent: 100 - proto: ClothingHandsGlovesColorWhite entities: - - uid: 19029 - components: - - type: Transform - pos: -15.271927,43.389317 - parent: 100 - uid: 19451 components: - type: Transform @@ -45419,13 +45646,6 @@ entities: - type: Transform pos: 10.20361,-72.38659 parent: 100 -- proto: ClothingHeadNurseHat - entities: - - uid: 4154 - components: - - type: Transform - pos: -9.203488,46.911747 - parent: 100 - proto: ClothingHeadPaperSackSmile entities: - uid: 18915 @@ -45528,10 +45748,10 @@ entities: parent: 100 - proto: ClothingNeckScarfStripedLightBlue entities: - - uid: 20865 + - uid: 21456 components: - type: Transform - pos: -17.628553,43.528503 + pos: -23.034458,49.47835 parent: 100 - proto: ClothingNeckScarfStripedRed entities: @@ -45562,13 +45782,6 @@ entities: - type: Transform pos: -53.714424,29.16044 parent: 100 -- proto: ClothingNeckStethoscope - entities: - - uid: 6139 - components: - - type: Transform - pos: -5.5104265,44.56876 - parent: 100 - proto: ClothingOuterApronChef entities: - uid: 19175 @@ -45788,20 +46001,6 @@ entities: - type: Transform pos: -55.508144,31.475464 parent: 100 -- proto: ClothingUniformJumpskirtNurse - entities: - - uid: 9527 - components: - - type: Transform - pos: -9.281613,46.489872 - parent: 100 -- proto: ClothingUniformJumpskirtParamedic - entities: - - uid: 2307 - components: - - type: Transform - pos: -9.797238,46.552372 - parent: 100 - proto: ClothingUniformJumpsuitAncient entities: - uid: 17516 @@ -45817,13 +46016,6 @@ entities: parent: 10716 - type: Physics canCollide: False -- proto: ClothingUniformJumpsuitParamedic - entities: - - uid: 2268 - components: - - type: Transform - pos: -9.922238,46.739872 - parent: 100 - proto: ClothingUniformOveralls entities: - uid: 19587 @@ -46004,11 +46196,6 @@ entities: - type: Transform pos: -18.5,70.5 parent: 100 - - uid: 5175 - components: - - type: Transform - pos: -24.5,50.5 - parent: 100 - uid: 9134 components: - type: Transform @@ -46042,6 +46229,12 @@ entities: rot: -1.5707963267948966 rad pos: -7.5,-40.5 parent: 100 + - uid: 15110 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,50.5 + parent: 100 - uid: 15193 components: - type: Transform @@ -46169,12 +46362,6 @@ entities: parent: 100 - proto: ComputerBroken entities: - - uid: 1345 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -20.5,49.5 - parent: 100 - uid: 2498 components: - type: MetaData @@ -46259,11 +46446,17 @@ entities: rot: -1.5707963267948966 rad pos: -2.5,73.5 parent: 100 - - uid: 6856 + - uid: 6949 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -11.5,41.5 + rot: 4.71238898038469 rad + pos: -5.5,39.5 + parent: 100 + - uid: 15108 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,49.5 parent: 100 - uid: 17438 components: @@ -46326,6 +46519,12 @@ entities: parent: 100 - proto: ComputerFrame entities: + - uid: 15146 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,41.5 + parent: 100 - uid: 15427 components: - type: Transform @@ -46381,11 +46580,11 @@ entities: - type: Transform pos: -7.5,-39.5 parent: 100 - - uid: 16911 + - uid: 15107 components: - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,49.5 + rot: 1.5707963267948966 rad + pos: -10.5,50.5 parent: 100 - proto: ComputerMassMedia entities: @@ -46397,22 +46596,17 @@ entities: parent: 100 - proto: ComputerMedicalRecords entities: - - uid: 1470 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -26.5,49.5 - parent: 100 - uid: 4502 components: - type: Transform rot: 1.5707963267948966 rad pos: -18.5,74.5 parent: 100 - - uid: 10092 + - uid: 6140 components: - type: Transform - pos: -12.5,37.5 + rot: 3.141592653589793 rad + pos: -5.5,44.5 parent: 100 - uid: 20427 components: @@ -47032,6 +47226,13 @@ entities: - type: Transform pos: -37.5,-13.5 parent: 100 +- proto: CrateFreezer + entities: + - uid: 21478 + components: + - type: Transform + pos: -28.5,45.5 + parent: 100 - proto: CrateFunBoardGames entities: - uid: 1140 @@ -47074,6 +47275,13 @@ entities: - type: Transform pos: -41.5,52.5 parent: 100 +- proto: CrateSurgery + entities: + - uid: 21029 + components: + - type: Transform + pos: -12.5,49.5 + parent: 100 - proto: CrayonGreen entities: - uid: 15252 @@ -47199,12 +47407,6 @@ entities: rot: -1.5707963267948966 rad pos: -36.5,6.5 parent: 100 - - uid: 5678 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,41.5 - parent: 100 - proto: CryogenicSleepUnitSpawnerLateJoin entities: - uid: 3060 @@ -47222,17 +47424,22 @@ entities: parent: 100 - proto: CryoPod entities: - - uid: 6161 + - uid: 15117 components: - type: Transform - pos: -20.5,43.5 + pos: -23.5,50.5 + parent: 100 + - uid: 15118 + components: + - type: Transform + pos: -22.5,50.5 parent: 100 - proto: CryoxadoneBeakerSmall entities: - - uid: 20864 + - uid: 15308 components: - type: Transform - pos: -18.691053,43.826614 + pos: -20.713163,50.667633 parent: 100 - proto: CurtainsBlackOpen entities: @@ -47500,10 +47707,10 @@ entities: parent: 100 - proto: DefaultStationBeaconChemistry entities: - - uid: 19868 + - uid: 21053 components: - type: Transform - pos: -18.5,36.5 + pos: -15.5,35.5 parent: 100 - proto: DefaultStationBeaconChiefJustice entities: @@ -47514,10 +47721,10 @@ entities: parent: 100 - proto: DefaultStationBeaconCMORoom entities: - - uid: 16930 + - uid: 21052 components: - type: Transform - pos: -25.5,49.5 + pos: -9.5,49.5 parent: 100 - proto: DefaultStationBeaconCourtroom entities: @@ -47526,13 +47733,6 @@ entities: - type: Transform pos: 3.5,24.5 parent: 100 -- proto: DefaultStationBeaconCryonics - entities: - - uid: 20867 - components: - - type: Transform - pos: -19.5,42.5 - parent: 100 - proto: DefaultStationBeaconCryosleep entities: - uid: 1193 @@ -47655,10 +47855,10 @@ entities: parent: 100 - proto: DefaultStationBeaconMedbay entities: - - uid: 19867 + - uid: 21055 components: - type: Transform - pos: -8.5,43.5 + pos: -14.5,41.5 parent: 100 - proto: DefaultStationBeaconMedical entities: @@ -47676,24 +47876,19 @@ entities: parent: 100 - type: NavMapBeacon text: Psychologist's Office - - uid: 16877 - components: - - type: Transform - pos: -18.5,49.5 - parent: 100 - - type: NavMapBeacon - text: Cloning Room - - uid: 19866 +- proto: DefaultStationBeaconMetempsychosis + entities: + - uid: 21408 components: - type: Transform - pos: -10.5,36.5 + pos: -26.5,42.5 parent: 100 - proto: DefaultStationBeaconMorgue entities: - - uid: 12226 + - uid: 21219 components: - type: Transform - pos: -27.5,45.5 + pos: -27.5,50.5 parent: 100 - proto: DefaultStationBeaconPermaBrig entities: @@ -47849,6 +48044,13 @@ entities: parent: 100 - type: NavMapBeacon text: Loading Bay +- proto: DefaultStationBeaconSurgery + entities: + - uid: 21232 + components: + - type: Transform + pos: -15.5,49.5 + parent: 100 - proto: DefaultStationBeaconTechVault entities: - uid: 3002 @@ -47900,28 +48102,28 @@ entities: - type: Transform pos: -20.5,-31.5 parent: 100 - - uid: 11372 + - uid: 15129 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -4.5,42.5 + rot: 3.141592653589793 rad + pos: -16.5,43.5 parent: 100 - - uid: 11717 + - uid: 15130 components: - type: Transform - pos: -8.5,47.5 + rot: 1.5707963267948966 rad + pos: -19.5,40.5 parent: 100 - - uid: 12998 + - uid: 15131 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -10.5,43.5 + rot: -1.5707963267948966 rad + pos: -11.5,49.5 parent: 100 - - uid: 19825 + - uid: 15300 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -15.5,41.5 + pos: -20.5,46.5 parent: 100 - proto: DeployableBarrier entities: @@ -48027,12 +48229,6 @@ entities: rot: 3.141592653589793 rad pos: -16.5,-32.5 parent: 100 - - uid: 6159 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -8.5,40.5 - parent: 100 - uid: 6864 components: - type: Transform @@ -48309,6 +48505,18 @@ entities: rot: 3.141592653589793 rad pos: -20.5,-28.5 parent: 100 + - uid: 14840 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,35.5 + parent: 100 + - uid: 14841 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,34.5 + parent: 100 - uid: 14867 components: - type: Transform @@ -48321,17 +48529,16 @@ entities: rot: 1.5707963267948966 rad pos: -21.5,-43.5 parent: 100 - - uid: 15237 + - uid: 15109 components: - type: Transform - rot: 3.141592653589793 rad - pos: -24.5,-48.5 + pos: -9.5,36.5 parent: 100 - - uid: 15283 + - uid: 15237 components: - type: Transform rot: 3.141592653589793 rad - pos: -8.5,36.5 + pos: -24.5,-48.5 parent: 100 - uid: 15290 components: @@ -48386,6 +48593,35 @@ entities: rot: 3.141592653589793 rad pos: -49.5,61.5 parent: 100 + - uid: 19151 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,35.5 + parent: 100 + - uid: 19154 + components: + - type: Transform + pos: -6.5,44.5 + parent: 100 + - uid: 19161 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,41.5 + parent: 100 + - uid: 19868 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,36.5 + parent: 100 + - uid: 20028 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,36.5 + parent: 100 - uid: 20114 components: - type: Transform @@ -48456,6 +48692,18 @@ entities: rot: -1.5707963267948966 rad pos: -30.5,-35.5 parent: 100 + - uid: 21453 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,35.5 + parent: 100 + - uid: 21493 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,34.5 + parent: 100 - proto: DisposalJunction entities: - uid: 3339 @@ -48533,6 +48781,11 @@ entities: rot: 3.141592653589793 rad pos: -16.5,-31.5 parent: 100 + - uid: 15111 + components: + - type: Transform + pos: -8.5,35.5 + parent: 100 - uid: 15289 components: - type: Transform @@ -48544,6 +48797,11 @@ entities: rot: 1.5707963267948966 rad pos: -46.5,61.5 parent: 100 + - uid: 19160 + components: + - type: Transform + pos: -6.5,41.5 + parent: 100 - uid: 20946 components: - type: Transform @@ -48634,11 +48892,11 @@ entities: rot: 3.141592653589793 rad pos: -25.5,6.5 parent: 100 - - uid: 15288 + - uid: 19976 components: - type: Transform rot: 1.5707963267948966 rad - pos: -5.5,36.5 + pos: -6.5,35.5 parent: 100 - uid: 20762 components: @@ -48648,6 +48906,11 @@ entities: parent: 100 - proto: DisposalPipe entities: + - uid: 1022 + components: + - type: Transform + pos: -6.5,36.5 + parent: 100 - uid: 1175 components: - type: Transform @@ -50894,11 +51157,6 @@ entities: rot: 3.141592653589793 rad pos: -20.5,-25.5 parent: 100 - - uid: 14857 - components: - - type: Transform - pos: -8.5,39.5 - parent: 100 - uid: 14865 components: - type: Transform @@ -51031,33 +51289,6 @@ entities: rot: -1.5707963267948966 rad pos: -20.5,-42.5 parent: 100 - - uid: 15280 - components: - - type: Transform - pos: -8.5,38.5 - parent: 100 - - uid: 15281 - components: - - type: Transform - pos: -8.5,37.5 - parent: 100 - - uid: 15282 - components: - - type: Transform - pos: -5.5,37.5 - parent: 100 - - uid: 15284 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -7.5,36.5 - parent: 100 - - uid: 15285 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -6.5,36.5 - parent: 100 - uid: 15286 components: - type: Transform @@ -51428,6 +51659,96 @@ entities: rot: 1.5707963267948966 rad pos: -29.5,61.5 parent: 100 + - uid: 19162 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,42.5 + parent: 100 + - uid: 19163 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,43.5 + parent: 100 + - uid: 19164 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,44.5 + parent: 100 + - uid: 19165 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,44.5 + parent: 100 + - uid: 19166 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,41.5 + parent: 100 + - uid: 19167 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,41.5 + parent: 100 + - uid: 19168 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,41.5 + parent: 100 + - uid: 19262 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,41.5 + parent: 100 + - uid: 19263 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,41.5 + parent: 100 + - uid: 19818 + components: + - type: Transform + pos: -12.5,42.5 + parent: 100 + - uid: 19825 + components: + - type: Transform + pos: -12.5,43.5 + parent: 100 + - uid: 19826 + components: + - type: Transform + pos: -6.5,40.5 + parent: 100 + - uid: 19861 + components: + - type: Transform + pos: -6.5,39.5 + parent: 100 + - uid: 19866 + components: + - type: Transform + pos: -6.5,38.5 + parent: 100 + - uid: 19867 + components: + - type: Transform + pos: -6.5,37.5 + parent: 100 + - uid: 20129 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,36.5 + parent: 100 - uid: 20200 components: - type: Transform @@ -51527,6 +51848,53 @@ entities: rot: -1.5707963267948966 rad pos: -58.5,56.5 parent: 100 + - uid: 20352 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,36.5 + parent: 100 + - uid: 20354 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,36.5 + parent: 100 + - uid: 20360 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,36.5 + parent: 100 + - uid: 20361 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,36.5 + parent: 100 + - uid: 20362 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,36.5 + parent: 100 + - uid: 20363 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,36.5 + parent: 100 + - uid: 20518 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,36.5 + parent: 100 + - uid: 20519 + components: + - type: Transform + pos: -18.5,35.5 + parent: 100 - uid: 20766 components: - type: Transform @@ -51964,12 +52332,6 @@ entities: - type: Transform pos: -12.5,62.5 parent: 100 - - uid: 4361 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,40.5 - parent: 100 - uid: 9150 components: - type: Transform @@ -52080,10 +52442,11 @@ entities: rot: -1.5707963267948966 rad pos: 18.5,-27.5 parent: 100 - - uid: 15279 + - uid: 15105 components: - type: Transform - pos: -5.5,38.5 + rot: 3.141592653589793 rad + pos: -18.5,34.5 parent: 100 - uid: 16725 components: @@ -52130,11 +52493,27 @@ entities: rot: 1.5707963267948966 rad pos: -47.5,56.5 parent: 100 + - uid: 19152 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,44.5 + parent: 100 + - uid: 19153 + components: + - type: Transform + pos: -12.5,44.5 + parent: 100 - uid: 20220 components: - type: Transform pos: -62.5,72.5 parent: 100 + - uid: 20517 + components: + - type: Transform + pos: -8.5,36.5 + parent: 100 - uid: 20763 components: - type: Transform @@ -52200,11 +52579,6 @@ entities: parent: 100 - proto: DisposalUnit entities: - - uid: 1386 - components: - - type: Transform - pos: -5.5,38.5 - parent: 100 - uid: 1987 components: - type: Transform @@ -52250,10 +52624,10 @@ entities: - type: Transform pos: -38.5,-7.5 parent: 100 - - uid: 6124 + - uid: 6120 components: - type: Transform - pos: -7.5,40.5 + pos: -8.5,36.5 parent: 100 - uid: 7365 components: @@ -52365,6 +52739,21 @@ entities: - type: Transform pos: -49.5,68.5 parent: 100 + - uid: 18492 + components: + - type: Transform + pos: -9.5,44.5 + parent: 100 + - uid: 19029 + components: + - type: Transform + pos: -12.5,44.5 + parent: 100 + - uid: 19030 + components: + - type: Transform + pos: -18.5,34.5 + parent: 100 - uid: 20199 components: - type: Transform @@ -52449,21 +52838,11 @@ entities: - type: Transform pos: 7.5,47.5 parent: 100 - - uid: 6212 - components: - - type: Transform - pos: -23.5,49.5 - parent: 100 - uid: 9549 components: - type: Transform pos: -53.5,50.5 parent: 100 - - uid: 11177 - components: - - type: Transform - pos: -16.5,34.5 - parent: 100 - uid: 11923 components: - type: Transform @@ -52489,6 +52868,21 @@ entities: - type: Transform pos: 31.5,19.5 parent: 100 + - uid: 15104 + components: + - type: Transform + pos: -13.5,33.5 + parent: 100 + - uid: 15112 + components: + - type: Transform + pos: -8.5,48.5 + parent: 100 + - uid: 15120 + components: + - type: Transform + pos: -7.5,39.5 + parent: 100 - proto: DonkpocketBoxSpawner entities: - uid: 10163 @@ -52544,10 +52938,10 @@ entities: parent: 100 - proto: DresserChiefMedicalOfficerFilled entities: - - uid: 14753 + - uid: 15116 components: - type: Transform - pos: -27.5,49.5 + pos: -8.5,50.5 parent: 100 - proto: DresserHeadOfPersonnelFilled entities: @@ -52797,6 +53191,13 @@ entities: - data: null ReagentId: PoisonWine Quantity: 50 +- proto: DrinkDoctorsDelightGlass + entities: + - uid: 21455 + components: + - type: Transform + pos: -5.5441613,46.735004 + parent: 100 - proto: DrinkDrGibbCan entities: - uid: 12689 @@ -52830,24 +53231,19 @@ entities: - type: Transform pos: 14.451216,16.645708 parent: 100 -- proto: DrinkHippiesDelightGlass - entities: - - uid: 19162 - components: - - type: Transform - pos: -11.512047,48.646347 - parent: 100 - proto: DrinkHotCoco entities: - - uid: 15151 + - uid: 18740 components: - type: Transform - pos: -18.222303,43.403503 + pos: -52.103607,69.44971 parent: 100 - - uid: 18740 +- proto: DrinkHotCoffee + entities: + - uid: 21465 components: - type: Transform - pos: -52.103607,69.44971 + pos: -5.2929444,43.457462 parent: 100 - proto: DrinkIceCreamGlass entities: @@ -53067,6 +53463,19 @@ entities: maxVol: 50 name: null reagents: [] +- proto: Dropper + entities: + - uid: 1581 + components: + - type: Transform + pos: -18.568302,35.314568 + parent: 100 + - uid: 20543 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.37299,35.455193 + parent: 100 - proto: EdgeDetector entities: - uid: 17405 @@ -53203,15 +53612,6 @@ entities: - type: PointLight enabled: True - type: ActiveEmergencyLight - - uid: 11391 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -12.5,33.5 - parent: 100 - - type: PointLight - enabled: True - - type: ActiveEmergencyLight - uid: 11445 components: - type: Transform @@ -53573,40 +53973,36 @@ entities: - type: PointLight enabled: True - type: ActiveEmergencyLight - - uid: 14989 + - uid: 14028 components: - type: Transform - pos: -5.5,3.5 + pos: -11.5,42.5 parent: 100 - - type: PointLight - enabled: True - - type: ActiveEmergencyLight - - uid: 15261 + - uid: 14127 components: - type: Transform - pos: -15.5,46.5 + rot: 1.5707963267948966 rad + pos: -7.5,43.5 parent: 100 - - type: PointLight - enabled: True - - type: ActiveEmergencyLight - - uid: 15262 + - uid: 14989 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -23.5,41.5 + pos: -5.5,3.5 parent: 100 - type: PointLight enabled: True - type: ActiveEmergencyLight - - uid: 15263 + - uid: 14997 + components: + - type: Transform + pos: -21.5,45.5 + parent: 100 + - uid: 14998 components: - type: Transform rot: 3.141592653589793 rad - pos: -10.5,48.5 + pos: -15.5,33.5 parent: 100 - - type: PointLight - enabled: True - - type: ActiveEmergencyLight - uid: 15857 components: - type: Transform @@ -53881,10 +54277,17 @@ entities: parent: 100 - proto: EmergencyRollerBed entities: - - uid: 1883 + - uid: 2854 + components: + - type: Transform + pos: -8.5,42.5 + parent: 100 +- proto: EpinephrineChemistryBottle + entities: + - uid: 21506 components: - type: Transform - pos: -12.458726,40.51046 + pos: -14.4696245,46.673405 parent: 100 - proto: EuphoniumInstrument entities: @@ -54032,11 +54435,6 @@ entities: - type: Transform pos: 18.5,-19.5 parent: 100 - - uid: 16707 - components: - - type: Transform - pos: -12.5,43.5 - parent: 100 - uid: 16708 components: - type: Transform @@ -54091,13 +54489,13 @@ entities: parent: 100 - type: FaxMachine name: Epistemics - - uid: 14680 + - uid: 15303 components: - type: Transform - pos: -11.5,37.5 + pos: -7.5,42.5 parent: 100 - type: FaxMachine - name: Medical + name: Medbay - uid: 15425 components: - type: Transform @@ -54142,11 +54540,6 @@ entities: parent: 100 - proto: filingCabinet entities: - - uid: 1385 - components: - - type: Transform - pos: -22.5,50.5 - parent: 100 - uid: 1854 components: - type: Transform @@ -54248,23 +54641,13 @@ entities: - type: Transform pos: 11.5,21.5 parent: 100 -- proto: FireAlarm - entities: - - uid: 1674 + - uid: 15115 components: - type: Transform - rot: 3.141592653589793 rad - pos: -12.5,32.5 + pos: -10.5,48.5 parent: 100 - - type: DeviceList - devices: - - 11951 - - 11957 - - 11195 - - 11073 - - 10818 - - 10817 - - 10819 +- proto: FireAlarm + entities: - uid: 2300 components: - type: Transform @@ -54278,6 +54661,31 @@ entities: - 2267 - 20893 - 20892 + - uid: 15423 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,50.5 + parent: 100 + - type: DeviceList + devices: + - 17325 + - 21497 + - 20531 + - 20537 + - 20533 + - 20535 + - 20862 + - 20864 + - 20808 + - 20860 + - 20542 + - 20540 + - 20541 + - 20863 + - 20865 + - 21517 + - 15345 - uid: 16287 components: - type: Transform @@ -55043,7 +55451,6 @@ entities: devices: - 12170 - 12171 - - 12169 - 5979 - 5980 - 5966 @@ -55298,7 +55705,6 @@ entities: - type: DeviceList devices: - 12173 - - 12169 - 12053 - 12052 - uid: 17328 @@ -55316,7 +55722,6 @@ entities: - 11073 - 11195 - 11957 - - 11951 - 5051 - 4445 - 12052 @@ -55340,7 +55745,6 @@ entities: - 11073 - 11195 - 11957 - - 11951 - 5051 - 4445 - 12052 @@ -55501,52 +55905,6 @@ entities: - 2244 - 2323 - 2320 - - uid: 17373 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -26.5,48.5 - parent: 100 - - type: DeviceList - devices: - - 9609 - - uid: 17374 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -15.5,48.5 - parent: 100 - - type: DeviceList - devices: - - 9614 - - uid: 17375 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -11.5,47.5 - parent: 100 - - type: DeviceList - devices: - - 10663 - - uid: 17377 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -17.5,41.5 - parent: 100 - - type: DeviceList - devices: - - 10688 - - uid: 17384 - components: - - type: Transform - pos: -16.5,41.5 - parent: 100 - - type: DeviceList - devices: - - 6445 - - 9033 - - 10819 - uid: 17389 components: - type: Transform @@ -55712,11 +56070,6 @@ entities: - type: DeviceNetwork deviceLists: - 4660 - - uid: 1683 - components: - - type: Transform - pos: -12.5,49.5 - parent: 100 - uid: 2187 components: - type: Transform @@ -55727,11 +56080,6 @@ entities: - type: Transform pos: -50.5,59.5 parent: 100 - - uid: 2393 - components: - - type: Transform - pos: -14.5,51.5 - parent: 100 - uid: 3298 components: - type: Transform @@ -55948,11 +56296,6 @@ entities: rot: -1.5707963267948966 rad pos: -49.5,41.5 parent: 100 - - uid: 9435 - components: - - type: Transform - pos: -28.5,40.5 - parent: 100 - uid: 9530 components: - type: Transform @@ -55968,31 +56311,6 @@ entities: - type: Transform pos: 15.5,-41.5 parent: 100 - - uid: 9607 - components: - - type: Transform - pos: -24.5,43.5 - parent: 100 - - uid: 9609 - components: - - type: Transform - pos: -22.5,47.5 - parent: 100 - - uid: 9614 - components: - - type: Transform - pos: -16.5,47.5 - parent: 100 - - uid: 10663 - components: - - type: Transform - pos: -14.5,47.5 - parent: 100 - - uid: 10688 - components: - - type: Transform - pos: -16.5,42.5 - parent: 100 - uid: 10806 components: - type: Transform @@ -56269,6 +56587,90 @@ entities: - type: DeviceNetwork deviceLists: - 21233 + - uid: 20808 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -14.5,42.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 6162 + - 15423 + - uid: 20860 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -15.5,42.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 6162 + - 15423 + - uid: 20862 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,42.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 6162 + - 15423 + - uid: 20863 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,42.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 6162 + - 15423 + - uid: 20864 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,42.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 6162 + - 15423 + - uid: 20865 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,42.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 6162 + - 15423 + - uid: 21442 + components: + - type: Transform + pos: -7.5,43.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15281 + - uid: 21443 + components: + - type: Transform + pos: -6.5,43.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15281 + - uid: 21444 + components: + - type: Transform + pos: -5.5,43.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15281 - proto: FirelockElectronics entities: - uid: 17772 @@ -56854,11 +57256,6 @@ entities: - type: DeviceNetwork deviceLists: - 4660 - - uid: 6445 - components: - - type: Transform - pos: -22.5,36.5 - parent: 100 - uid: 9015 components: - type: Transform @@ -56869,11 +57266,6 @@ entities: - type: Transform pos: 3.5,-38.5 parent: 100 - - uid: 9033 - components: - - type: Transform - pos: -22.5,37.5 - parent: 100 - uid: 9528 components: - type: Transform @@ -56894,26 +57286,14 @@ entities: - type: Transform pos: 31.5,-35.5 parent: 100 - - uid: 10817 - components: - - type: Transform - pos: -14.5,39.5 - parent: 100 - - uid: 10818 - components: - - type: Transform - pos: -13.5,39.5 - parent: 100 - - uid: 10819 - components: - - type: Transform - pos: -15.5,36.5 - parent: 100 - uid: 11073 components: - type: Transform pos: -4.5,36.5 parent: 100 + - type: DeviceNetwork + deviceLists: + - 15269 - uid: 11150 components: - type: Transform @@ -56934,6 +57314,9 @@ entities: - type: Transform pos: -4.5,35.5 parent: 100 + - type: DeviceNetwork + deviceLists: + - 15269 - uid: 11220 components: - type: Transform @@ -56979,16 +57362,14 @@ entities: - type: Transform pos: 20.5,-6.5 parent: 100 - - uid: 11951 - components: - - type: Transform - pos: -9.5,32.5 - parent: 100 - uid: 11957 components: - type: Transform pos: -8.5,32.5 parent: 100 + - type: DeviceNetwork + deviceLists: + - 15269 - uid: 12052 components: - type: Transform @@ -57004,11 +57385,6 @@ entities: - type: Transform pos: -20.5,22.5 parent: 100 - - uid: 12169 - components: - - type: Transform - pos: -21.5,20.5 - parent: 100 - uid: 12170 components: - type: Transform @@ -57356,26 +57732,6 @@ entities: - type: DeviceNetwork deviceLists: - 19843 - - uid: 19151 - components: - - type: Transform - pos: -6.5,39.5 - parent: 100 - - uid: 19152 - components: - - type: Transform - pos: -8.5,39.5 - parent: 100 - - uid: 19153 - components: - - type: Transform - pos: -12.5,45.5 - parent: 100 - - uid: 19154 - components: - - type: Transform - pos: -12.5,44.5 - parent: 100 - uid: 19660 components: - type: Transform @@ -57432,6 +57788,171 @@ entities: - type: DeviceNetwork deviceLists: - 19857 + - uid: 20524 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,45.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15273 + - 15274 + - uid: 20525 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,46.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15280 + - 15273 + - uid: 20526 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -28.5,51.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15274 + - uid: 20527 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,40.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15273 + - 15275 + - uid: 20531 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,38.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15272 + - 6162 + - 15423 + - uid: 20533 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,38.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15269 + - 6162 + - 15423 + - uid: 20534 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -6.5,38.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15269 + - 15281 + - uid: 20535 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,45.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15281 + - 6162 + - 15423 + - uid: 20536 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,36.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15272 + - 15269 + - uid: 20537 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,38.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15269 + - 6162 + - 15423 + - uid: 20538 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,47.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15281 + - 15282 + - uid: 20539 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,51.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 6162 + - uid: 20540 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,49.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15280 + - 6162 + - 15423 + - uid: 20541 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,43.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 6162 + - 15273 + - 15423 + - uid: 20542 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,49.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 20868 + - 6162 + - 15423 + - uid: 20544 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,44.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15279 + - 15274 - uid: 20771 components: - type: Transform @@ -57443,15 +57964,25 @@ entities: - 17214 - 17222 - 17215 - - uid: 20869 + - uid: 20866 components: - type: Transform - pos: -18.5,39.5 + rot: 1.5707963267948966 rad + pos: -7.5,32.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15269 + - uid: 20867 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,38.5 parent: 100 - type: DeviceNetwork deviceLists: - - 17376 - - 17383 + - 15269 + - 15281 - uid: 20892 components: - type: Transform @@ -57651,13 +58182,6 @@ entities: parent: 100 - proto: FloorDrain entities: - - uid: 6 - components: - - type: Transform - pos: -18.5,36.5 - parent: 100 - - type: Fixtures - fixtures: {} - uid: 1662 components: - type: Transform @@ -57679,13 +58203,6 @@ entities: parent: 100 - type: Fixtures fixtures: {} - - uid: 5931 - components: - - type: Transform - pos: -28.5,44.5 - parent: 100 - - type: Fixtures - fixtures: {} - uid: 8320 components: - type: Transform @@ -57728,6 +58245,22 @@ entities: parent: 100 - type: Fixtures fixtures: {} + - uid: 20365 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,35.5 + parent: 100 + - type: Fixtures + fixtures: {} + - uid: 21494 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,46.5 + parent: 100 + - type: Fixtures + fixtures: {} - proto: FloorTileItemSteel entities: - uid: 12910 @@ -57998,15 +58531,15 @@ entities: parent: 100 - proto: FoodLollipop entities: - - uid: 5948 + - uid: 21460 components: - type: Transform - pos: -11.593836,36.696297 + pos: -6.6778154,38.53251 parent: 100 - - uid: 6143 + - uid: 21461 components: - type: Transform - pos: -11.4406595,36.59049 + pos: -6.3496904,38.50907 parent: 100 - proto: FoodMealCubancarp entities: @@ -58120,11 +58653,6 @@ entities: - type: Transform pos: -5.608796,59.709587 parent: 100 - - uid: 8313 - components: - - type: Transform - pos: -5.682241,46.513325 - parent: 100 - proto: FoodSnackChocolate entities: - uid: 1666 @@ -58208,10 +58736,11 @@ entities: parent: 100 - proto: FuelDispenser entities: - - uid: 20683 + - uid: 21518 components: - type: Transform - pos: -17.5,39.5 + rot: 1.5707963267948966 rad + pos: -20.5,33.5 parent: 100 - proto: GasAnalyzer entities: @@ -58262,14 +58791,28 @@ entities: - type: Transform pos: 33.5,31.5 parent: 100 -- proto: GasFilterFlipped +- proto: GasFilter entities: - - uid: 14994 + - uid: 15121 components: - type: Transform - rot: 3.141592653589793 rad - pos: -20.5,41.5 + rot: 1.5707963267948966 rad + pos: -21.5,48.5 + parent: 100 + - type: GasFilter + filteredGas: NitrousOxide + transferRate: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 15122 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,48.5 parent: 100 + - type: GasFilter + filteredGas: CarbonDioxide + transferRate: 50 - type: AtmosPipeColor color: '#990000FF' - proto: GasMinerNitrogenStation @@ -58418,14 +58961,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 1228 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -18.5,40.5 - parent: 100 - - type: AtmosPipeColor - color: '#0099FFFF' - uid: 1311 components: - type: Transform @@ -58984,13 +59519,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 6160 - components: - - type: Transform - pos: -18.5,43.5 - parent: 100 - - type: AtmosPipeColor - color: '#0099FFFF' - uid: 6183 components: - type: Transform @@ -59015,14 +59543,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 6208 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -19.5,35.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - uid: 6230 components: - type: Transform @@ -59267,30 +59787,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 6945 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -25.5,37.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6947 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -25.5,39.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6948 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -23.5,39.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 6975 components: - type: Transform @@ -59599,22 +60095,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 12580 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,43.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 12608 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -23.5,42.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 12620 components: - type: Transform @@ -59790,43 +60270,124 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 14997 + - uid: 15125 + components: + - type: Transform + pos: -20.5,49.5 + parent: 100 + - uid: 15288 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,39.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 15341 components: - type: Transform rot: 3.141592653589793 rad - pos: -20.5,40.5 + pos: -22.5,37.5 parent: 100 - type: AtmosPipeColor - color: '#0099FFFF' - - uid: 15305 + color: '#990000FF' + - uid: 15349 components: - type: Transform rot: -1.5707963267948966 rad - pos: -6.5,35.5 + pos: -18.5,39.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 15353 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,44.5 parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 15306 + - uid: 15354 + components: + - type: Transform + pos: -12.5,46.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 15355 components: - type: Transform rot: -1.5707963267948966 rad - pos: -7.5,37.5 + pos: -20.5,48.5 + parent: 100 + - uid: 15362 + components: + - type: Transform + pos: -27.5,45.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 15320 + - uid: 15363 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -28.5,45.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 15382 components: - type: Transform rot: 1.5707963267948966 rad - pos: -17.5,37.5 + pos: -25.5,43.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 15384 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,43.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 15376 + - uid: 15386 components: - type: Transform rot: -1.5707963267948966 rad - pos: -18.5,45.5 + pos: -20.5,42.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 15387 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,45.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 15396 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,36.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 15405 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,46.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 15424 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,37.5 parent: 100 - type: AtmosPipeColor color: '#990000FF' @@ -59931,6 +60492,14 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 15757 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,42.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' - uid: 15773 components: - type: Transform @@ -60089,6 +60658,13 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' + - uid: 17777 + components: + - type: Transform + pos: -9.5,48.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' - uid: 18714 components: - type: Transform @@ -60340,6 +60916,13 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' + - uid: 21416 + components: + - type: Transform + pos: -18.5,50.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' - proto: GasPipeFourway entities: - uid: 4099 @@ -60454,29 +61037,15 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 9209 - components: - - type: Transform - pos: -18.5,42.5 - parent: 100 - - type: AtmosPipeColor - color: '#0099FFFF' - uid: 14543 components: - type: Transform pos: -16.5,-55.5 parent: 100 - - uid: 14995 - components: - - type: Transform - pos: -17.5,46.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 15395 + - uid: 15383 components: - type: Transform - pos: -23.5,45.5 + pos: -22.5,45.5 parent: 100 - type: AtmosPipeColor color: '#990000FF' @@ -60606,30 +61175,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 921 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -12.5,49.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 937 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -10.5,49.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 941 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -11.5,49.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 1012 components: - type: Transform @@ -60660,30 +61205,30 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 1335 + - uid: 1227 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -5.5,7.5 + rot: -1.5707963267948966 rad + pos: -25.5,37.5 parent: 100 - type: AtmosPipeColor - color: '#990000FF' - - uid: 1471 + color: '#0055CCFF' + - uid: 1234 components: - type: Transform - rot: 3.141592653589793 rad - pos: -18.5,41.5 + rot: -1.5707963267948966 rad + pos: -24.5,37.5 parent: 100 - type: AtmosPipeColor - color: '#0099FFFF' - - uid: 1479 + color: '#0055CCFF' + - uid: 1335 components: - type: Transform rot: 1.5707963267948966 rad - pos: -9.5,49.5 + pos: -5.5,7.5 parent: 100 - type: AtmosPipeColor - color: '#0055CCFF' + color: '#990000FF' - uid: 1486 components: - type: Transform @@ -60849,14 +61394,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 2360 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -13.5,49.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 2948 components: - type: Transform @@ -60880,14 +61417,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 3067 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -19.5,42.5 - parent: 100 - - type: AtmosPipeColor - color: '#0099FFFF' - uid: 3085 components: - type: Transform @@ -64625,29 +65154,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 6122 - components: - - type: Transform - pos: -17.5,34.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6126 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,37.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6127 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -15.5,37.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 6132 components: - type: Transform @@ -64679,6 +65185,14 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' + - uid: 6159 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,46.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 6172 components: - type: Transform @@ -64877,38 +65391,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 6205 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -18.5,34.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6209 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -19.5,37.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6210 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -19.5,38.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6211 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -19.5,39.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - uid: 6221 components: - type: Transform @@ -64949,54 +65431,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 6260 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -17.5,35.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6261 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,35.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6262 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -15.5,35.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6263 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -14.5,35.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6267 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -11.5,35.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6268 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -10.5,35.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - uid: 6275 components: - type: Transform @@ -68005,30 +68439,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 6946 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -25.5,38.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6949 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -24.5,39.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 6950 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -23.5,40.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 6962 components: - type: Transform @@ -70976,13 +71386,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 10777 - components: - - type: Transform - pos: -17.5,35.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 10829 components: - type: Transform @@ -71145,14 +71548,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 11793 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -15.5,42.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 11795 components: - type: Transform @@ -72571,50 +72966,40 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 14841 + - uid: 15114 components: - type: Transform - rot: 3.141592653589793 rad - pos: -17.5,45.5 + rot: 1.5707963267948966 rad + pos: -18.5,-56.5 parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 14993 + - uid: 15127 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -19.5,40.5 + pos: -17.5,45.5 parent: 100 - type: AtmosPipeColor - color: '#0099FFFF' - - uid: 15074 + color: '#990000FF' + - uid: 15138 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -16.5,42.5 + pos: -23.5,38.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 15114 + - uid: 15139 components: - type: Transform rot: 1.5707963267948966 rad - pos: -18.5,-56.5 + pos: -22.5,39.5 parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 15142 components: - type: Transform rot: 1.5707963267948966 rad pos: -17.5,-56.5 parent: 100 - - uid: 15150 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -17.5,44.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 15192 components: - type: Transform @@ -72630,18 +73015,11 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 15272 + - uid: 15284 components: - type: Transform rot: 3.141592653589793 rad - pos: -13.5,40.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 15293 - components: - - type: Transform - pos: -9.5,34.5 + pos: -9.5,41.5 parent: 100 - type: AtmosPipeColor color: '#990000FF' @@ -72652,365 +73030,201 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 15296 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -8.5,35.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 15297 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -7.5,35.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 15299 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,37.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 15301 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -11.5,37.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 15302 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -10.5,37.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 15303 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -9.5,37.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 15304 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -8.5,37.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 15307 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -6.5,36.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 15308 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -6.5,37.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 15309 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -6.5,38.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 15310 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -6.5,39.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 15311 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -6.5,40.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 15312 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -6.5,41.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - uid: 15313 components: - type: Transform rot: 3.141592653589793 rad - pos: -6.5,42.5 + pos: -23.5,43.5 parent: 100 - type: AtmosPipeColor - color: '#990000FF' + color: '#0055CCFF' - uid: 15314 components: - type: Transform rot: 3.141592653589793 rad - pos: -6.5,43.5 + pos: -23.5,44.5 parent: 100 - type: AtmosPipeColor - color: '#990000FF' + color: '#0055CCFF' - uid: 15315 components: - type: Transform rot: 3.141592653589793 rad - pos: -7.5,38.5 + pos: -22.5,46.5 parent: 100 - type: AtmosPipeColor - color: '#0055CCFF' + color: '#990000FF' - uid: 15316 components: - type: Transform - rot: 3.141592653589793 rad - pos: -7.5,39.5 + pos: -27.5,44.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - uid: 15317 components: - type: Transform - rot: 3.141592653589793 rad - pos: -7.5,40.5 + rot: 1.5707963267948966 rad + pos: -20.5,39.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - uid: 15318 components: - type: Transform - rot: 3.141592653589793 rad - pos: -7.5,41.5 + rot: 1.5707963267948966 rad + pos: -21.5,39.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 15319 + - uid: 15324 components: - type: Transform rot: 3.141592653589793 rad - pos: -7.5,42.5 + pos: -22.5,42.5 parent: 100 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 15324 + color: '#990000FF' + - uid: 15326 components: - type: Transform rot: 3.141592653589793 rad - pos: -19.5,40.5 + pos: -22.5,41.5 parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 15326 + - uid: 15327 components: - type: Transform rot: 3.141592653589793 rad - pos: -19.5,42.5 + pos: -22.5,40.5 parent: 100 - type: AtmosPipeColor color: '#990000FF' - uid: 15330 components: - type: Transform - pos: -23.5,41.5 + rot: 3.141592653589793 rad + pos: -22.5,39.5 parent: 100 - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 15335 + color: '#990000FF' + - uid: 15334 components: - type: Transform - pos: -13.5,36.5 + rot: 3.141592653589793 rad + pos: -22.5,38.5 parent: 100 - type: AtmosPipeColor color: '#990000FF' - uid: 15336 components: - type: Transform - pos: -13.5,37.5 + rot: 1.5707963267948966 rad + pos: -20.5,37.5 parent: 100 - type: AtmosPipeColor color: '#990000FF' - uid: 15337 components: - type: Transform - pos: -13.5,38.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 15338 - components: - - type: Transform - pos: -13.5,39.5 + rot: 1.5707963267948966 rad + pos: -19.5,37.5 parent: 100 - type: AtmosPipeColor color: '#990000FF' - uid: 15339 components: - type: Transform - pos: -14.5,38.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 15340 - components: - - type: Transform - pos: -14.5,39.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 15341 - components: - - type: Transform - pos: -14.5,40.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 15344 - components: - - type: Transform - pos: -14.5,43.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 15345 - components: - - type: Transform - pos: -14.5,44.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 15349 - components: - - type: Transform - pos: -13.5,41.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 15350 - components: - - type: Transform - pos: -13.5,42.5 + pos: -18.5,35.5 parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 15354 + - uid: 15344 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -13.5,45.5 + rot: 3.141592653589793 rad + pos: -17.5,34.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 15355 + - uid: 15352 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -12.5,45.5 + rot: -1.5707963267948966 rad + pos: -19.5,43.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - uid: 15356 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -11.5,45.5 + pos: -18.5,40.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - uid: 15357 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -12.5,44.5 + pos: -18.5,41.5 parent: 100 - type: AtmosPipeColor - color: '#990000FF' - - uid: 15363 + color: '#0055CCFF' + - uid: 15358 components: - type: Transform - pos: -13.5,45.5 + pos: -18.5,42.5 parent: 100 - type: AtmosPipeColor - color: '#990000FF' + color: '#0055CCFF' - uid: 15364 components: - type: Transform - pos: -13.5,46.5 + rot: 3.141592653589793 rad + pos: -28.5,46.5 parent: 100 - type: AtmosPipeColor - color: '#990000FF' + color: '#0055CCFF' - uid: 15365 components: - type: Transform - pos: -13.5,47.5 + rot: 3.141592653589793 rad + pos: -27.5,43.5 parent: 100 - type: AtmosPipeColor - color: '#990000FF' + color: '#0055CCFF' - uid: 15368 components: - type: Transform - pos: -14.5,47.5 + rot: 1.5707963267948966 rad + pos: -26.5,42.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - uid: 15369 components: - type: Transform - pos: -14.5,48.5 + rot: 1.5707963267948966 rad + pos: -25.5,42.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - uid: 15372 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -12.5,48.5 + rot: 1.5707963267948966 rad + pos: -24.5,42.5 parent: 100 - type: AtmosPipeColor - color: '#990000FF' - - uid: 15374 + color: '#0055CCFF' + - uid: 15373 components: - type: Transform rot: 3.141592653589793 rad - pos: -19.5,44.5 + pos: -22.5,44.5 parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 15377 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -15.5,46.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 15378 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,46.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 15379 components: - type: Transform @@ -73019,87 +73233,59 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 15380 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -17.5,47.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 15381 components: - type: Transform rot: 3.141592653589793 rad - pos: -17.5,48.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 15383 - components: - - type: Transform - pos: -18.5,46.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 15384 - components: - - type: Transform - pos: -18.5,47.5 + pos: -25.5,42.5 parent: 100 - type: AtmosPipeColor color: '#990000FF' - uid: 15385 components: - type: Transform - pos: -18.5,48.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 15386 - components: - - type: Transform - pos: -18.5,49.5 + rot: 1.5707963267948966 rad + pos: -22.5,42.5 parent: 100 - type: AtmosPipeColor - color: '#990000FF' + color: '#0055CCFF' - uid: 15388 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -18.5,46.5 + rot: 3.141592653589793 rad + pos: -26.5,46.5 parent: 100 - type: AtmosPipeColor - color: '#0055CCFF' + color: '#990000FF' - uid: 15389 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -19.5,46.5 + rot: 1.5707963267948966 rad + pos: -25.5,45.5 parent: 100 - type: AtmosPipeColor - color: '#0055CCFF' + color: '#990000FF' - uid: 15390 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -20.5,46.5 + rot: 1.5707963267948966 rad + pos: -24.5,45.5 parent: 100 - type: AtmosPipeColor - color: '#0055CCFF' + color: '#990000FF' - uid: 15391 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -21.5,46.5 + rot: 1.5707963267948966 rad + pos: -23.5,45.5 parent: 100 - type: AtmosPipeColor - color: '#0055CCFF' + color: '#990000FF' - uid: 15392 components: - type: Transform rot: -1.5707963267948966 rad - pos: -20.5,45.5 + pos: -23.5,43.5 parent: 100 - type: AtmosPipeColor color: '#990000FF' @@ -73107,7 +73293,7 @@ entities: components: - type: Transform rot: -1.5707963267948966 rad - pos: -21.5,45.5 + pos: -24.5,43.5 parent: 100 - type: AtmosPipeColor color: '#990000FF' @@ -73115,131 +73301,125 @@ entities: components: - type: Transform rot: -1.5707963267948966 rad - pos: -22.5,45.5 + pos: -19.5,39.5 parent: 100 - type: AtmosPipeColor - color: '#990000FF' - - uid: 15397 + color: '#0055CCFF' + - uid: 15395 components: - type: Transform rot: 3.141592653589793 rad - pos: -22.5,47.5 + pos: -17.5,35.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - uid: 15398 components: - type: Transform - rot: 3.141592653589793 rad - pos: -22.5,48.5 + rot: -1.5707963267948966 rad + pos: -16.5,36.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - uid: 15399 components: - type: Transform - rot: 3.141592653589793 rad - pos: -22.5,49.5 + rot: -1.5707963267948966 rad + pos: -15.5,36.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - uid: 15400 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -23.5,46.5 + rot: -1.5707963267948966 rad + pos: -14.5,36.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - uid: 15401 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -24.5,46.5 + rot: 3.141592653589793 rad + pos: -13.5,35.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - uid: 15402 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -25.5,46.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 15403 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -26.5,46.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 15404 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -24.5,45.5 + rot: 3.141592653589793 rad + pos: -18.5,36.5 parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 15405 + - uid: 15404 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -25.5,45.5 + rot: 3.141592653589793 rad + pos: -18.5,44.5 parent: 100 - type: AtmosPipeColor - color: '#990000FF' + color: '#0055CCFF' - uid: 15406 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -26.5,45.5 + rot: 3.141592653589793 rad + pos: -18.5,46.5 parent: 100 - type: AtmosPipeColor - color: '#990000FF' + color: '#0055CCFF' - uid: 15407 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -27.5,45.5 + rot: 3.141592653589793 rad + pos: -18.5,47.5 parent: 100 - type: AtmosPipeColor - color: '#990000FF' + color: '#0055CCFF' - uid: 15408 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -28.5,45.5 + rot: 3.141592653589793 rad + pos: -18.5,48.5 parent: 100 - type: AtmosPipeColor - color: '#990000FF' + color: '#0055CCFF' - uid: 15409 components: - type: Transform - pos: -23.5,44.5 + rot: 1.5707963267948966 rad + pos: -19.5,50.5 parent: 100 - type: AtmosPipeColor - color: '#990000FF' + color: '#0055CCFF' - uid: 15417 components: - type: Transform - pos: -23.5,46.5 + rot: 1.5707963267948966 rad + pos: -16.5,49.5 parent: 100 - type: AtmosPipeColor - color: '#990000FF' + color: '#0055CCFF' - uid: 15418 components: - type: Transform - pos: -23.5,47.5 + rot: 1.5707963267948966 rad + pos: -15.5,49.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 15421 + components: + - type: Transform + pos: -13.5,48.5 parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 15419 + - uid: 15422 components: - type: Transform - pos: -23.5,48.5 + pos: -13.5,47.5 parent: 100 - type: AtmosPipeColor color: '#990000FF' @@ -74644,6 +74824,14 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 15792 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,43.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' - uid: 15793 components: - type: Transform @@ -74778,6 +74966,21 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 15834 + components: + - type: Transform + pos: -17.5,44.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 15836 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,45.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 15837 components: - type: Transform @@ -74792,6 +74995,13 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 15861 + components: + - type: Transform + pos: -17.5,43.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' - uid: 15914 components: - type: Transform @@ -74815,6 +75025,22 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' + - uid: 15936 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,42.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 15937 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,42.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' - uid: 15945 components: - type: Transform @@ -74831,12 +75057,34 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 15973 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,42.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 16095 + components: + - type: Transform + pos: -17.5,41.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' - uid: 16189 components: - type: Transform rot: -1.5707963267948966 rad pos: -10.5,-12.5 parent: 100 + - uid: 16198 + components: + - type: Transform + pos: -17.5,40.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' - uid: 16237 components: - type: Transform @@ -74853,6 +75101,13 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 16279 + components: + - type: Transform + pos: -17.5,39.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' - uid: 16281 components: - type: Transform @@ -74869,6 +75124,13 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' + - uid: 16318 + components: + - type: Transform + pos: -17.5,38.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' - uid: 16435 components: - type: Transform @@ -74974,6 +75236,14 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' + - uid: 16552 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,36.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 16579 components: - type: Transform @@ -75002,6 +75272,22 @@ entities: - type: Transform pos: 17.5,-59.5 parent: 100 + - uid: 16596 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,36.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 16599 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,36.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 16611 components: - type: Transform @@ -75018,6 +75304,14 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 16624 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,36.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 16644 components: - type: Transform @@ -75105,6 +75399,38 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 16707 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,36.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 16753 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,37.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 16756 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,38.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 16788 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,39.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 16827 components: - type: Transform @@ -75217,6 +75543,41 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 16866 + components: + - type: Transform + pos: -9.5,35.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 16876 + components: + - type: Transform + pos: -9.5,36.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 16877 + components: + - type: Transform + pos: -9.5,37.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 16911 + components: + - type: Transform + pos: -9.5,38.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 16930 + components: + - type: Transform + pos: -9.5,39.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' - uid: 16976 components: - type: Transform @@ -75273,6 +75634,13 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 17048 + components: + - type: Transform + pos: -9.5,40.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' - uid: 17246 components: - type: Transform @@ -75289,6 +75657,99 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' + - uid: 17362 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,41.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 17364 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,41.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 17366 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,41.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 17368 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,42.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 17371 + components: + - type: Transform + pos: -7.5,42.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 17372 + components: + - type: Transform + pos: -7.5,43.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 17373 + components: + - type: Transform + pos: -6.5,43.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 17374 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,42.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 17376 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,45.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 17377 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,46.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 17378 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,47.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 17385 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,45.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' - uid: 17412 components: - type: Transform @@ -75297,6 +75758,38 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 17506 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,45.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 17525 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,44.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 17526 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,46.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 17527 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,47.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' - uid: 17748 components: - type: Transform @@ -77483,6 +77976,22 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 20522 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,45.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 20523 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,45.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' - uid: 20789 components: - type: Transform @@ -78022,52 +78531,67 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' -- proto: GasPipeTJunction - entities: - - uid: 167 + - uid: 21423 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 17.5,-4.5 + pos: -17.5,46.5 parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 815 + - uid: 21426 components: - type: Transform - pos: 25.5,21.5 + rot: 1.5707963267948966 rad + pos: -17.5,45.5 parent: 100 - type: AtmosPipeColor - color: '#990000FF' - - uid: 1513 + color: '#0055CCFF' + - uid: 21429 components: - type: Transform rot: 1.5707963267948966 rad - pos: -20.5,42.5 + pos: -16.5,45.5 parent: 100 - type: AtmosPipeColor - color: '#0099FFFF' - - uid: 1580 + color: '#0055CCFF' + - uid: 21495 components: - type: Transform rot: 1.5707963267948966 rad - pos: -3.5,45.5 + pos: -15.5,45.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 1583 +- proto: GasPipeTJunction + entities: + - uid: 167 components: - type: Transform rot: 1.5707963267948966 rad - pos: -17.5,36.5 + pos: 17.5,-4.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 815 + components: + - type: Transform + pos: 25.5,21.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 1228 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,37.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 1680 + - uid: 1580 components: - type: Transform rot: 1.5707963267948966 rad - pos: -14.5,49.5 + pos: -3.5,45.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' @@ -78884,14 +79408,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 6162 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -19.5,41.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - uid: 6184 components: - type: Transform @@ -78923,21 +79439,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 6206 - components: - - type: Transform - pos: -18.5,35.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6207 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -19.5,36.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - uid: 6213 components: - type: Transform @@ -78946,21 +79447,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 6264 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -13.5,35.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 6265 - components: - - type: Transform - pos: -12.5,35.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - uid: 6277 components: - type: Transform @@ -80212,53 +80698,70 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 15264 + - uid: 15123 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -14.5,42.5 + rot: 1.5707963267948966 rad + pos: -23.5,49.5 parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 15273 + - uid: 15124 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,43.5 + rot: 3.141592653589793 rad + pos: -22.5,49.5 parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - - uid: 15275 + - uid: 15126 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -21.5,49.5 + parent: 100 + - uid: 15128 components: - type: Transform rot: 1.5707963267948966 rad - pos: -13.5,48.5 + pos: -23.5,48.5 + parent: 100 + - uid: 15137 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,47.5 parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 15292 + - uid: 15305 components: - type: Transform - pos: -9.5,35.5 + rot: 3.141592653589793 rad + pos: -21.5,47.5 parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 15298 + - uid: 15306 components: - type: Transform - rot: 3.141592653589793 rad - pos: -14.5,37.5 + rot: -1.5707963267948966 rad + pos: -18.5,43.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 15300 + - uid: 15319 components: - type: Transform rot: 3.141592653589793 rad - pos: -12.5,37.5 + pos: -23.5,42.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 15320 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -22.5,43.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' - uid: 15323 components: - type: Transform @@ -80267,23 +80770,21 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 15327 + - uid: 15335 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -19.5,43.5 + pos: -21.5,37.5 parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 15342 + - uid: 15348 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -14.5,41.5 + pos: -17.5,49.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 15352 + - uid: 15350 components: - type: Transform rot: 1.5707963267948966 rad @@ -80291,37 +80792,51 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 15353 + - uid: 15359 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -14.5,45.5 + pos: -18.5,37.5 parent: 100 - type: AtmosPipeColor - color: '#0055CCFF' + color: '#990000FF' - uid: 15366 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -14.5,46.5 + rot: 1.5707963267948966 rad + pos: -27.5,42.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - uid: 15375 components: - type: Transform - pos: -19.5,45.5 + pos: -21.5,42.5 parent: 100 - type: AtmosPipeColor - color: '#990000FF' - - uid: 15396 + color: '#0055CCFF' + - uid: 15397 components: - type: Transform - rot: 3.141592653589793 rad - pos: -22.5,46.5 + pos: -13.5,36.5 parent: 100 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 15403 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,34.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 15416 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -17.5,42.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' - uid: 15453 components: - type: Transform @@ -80629,6 +81144,22 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 16409 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -9.5,34.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 16410 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,36.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 16587 components: - type: Transform @@ -80651,6 +81182,14 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 16863 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -7.5,40.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 16933 components: - type: Transform @@ -80666,6 +81205,37 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' + - uid: 17062 + components: + - type: Transform + pos: -9.5,42.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 17295 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,42.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 17367 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,41.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 17383 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -9.5,45.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' - uid: 18407 components: - type: Transform @@ -80945,6 +81515,45 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' + - uid: 21417 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,49.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 21438 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,44.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 21441 + components: + - type: Transform + pos: -6.5,45.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 21496 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,45.5 + parent: 100 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 21500 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,45.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' - proto: GasPort entities: - uid: 62 @@ -80953,6 +81562,12 @@ entities: rot: -1.5707963267948966 rad pos: -10.5,-10.5 parent: 100 + - uid: 6238 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -19.5,33.5 + parent: 100 - uid: 17761 components: - type: Transform @@ -81086,6 +81701,14 @@ entities: targetPressure: 300 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 6160 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -23.5,47.5 + parent: 100 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 12147 components: - type: Transform @@ -81134,14 +81757,6 @@ entities: parent: 100 - type: GasPressurePump targetPressure: 4500 - - uid: 14998 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -17.5,42.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 16803 components: - type: Transform @@ -81188,6 +81803,11 @@ entities: - type: Transform pos: -55.5,13.5 parent: 100 + - uid: 15119 + components: + - type: Transform + pos: -21.5,50.5 + parent: 100 - uid: 20870 components: - type: Transform @@ -81203,16 +81823,6 @@ entities: parent: 100 - type: GasThermoMachine targetTemperature: 253.15 - - uid: 14840 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -19.5,43.5 - parent: 100 - - type: GasThermoMachine - targetTemperature: 150 - - type: AtmosPipeColor - color: '#0099FFFF' - proto: GasThermoMachineHeater entities: - uid: 20871 @@ -81261,13 +81871,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 1293 - components: - - type: Transform - pos: -14.5,50.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 1306 components: - type: Transform @@ -81301,14 +81904,6 @@ entities: - 21231 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 1627 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -8.5,49.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 3116 components: - type: Transform @@ -81521,14 +82116,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 6125 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,36.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 6227 components: - type: Transform @@ -82164,14 +82751,6 @@ entities: - 460 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 12596 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -22.5,42.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - uid: 13136 components: - type: Transform @@ -82324,64 +82903,69 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 14996 + - uid: 15338 components: - type: Transform rot: 3.141592653589793 rad - pos: -17.5,43.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 15334 - components: - - type: Transform - pos: -12.5,38.5 + pos: -13.5,34.5 parent: 100 + - type: DeviceNetwork + deviceLists: + - 15272 - type: AtmosPipeColor color: '#0055CCFF' - uid: 15360 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -10.5,45.5 - parent: 100 - - type: AtmosPipeColor - color: '#0055CCFF' - - uid: 15361 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -13.5,41.5 + rot: 3.141592653589793 rad + pos: -23.5,36.5 parent: 100 + - type: DeviceNetwork + deviceLists: + - 15275 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 15382 + - uid: 15376 components: - type: Transform - pos: -17.5,49.5 + rot: 3.141592653589793 rad + pos: -21.5,41.5 parent: 100 + - type: DeviceNetwork + deviceLists: + - 15273 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 15421 + - uid: 15377 components: - type: Transform - pos: -22.5,50.5 + pos: -28.5,47.5 parent: 100 + - type: DeviceNetwork + deviceLists: + - 15274 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 15422 + - uid: 15378 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -27.5,46.5 + rot: 3.141592653589793 rad + pos: -27.5,41.5 parent: 100 + - type: DeviceNetwork + deviceLists: + - 15279 - type: AtmosPipeColor color: '#0055CCFF' - - uid: 15424 + - uid: 15419 components: - type: Transform - pos: -7.5,43.5 + rot: -1.5707963267948966 rad + pos: -14.5,49.5 parent: 100 + - type: DeviceNetwork + deviceLists: + - 20868 - type: AtmosPipeColor color: '#0055CCFF' - uid: 15530 @@ -82529,6 +83113,17 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 16752 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,36.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15269 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 16842 components: - type: Transform @@ -82545,6 +83140,49 @@ entities: parent: 100 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 17354 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,41.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 6162 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 17355 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,40.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15281 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 17375 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,44.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15281 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 17379 + components: + - type: Transform + pos: -7.5,48.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15282 + - type: AtmosPipeColor + color: '#0055CCFF' - uid: 18716 components: - type: Transform @@ -82911,6 +83549,39 @@ entities: - 21360 - type: AtmosPipeColor color: '#0055CCFF' + - uid: 21418 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,50.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15280 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 21498 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,45.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 6162 + - type: AtmosPipeColor + color: '#0055CCFF' + - uid: 21499 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -17.5,48.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 6162 + - type: AtmosPipeColor + color: '#0055CCFF' - proto: GasVentPumpVox entities: - uid: 21106 @@ -83296,14 +83967,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 6219 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -20.5,36.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - uid: 6220 components: - type: Transform @@ -83320,14 +83983,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 6266 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -12.5,34.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - uid: 6296 components: - type: Transform @@ -83894,14 +84549,6 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 12609 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -22.5,43.5 - parent: 100 - - type: AtmosPipeColor - color: '#990000FF' - uid: 12698 components: - type: Transform @@ -84087,65 +84734,90 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' - - uid: 15274 + - uid: 15311 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -14.5,43.5 + rot: -1.5707963267948966 rad + pos: -20.5,47.5 parent: 100 + - type: DeviceNetwork + deviceLists: + - 15280 - type: AtmosPipeColor color: '#990000FF' - - uid: 15358 + - uid: 15340 components: - type: Transform rot: -1.5707963267948966 rad - pos: -11.5,44.5 + pos: -17.5,34.5 parent: 100 + - type: DeviceNetwork + deviceLists: + - 15272 - type: AtmosPipeColor color: '#990000FF' - - uid: 15362 + - uid: 15342 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -20.5,43.5 + rot: 3.141592653589793 rad + pos: -21.5,36.5 parent: 100 + - type: DeviceNetwork + deviceLists: + - 15275 - type: AtmosPipeColor color: '#990000FF' - - uid: 15373 + - uid: 15345 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -11.5,48.5 + pos: -17.5,47.5 parent: 100 + - type: DeviceNetwork + deviceLists: + - 6162 + - 15423 - type: AtmosPipeColor color: '#990000FF' - - uid: 15387 + - uid: 15361 components: - type: Transform - pos: -18.5,50.5 + pos: -26.5,47.5 parent: 100 + - type: DeviceNetwork + deviceLists: + - 15274 - type: AtmosPipeColor color: '#990000FF' - - uid: 15416 + - uid: 15374 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -29.5,45.5 + rot: -1.5707963267948966 rad + pos: -21.5,45.5 parent: 100 + - type: DeviceNetwork + deviceLists: + - 15273 - type: AtmosPipeColor color: '#990000FF' - - uid: 15420 + - uid: 15380 components: - type: Transform - pos: -23.5,49.5 + rot: 3.141592653589793 rad + pos: -25.5,41.5 parent: 100 + - type: DeviceNetwork + deviceLists: + - 15279 - type: AtmosPipeColor color: '#990000FF' - - uid: 15423 + - uid: 15420 components: - type: Transform - pos: -6.5,44.5 + pos: -13.5,49.5 parent: 100 + - type: DeviceNetwork + deviceLists: + - 20868 - type: AtmosPipeColor color: '#990000FF' - uid: 15532 @@ -84270,6 +84942,17 @@ entities: parent: 100 - type: AtmosPipeColor color: '#990000FF' + - uid: 16730 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,34.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15269 + - type: AtmosPipeColor + color: '#990000FF' - uid: 16841 components: - type: Transform @@ -84289,11 +84972,49 @@ entities: - 21165 - type: AtmosPipeColor color: '#990000FF' + - uid: 17304 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,41.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15281 + - type: AtmosPipeColor + color: '#990000FF' - uid: 17325 components: - type: Transform - pos: -13.5,49.5 + rot: 1.5707963267948966 rad + pos: -10.5,42.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 6162 + - 15423 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 17384 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -5.5,45.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 15281 + - type: AtmosPipeColor + color: '#990000FF' + - uid: 17588 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,48.5 parent: 100 + - type: DeviceNetwork + deviceLists: + - 15282 - type: AtmosPipeColor color: '#990000FF' - uid: 18718 @@ -84605,6 +85326,17 @@ entities: - 21360 - type: AtmosPipeColor color: '#990000FF' + - uid: 21497 + components: + - type: Transform + pos: -13.5,45.5 + parent: 100 + - type: DeviceNetwork + deviceLists: + - 6162 + - 15423 + - type: AtmosPipeColor + color: '#990000FF' - proto: GasVentScrubberVox entities: - uid: 21105 @@ -85218,11 +85950,6 @@ entities: rot: -1.5707963267948966 rad pos: -9.5,20.5 parent: 100 - - uid: 1305 - components: - - type: Transform - pos: -19.5,39.5 - parent: 100 - uid: 1307 components: - type: Transform @@ -85231,12 +85958,13 @@ entities: - uid: 1309 components: - type: Transform - pos: -12.5,48.5 + pos: -9.5,32.5 parent: 100 - uid: 1312 components: - type: Transform - pos: -15.5,37.5 + rot: -1.5707963267948966 rad + pos: -19.5,42.5 parent: 100 - uid: 1328 components: @@ -85253,78 +85981,28 @@ entities: - type: Transform pos: -4.5,46.5 parent: 100 - - uid: 1348 - components: - - type: Transform - pos: -15.5,35.5 - parent: 100 - - uid: 1350 - components: - - type: Transform - pos: -12.5,46.5 - parent: 100 - - uid: 1354 - components: - - type: Transform - pos: -24.5,46.5 - parent: 100 - - uid: 1357 - components: - - type: Transform - pos: -7.5,32.5 - parent: 100 - uid: 1358 components: - type: Transform pos: -6.5,32.5 parent: 100 - - uid: 1360 - components: - - type: Transform - pos: -18.5,47.5 - parent: 100 - - uid: 1362 - components: - - type: Transform - pos: -7.5,39.5 - parent: 100 - - uid: 1366 - components: - - type: Transform - pos: -17.5,47.5 - parent: 100 - - uid: 1375 - components: - - type: Transform - pos: -19.5,32.5 - parent: 100 - - uid: 1378 - components: - - type: Transform - pos: -13.5,47.5 - parent: 100 - - uid: 1420 - components: - - type: Transform - pos: -24.5,42.5 - parent: 100 - uid: 1433 components: - type: Transform rot: 3.141592653589793 rad pos: -53.5,17.5 parent: 100 - - uid: 1434 - components: - - type: Transform - pos: -20.5,39.5 - parent: 100 - uid: 1444 components: - type: Transform rot: 1.5707963267948966 rad pos: -4.5,34.5 parent: 100 + - uid: 1445 + components: + - type: Transform + pos: -24.5,43.5 + parent: 100 - uid: 1483 components: - type: Transform @@ -85337,6 +86015,11 @@ entities: rot: -1.5707963267948966 rad pos: -44.5,82.5 parent: 100 + - uid: 1540 + components: + - type: Transform + pos: -11.5,35.5 + parent: 100 - uid: 1555 components: - type: Transform @@ -85347,6 +86030,16 @@ entities: - type: Transform pos: -4.5,41.5 parent: 100 + - uid: 1562 + components: + - type: Transform + pos: -17.5,51.5 + parent: 100 + - uid: 1601 + components: + - type: Transform + pos: -19.5,48.5 + parent: 100 - uid: 1608 components: - type: Transform @@ -85357,11 +86050,23 @@ entities: - type: Transform pos: -4.5,45.5 parent: 100 + - uid: 1658 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,50.5 + parent: 100 - uid: 1661 components: - type: Transform pos: 15.5,22.5 parent: 100 + - uid: 1680 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,44.5 + parent: 100 - uid: 1715 components: - type: Transform @@ -86661,11 +87366,6 @@ entities: rot: 3.141592653589793 rad pos: -38.5,79.5 parent: 100 - - uid: 4373 - components: - - type: Transform - pos: -23.5,47.5 - parent: 100 - uid: 4384 components: - type: Transform @@ -87195,6 +87895,12 @@ entities: - type: Transform pos: 0.5,-44.5 parent: 100 + - uid: 5162 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,36.5 + parent: 100 - uid: 5185 components: - type: Transform @@ -87280,6 +87986,12 @@ entities: rot: 1.5707963267948966 rad pos: -14.5,8.5 parent: 100 + - uid: 6126 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -5.5,38.5 + parent: 100 - uid: 6136 components: - type: Transform @@ -87502,26 +88214,6 @@ entities: - type: Transform pos: 6.5,-38.5 parent: 100 - - uid: 10404 - components: - - type: Transform - pos: -20.5,44.5 - parent: 100 - - uid: 10405 - components: - - type: Transform - pos: -19.5,44.5 - parent: 100 - - uid: 10406 - components: - - type: Transform - pos: -18.5,44.5 - parent: 100 - - uid: 10407 - components: - - type: Transform - pos: -17.5,44.5 - parent: 100 - uid: 10451 components: - type: Transform @@ -88194,11 +88886,6 @@ entities: - type: Transform pos: -16.5,-67.5 parent: 100 - - uid: 14127 - components: - - type: Transform - pos: -13.5,51.5 - parent: 100 - uid: 14151 components: - type: Transform @@ -88329,6 +89016,51 @@ entities: - type: Transform pos: -25.5,22.5 parent: 100 + - uid: 15068 + components: + - type: Transform + pos: -23.5,46.5 + parent: 100 + - uid: 15069 + components: + - type: Transform + pos: -10.5,43.5 + parent: 100 + - uid: 15071 + components: + - type: Transform + pos: -9.5,43.5 + parent: 100 + - uid: 15072 + components: + - type: Transform + pos: -11.5,44.5 + parent: 100 + - uid: 15073 + components: + - type: Transform + pos: -11.5,46.5 + parent: 100 + - uid: 15074 + components: + - type: Transform + pos: -12.5,47.5 + parent: 100 + - uid: 15075 + components: + - type: Transform + pos: -13.5,47.5 + parent: 100 + - uid: 15076 + components: + - type: Transform + pos: -14.5,47.5 + parent: 100 + - uid: 15081 + components: + - type: Transform + pos: -15.5,47.5 + parent: 100 - uid: 15091 components: - type: Transform @@ -91479,42 +92211,8 @@ entities: - type: Transform pos: 13.5,50.5 parent: 100 -- proto: HandheldGPSBasic - entities: - - uid: 1419 - components: - - type: Transform - pos: -18.280558,50.606716 - parent: 100 -- proto: HandheldHealthAnalyzer - entities: - - uid: 1663 - components: - - type: Transform - pos: -11.403987,42.587364 - parent: 100 - - uid: 1686 - components: - - type: Transform - pos: -11.653987,42.774864 - parent: 100 - - uid: 6135 - components: - - type: Transform - pos: -15.387002,44.362442 - parent: 100 - - uid: 6145 - components: - - type: Transform - pos: -15.590127,44.737442 - parent: 100 - proto: HandLabeler entities: - - uid: 1600 - components: - - type: Transform - pos: -16.64397,35.370132 - parent: 100 - uid: 2316 components: - type: Transform @@ -91530,6 +92228,11 @@ entities: - type: Transform pos: -37.36918,16.014673 parent: 100 + - uid: 21512 + components: + - type: Transform + pos: -24.556955,37.009968 + parent: 100 - proto: HappyHonkMime entities: - uid: 19862 @@ -91672,6 +92375,26 @@ entities: - type: Transform pos: 31.5,-22.5 parent: 100 + - uid: 4361 + components: + - type: Transform + pos: -15.5,47.5 + parent: 100 + - uid: 4363 + components: + - type: Transform + pos: -14.5,47.5 + parent: 100 + - uid: 4373 + components: + - type: Transform + pos: -13.5,47.5 + parent: 100 + - uid: 4378 + components: + - type: Transform + pos: -12.5,47.5 + parent: 100 - proto: HospitalCurtainsOpen entities: - uid: 237 @@ -91679,6 +92402,56 @@ entities: - type: Transform pos: -9.5,-1.5 parent: 100 + - uid: 4704 + components: + - type: Transform + pos: -15.5,43.5 + parent: 100 + - uid: 4895 + components: + - type: Transform + pos: -14.5,43.5 + parent: 100 + - uid: 5049 + components: + - type: Transform + pos: -13.5,43.5 + parent: 100 + - uid: 5118 + components: + - type: Transform + pos: -12.5,43.5 + parent: 100 + - uid: 5678 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,39.5 + parent: 100 + - uid: 5741 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -13.5,39.5 + parent: 100 + - uid: 6122 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,41.5 + parent: 100 + - uid: 6124 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,45.5 + parent: 100 + - uid: 6143 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,46.5 + parent: 100 - uid: 11732 components: - type: Transform @@ -92002,10 +92775,11 @@ entities: parent: 100 - proto: IntercomMedical entities: - - uid: 21408 + - uid: 21445 components: - type: Transform - pos: -7.5,39.5 + rot: -1.5707963267948966 rad + pos: -4.5,37.5 parent: 100 - proto: IntercomScience entities: @@ -92176,13 +92950,13 @@ entities: - type: Transform pos: -28.5,24.5 parent: 100 -- proto: KitchenReagentGrinder - entities: - - uid: 1024 + - uid: 21421 components: - type: Transform - pos: -19.5,34.5 + pos: -8.5,44.5 parent: 100 +- proto: KitchenReagentGrinder + entities: - uid: 1342 components: - type: Transform @@ -92193,6 +92967,11 @@ entities: - type: Transform pos: -27.5,32.5 parent: 100 + - uid: 15102 + components: + - type: Transform + pos: -14.5,33.5 + parent: 100 - uid: 17031 components: - type: Transform @@ -92274,11 +93053,6 @@ entities: - type: Transform pos: -19.376627,69.86922 parent: 100 - - uid: 6241 - components: - - type: Transform - pos: -25.487497,49.678818 - parent: 100 - uid: 14651 components: - type: Transform @@ -92353,26 +93127,6 @@ entities: - type: Transform pos: -27.915045,23.632677 parent: 100 - - uid: 1592 - components: - - type: Transform - pos: -18.666002,33.690758 - parent: 100 - - uid: 1593 - components: - - type: Transform - pos: -18.884752,33.581383 - parent: 100 - - uid: 1594 - components: - - type: Transform - pos: -19.744003,38.85946 - parent: 100 - - uid: 1595 - components: - - type: Transform - pos: -19.750706,38.694023 - parent: 100 - proto: LauncherCreamPie entities: - uid: 16713 @@ -92517,10 +93271,10 @@ entities: parent: 100 - proto: LockerChemistryFilled entities: - - uid: 17364 + - uid: 15089 components: - type: Transform - pos: -17.5,33.5 + pos: -12.5,34.5 parent: 100 - proto: LockerChiefEngineerFilled entities: @@ -92538,10 +93292,10 @@ entities: parent: 100 - proto: LockerChiefMedicalOfficerFilledHardsuit entities: - - uid: 5661 + - uid: 6169 components: - type: Transform - pos: -29.5,49.5 + pos: -7.5,48.5 parent: 100 - proto: LockerClerkFilled entities: @@ -92706,36 +93460,27 @@ entities: - type: Transform pos: 4.5,47.5 parent: 100 -- proto: LockerMedical - entities: - - uid: 19030 - components: - - type: MetaData - name: mortician locker - - type: Transform - pos: -29.5,45.5 - parent: 100 - proto: LockerMedicalFilled entities: - - uid: 1359 + - uid: 4183 components: - type: Transform - pos: -10.5,50.5 + pos: -5.5,42.5 parent: 100 - - uid: 1474 + - uid: 15140 components: - type: Transform - pos: -11.5,50.5 + pos: -23.5,39.5 parent: 100 - - uid: 12441 + - uid: 15141 components: - type: Transform - pos: -8.5,50.5 + pos: -23.5,38.5 parent: 100 - - uid: 16410 + - uid: 21427 components: - type: Transform - pos: -9.5,50.5 + pos: -7.5,43.5 parent: 100 - proto: LockerMedicine entities: @@ -92779,17 +93524,29 @@ entities: showEnts: False occludes: True ent: null +- proto: LockerMedicineFilled + entities: + - uid: 3393 + components: + - type: Transform + pos: -14.5,40.5 + parent: 100 + - uid: 3404 + components: + - type: Transform + pos: -12.5,40.5 + parent: 100 - proto: LockerParamedicFilledHardsuit entities: - - uid: 12644 + - uid: 6157 components: - type: Transform - pos: -9.5,48.5 + pos: -5.5,41.5 parent: 100 - - uid: 16409 + - uid: 16319 components: - type: Transform - pos: -10.5,48.5 + pos: -5.5,40.5 parent: 100 - proto: LockerQuarterMasterFilled entities: @@ -92876,6 +93633,13 @@ entities: - type: Transform pos: 13.5,43.5 parent: 100 +- proto: LockerWallMedicalFilled + entities: + - uid: 21422 + components: + - type: Transform + pos: -20.5,40.5 + parent: 100 - proto: LockerWardenFilledHardsuit entities: - uid: 5956 @@ -93005,26 +93769,20 @@ entities: parent: 100 - proto: MachineCentrifuge entities: - - uid: 10595 + - uid: 15090 components: - type: Transform - pos: -20.5,38.5 + pos: -18.5,35.5 parent: 100 - proto: MachineElectrolysisUnit entities: - - uid: 9223 + - uid: 15097 components: - type: Transform - pos: -21.5,38.5 + pos: -15.5,37.5 parent: 100 - proto: MachineFrame entities: - - uid: 1381 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -17.5,50.5 - parent: 100 - uid: 19430 components: - type: Transform @@ -93032,6 +93790,11 @@ entities: parent: 100 - proto: MachineFrameDestroyed entities: + - uid: 1650 + components: + - type: Transform + pos: -25.5,41.5 + parent: 100 - uid: 2532 components: - type: Transform @@ -93239,30 +94002,6 @@ entities: - type: Transform pos: 10.347519,-71.960655 parent: 100 -- proto: MaterialBiomass - entities: - - uid: 19976 - components: - - type: Transform - pos: -18.74906,50.265106 - parent: 100 -- proto: MaterialBiomass1 - entities: - - uid: 6253 - components: - - type: Transform - pos: -26.630049,46.586437 - parent: 100 - - uid: 6272 - components: - - type: Transform - pos: -26.770674,46.398937 - parent: 100 - - uid: 16095 - components: - - type: Transform - pos: -26.786299,46.789562 - parent: 100 - proto: MaterialCloth entities: - uid: 12787 @@ -93327,10 +94066,20 @@ entities: parent: 100 - proto: MedicalBed entities: - - uid: 1587 + - uid: 2264 components: - type: Transform - pos: -7.5,44.5 + pos: -20.5,41.5 + parent: 100 + - uid: 2307 + components: + - type: Transform + pos: -13.5,39.5 + parent: 100 + - uid: 2864 + components: + - type: Transform + pos: -15.5,39.5 parent: 100 - uid: 3083 components: @@ -93342,15 +94091,15 @@ entities: - type: Transform pos: 0.5,42.5 parent: 100 - - uid: 4178 + - uid: 3444 components: - type: Transform - pos: -5.5,43.5 + pos: -15.5,46.5 parent: 100 - - uid: 12602 + - uid: 4140 components: - type: Transform - pos: -5.5,45.5 + pos: -12.5,46.5 parent: 100 - uid: 15468 components: @@ -93364,24 +94113,17 @@ entities: parent: 100 - proto: MedicalTechFab entities: - - uid: 1488 + - uid: 15143 components: - type: Transform - pos: -20.5,48.5 + pos: -20.5,38.5 parent: 100 - - type: MaterialStorage - materialWhiteList: - - Glass - - Steel - - Plastic - - Durathread - - Cloth - proto: MedkitAdvancedFilled entities: - - uid: 1458 + - uid: 21452 components: - type: Transform - pos: -15.558877,44.081192 + pos: -21.454393,41.59531 parent: 100 - proto: MedkitBruteFilled entities: @@ -93390,22 +94132,22 @@ entities: - type: Transform pos: -17.971333,31.667355 parent: 100 - - uid: 3404 + - uid: 21447 components: - type: Transform - pos: -11.437127,46.431908 + pos: -21.170341,36.82068 parent: 100 - proto: MedkitBurnFilled entities: - - uid: 1452 + - uid: 15500 components: - type: Transform - pos: -11.671502,46.728783 + pos: -19.920158,-34.281727 parent: 100 - - uid: 15500 + - uid: 21451 components: - type: Transform - pos: -19.920158,-34.281727 + pos: -20.959404,36.52771 parent: 100 - proto: MedkitCombatFilled entities: @@ -93416,66 +94158,66 @@ entities: parent: 100 - proto: MedkitFilled entities: - - uid: 1211 + - uid: 12454 components: - type: Transform - pos: -13.500457,35.74697 + pos: -18.370716,76.62674 parent: 100 - - uid: 1459 + - uid: 15499 components: - type: Transform - pos: -15.340127,43.799942 + pos: -20.638908,-34.42235 parent: 100 - - uid: 6348 + - uid: 16667 components: - type: Transform - pos: -10.312127,46.510033 + pos: 33.649822,-8.456782 parent: 100 - - uid: 12454 + - uid: 18908 components: - type: Transform - pos: -18.370716,76.62674 + pos: 32.576046,47.690292 parent: 100 - - uid: 15499 + - uid: 20545 components: - type: Transform - pos: -20.638908,-34.42235 + pos: -8.386046,39.47642 parent: 100 - - uid: 16667 + - uid: 21448 components: - type: Transform - pos: 33.649822,-8.456782 + pos: -21.709404,36.52771 parent: 100 - - uid: 18908 + - uid: 21523 components: - type: Transform - pos: 32.576046,47.690292 + pos: -16.463692,39.591 parent: 100 - proto: MedkitOxygenFilled entities: - - uid: 12397 + - uid: 15498 components: - type: Transform - pos: -10.562127,46.635033 + pos: -21.310783,-34.29735 parent: 100 - - uid: 15498 + - uid: 21449 components: - type: Transform - pos: -21.310783,-34.29735 + pos: -21.955498,36.79724 parent: 100 - proto: MedkitRadiationFilled entities: - - uid: 15073 + - uid: 21450 components: - type: Transform - pos: -10.859002,46.525658 + pos: -22.728935,36.785522 parent: 100 - proto: MedkitToxinFilled entities: - - uid: 6032 + - uid: 21446 components: - type: Transform - pos: -11.109002,46.619408 + pos: -22.459404,36.52771 parent: 100 - proto: Memorial entities: @@ -93552,12 +94294,6 @@ entities: rot: -1.5707963267948966 rad pos: -24.5,67.5 parent: 100 - - uid: 12951 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -15.5,50.5 - parent: 100 - proto: ModularGrenade entities: - uid: 15985 @@ -93613,38 +94349,65 @@ entities: parent: 100 - proto: Morgue entities: - - uid: 1562 + - uid: 1390 components: - type: Transform - rot: 3.141592653589793 rad - pos: -25.5,42.5 + rot: 1.5707963267948966 rad + pos: -29.5,50.5 parent: 100 - - uid: 2864 + - uid: 1442 components: - type: Transform - rot: 3.141592653589793 rad - pos: -26.5,42.5 + rot: 1.5707963267948966 rad + pos: -29.5,49.5 parent: 100 - - uid: 3444 + - uid: 1451 components: - type: Transform - rot: 3.141592653589793 rad - pos: -27.5,42.5 + rot: 1.5707963267948966 rad + pos: -29.5,48.5 parent: 100 - - uid: 6251 + - uid: 1452 components: - type: Transform - pos: -28.5,47.5 + rot: 1.5707963267948966 rad + pos: -29.5,47.5 parent: 100 - - uid: 11257 + - uid: 1456 components: - type: Transform - pos: -27.5,47.5 + rot: -1.5707963267948966 rad + pos: -25.5,49.5 parent: 100 - - uid: 11264 + - uid: 1458 components: - type: Transform - pos: -29.5,47.5 + rot: -1.5707963267948966 rad + pos: -25.5,48.5 + parent: 100 + - uid: 1460 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,49.5 + parent: 100 + - uid: 1461 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,48.5 + parent: 100 + - uid: 1464 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,47.5 + parent: 100 + - uid: 1470 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,50.5 parent: 100 - uid: 11465 components: @@ -93921,11 +94684,6 @@ entities: intervalSeconds: 740 - proto: Multitool entities: - - uid: 1442 - components: - - type: Transform - pos: -18.699417,50.689396 - parent: 100 - uid: 12174 components: - type: Transform @@ -93946,6 +94704,11 @@ entities: - type: Transform pos: 6.571422,9.480948 parent: 100 + - uid: 15150 + components: + - type: Transform + pos: -25.5,43.5 + parent: 100 - uid: 15256 components: - type: Transform @@ -94097,6 +94860,16 @@ entities: - type: Transform pos: -7.5,-1.5 parent: 100 + - uid: 15153 + components: + - type: Transform + pos: -13.5,49.5 + parent: 100 + - uid: 21477 + components: + - type: Transform + pos: -29.5,46.5 + parent: 100 - proto: Oracle entities: - uid: 87 @@ -94362,11 +95135,6 @@ entities: - type: Transform pos: -48.407406,-11.656947 parent: 100 - - uid: 7327 - components: - - type: Transform - pos: -5.338491,46.544575 - parent: 100 - uid: 10720 components: - type: Transform @@ -94441,35 +95209,6 @@ entities: - type: Transform pos: -16.352623,74.48029 parent: 100 - - uid: 12525 - components: - - type: MetaData - desc: It seems someone from a previous shift left some recipes... - name: Beginner Chemist Recipes - - type: Transform - pos: -18.275377,33.597008 - parent: 100 - - type: Paper - content: > - Airloss/Bleed - Inaprovaline - - Oxygen (1) Sugar (1) Carbon (1) - - Heavy Brute - Bicaridine - - Carbon (1) Inaprovaline (1) - - Poison - Dylovene - - Potassium (1) Silicon (1) Nitro (1) - - Radiation - Hyronalin - - Dylovene (1) Radium (1) - - - - - Some basic recipes to help you. - uid: 12532 components: - type: Transform @@ -94664,31 +95403,6 @@ entities: - type: Transform pos: 27.325054,54.927715 parent: 100 - - uid: 19164 - components: - - type: Transform - pos: -9.543883,40.441753 - parent: 100 - - uid: 19165 - components: - - type: Transform - pos: -9.601502,40.499382 - parent: 100 - - uid: 19166 - components: - - type: Transform - pos: -12.553934,35.765995 - parent: 100 - - uid: 19167 - components: - - type: Transform - pos: -12.007059,35.547245 - parent: 100 - - uid: 19168 - components: - - type: Transform - pos: -9.6591215,40.557007 - parent: 100 - uid: 19220 components: - type: Transform @@ -94734,6 +95448,33 @@ entities: - type: Transform pos: -28.506384,23.168703 parent: 100 + - uid: 21414 + components: + - type: Transform + pos: -7.56527,38.580353 + parent: 100 + - uid: 21415 + components: + - type: Transform + pos: -7.643395,38.619415 + parent: 100 + - uid: 21501 + components: + - type: Transform + pos: -14.014751,49.48851 + parent: 100 + - type: Paper + content: >2- + + [head=1]NOTICE[/head] + + + Surgery closed for renovation, until next week + - uid: 21509 + components: + - type: Transform + pos: -7.6824574,38.63504 + parent: 100 - proto: PaperBin10 entities: - uid: 12584 @@ -94850,11 +95591,6 @@ entities: parent: 100 - proto: PersonalAI entities: - - uid: 1601 - components: - - type: Transform - pos: -6.518904,34.61391 - parent: 100 - uid: 12186 components: - type: Transform @@ -94917,11 +95653,6 @@ entities: parent: 100 - proto: PillCanister entities: - - uid: 1460 - components: - - type: Transform - pos: -15.721787,43.55525 - parent: 100 - uid: 18452 components: - type: MetaData @@ -95325,6 +96056,11 @@ entities: parent: 100 - proto: PortableGeneratorJrPacman entities: + - uid: 1204 + components: + - type: Transform + pos: -29.5,41.5 + parent: 100 - uid: 1402 components: - type: Transform @@ -95385,11 +96121,6 @@ entities: - type: Transform pos: -23.5,33.5 parent: 100 - - uid: 21055 - components: - - type: Transform - pos: -26.5,40.5 - parent: 100 - uid: 21056 components: - type: Transform @@ -95810,6 +96541,13 @@ entities: - type: Transform pos: -41.5,42.5 parent: 100 +- proto: PosterLegitPeriodicTable + entities: + - uid: 21524 + components: + - type: Transform + pos: -13.5,38.5 + parent: 100 - proto: PosterLegitReportCrimes entities: - uid: 1776 @@ -95975,16 +96713,6 @@ entities: - type: Transform pos: 15.5,-1.5 parent: 100 - - uid: 1377 - components: - - type: Transform - pos: -25.5,48.5 - parent: 100 - - uid: 1657 - components: - - type: Transform - pos: -10.5,33.5 - parent: 100 - uid: 2617 components: - type: Transform @@ -96015,16 +96743,6 @@ entities: - type: Transform pos: -52.5,-46.5 parent: 100 - - uid: 6140 - components: - - type: Transform - pos: -5.5,37.5 - parent: 100 - - uid: 11360 - components: - - type: Transform - pos: -5.5,33.5 - parent: 100 - uid: 11478 components: - type: Transform @@ -96160,6 +96878,23 @@ entities: - type: Transform pos: -43.5,78.5 parent: 100 +- proto: PottedPlantRandomPlastic + entities: + - uid: 1564 + components: + - type: Transform + pos: -10.5,33.5 + parent: 100 + - uid: 15285 + components: + - type: Transform + pos: -23.5,43.5 + parent: 100 + - uid: 21424 + components: + - type: Transform + pos: -16.5,35.5 + parent: 100 - proto: PottedPlantRD entities: - uid: 13157 @@ -96187,10 +96922,17 @@ entities: - type: Transform pos: 4.5,-32.5 parent: 100 - - uid: 19826 + - uid: 21479 components: - type: Transform - pos: -9.5,41.5 + rot: 3.141592653589793 rad + pos: -8.5,46.5 + parent: 100 + - uid: 21480 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -20.5,36.5 parent: 100 - proto: Poweredlight entities: @@ -96273,11 +97015,6 @@ entities: rot: 1.5707963267948966 rad pos: -2.5,-62.5 parent: 100 - - uid: 3393 - components: - - type: Transform - pos: -12.5,38.5 - parent: 100 - uid: 3501 components: - type: Transform @@ -96407,14 +97144,6 @@ entities: parent: 100 - type: ApcPowerReceiver powerLoad: 0 - - uid: 7245 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -16.5,38.5 - parent: 100 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 7473 components: - type: Transform @@ -96465,14 +97194,6 @@ entities: rot: 3.141592653589793 rad pos: -44.5,33.5 parent: 100 - - uid: 9049 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -21.5,36.5 - parent: 100 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 9415 components: - type: Transform @@ -96699,11 +97420,6 @@ entities: parent: 100 - type: ApcPowerReceiver powerLoad: 0 - - uid: 11355 - components: - - type: Transform - pos: -25.5,50.5 - parent: 100 - uid: 11361 components: - type: Transform @@ -96712,12 +97428,6 @@ entities: parent: 100 - type: ApcPowerReceiver powerLoad: 0 - - uid: 11362 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,33.5 - parent: 100 - uid: 11367 components: - type: Transform @@ -96747,17 +97457,6 @@ entities: rot: 3.141592653589793 rad pos: -55.5,-48.5 parent: 100 - - uid: 11407 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -5.5,42.5 - parent: 100 - - uid: 11413 - components: - - type: Transform - pos: -8.5,46.5 - parent: 100 - uid: 11419 components: - type: Transform @@ -97300,6 +97999,12 @@ entities: parent: 100 - type: ApcPowerReceiver powerLoad: 0 + - uid: 14689 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -25.5,46.5 + parent: 100 - uid: 14694 components: - type: Transform @@ -97308,6 +98013,12 @@ entities: parent: 100 - type: ApcPowerReceiver powerLoad: 0 + - uid: 14753 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,46.5 + parent: 100 - uid: 14835 components: - type: Transform @@ -97315,58 +98026,69 @@ entities: parent: 100 - type: ApcPowerReceiver powerLoad: 0 - - uid: 14874 + - uid: 14836 components: - type: Transform - rot: 3.141592653589793 rad - pos: -9.5,48.5 + rot: 1.5707963267948966 rad + pos: -23.5,49.5 parent: 100 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 15063 + - uid: 14856 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -10.5,33.5 + parent: 100 + - uid: 14857 components: - type: Transform rot: -1.5707963267948966 rad - pos: -22.5,42.5 + pos: -5.5,37.5 parent: 100 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 15065 + - uid: 14870 components: - type: Transform - pos: -19.5,46.5 + pos: -8.5,42.5 parent: 100 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 15067 + - uid: 14874 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -15.5,44.5 + rot: 3.141592653589793 rad + pos: -8.5,44.5 parent: 100 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 15075 + - uid: 14993 components: - type: Transform - pos: -19.5,50.5 + rot: 3.141592653589793 rad + pos: -8.5,48.5 parent: 100 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 15076 + - uid: 14994 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -16.5,33.5 + parent: 100 + - uid: 15016 components: - type: Transform rot: 1.5707963267948966 rad - pos: -20.5,42.5 + pos: -23.5,44.5 parent: 100 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 15077 components: - type: Transform rot: -1.5707963267948966 rad pos: -18.5,56.5 parent: 100 + - uid: 15087 + components: + - type: Transform + pos: -14.5,37.5 + parent: 100 + - uid: 15268 + components: + - type: Transform + pos: -16.5,46.5 + parent: 100 - uid: 15510 components: - type: Transform @@ -97435,22 +98157,6 @@ entities: parent: 100 - type: ApcPowerReceiver powerLoad: 0 - - uid: 19262 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -14.5,49.5 - parent: 100 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 19263 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -11.5,41.5 - parent: 100 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 19366 components: - type: Transform @@ -97591,6 +98297,18 @@ entities: parent: 100 - type: ApcPowerReceiver powerLoad: 0 + - uid: 20366 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -15.5,48.5 + parent: 100 + - uid: 20520 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -12.5,48.5 + parent: 100 - proto: PoweredlightLED entities: - uid: 2829 @@ -97773,6 +98491,12 @@ entities: parent: 100 - type: ApcPowerReceiver powerLoad: 0 + - uid: 1462 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -26.5,41.5 + parent: 100 - uid: 1698 components: - type: Transform @@ -97800,6 +98524,12 @@ entities: rot: 3.141592653589793 rad pos: -41.5,46.5 parent: 100 + - uid: 3033 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -17.5,50.5 + parent: 100 - uid: 3578 components: - type: Transform @@ -97870,6 +98600,12 @@ entities: parent: 100 - type: ApcPowerReceiver powerLoad: 0 + - uid: 5929 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -18.5,40.5 + parent: 100 - uid: 5944 components: - type: Transform @@ -98353,20 +99089,24 @@ entities: parent: 100 - type: ApcPowerReceiver powerLoad: 0 + - uid: 14996 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -20.5,38.5 + parent: 100 - uid: 15059 components: - type: Transform - pos: -28.5,47.5 + rot: 3.141592653589793 rad + pos: -14.5,39.5 parent: 100 - - type: ApcPowerReceiver - powerLoad: 0 - - uid: 15064 + - uid: 15063 components: - type: Transform - pos: -25.5,43.5 + rot: 3.141592653589793 rad + pos: -12.5,39.5 parent: 100 - - type: ApcPowerReceiver - powerLoad: 0 - uid: 15190 components: - type: Transform @@ -98767,11 +99507,6 @@ entities: - type: Transform pos: -43.5,44.5 parent: 100 - - uid: 11644 - components: - - type: Transform - pos: -25.5,40.5 - parent: 100 - uid: 11662 components: - type: Transform @@ -99285,6 +100020,16 @@ entities: - type: Transform pos: 0.5,-21.5 parent: 100 + - uid: 15262 + components: + - type: Transform + pos: -23.5,36.5 + parent: 100 + - uid: 15307 + components: + - type: Transform + pos: -20.5,50.5 + parent: 100 - uid: 15433 components: - type: Transform @@ -100225,11 +100970,6 @@ entities: parent: 100 - proto: RandomPosterAny entities: - - uid: 1344 - components: - - type: Transform - pos: -20.5,35.5 - parent: 100 - uid: 1612 components: - type: Transform @@ -100459,16 +101199,6 @@ entities: - type: Transform pos: -34.5,47.5 parent: 100 - - uid: 14689 - components: - - type: Transform - pos: -9.5,47.5 - parent: 100 - - uid: 15348 - components: - - type: Transform - pos: -10.5,43.5 - parent: 100 - uid: 15952 components: - type: Transform @@ -100509,6 +101239,17 @@ entities: - type: Transform pos: -46.5,77.5 parent: 100 + - uid: 21521 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -4.5,43.5 + parent: 100 + - uid: 21522 + components: + - type: Transform + pos: -14.5,38.5 + parent: 100 - proto: RandomRockSpawner entities: - uid: 46 @@ -103805,6 +104546,46 @@ entities: - type: Transform pos: -12.5,-38.5 parent: 100 + - uid: 15292 + components: + - type: Transform + pos: -5.5,45.5 + parent: 100 + - uid: 15293 + components: + - type: Transform + pos: -5.5,43.5 + parent: 100 + - uid: 15296 + components: + - type: Transform + pos: -16.5,40.5 + parent: 100 + - uid: 15297 + components: + - type: Transform + pos: -13.5,40.5 + parent: 100 + - uid: 15298 + components: + - type: Transform + pos: -21.5,44.5 + parent: 100 + - uid: 15299 + components: + - type: Transform + pos: -17.5,50.5 + parent: 100 + - uid: 15301 + components: + - type: Transform + pos: -23.5,37.5 + parent: 100 + - uid: 15302 + components: + - type: Transform + pos: -20.5,37.5 + parent: 100 - uid: 16488 components: - type: Transform @@ -103825,6 +104606,31 @@ entities: - type: Transform pos: 24.5,42.5 parent: 100 + - uid: 21436 + components: + - type: Transform + pos: -27.5,50.5 + parent: 100 + - uid: 21437 + components: + - type: Transform + pos: -23.5,47.5 + parent: 100 + - uid: 21439 + components: + - type: Transform + pos: -6.5,37.5 + parent: 100 + - uid: 21440 + components: + - type: Transform + pos: -9.5,34.5 + parent: 100 + - uid: 21481 + components: + - type: Transform + pos: -16.5,37.5 + parent: 100 - proto: RandomVending entities: - uid: 14975 @@ -103839,6 +104645,11 @@ entities: parent: 100 - proto: RandomVendingDrinks entities: + - uid: 1651 + components: + - type: Transform + pos: -5.5,33.5 + parent: 100 - uid: 15184 components: - type: Transform @@ -103861,6 +104672,11 @@ entities: parent: 100 - proto: RandomVendingSnacks entities: + - uid: 15283 + components: + - type: Transform + pos: -21.5,20.5 + parent: 100 - uid: 16768 components: - type: Transform @@ -104259,11 +105075,6 @@ entities: - type: Transform pos: 15.5,54.5 parent: 100 - - uid: 4895 - components: - - type: Transform - pos: -23.5,47.5 - parent: 100 - uid: 8823 components: - type: Transform @@ -104555,10 +105366,10 @@ entities: - type: Transform pos: -32.5,21.5 parent: 100 - - uid: 1174 + - uid: 1211 components: - type: Transform - pos: -20.5,39.5 + pos: -9.5,32.5 parent: 100 - uid: 1212 components: @@ -104609,7 +105420,7 @@ entities: - uid: 1321 components: - type: Transform - pos: -7.5,32.5 + pos: -17.5,51.5 parent: 100 - uid: 1329 components: @@ -104621,32 +105432,12 @@ entities: - type: Transform pos: -10.5,32.5 parent: 100 - - uid: 1351 - components: - - type: Transform - pos: -15.5,37.5 - parent: 100 - - uid: 1365 - components: - - type: Transform - pos: -13.5,51.5 - parent: 100 - - uid: 1369 - components: - - type: Transform - pos: -19.5,39.5 - parent: 100 - uid: 1376 components: - type: Transform rot: -1.5707963267948966 rad pos: -9.5,20.5 parent: 100 - - uid: 1387 - components: - - type: Transform - pos: -18.5,47.5 - parent: 100 - uid: 1396 components: - type: Transform @@ -104660,7 +105451,8 @@ entities: - uid: 1429 components: - type: Transform - pos: -17.5,47.5 + rot: 1.5707963267948966 rad + pos: -19.5,50.5 parent: 100 - uid: 1447 components: @@ -104685,6 +105477,12 @@ entities: rot: -1.5707963267948966 rad pos: -7.5,22.5 parent: 100 + - uid: 1511 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -23.5,46.5 + parent: 100 - uid: 1533 components: - type: Transform @@ -104696,6 +105494,12 @@ entities: - type: Transform pos: -54.5,70.5 parent: 100 + - uid: 1543 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,43.5 + parent: 100 - uid: 1546 components: - type: Transform @@ -104706,15 +105510,35 @@ entities: - type: Transform pos: -53.5,70.5 parent: 100 - - uid: 1581 + - uid: 1587 components: - type: Transform - pos: -15.5,35.5 + rot: -1.5707963267948966 rad + pos: -5.5,38.5 parent: 100 - - uid: 1649 + - uid: 1588 components: - type: Transform - pos: -20.5,44.5 + rot: -1.5707963267948966 rad + pos: -9.5,43.5 + parent: 100 + - uid: 1591 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,43.5 + parent: 100 + - uid: 1635 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,44.5 + parent: 100 + - uid: 1641 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,48.5 parent: 100 - uid: 1675 components: @@ -105182,11 +106006,23 @@ entities: - type: Transform pos: -50.5,68.5 parent: 100 + - uid: 2853 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,46.5 + parent: 100 - uid: 2957 components: - type: Transform pos: -29.5,-9.5 parent: 100 + - uid: 2974 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,42.5 + parent: 100 - uid: 2988 components: - type: Transform @@ -105499,11 +106335,6 @@ entities: - type: Transform pos: -32.5,59.5 parent: 100 - - uid: 4140 - components: - - type: Transform - pos: -17.5,44.5 - parent: 100 - uid: 4149 components: - type: Transform @@ -105540,11 +106371,6 @@ entities: - type: Transform pos: -18.5,55.5 parent: 100 - - uid: 4171 - components: - - type: Transform - pos: -18.5,44.5 - parent: 100 - uid: 4173 components: - type: Transform @@ -106015,11 +106841,6 @@ entities: - type: Transform pos: -24.5,-31.5 parent: 100 - - uid: 5049 - components: - - type: Transform - pos: -19.5,44.5 - parent: 100 - uid: 5084 components: - type: Transform @@ -106097,6 +106918,12 @@ entities: - type: Transform pos: -9.5,-38.5 parent: 100 + - uid: 5931 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,44.5 + parent: 100 - uid: 6031 components: - type: Transform @@ -106109,6 +106936,17 @@ entities: rot: -1.5707963267948966 rad pos: -4.5,20.5 parent: 100 + - uid: 6125 + components: + - type: Transform + pos: -11.5,35.5 + parent: 100 + - uid: 6127 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,36.5 + parent: 100 - uid: 6149 components: - type: Transform @@ -107255,11 +108093,6 @@ entities: - type: Transform pos: -25.5,-45.5 parent: 100 - - uid: 17362 - components: - - type: Transform - pos: -19.5,32.5 - parent: 100 - uid: 17365 components: - type: Transform @@ -107557,6 +108390,18 @@ entities: - type: Transform pos: -28.5,21.5 parent: 100 +- proto: RollerBed + entities: + - uid: 2855 + components: + - type: Transform + pos: -11.5,40.5 + parent: 100 + - uid: 2856 + components: + - type: Transform + pos: -11.5,39.5 + parent: 100 - proto: RubberStampApproved entities: - uid: 2318 @@ -107655,6 +108500,18 @@ entities: rot: 3.141592653589793 rad pos: -44.5,-45.5 parent: 100 + - uid: 15263 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,33.5 + parent: 100 + - uid: 15264 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,47.5 + parent: 100 - uid: 20551 components: - type: Transform @@ -107706,11 +108563,6 @@ entities: rot: -1.5707963267948966 rad pos: -0.5,30.5 parent: 100 - - uid: 20562 - components: - - type: Transform - pos: -10.5,47.5 - parent: 100 - uid: 20563 components: - type: Transform @@ -107885,13 +108737,11 @@ entities: parent: 100 - proto: SheetPlasma1 entities: - - uid: 14641 + - uid: 21457 components: - type: Transform - pos: -19.634752,33.862633 + pos: -23.462774,36.561687 parent: 100 - - type: Stack - count: 7 - proto: SheetPlastic entities: - uid: 3283 @@ -107911,6 +108761,11 @@ entities: - type: Transform pos: -14.00783,-3.292837 parent: 100 + - uid: 21458 + components: + - type: Transform + pos: -14.732306,37.452312 + parent: 100 - proto: SheetSteel entities: - uid: 462 @@ -107974,20 +108829,17 @@ entities: - type: Transform pos: -3.4894161,-57.574875 parent: 100 -- proto: ShelfBar - entities: - - uid: 21220 + - uid: 21459 components: - type: Transform - pos: -5.5,8.5 + pos: -14.415899,37.47575 parent: 100 -- proto: ShelfChemistryChemistrySecure +- proto: ShelfBar entities: - - uid: 21219 + - uid: 21220 components: - type: Transform - rot: 3.141592653589793 rad - pos: -21.5,35.5 + pos: -5.5,8.5 parent: 100 - proto: ShelfKitchen entities: @@ -108441,16 +109293,6 @@ entities: - Pressed: Toggle 13596: - Pressed: Toggle - - uid: 11317 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -11.5,43.5 - parent: 100 - - type: DeviceLinkSource - linkedPorts: - 5108: - - Pressed: Toggle - uid: 11722 components: - type: Transform @@ -108593,20 +109435,6 @@ entities: - Pressed: Toggle 13471: - Pressed: Toggle - - uid: 9704 - components: - - type: MetaData - name: exit button - - type: Transform - rot: 3.141592653589793 rad - pos: -7.5,39.5 - parent: 100 - - type: DeviceLinkSource - linkedPorts: - 1634: - - Pressed: Open - 1630: - - Pressed: Open - uid: 11304 components: - type: Transform @@ -108674,44 +109502,41 @@ entities: - Pressed: Toggle 3200: - Pressed: Toggle - - uid: 16450 + - uid: 14641 components: - - type: MetaData - name: cell shutters - type: Transform - pos: 7.5,37.5 + rot: 1.5707963267948966 rad + pos: -19.5,41.5 parent: 100 - type: DeviceLinkSource linkedPorts: - 16448: - - Pressed: Toggle - 16447: + 5108: - Pressed: Toggle - - uid: 16863 + - uid: 15267 components: - - type: MetaData - name: exit button - type: Transform rot: 3.141592653589793 rad - pos: -12.5,39.5 + pos: -11.5,38.5 parent: 100 - type: DeviceLinkSource linkedPorts: - 1651: - - Pressed: Open - 1643: - - Pressed: Open - - uid: 19861 + 1578: + - Pressed: Toggle + 1526: + - Pressed: Toggle + - uid: 16450 components: - type: MetaData - name: exit button + name: cell shutters - type: Transform - pos: -17.5,51.5 + pos: 7.5,37.5 parent: 100 - type: DeviceLinkSource linkedPorts: - 16788: - - Pressed: Open + 16448: + - Pressed: Toggle + 16447: + - Pressed: Toggle - proto: SignalSwitchDirectional entities: - uid: 9713 @@ -108942,17 +109767,19 @@ entities: parent: 100 - proto: SignChem entities: - - uid: 1451 + - uid: 21513 components: - type: Transform - pos: -15.5,39.5 + rot: 3.141592653589793 rad + pos: -11.5,34.5 parent: 100 - proto: SignCloning entities: - - uid: 15268 + - uid: 6219 components: - type: Transform - pos: -19.5,47.5 + rot: 1.5707963267948966 rad + pos: -24.5,41.5 parent: 100 - proto: SignConference entities: @@ -108975,10 +109802,11 @@ entities: parent: 100 - proto: SignCryogenicsMed entities: - - uid: 20866 + - uid: 6209 components: - type: Transform - pos: -16.5,43.5 + rot: 1.5707963267948966 rad + pos: -19.5,46.5 parent: 100 - proto: SignDanger entities: @@ -109323,11 +110151,6 @@ entities: parent: 100 - proto: SignMedical entities: - - uid: 1374 - components: - - type: Transform - pos: -11.5,32.5 - parent: 100 - uid: 16326 components: - type: Transform @@ -109335,11 +110158,18 @@ entities: parent: 100 - proto: SignMorgue entities: - - uid: 15269 + - uid: 6210 components: - type: Transform + rot: 1.5707963267948966 rad pos: -24.5,44.5 parent: 100 + - uid: 6211 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -27.5,51.5 + parent: 100 - proto: SignPlaque entities: - uid: 19147 @@ -109364,6 +110194,13 @@ entities: - type: Transform pos: -51.5,62.5 parent: 100 +- proto: SignReception + entities: + - uid: 21520 + components: + - type: Transform + pos: -5.5,38.5 + parent: 100 - proto: SignRobo entities: - uid: 18482 @@ -109414,6 +110251,12 @@ entities: parent: 100 - proto: SignSurgery entities: + - uid: 15064 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,48.5 + parent: 100 - uid: 20714 components: - type: Transform @@ -109475,11 +110318,21 @@ entities: rot: -1.5707963267948966 rad pos: -44.472534,56.316776 parent: 100 + - uid: 14995 + components: + - type: Transform + pos: -16.5,37.5 + parent: 100 - uid: 19172 components: - type: Transform pos: -54.5,13.5 parent: 100 + - uid: 20869 + components: + - type: Transform + pos: -15.5,50.5 + parent: 100 - proto: SinkStemlessWater entities: - uid: 5691 @@ -109541,18 +110394,12 @@ entities: rot: 3.141592653589793 rad pos: -28.5,64.5 parent: 100 - - uid: 20860 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -20.5,36.5 - parent: 100 - proto: SmartFridge entities: - - uid: 20868 + - uid: 1528 components: - type: Transform - pos: -18.5,39.5 + pos: -18.5,38.5 parent: 100 - proto: SMESBasic entities: @@ -110871,19 +111718,12 @@ entities: - type: Transform pos: -7.5,13.5 parent: 100 -- proto: SpawnMobCatFloppa - entities: - - uid: 9599 - components: - - type: Transform - pos: -16.5,34.5 - parent: 100 - proto: SpawnMobCatRuntime entities: - - uid: 21053 + - uid: 20521 components: - type: Transform - pos: -7.5,34.5 + pos: -7.5,39.5 parent: 100 - proto: SpawnMobCatSpace entities: @@ -110901,10 +111741,11 @@ entities: parent: 100 - proto: SpawnMobCMOPetSilvia entities: - - uid: 18492 + - uid: 15113 components: - type: Transform - pos: -23.5,49.5 + rot: -1.5707963267948966 rad + pos: -8.5,48.5 parent: 100 - proto: SpawnMobCorgi entities: @@ -110985,10 +111826,10 @@ entities: parent: 100 - proto: SpawnMobWalter entities: - - uid: 21052 + - uid: 21425 components: - type: Transform - pos: -18.5,37.5 + pos: -13.5,33.5 parent: 100 - proto: SpawnPointAtmos entities: @@ -111197,15 +112038,15 @@ entities: parent: 100 - proto: SpawnPointChemist entities: - - uid: 9224 + - uid: 15159 components: - type: Transform - pos: -18.5,36.5 + pos: -15.5,35.5 parent: 100 - - uid: 12446 + - uid: 15160 components: - type: Transform - pos: -18.5,34.5 + pos: -14.5,35.5 parent: 100 - proto: SpawnPointChiefEngineer entities: @@ -111469,54 +112310,39 @@ entities: parent: 100 - proto: SpawnPointMedicalBorg entities: - - uid: 11576 + - uid: 15167 components: - type: Transform - pos: -7.5,42.5 + pos: -21.5,39.5 parent: 100 - - uid: 16552 + - uid: 15168 components: - type: Transform - pos: -9.5,36.5 + pos: -9.5,45.5 parent: 100 - proto: SpawnPointMedicalDoctor entities: - - uid: 15936 - components: - - type: Transform - pos: -10.5,49.5 - parent: 100 - - uid: 15937 + - uid: 15165 components: - type: Transform - pos: -9.5,49.5 + pos: -6.5,45.5 parent: 100 - - uid: 16386 + - uid: 15166 components: - type: Transform - pos: -8.5,49.5 + pos: -7.5,45.5 parent: 100 - proto: SpawnPointMedicalIntern entities: - - uid: 2974 - components: - - type: Transform - pos: -8.5,44.5 - parent: 100 - - uid: 6855 - components: - - type: Transform - pos: -6.5,44.5 - parent: 100 - - uid: 12438 + - uid: 15161 components: - type: Transform - pos: -11.5,49.5 + pos: -10.5,41.5 parent: 100 - - uid: 12444 + - uid: 15162 components: - type: Transform - pos: -7.5,49.5 + pos: -9.5,41.5 parent: 100 - proto: SpawnPointMime entities: @@ -111576,15 +112402,15 @@ entities: parent: 100 - proto: SpawnPointParamedic entities: - - uid: 12442 + - uid: 15163 components: - type: Transform - pos: -8.5,48.5 + pos: -6.5,40.5 parent: 100 - - uid: 12443 + - uid: 15164 components: - type: Transform - pos: -7.5,48.5 + pos: -7.5,40.5 parent: 100 - proto: SpawnPointPassenger entities: @@ -112043,10 +112869,15 @@ entities: parent: 100 - proto: StasisBed entities: - - uid: 12302 + - uid: 2355 components: - type: Transform - pos: -7.5,46.5 + pos: -20.5,45.5 + parent: 100 + - uid: 15310 + components: + - type: Transform + pos: -16.5,44.5 parent: 100 - proto: StationAiUploadComputer entities: @@ -112072,6 +112903,11 @@ entities: parent: 100 - proto: StationMap entities: + - uid: 1348 + components: + - type: Transform + pos: -8.5,38.5 + parent: 100 - uid: 15066 components: - type: Transform @@ -112132,11 +112968,6 @@ entities: rot: 1.5707963267948966 rad pos: -34.5,-33.5 parent: 100 - - uid: 21029 - components: - - type: Transform - pos: -9.5,39.5 - parent: 100 - uid: 21030 components: - type: Transform @@ -112198,6 +113029,12 @@ entities: rot: 1.5707963267948966 rad pos: 26.5,55.5 parent: 100 + - uid: 20364 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,44.5 + parent: 100 - proto: StoolBar entities: - uid: 573 @@ -112653,17 +113490,6 @@ entities: - SurveillanceCameraCommand nameSet: True id: Head of Personnel's Office - - uid: 169 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -25.5,50.5 - parent: 100 - - type: SurveillanceCamera - setupAvailableNetworks: - - SurveillanceCameraCommand - nameSet: True - id: Chief Medical Officer's Office - uid: 172 components: - type: Transform @@ -113118,60 +113944,115 @@ entities: id: Disposals - proto: SurveillanceCameraMedical entities: - - uid: 1134 + - uid: 18741 components: - type: Transform - pos: -5.5,33.5 + rot: 3.141592653589793 rad + pos: -57.5,66.5 + parent: 100 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Psych Ward + - uid: 21428 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -5.5,46.5 + parent: 100 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: On-Call Room + - uid: 21430 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,34.5 parent: 100 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraMedical nameSet: True id: Medical Lobby - - uid: 14183 + - uid: 21431 components: - type: Transform rot: 1.5707963267948966 rad - pos: -5.5,44.5 + pos: -12.5,34.5 parent: 100 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraMedical nameSet: True - id: General Treatment - - uid: 15792 + id: Chemistry + - uid: 21432 components: - type: Transform rot: 3.141592653589793 rad - pos: -17.5,50.5 + pos: -21.5,39.5 parent: 100 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraMedical nameSet: True - id: Cloning Room - - uid: 15861 + id: Medical Storage + - uid: 21433 components: - type: Transform rot: -1.5707963267948966 rad - pos: -20.5,43.5 + pos: -23.5,41.5 parent: 100 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraMedical nameSet: True - id: Cryogenics - - uid: 18741 + id: Intensive Care Unit + - uid: 21434 + components: + - type: Transform + pos: -26.5,45.5 + parent: 100 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Morgue + - uid: 21466 components: - type: Transform rot: 3.141592653589793 rad - pos: -57.5,66.5 + pos: -9.5,50.5 parent: 100 - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraMedical nameSet: True - id: Psych Ward + id: CMO's Bedroom + - uid: 21467 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -13.5,50.5 + parent: 100 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Surgery + - uid: 21469 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -11.5,42.5 + parent: 100 + - type: SurveillanceCamera + setupAvailableNetworks: + - SurveillanceCameraMedical + nameSet: True + id: Medical - proto: SurveillanceCameraRouterCommand entities: - uid: 3059 @@ -113583,16 +114464,6 @@ entities: id: CHANNEL 2 - proto: Syringe entities: - - uid: 6238 - components: - - type: Transform - pos: -16.26897,35.417007 - parent: 100 - - uid: 8311 - components: - - type: Transform - pos: -7.541616,45.65395 - parent: 100 - uid: 9950 components: - type: Transform @@ -113605,6 +114476,11 @@ entities: - type: Physics canCollide: False - type: InsideEntityStorage + - uid: 21507 + components: + - type: Transform + pos: -13.555562,46.571842 + parent: 100 - proto: SyringeBicaridine entities: - uid: 20759 @@ -113612,6 +114488,13 @@ entities: - type: Transform pos: -17.741125,-34.25992 parent: 100 +- proto: SyringeInaprovaline + entities: + - uid: 21464 + components: + - type: Transform + pos: -5.491078,43.66035 + parent: 100 - proto: SyringeTranexamicAcid entities: - uid: 8341 @@ -113682,25 +114565,17 @@ entities: - type: Transform pos: -44.5,81.5 parent: 100 - - uid: 1361 - components: - - type: Transform - pos: -19.5,34.5 - parent: 100 - - uid: 1372 - components: - - type: Transform - pos: -18.5,50.5 - parent: 100 - - uid: 1530 + - uid: 1354 components: - type: Transform - pos: -19.5,33.5 + rot: 3.141592653589793 rad + pos: -25.5,43.5 parent: 100 - - uid: 1635 + - uid: 1586 components: - type: Transform - pos: -10.5,46.5 + rot: -1.5707963267948966 rad + pos: -12.5,39.5 parent: 100 - uid: 1664 components: @@ -113737,16 +114612,6 @@ entities: - type: Transform pos: 34.5,44.5 parent: 100 - - uid: 2195 - components: - - type: Transform - pos: -9.5,46.5 - parent: 100 - - uid: 2359 - components: - - type: Transform - pos: -18.5,33.5 - parent: 100 - uid: 2384 components: - type: Transform @@ -113788,6 +114653,18 @@ entities: rot: 1.5707963267948966 rad pos: -52.5,-6.5 parent: 100 + - uid: 3046 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,39.5 + parent: 100 + - uid: 3067 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -14.5,39.5 + parent: 100 - uid: 3158 components: - type: Transform @@ -113844,11 +114721,6 @@ entities: - type: Transform pos: -3.5,-57.5 parent: 100 - - uid: 5368 - components: - - type: Transform - pos: -12.5,42.5 - parent: 100 - uid: 5379 components: - type: Transform @@ -113871,25 +114743,34 @@ entities: - type: Transform pos: -3.5,-58.5 parent: 100 - - uid: 6146 + - uid: 6032 components: - type: Transform - pos: -15.5,43.5 + rot: -1.5707963267948966 rad + pos: -21.5,45.5 parent: 100 - - uid: 6147 + - uid: 6043 components: - type: Transform - pos: -15.5,44.5 + rot: -1.5707963267948966 rad + pos: -21.5,41.5 parent: 100 - - uid: 7125 + - uid: 6145 components: - type: Transform - pos: -7.5,-6.5 + rot: 1.5707963267948966 rad + pos: -8.5,46.5 parent: 100 - - uid: 7335 + - uid: 6146 components: - type: Transform - pos: -25.5,46.5 + rot: 1.5707963267948966 rad + pos: -5.5,43.5 + parent: 100 + - uid: 7125 + components: + - type: Transform + pos: -7.5,-6.5 parent: 100 - uid: 10410 components: @@ -113941,11 +114822,6 @@ entities: - type: Transform pos: -50.5,18.5 parent: 100 - - uid: 11175 - components: - - type: Transform - pos: -11.5,46.5 - parent: 100 - uid: 11433 components: - type: Transform @@ -114112,6 +114988,11 @@ entities: - type: Transform pos: 13.5,-66.5 parent: 100 + - uid: 14183 + components: + - type: Transform + pos: -29.5,45.5 + parent: 100 - uid: 14255 components: - type: Transform @@ -114132,15 +115013,21 @@ entities: - type: Transform pos: 9.5,-46.5 parent: 100 - - uid: 14870 + - uid: 15012 components: - type: Transform - pos: -9.5,40.5 + pos: -5.5,-41.5 parent: 100 - - uid: 15012 + - uid: 15082 components: - type: Transform - pos: -5.5,-41.5 + rot: 3.141592653589793 rad + pos: -18.5,35.5 + parent: 100 + - uid: 15151 + components: + - type: Transform + pos: -25.5,46.5 parent: 100 - uid: 15246 components: @@ -114157,6 +115044,11 @@ entities: - type: Transform pos: -4.5,68.5 parent: 100 + - uid: 15304 + components: + - type: Transform + pos: -7.5,42.5 + parent: 100 - uid: 15492 components: - type: Transform @@ -114228,11 +115120,6 @@ entities: - type: Transform pos: 26.5,44.5 parent: 100 - - uid: 17048 - components: - - type: Transform - pos: -26.5,46.5 - parent: 100 - uid: 17059 components: - type: Transform @@ -114248,11 +115135,6 @@ entities: - type: Transform pos: 26.5,45.5 parent: 100 - - uid: 17295 - components: - - type: Transform - pos: -11.5,42.5 - parent: 100 - uid: 17436 components: - type: Transform @@ -114308,16 +115190,6 @@ entities: - type: Transform pos: 32.5,47.5 parent: 100 - - uid: 19160 - components: - - type: Transform - pos: -9.5,41.5 - parent: 100 - - uid: 19161 - components: - - type: Transform - pos: -11.5,48.5 - parent: 100 - uid: 19216 components: - type: Transform @@ -114594,25 +115466,16 @@ entities: - type: Transform pos: 9.5,10.5 parent: 100 - - uid: 1206 - components: - - type: Transform - pos: -7.5,43.5 - parent: 100 - - uid: 1227 - components: - - type: Transform - pos: -6.5,34.5 - parent: 100 - - uid: 1301 + - uid: 1370 components: - type: Transform - pos: -16.5,35.5 + pos: -41.5,46.5 parent: 100 - - uid: 1370 + - uid: 1561 components: - type: Transform - pos: -41.5,46.5 + rot: 1.5707963267948966 rad + pos: -8.5,39.5 parent: 100 - uid: 1963 components: @@ -114629,26 +115492,16 @@ entities: - type: Transform pos: -45.5,20.5 parent: 100 - - uid: 4143 + - uid: 5243 components: - type: Transform - pos: -7.5,45.5 + pos: 2.5,45.5 parent: 100 - - uid: 4359 + - uid: 6138 components: - type: Transform pos: -5.5,46.5 parent: 100 - - uid: 5162 - components: - - type: Transform - pos: -5.5,44.5 - parent: 100 - - uid: 5243 - components: - - type: Transform - pos: 2.5,45.5 - parent: 100 - uid: 6469 components: - type: Transform @@ -114679,6 +115532,24 @@ entities: - type: Transform pos: -56.5,-46.5 parent: 100 + - uid: 15144 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,36.5 + parent: 100 + - uid: 15145 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,36.5 + parent: 100 + - uid: 15156 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,36.5 + parent: 100 - uid: 15470 components: - type: Transform @@ -114689,6 +115560,12 @@ entities: - type: Transform pos: -18.5,-32.5 parent: 100 + - uid: 16386 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -8.5,44.5 + parent: 100 - uid: 16590 components: - type: Transform @@ -114704,6 +115581,29 @@ entities: - type: Transform pos: -17.5,-34.5 parent: 100 + - uid: 21435 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -16.5,46.5 + parent: 100 + - uid: 21502 + components: + - type: Transform + pos: -12.5,50.5 + parent: 100 + - uid: 21504 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,46.5 + parent: 100 + - uid: 21505 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -13.5,46.5 + parent: 100 - proto: TablePlasmaGlass entities: - uid: 4333 @@ -114755,21 +115655,6 @@ entities: - type: Transform pos: -17.5,23.5 parent: 100 - - uid: 1010 - components: - - type: Transform - pos: -12.5,35.5 - parent: 100 - - uid: 1011 - components: - - type: Transform - pos: -11.5,35.5 - parent: 100 - - uid: 1022 - components: - - type: Transform - pos: -11.5,36.5 - parent: 100 - uid: 1031 components: - type: Transform @@ -114795,10 +115680,11 @@ entities: - type: Transform pos: -31.5,29.5 parent: 100 - - uid: 1356 + - uid: 1353 components: - type: Transform - pos: -15.5,36.5 + rot: 1.5707963267948966 rad + pos: -24.5,37.5 parent: 100 - uid: 1572 components: @@ -114865,6 +115751,11 @@ entities: - type: Transform pos: 12.5,33.5 parent: 100 + - uid: 1883 + components: + - type: Transform + pos: -6.5,38.5 + parent: 100 - uid: 1885 components: - type: Transform @@ -114880,6 +115771,11 @@ entities: - type: Transform pos: 26.5,-42.5 parent: 100 + - uid: 2195 + components: + - type: Transform + pos: -7.5,38.5 + parent: 100 - uid: 2265 components: - type: Transform @@ -115112,6 +116008,11 @@ entities: - type: Transform pos: 7.5,-39.5 parent: 100 + - uid: 5368 + components: + - type: Transform + pos: -11.5,36.5 + parent: 100 - uid: 5584 components: - type: Transform @@ -115122,26 +116023,6 @@ entities: - type: Transform pos: -40.5,-17.5 parent: 100 - - uid: 10667 - components: - - type: Transform - pos: -14.5,35.5 - parent: 100 - - uid: 10689 - components: - - type: Transform - pos: -13.5,35.5 - parent: 100 - - uid: 11196 - components: - - type: Transform - pos: -22.5,36.5 - parent: 100 - - uid: 11197 - components: - - type: Transform - pos: -22.5,37.5 - parent: 100 - uid: 11440 components: - type: Transform @@ -115232,10 +116113,11 @@ entities: - type: Transform pos: -5.5,-49.5 parent: 100 - - uid: 15265 + - uid: 15157 components: - type: Transform - pos: -11.5,37.5 + rot: 1.5707963267948966 rad + pos: -24.5,36.5 parent: 100 - uid: 15278 components: @@ -115329,11 +116211,6 @@ entities: - type: Transform pos: -24.5,13.5 parent: 100 - - uid: 1646 - components: - - type: Transform - pos: -25.5,49.5 - parent: 100 - uid: 1855 components: - type: Transform @@ -115349,16 +116226,6 @@ entities: - type: Transform pos: 11.5,49.5 parent: 100 - - uid: 3033 - components: - - type: Transform - pos: -20.5,38.5 - parent: 100 - - uid: 3034 - components: - - type: Transform - pos: -21.5,38.5 - parent: 100 - uid: 4038 components: - type: Transform @@ -115370,10 +116237,10 @@ entities: rot: -1.5707963267948966 rad pos: -15.5,-1.5 parent: 100 - - uid: 11474 + - uid: 6212 components: - type: Transform - pos: -19.5,38.5 + pos: -15.5,37.5 parent: 100 - uid: 11824 components: @@ -115405,6 +116272,26 @@ entities: - type: Transform pos: -8.5,-41.5 parent: 100 + - uid: 15084 + components: + - type: Transform + pos: -14.5,37.5 + parent: 100 + - uid: 15085 + components: + - type: Transform + pos: -12.5,35.5 + parent: 100 + - uid: 15086 + components: + - type: Transform + pos: -14.5,33.5 + parent: 100 + - uid: 15103 + components: + - type: Transform + pos: -14.5,34.5 + parent: 100 - uid: 15977 components: - type: Transform @@ -115430,18 +116317,6 @@ entities: - type: Transform pos: -48.5,66.5 parent: 100 - - uid: 20862 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -17.5,43.5 - parent: 100 - - uid: 20863 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -18.5,43.5 - parent: 100 - proto: TableStone entities: - uid: 13417 @@ -116337,11 +117212,6 @@ entities: rot: -1.5707963267948966 rad pos: -21.5,11.5 parent: 100 - - uid: 1658 - components: - - type: Transform - pos: -24.5,42.5 - parent: 100 - uid: 1759 components: - type: Transform @@ -116434,11 +117304,6 @@ entities: rot: 1.5707963267948966 rad pos: -14.5,7.5 parent: 100 - - uid: 6142 - components: - - type: Transform - pos: -24.5,46.5 - parent: 100 - uid: 8461 components: - type: Transform @@ -117010,12 +117875,6 @@ entities: - Middle: Off - proto: UnfinishedMachineFrame entities: - - uid: 1353 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -20.5,50.5 - parent: 100 - uid: 19431 components: - type: Transform @@ -117039,13 +117898,6 @@ entities: - type: Transform pos: 7.664204,-50.381947 parent: 100 -- proto: UniformScrubsColorPurple - entities: - - uid: 16624 - components: - - type: Transform - pos: -9.609738,46.739872 - parent: 100 - proto: UniformShortsRed entities: - uid: 16722 @@ -117154,17 +118006,17 @@ entities: parent: 100 - proto: VendingMachineChemDrobe entities: - - uid: 960 + - uid: 21482 components: - type: Transform - pos: -19.5,35.5 + pos: -18.5,36.5 parent: 100 - proto: VendingMachineChemicals entities: - - uid: 13637 + - uid: 15088 components: - type: Transform - pos: -16.5,33.5 + pos: -12.5,33.5 parent: 100 - uid: 20755 components: @@ -117232,6 +118084,11 @@ entities: parent: 100 - proto: VendingMachineCoffee entities: + - uid: 6139 + components: + - type: Transform + pos: -10.5,44.5 + parent: 100 - uid: 12064 components: - type: MetaData @@ -117336,6 +118193,13 @@ entities: - type: Transform pos: 24.5,52.5 parent: 100 +- proto: VendingMachineGeneDrobe + entities: + - uid: 21419 + components: + - type: Transform + pos: -26.5,43.5 + parent: 100 - proto: VendingMachineHydrobe entities: - uid: 1231 @@ -117364,17 +118228,17 @@ entities: parent: 100 - proto: VendingMachineMedical entities: - - uid: 1475 + - uid: 6142 components: - type: Transform - pos: -5.5,40.5 + pos: -6.5,46.5 parent: 100 - proto: VendingMachineMediDrobe entities: - - uid: 2863 + - uid: 4359 components: - type: Transform - pos: -7.5,50.5 + pos: -10.5,46.5 parent: 100 - proto: VendingMachineMNKDrobe entities: @@ -117551,6 +118415,13 @@ entities: - type: Transform pos: -1.5,42.5 parent: 100 +- proto: VendingMachineViroDrobe + entities: + - uid: 21420 + components: + - type: Transform + pos: -29.5,40.5 + parent: 100 - proto: VendingMachineWallMedical entities: - uid: 5681 @@ -117559,15 +118430,11 @@ entities: rot: 3.141592653589793 rad pos: 2.5,41.5 parent: 100 - - uid: 11180 - components: - - type: Transform - pos: -6.5,47.5 - parent: 100 - - uid: 11258 + - uid: 15154 components: - type: Transform - pos: -21.5,47.5 + rot: 1.5707963267948966 rad + pos: -19.5,45.5 parent: 100 - uid: 17002 components: @@ -117718,16 +118585,6 @@ entities: - type: Transform pos: -43.5,-34.5 parent: 100 - - uid: 1314 - components: - - type: Transform - pos: -11.5,39.5 - parent: 100 - - uid: 1588 - components: - - type: Transform - pos: -7.5,47.5 - parent: 100 - uid: 4892 components: - type: Transform @@ -117754,6 +118611,11 @@ entities: - type: Transform pos: -5.5,-27.5 parent: 100 + - uid: 15261 + components: + - type: Transform + pos: -5.5,47.5 + parent: 100 - uid: 17442 components: - type: Transform @@ -117761,6 +118623,12 @@ entities: parent: 100 - proto: WallReinforced entities: + - uid: 6 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,33.5 + parent: 100 - uid: 9 components: - type: Transform @@ -117786,6 +118654,12 @@ entities: - type: Transform pos: 2.5,37.5 parent: 100 + - uid: 169 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,34.5 + parent: 100 - uid: 388 components: - type: Transform @@ -118058,11 +118932,22 @@ entities: rot: 3.141592653589793 rad pos: -29.5,74.5 parent: 100 + - uid: 1293 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,32.5 + parent: 100 - uid: 1303 components: - type: Transform pos: -53.5,32.5 parent: 100 + - uid: 1314 + components: + - type: Transform + pos: -11.5,32.5 + parent: 100 - uid: 1322 components: - type: Transform @@ -118088,30 +118973,73 @@ entities: - type: Transform pos: 6.5,39.5 parent: 100 - - uid: 1389 + - uid: 1338 components: - type: Transform - pos: -58.5,63.5 + pos: -11.5,33.5 parent: 100 - - uid: 1423 + - uid: 1351 components: - type: Transform - pos: -0.5,47.5 + pos: -12.5,32.5 parent: 100 - - uid: 1461 + - uid: 1356 components: - type: Transform - pos: -18.5,51.5 + rot: -1.5707963267948966 rad + pos: -8.5,47.5 parent: 100 - - uid: 1462 + - uid: 1360 components: - type: Transform - pos: -19.5,51.5 + rot: -1.5707963267948966 rad + pos: -6.5,48.5 parent: 100 - - uid: 1464 + - uid: 1361 components: - type: Transform - pos: -21.5,51.5 + rot: -1.5707963267948966 rad + pos: -6.5,49.5 + parent: 100 + - uid: 1362 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,51.5 + parent: 100 + - uid: 1365 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,51.5 + parent: 100 + - uid: 1366 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,48.5 + parent: 100 + - uid: 1369 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,49.5 + parent: 100 + - uid: 1372 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,51.5 + parent: 100 + - uid: 1389 + components: + - type: Transform + pos: -58.5,63.5 + parent: 100 + - uid: 1423 + components: + - type: Transform + pos: -0.5,47.5 parent: 100 - uid: 1476 components: @@ -118124,30 +119052,30 @@ entities: - type: Transform pos: -22.5,35.5 parent: 100 - - uid: 1490 + - uid: 1484 components: - type: Transform - pos: -21.5,35.5 + pos: -16.5,38.5 parent: 100 - - uid: 1502 + - uid: 1490 components: - type: Transform - pos: -22.5,33.5 + pos: -21.5,35.5 parent: 100 - - uid: 1506 + - uid: 1493 components: - type: Transform - pos: 18.5,19.5 + pos: -11.5,34.5 parent: 100 - - uid: 1507 + - uid: 1502 components: - type: Transform - pos: -22.5,51.5 + pos: -22.5,33.5 parent: 100 - - uid: 1508 + - uid: 1506 components: - type: Transform - pos: -25.5,51.5 + pos: 18.5,19.5 parent: 100 - uid: 1509 components: @@ -118174,22 +119102,22 @@ entities: - uid: 1516 components: - type: Transform - pos: -17.5,51.5 + pos: -19.5,38.5 parent: 100 - uid: 1527 components: - type: Transform pos: -55.5,63.5 parent: 100 - - uid: 1528 + - uid: 1529 components: - type: Transform - pos: -20.5,34.5 + pos: -56.5,63.5 parent: 100 - - uid: 1529 + - uid: 1530 components: - type: Transform - pos: -56.5,63.5 + pos: -19.5,35.5 parent: 100 - uid: 1531 components: @@ -118233,11 +119161,6 @@ entities: - type: Transform pos: -55.5,62.5 parent: 100 - - uid: 1543 - components: - - type: Transform - pos: -23.5,51.5 - parent: 100 - uid: 1547 components: - type: Transform @@ -118246,7 +119169,7 @@ entities: - uid: 1549 components: - type: Transform - pos: -20.5,51.5 + pos: -12.5,38.5 parent: 100 - uid: 1553 components: @@ -118259,10 +119182,17 @@ entities: rot: 3.141592653589793 rad pos: -12.5,-63.5 parent: 100 - - uid: 1604 + - uid: 1593 components: - type: Transform - pos: -24.5,51.5 + rot: -1.5707963267948966 rad + pos: -11.5,51.5 + parent: 100 + - uid: 1594 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,50.5 parent: 100 - uid: 1617 components: @@ -118270,12 +119200,27 @@ entities: rot: 1.5707963267948966 rad pos: -13.5,-59.5 parent: 100 + - uid: 1618 + components: + - type: Transform + pos: -13.5,38.5 + parent: 100 - uid: 1621 components: - type: Transform rot: -1.5707963267948966 rad pos: -68.5,83.5 parent: 100 + - uid: 1622 + components: + - type: Transform + pos: -14.5,38.5 + parent: 100 + - uid: 1624 + components: + - type: Transform + pos: -11.5,38.5 + parent: 100 - uid: 1625 components: - type: Transform @@ -118308,6 +119253,11 @@ entities: - type: Transform pos: 16.5,24.5 parent: 100 + - uid: 1686 + components: + - type: Transform + pos: -15.5,38.5 + parent: 100 - uid: 1688 components: - type: Transform @@ -119308,7 +120258,8 @@ entities: - uid: 2356 components: - type: Transform - pos: -29.5,50.5 + rot: -1.5707963267948966 rad + pos: -10.5,47.5 parent: 100 - uid: 2357 components: @@ -119320,6 +120271,12 @@ entities: - type: Transform pos: 25.5,11.5 parent: 100 + - uid: 2360 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,47.5 + parent: 100 - uid: 2363 components: - type: Transform @@ -119380,6 +120337,12 @@ entities: - type: Transform pos: 36.5,24.5 parent: 100 + - uid: 2393 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -6.5,47.5 + parent: 100 - uid: 2394 components: - type: Transform @@ -119869,6 +120832,12 @@ entities: - type: Transform pos: 31.5,-20.5 parent: 100 + - uid: 2842 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -7.5,51.5 + parent: 100 - uid: 2845 components: - type: Transform @@ -119888,7 +120857,8 @@ entities: - uid: 2848 components: - type: Transform - pos: -30.5,48.5 + rot: -1.5707963267948966 rad + pos: -6.5,50.5 parent: 100 - uid: 2849 components: @@ -119898,32 +120868,14 @@ entities: - uid: 2850 components: - type: Transform - pos: -30.5,49.5 + rot: -1.5707963267948966 rad + pos: -9.5,51.5 parent: 100 - uid: 2851 components: - type: Transform - pos: -30.5,50.5 - parent: 100 - - uid: 2853 - components: - - type: Transform - pos: -29.5,51.5 - parent: 100 - - uid: 2854 - components: - - type: Transform - pos: -28.5,51.5 - parent: 100 - - uid: 2855 - components: - - type: Transform - pos: -27.5,51.5 - parent: 100 - - uid: 2856 - components: - - type: Transform - pos: -26.5,51.5 + rot: -1.5707963267948966 rad + pos: -11.5,47.5 parent: 100 - uid: 2875 components: @@ -122058,6 +123010,12 @@ entities: - type: Transform pos: -25.5,-46.5 parent: 100 + - uid: 5175 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,37.5 + parent: 100 - uid: 5183 components: - type: Transform @@ -122376,11 +123334,6 @@ entities: rot: 3.141592653589793 rad pos: 0.5,56.5 parent: 100 - - uid: 6461 - components: - - type: Transform - pos: -15.5,51.5 - parent: 100 - uid: 6463 components: - type: Transform @@ -122794,11 +123747,6 @@ entities: - type: Transform pos: -58.5,78.5 parent: 100 - - uid: 10103 - components: - - type: Transform - pos: -20.5,33.5 - parent: 100 - uid: 10164 components: - type: Transform @@ -124168,12 +125116,6 @@ entities: - type: Transform pos: -14.5,-42.5 parent: 100 - - uid: 15757 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -21.5,39.5 - parent: 100 - uid: 15799 components: - type: Transform @@ -124232,22 +125174,11 @@ entities: - type: Transform pos: -50.5,70.5 parent: 100 - - uid: 15834 - components: - - type: Transform - pos: -24.5,47.5 - parent: 100 - uid: 15835 components: - type: Transform pos: -48.5,69.5 parent: 100 - - uid: 15836 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -17.5,40.5 - parent: 100 - uid: 15838 components: - type: Transform @@ -124334,12 +125265,6 @@ entities: - type: Transform pos: -22.5,-53.5 parent: 100 - - uid: 15973 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -17.5,39.5 - parent: 100 - uid: 16100 components: - type: Transform @@ -124420,12 +125345,6 @@ entities: - type: Transform pos: -11.5,-20.5 parent: 100 - - uid: 16198 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -15.5,33.5 - parent: 100 - uid: 16210 components: - type: Transform @@ -124501,27 +125420,11 @@ entities: - type: Transform pos: -14.5,-20.5 parent: 100 - - uid: 16279 - components: - - type: Transform - pos: -15.5,48.5 - parent: 100 - uid: 16283 components: - type: Transform pos: -12.5,-20.5 parent: 100 - - uid: 16318 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -15.5,34.5 - parent: 100 - - uid: 16319 - components: - - type: Transform - pos: -20.5,47.5 - parent: 100 - uid: 16329 components: - type: Transform @@ -124562,17 +125465,6 @@ entities: - type: Transform pos: -22.5,-38.5 parent: 100 - - uid: 16596 - components: - - type: Transform - pos: -21.5,48.5 - parent: 100 - - uid: 16599 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -17.5,41.5 - parent: 100 - uid: 16600 components: - type: Transform @@ -124599,12 +125491,6 @@ entities: - type: Transform pos: -23.5,-41.5 parent: 100 - - uid: 16756 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -15.5,41.5 - parent: 100 - uid: 16762 components: - type: Transform @@ -124656,11 +125542,6 @@ entities: - type: Transform pos: -53.5,-53.5 parent: 100 - - uid: 16876 - components: - - type: Transform - pos: -19.5,47.5 - parent: 100 - uid: 16885 components: - type: Transform @@ -125007,22 +125888,6 @@ entities: - type: Transform pos: 31.5,54.5 parent: 100 - - uid: 17354 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -22.5,39.5 - parent: 100 - - uid: 17355 - components: - - type: Transform - pos: -25.5,47.5 - parent: 100 - - uid: 17366 - components: - - type: Transform - pos: -27.5,48.5 - parent: 100 - uid: 17369 components: - type: Transform @@ -125033,11 +125898,6 @@ entities: - type: Transform pos: 33.5,54.5 parent: 100 - - uid: 17506 - components: - - type: Transform - pos: -15.5,47.5 - parent: 100 - uid: 17571 components: - type: Transform @@ -125053,12 +125913,6 @@ entities: - type: Transform pos: -52.5,-53.5 parent: 100 - - uid: 17588 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -15.5,38.5 - parent: 100 - uid: 17596 components: - type: Transform @@ -125889,16 +126743,6 @@ entities: - type: Transform pos: 18.5,-30.5 parent: 100 - - uid: 20028 - components: - - type: Transform - pos: -28.5,48.5 - parent: 100 - - uid: 20129 - components: - - type: Transform - pos: -21.5,47.5 - parent: 100 - uid: 20174 components: - type: Transform @@ -126435,18 +127279,6 @@ entities: rot: -1.5707963267948966 rad pos: -61.5,82.5 parent: 100 - - uid: 20352 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -22.5,38.5 - parent: 100 - - uid: 20354 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -16.5,41.5 - parent: 100 - uid: 20355 components: - type: Transform @@ -126467,41 +127299,6 @@ entities: - type: Transform pos: -29.5,59.5 parent: 100 - - uid: 20360 - components: - - type: Transform - pos: -21.5,50.5 - parent: 100 - - uid: 20361 - components: - - type: Transform - pos: -26.5,48.5 - parent: 100 - - uid: 20362 - components: - - type: Transform - pos: -26.5,47.5 - parent: 100 - - uid: 20363 - components: - - type: Transform - pos: -21.5,49.5 - parent: 100 - - uid: 20364 - components: - - type: Transform - pos: -15.5,49.5 - parent: 100 - - uid: 20365 - components: - - type: Transform - pos: -15.5,50.5 - parent: 100 - - uid: 20366 - components: - - type: Transform - pos: -29.5,48.5 - parent: 100 - uid: 20370 components: - type: Transform @@ -127778,7 +128575,8 @@ entities: - uid: 669 components: - type: Transform - pos: -10.5,40.5 + rot: -1.5707963267948966 rad + pos: -24.5,39.5 parent: 100 - uid: 670 components: @@ -127900,6 +128698,35 @@ entities: - type: Transform pos: 4.5,0.5 parent: 100 + - uid: 921 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,51.5 + parent: 100 + - uid: 931 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -21.5,51.5 + parent: 100 + - uid: 937 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -22.5,51.5 + parent: 100 + - uid: 941 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -25.5,51.5 + parent: 100 + - uid: 943 + components: + - type: Transform + pos: -20.5,40.5 + parent: 100 - uid: 950 components: - type: Transform @@ -127913,7 +128740,6 @@ entities: - uid: 954 components: - type: Transform - rot: -1.5707963267948966 rad pos: -20.5,21.5 parent: 100 - uid: 955 @@ -127931,6 +128757,12 @@ entities: - type: Transform pos: -12.5,30.5 parent: 100 + - uid: 960 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -23.5,51.5 + parent: 100 - uid: 968 components: - type: Transform @@ -127947,29 +128779,16 @@ entities: - type: Transform pos: -16.5,19.5 parent: 100 - - uid: 977 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -12.5,32.5 - parent: 100 - uid: 996 components: - type: Transform rot: -1.5707963267948966 rad pos: -23.5,21.5 parent: 100 - - uid: 997 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -22.5,21.5 - parent: 100 - uid: 1002 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -21.5,21.5 + pos: -28.5,41.5 parent: 100 - uid: 1004 components: @@ -127982,6 +128801,18 @@ entities: rot: -1.5707963267948966 rad pos: -12.5,31.5 parent: 100 + - uid: 1010 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -20.5,51.5 + parent: 100 + - uid: 1011 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,51.5 + parent: 100 - uid: 1016 components: - type: Transform @@ -127997,6 +128828,12 @@ entities: - type: Transform pos: -25.5,26.5 parent: 100 + - uid: 1024 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,48.5 + parent: 100 - uid: 1032 components: - type: Transform @@ -128035,7 +128872,7 @@ entities: - uid: 1041 components: - type: Transform - pos: -23.5,22.5 + pos: -24.5,44.5 parent: 100 - uid: 1042 components: @@ -128274,6 +129111,12 @@ entities: - type: Transform pos: -31.5,10.5 parent: 100 + - uid: 1134 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,49.5 + parent: 100 - uid: 1158 components: - type: Transform @@ -128331,6 +129174,12 @@ entities: rot: 3.141592653589793 rad pos: -32.5,17.5 parent: 100 + - uid: 1174 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,50.5 + parent: 100 - uid: 1177 components: - type: Transform @@ -128391,6 +129240,12 @@ entities: - type: Transform pos: -28.5,31.5 parent: 100 + - uid: 1199 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,51.5 + parent: 100 - uid: 1202 components: - type: Transform @@ -128401,6 +129256,18 @@ entities: - type: Transform pos: -27.5,27.5 parent: 100 + - uid: 1206 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -27.5,51.5 + parent: 100 + - uid: 1208 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -26.5,51.5 + parent: 100 - uid: 1209 components: - type: Transform @@ -128419,7 +129286,7 @@ entities: - uid: 1226 components: - type: Transform - pos: -16.5,43.5 + pos: -20.5,20.5 parent: 100 - uid: 1233 components: @@ -128488,10 +129355,16 @@ entities: - type: Transform pos: -28.5,38.5 parent: 100 + - uid: 1301 + components: + - type: Transform + pos: -28.5,43.5 + parent: 100 - uid: 1316 components: - type: Transform - pos: -11.5,32.5 + rot: -1.5707963267948966 rad + pos: -15.5,51.5 parent: 100 - uid: 1319 components: @@ -128504,21 +129377,91 @@ entities: rot: 1.5707963267948966 rad pos: -4.5,33.5 parent: 100 + - uid: 1344 + components: + - type: Transform + pos: -24.5,21.5 + parent: 100 + - uid: 1345 + components: + - type: Transform + pos: -21.5,21.5 + parent: 100 + - uid: 1347 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,51.5 + parent: 100 - uid: 1355 components: - type: Transform rot: 1.5707963267948966 rad pos: -4.5,32.5 parent: 100 + - uid: 1374 + components: + - type: Transform + pos: -28.5,44.5 + parent: 100 + - uid: 1377 + components: + - type: Transform + pos: -25.5,44.5 + parent: 100 + - uid: 1378 + components: + - type: Transform + pos: -26.5,44.5 + parent: 100 - uid: 1383 components: - type: Transform - pos: -8.5,47.5 + rot: -1.5707963267948966 rad + pos: -24.5,46.5 + parent: 100 + - uid: 1385 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,47.5 + parent: 100 + - uid: 1386 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,48.5 + parent: 100 + - uid: 1387 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -24.5,49.5 + parent: 100 + - uid: 1399 + components: + - type: Transform + pos: -25.5,40.5 + parent: 100 + - uid: 1414 + components: + - type: Transform + pos: -26.5,40.5 parent: 100 - uid: 1416 components: - type: Transform - pos: -11.5,47.5 + pos: -27.5,40.5 + parent: 100 + - uid: 1419 + components: + - type: Transform + pos: -28.5,40.5 + parent: 100 + - uid: 1420 + components: + - type: Transform + pos: -24.5,41.5 parent: 100 - uid: 1457 components: @@ -128526,49 +129469,50 @@ entities: rot: 1.5707963267948966 rad pos: -24.5,38.5 parent: 100 - - uid: 1484 + - uid: 1459 components: - type: Transform - pos: -12.5,47.5 + rot: -1.5707963267948966 rad + pos: -24.5,50.5 parent: 100 - - uid: 1491 + - uid: 1474 components: - type: Transform rot: -1.5707963267948966 rad - pos: -25.5,41.5 + pos: -16.5,51.5 parent: 100 - - uid: 1492 + - uid: 1475 components: - type: Transform rot: -1.5707963267948966 rad - pos: -26.5,41.5 + pos: -14.5,51.5 parent: 100 - - uid: 1493 + - uid: 1479 components: - type: Transform - pos: -28.5,41.5 + rot: -1.5707963267948966 rad + pos: -13.5,51.5 parent: 100 - - uid: 1500 + - uid: 1488 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -29.5,44.5 + pos: -19.5,40.5 parent: 100 - - uid: 1511 + - uid: 1491 components: - type: Transform - pos: -10.5,47.5 + pos: -21.5,40.5 parent: 100 - - uid: 1526 + - uid: 1500 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -27.5,41.5 + rot: 1.5707963267948966 rad + pos: -29.5,44.5 parent: 100 - - uid: 1540 + - uid: 1507 components: - type: Transform - pos: -10.5,41.5 + pos: -23.5,40.5 parent: 100 - uid: 1548 components: @@ -128597,78 +129541,64 @@ entities: rot: 1.5707963267948966 rad pos: -24.5,40.5 parent: 100 - - uid: 1561 - components: - - type: Transform - pos: -29.5,41.5 - parent: 100 - - uid: 1564 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -29.5,43.5 - parent: 100 - uid: 1574 components: - type: Transform pos: -26.5,57.5 parent: 100 - - uid: 1586 + - uid: 1592 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -12.5,39.5 + pos: -8.5,43.5 parent: 100 - - uid: 1613 + - uid: 1595 components: - type: Transform - pos: -21.5,42.5 + rot: -1.5707963267948966 rad + pos: -20.5,46.5 parent: 100 - - uid: 1616 + - uid: 1604 components: - type: Transform - pos: -21.5,41.5 + rot: 1.5707963267948966 rad + pos: -19.5,47.5 parent: 100 - - uid: 1618 + - uid: 1613 components: - type: Transform - pos: -16.5,44.5 + pos: -19.5,46.5 parent: 100 - uid: 1620 components: - type: Transform - pos: -24.5,44.5 - parent: 100 - - uid: 1622 - components: - - type: Transform - pos: -24.5,41.5 + pos: -8.5,38.5 parent: 100 - - uid: 1631 + - uid: 1627 components: - type: Transform - pos: -12.5,43.5 + pos: -16.5,50.5 parent: 100 - - uid: 1639 + - uid: 1630 components: - type: Transform - pos: -23.5,38.5 + pos: -16.5,48.5 parent: 100 - - uid: 1641 + - uid: 1631 components: - type: Transform - pos: -21.5,40.5 + pos: -16.5,47.5 parent: 100 - - uid: 1647 + - uid: 1660 components: - type: Transform - pos: -21.5,44.5 + rot: -1.5707963267948966 rad + pos: -48.5,49.5 parent: 100 - - uid: 1660 + - uid: 1674 components: - type: Transform rot: -1.5707963267948966 rad - pos: -48.5,49.5 + pos: -19.5,45.5 parent: 100 - uid: 1685 components: @@ -128706,6 +129636,12 @@ entities: - type: Transform pos: 21.5,-0.5 parent: 100 + - uid: 2359 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,43.5 + parent: 100 - uid: 2371 components: - type: Transform @@ -129091,11 +130027,6 @@ entities: - type: Transform pos: 20.5,-11.5 parent: 100 - - uid: 2842 - components: - - type: Transform - pos: -15.5,39.5 - parent: 100 - uid: 2923 components: - type: Transform @@ -129231,6 +130162,12 @@ entities: - type: Transform pos: -30.5,-9.5 parent: 100 + - uid: 3034 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,46.5 + parent: 100 - uid: 3039 components: - type: Transform @@ -130786,10 +131723,11 @@ entities: - type: Transform pos: -29.5,62.5 parent: 100 - - uid: 4183 + - uid: 4178 components: - type: Transform - pos: -9.5,47.5 + rot: -1.5707963267948966 rad + pos: -16.5,43.5 parent: 100 - uid: 4190 components: @@ -130839,12 +131777,6 @@ entities: - type: Transform pos: -51.5,62.5 parent: 100 - - uid: 4363 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -11.5,39.5 - parent: 100 - uid: 4370 components: - type: Transform @@ -130863,11 +131795,6 @@ entities: rot: 3.141592653589793 rad pos: -30.5,65.5 parent: 100 - - uid: 4378 - components: - - type: Transform - pos: -7.5,47.5 - parent: 100 - uid: 4641 components: - type: Transform @@ -131011,72 +131938,23 @@ entities: - type: Transform pos: -46.5,-8.5 parent: 100 - - uid: 5929 - components: - - type: Transform - pos: -11.5,43.5 - parent: 100 - uid: 5938 components: - type: Transform rot: 3.141592653589793 rad pos: -31.5,-5.5 parent: 100 - - uid: 6138 - components: - - type: Transform - pos: -10.5,39.5 - parent: 100 - - uid: 6144 - components: - - type: Transform - pos: -26.5,44.5 - parent: 100 - uid: 6156 components: - type: Transform rot: 3.141592653589793 rad pos: -42.5,-8.5 parent: 100 - - uid: 6169 - components: - - type: Transform - pos: -25.5,44.5 - parent: 100 - uid: 6235 components: - type: Transform pos: -47.5,64.5 parent: 100 - - uid: 6244 - components: - - type: Transform - pos: -21.5,43.5 - parent: 100 - - uid: 6424 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -9.5,51.5 - parent: 100 - - uid: 6453 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -11.5,51.5 - parent: 100 - - uid: 6454 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -10.5,51.5 - parent: 100 - - uid: 6460 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -8.5,51.5 - parent: 100 - uid: 6465 components: - type: Transform @@ -131098,24 +131976,12 @@ entities: rot: 1.5707963267948966 rad pos: -12.5,51.5 parent: 100 - - uid: 7006 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -7.5,51.5 - parent: 100 - uid: 7019 components: - type: Transform rot: 1.5707963267948966 rad pos: -4.5,39.5 parent: 100 - - uid: 7091 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -6.5,50.5 - parent: 100 - uid: 7092 components: - type: Transform @@ -131206,12 +132072,6 @@ entities: rot: 1.5707963267948966 rad pos: -4.5,42.5 parent: 100 - - uid: 7825 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -6.5,47.5 - parent: 100 - uid: 7826 components: - type: Transform @@ -131482,11 +132342,6 @@ entities: - type: Transform pos: -42.5,74.5 parent: 100 - - uid: 10644 - components: - - type: Transform - pos: -9.5,39.5 - parent: 100 - uid: 10664 components: - type: Transform @@ -131858,12 +132713,6 @@ entities: - type: Transform pos: -13.5,-13.5 parent: 100 - - uid: 13861 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -6.5,49.5 - parent: 100 - uid: 13864 components: - type: Transform @@ -131874,12 +132723,6 @@ entities: - type: Transform pos: -30.5,44.5 parent: 100 - - uid: 13866 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -6.5,48.5 - parent: 100 - uid: 13878 components: - type: Transform @@ -131890,12 +132733,6 @@ entities: - type: Transform pos: -5.5,0.5 parent: 100 - - uid: 14028 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -6.5,51.5 - parent: 100 - uid: 14032 components: - type: Transform @@ -132047,6 +132884,12 @@ entities: - type: Transform pos: -5.5,-27.5 parent: 100 + - uid: 14680 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -19.5,41.5 + parent: 100 - uid: 14681 components: - type: Transform @@ -132058,28 +132901,11 @@ entities: rot: 3.141592653589793 rad pos: -37.5,-5.5 parent: 100 - - uid: 14856 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -5.5,39.5 - parent: 100 - uid: 15057 components: - type: Transform pos: -43.5,54.5 parent: 100 - - uid: 15072 - components: - - type: Transform - pos: -10.5,43.5 - parent: 100 - - uid: 15267 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -12.5,50.5 - parent: 100 - uid: 15370 components: - type: Transform @@ -132215,11 +133041,6 @@ entities: rot: 3.141592653589793 rad pos: -39.5,-7.5 parent: 100 - - uid: 17379 - components: - - type: Transform - pos: -10.5,42.5 - parent: 100 - uid: 17530 components: - type: Transform @@ -132922,13 +133743,6 @@ entities: - type: Transform pos: -28.5,25.5 parent: 100 -- proto: WarpPointMedical - entities: - - uid: 20808 - components: - - type: Transform - pos: -16.5,45.5 - parent: 100 - proto: WaterCooler entities: - uid: 4085 @@ -133265,6 +134079,34 @@ entities: parent: 100 - proto: Windoor entities: + - uid: 1496 + components: + - type: MetaData + name: Chemistry + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,36.5 + parent: 100 + - uid: 1508 + components: + - type: MetaData + name: Reception + - type: Transform + pos: -6.5,38.5 + parent: 100 + - uid: 1513 + components: + - type: MetaData + name: Reception + - type: Transform + pos: -7.5,38.5 + parent: 100 + - uid: 4154 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,45.5 + parent: 100 - uid: 12598 components: - type: MetaData @@ -133295,7 +134137,7 @@ entities: components: - type: MetaData desc: A windoor for the unification of the two most robust roles on the station. - name: Chem/Botany Windoor + name: Botany/Medical Windoor - type: Transform rot: 1.5707963267948966 rad pos: -26.5,36.5 @@ -133488,30 +134330,20 @@ entities: parent: 100 - proto: WindoorSecureChemistryLocked entities: - - uid: 17525 - components: - - type: MetaData - name: Chem/Botany Windoor - - type: Transform - rot: 1.5707963267948966 rad - pos: -22.5,36.5 - parent: 100 - - uid: 17526 + - uid: 15106 components: - type: MetaData - name: Chem/Botany Windoor + name: Chemistry Fridge - type: Transform - rot: 1.5707963267948966 rad - pos: -22.5,37.5 + pos: -18.5,38.5 parent: 100 - - uid: 17527 + - uid: 21463 components: - type: MetaData - desc: Don't eat the floor pills. - name: Chemistry Windoor + name: Chemistry Inner - type: Transform rot: -1.5707963267948966 rad - pos: -15.5,36.5 + pos: -11.5,36.5 parent: 100 - proto: WindoorSecureClerkLocked entities: @@ -133621,6 +134453,56 @@ entities: rot: 3.141592653589793 rad pos: 29.5,22.5 parent: 100 +- proto: WindoorSecureMedicalLocked + entities: + - uid: 1583 + components: + - type: MetaData + name: Reception + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,41.5 + parent: 100 + - uid: 1584 + components: + - type: MetaData + name: Reception + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,40.5 + parent: 100 + - uid: 5172 + components: + - type: MetaData + name: Reception Inner + - type: Transform + rot: 3.141592653589793 rad + pos: -7.5,38.5 + parent: 100 + - uid: 5661 + components: + - type: MetaData + name: Reception Inner + - type: Transform + rot: 3.141592653589793 rad + pos: -6.5,38.5 + parent: 100 + - uid: 15148 + components: + - type: MetaData + name: Medical/Botany Windoor + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,37.5 + parent: 100 + - uid: 15158 + components: + - type: MetaData + name: Medical/Botany Windoor + - type: Transform + rot: 1.5707963267948966 rad + pos: -24.5,36.5 + parent: 100 - proto: WindoorSecureScienceLocked entities: - uid: 3007 @@ -133782,6 +134664,26 @@ entities: - type: Transform pos: -25.5,22.5 parent: 100 + - uid: 1599 + components: + - type: Transform + pos: -15.5,47.5 + parent: 100 + - uid: 1634 + components: + - type: Transform + pos: -14.5,47.5 + parent: 100 + - uid: 1639 + components: + - type: Transform + pos: -12.5,47.5 + parent: 100 + - uid: 1643 + components: + - type: Transform + pos: -13.5,47.5 + parent: 100 - uid: 4307 components: - type: Transform @@ -133865,12 +134767,6 @@ entities: rot: 1.5707963267948966 rad pos: -4.5,41.5 parent: 100 - - uid: 4704 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -12.5,46.5 - parent: 100 - uid: 4752 components: - type: Transform @@ -134032,18 +134928,6 @@ entities: - type: Transform pos: 18.5,-17.5 parent: 100 - - uid: 5118 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -12.5,48.5 - parent: 100 - - uid: 5120 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -7.5,39.5 - parent: 100 - uid: 5128 components: - type: Transform @@ -134091,14 +134975,32 @@ entities: - type: Transform pos: -20.5,-12.5 parent: 100 - - uid: 21232 +- proto: WindowDirectional + entities: + - uid: 1598 components: - type: Transform rot: 1.5707963267948966 rad - pos: -13.5,47.5 + pos: -12.5,40.5 + parent: 100 + - uid: 1683 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,37.5 + parent: 100 + - uid: 2268 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,40.5 + parent: 100 + - uid: 3038 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,40.5 parent: 100 -- proto: WindowDirectional - entities: - uid: 3995 components: - type: Transform @@ -134129,6 +135031,12 @@ entities: rot: -1.5707963267948966 rad pos: -34.5,70.5 parent: 100 + - uid: 4143 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,44.5 + parent: 100 - uid: 4147 components: - type: Transform @@ -134141,6 +135049,12 @@ entities: rot: 3.141592653589793 rad pos: -34.5,75.5 parent: 100 + - uid: 4171 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,46.5 + parent: 100 - uid: 4184 components: - type: Transform @@ -134235,6 +135149,24 @@ entities: rot: -1.5707963267948966 rad pos: -16.5,-28.5 parent: 100 + - uid: 5948 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,45.5 + parent: 100 + - uid: 6022 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -21.5,41.5 + parent: 100 + - uid: 6144 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -8.5,46.5 + parent: 100 - uid: 10635 components: - type: Transform @@ -134380,6 +135312,11 @@ entities: rot: -1.5707963267948966 rad pos: -63.5,81.5 parent: 100 + - uid: 1597 + components: + - type: Transform + pos: -5.5,43.5 + parent: 100 - uid: 1934 components: - type: Transform @@ -134669,6 +135606,11 @@ entities: rot: 1.5707963267948966 rad pos: 2.5,44.5 parent: 100 + - uid: 6161 + components: + - type: Transform + pos: -7.5,43.5 + parent: 100 - uid: 6166 components: - type: Transform @@ -135128,6 +136070,18 @@ entities: rot: -1.5707963267948966 rad pos: 7.5,21.5 parent: 100 + - uid: 20530 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,42.5 + parent: 100 + - uid: 20532 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,39.5 + parent: 100 - uid: 20819 components: - type: Transform @@ -135151,6 +136105,12 @@ entities: parent: 100 - proto: WindowTintedDirectional entities: + - uid: 1357 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -16.5,39.5 + parent: 100 - uid: 1428 components: - type: Transform @@ -135175,6 +136135,18 @@ entities: rot: -1.5707963267948966 rad pos: -32.5,74.5 parent: 100 + - uid: 1596 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,39.5 + parent: 100 + - uid: 3040 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,39.5 + parent: 100 - uid: 4145 components: - type: Transform @@ -135283,6 +136255,12 @@ entities: rot: 3.141592653589793 rad pos: 30.5,22.5 parent: 100 + - uid: 21468 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -8.5,50.5 + parent: 100 - proto: Wirecutter entities: - uid: 10915 @@ -135381,6 +136359,16 @@ entities: - type: Transform pos: -11.453337,-63.429195 parent: 100 + - uid: 21508 + components: + - type: Transform + pos: -20.518242,50.54293 + parent: 100 + - uid: 21519 + components: + - type: Transform + pos: -19.467402,33.51014 + parent: 100 - proto: XylophoneInstrument entities: - uid: 729 diff --git a/Resources/Maps/shoukou.yml b/Resources/Maps/shoukou.yml index 4337c019678..cde0ce95903 100644 --- a/Resources/Maps/shoukou.yml +++ b/Resources/Maps/shoukou.yml @@ -5,6 +5,7 @@ tilemap: 0: Space 1: FloorArcadeBlue 2: FloorArcadeBlue2 + 12: FloorAstroGrass 14: FloorBar 18: FloorBlueCircuit 22: FloorBrokenWood @@ -95,7 +96,7 @@ entities: chunks: -1,-1: ind: -1,-1 - tiles: fwAAAAAAXgAAAAACbAAAAAABYwAAAAABXgAAAAABewAAAAAAewAAAAADewAAAAACewAAAAACewAAAAAAXgAAAAABYwAAAAAAbAAAAAAAfwAAAAAAbgAAAAAAbgAAAAAAfwAAAAAAXgAAAAAAbAAAAAAAMAAAAAABXgAAAAAAewAAAAAAewAAAAADewAAAAABewAAAAADewAAAAAAXgAAAAAAMAAAAAAAbAAAAAACbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAAAbAAAAAAAYwAAAAADXgAAAAACXgAAAAAAXgAAAAADXgAAAAADXgAAAAACXgAAAAAAXgAAAAACYwAAAAABbAAAAAABfwAAAAAAfwAAAAAAfwAAAAAAaQAAAAABXgAAAAACbAAAAAABMAAAAAAAYwAAAAAAMAAAAAABYwAAAAAAMAAAAAAAYwAAAAABMAAAAAAAYwAAAAAAMAAAAAAAbAAAAAABfwAAAAAADgAAAAACDgAAAAACXgAAAAAAXgAAAAACZgAAAAADawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAACawAAAAACawAAAAAAZgAAAAACYwAAAAACbAAAAAABfwAAAAAADgAAAAADDgAAAAACXgAAAAACXgAAAAACfwAAAAAAfwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAfwAAAAAAbAAAAAABMAAAAAABbAAAAAADbQAAAAAAewAAAAAAewAAAAACbQAAAAAAfwAAAAAAfwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAbAAAAAAAYwAAAAADbAAAAAAAUAAAAAAAfQAAAAABMAAAAAAAPQAAAAAAPQAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAbAAAAAACMAAAAAACbAAAAAABbQAAAAAAewAAAAAAewAAAAADPQAAAAAAPQAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAbQAAAAAAbAAAAAABYwAAAAAAbAAAAAABfwAAAAAADgAAAAAADgAAAAACfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAUAAAAAAAbAAAAAADMAAAAAACbAAAAAAAUAAAAAAADgAAAAACDgAAAAABLwAAAAAALwAAAAAALwAAAAAALwAAAAAALwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAUAAAAAAAbAAAAAADYwAAAAADbAAAAAADUAAAAAAADgAAAAADDgAAAAABUAAAAAAALwAAAAAALwAAAAAALwAAAAAAUAAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAUAAAAAAAXgAAAAADXgAAAAADXgAAAAACUAAAAAAADgAAAAAADgAAAAAAUAAAAAAALwAAAAAALwAAAAAALwAAAAAAUAAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAewAAAAADewAAAAACfwAAAAAAfwAAAAAALwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAXgAAAAADaQAAAAACXgAAAAABfwAAAAAAfwAAAAAAUAAAAAAAXgAAAAAAXgAAAAADXgAAAAADXgAAAAAAXgAAAAACXgAAAAACXgAAAAACXgAAAAABXgAAAAADXgAAAAADXgAAAAAAaQAAAAACXgAAAAADXgAAAAABBQAAAAAABQAAAAAAaQAAAAADaQAAAAABMAAAAAADaQAAAAADaQAAAAADMAAAAAACaQAAAAABaQAAAAABMAAAAAAAaQAAAAACaQAAAAADMAAAAAAAaQAAAAAAaQAAAAAAXgAAAAAAXgAAAAAC + tiles: fwAAAAAAXgAAAAACbAAAAAABYwAAAAABXgAAAAABewAAAAAAewAAAAADewAAAAACewAAAAACewAAAAAAXgAAAAABYwAAAAAAbAAAAAAAfwAAAAAAbgAAAAAAbgAAAAAAfwAAAAAAXgAAAAAAbAAAAAAAMAAAAAABXgAAAAAAewAAAAAAewAAAAADewAAAAABewAAAAADewAAAAAAXgAAAAAAMAAAAAAAbAAAAAACbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAAAbAAAAAAAYwAAAAADXgAAAAACXgAAAAAAXgAAAAADXgAAAAADXgAAAAACXgAAAAAAXgAAAAACYwAAAAABbAAAAAABfwAAAAAAfwAAAAAAfwAAAAAAaQAAAAABXgAAAAACbAAAAAABMAAAAAAAYwAAAAAAMAAAAAABYwAAAAAAMAAAAAAAYwAAAAABMAAAAAAAYwAAAAAAMAAAAAAAbAAAAAABfwAAAAAADgAAAAACDgAAAAACXgAAAAAAXgAAAAACZgAAAAADawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAACawAAAAACawAAAAAAZgAAAAACYwAAAAACbAAAAAABfwAAAAAADgAAAAADDgAAAAACXgAAAAACXgAAAAACfwAAAAAAfwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAfwAAAAAAbAAAAAABMAAAAAABbAAAAAADbQAAAAAAewAAAAAAewAAAAACbQAAAAAAfwAAAAAAfwAAAAAADAAAAAADPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAbAAAAAAAYwAAAAADbAAAAAAAUAAAAAAAfQAAAAABMAAAAAAAPQAAAAAAPQAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAbAAAAAACMAAAAAACbAAAAAABbQAAAAAAewAAAAAAewAAAAADPQAAAAAAPQAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAbQAAAAAAbAAAAAABYwAAAAAAbAAAAAABfwAAAAAADgAAAAAADgAAAAACfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAUAAAAAAAbAAAAAADMAAAAAACbAAAAAAAUAAAAAAADgAAAAACDgAAAAABLwAAAAAALwAAAAAALwAAAAAALwAAAAAALwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAUAAAAAAAbAAAAAADYwAAAAADbAAAAAADUAAAAAAADgAAAAADDgAAAAABUAAAAAAALwAAAAAALwAAAAAALwAAAAAAUAAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAUAAAAAAAXgAAAAADXgAAAAADXgAAAAACUAAAAAAADgAAAAAADgAAAAAAUAAAAAAALwAAAAAALwAAAAAALwAAAAAAUAAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAewAAAAADewAAAAACfwAAAAAAfwAAAAAALwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAXgAAAAADaQAAAAACXgAAAAABfwAAAAAAfwAAAAAAUAAAAAAAXgAAAAAAXgAAAAADXgAAAAADXgAAAAAAXgAAAAACXgAAAAACXgAAAAACXgAAAAABXgAAAAADXgAAAAADXgAAAAAAaQAAAAACXgAAAAADXgAAAAABBQAAAAAABQAAAAAAaQAAAAADaQAAAAABMAAAAAADaQAAAAADaQAAAAADMAAAAAACaQAAAAABaQAAAAABMAAAAAAAaQAAAAACaQAAAAADMAAAAAAAaQAAAAAAaQAAAAAAXgAAAAAAXgAAAAAC version: 6 -1,0: ind: -1,0 @@ -143,7 +144,7 @@ entities: version: 6 -1,-3: ind: -1,-3 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAATwAAAAAAewAAAAAATwAAAAABewAAAAACTwAAAAADewAAAAABTwAAAAAAXgAAAAAAYwAAAAACYwAAAAAAYwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAewAAAAADTwAAAAACewAAAAAATwAAAAAAewAAAAAATwAAAAABewAAAAABXgAAAAAAYwAAAAABYwAAAAAAYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAewAAAAADewAAAAADewAAAAABewAAAAADewAAAAADewAAAAAATgAAAAACXgAAAAACYwAAAAACYwAAAAACYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAXgAAAAADXgAAAAADXgAAAAADfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAADgAAAAADDgAAAAACTgAAAAABXgAAAAAAXgAAAAABfwAAAAAAcQAAAAAAcQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAPwAAAAAAPwAAAAAADgAAAAABDgAAAAAAUAAAAAAATgAAAAAAXgAAAAACXgAAAAAAfwAAAAAAegAAAAACegAAAAACQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAPwAAAAAADgAAAAADDgAAAAABDgAAAAACDgAAAAACTgAAAAAAXgAAAAABXgAAAAAAfwAAAAAAegAAAAACegAAAAABQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAADgAAAAABDgAAAAACDgAAAAADDgAAAAACfwAAAAAATgAAAAAAXgAAAAACXgAAAAACfwAAAAAAegAAAAACegAAAAADUAAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAegAAAAABegAAAAADQQAAAAAAUAAAAAAAIAAAAAABIAAAAAAAIAAAAAACIAAAAAACIAAAAAACIAAAAAADIAAAAAABfwAAAAAAbAAAAAAAMAAAAAAAbAAAAAADfwAAAAAAfwAAAAAAfwAAAAAAQQAAAAAAbQAAAAAAIAAAAAACIAAAAAADIAAAAAACIAAAAAADIAAAAAADIAAAAAADIAAAAAACbQAAAAAAbAAAAAABYwAAAAAAbAAAAAADfwAAAAAAegAAAAACegAAAAABfwAAAAAAfwAAAAAAfwAAAAAAIAAAAAAAIAAAAAADIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAbAAAAAACMAAAAAAAbAAAAAABfwAAAAAAegAAAAADegAAAAAAfQAAAAABfQAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAbAAAAAADYwAAAAADbAAAAAACfwAAAAAAegAAAAAAegAAAAABewAAAAABfQAAAAABbQAAAAAAIAAAAAAAIAAAAAADIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAbAAAAAACMAAAAAAAbAAAAAADfwAAAAAAUAAAAAAAUAAAAAAAewAAAAAAfQAAAAACbQAAAAAAIAAAAAAAIAAAAAAAIAAAAAADIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAbAAAAAADYwAAAAACbAAAAAAAbQAAAAAAegAAAAABMAAAAAABfQAAAAAAfQAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAbAAAAAADMAAAAAAAbAAAAAADbQAAAAAAMAAAAAACegAAAAAD + tiles: AAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAUAAAAAAATwAAAAAAewAAAAAATwAAAAABewAAAAACTwAAAAADewAAAAABTwAAAAAAXgAAAAAAYwAAAAACYwAAAAAAYwAAAAACAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAUAAAAAAAewAAAAADTwAAAAACewAAAAAATwAAAAAAewAAAAAATwAAAAABewAAAAABXgAAAAAAYwAAAAABYwAAAAAAYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAUAAAAAAAewAAAAADewAAAAADewAAAAABewAAAAADewAAAAADewAAAAAATgAAAAACXgAAAAACYwAAAAACYwAAAAACYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAAfwAAAAAAXgAAAAADXgAAAAADXgAAAAADfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAPwAAAAAAPwAAAAAAPwAAAAAADgAAAAADDgAAAAACTgAAAAABXgAAAAAAXgAAAAABfwAAAAAAcQAAAAAAcQAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAPwAAAAAAPwAAAAAADgAAAAABDgAAAAAAUAAAAAAATgAAAAAAXgAAAAACXgAAAAAAfwAAAAAAegAAAAACegAAAAACQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAPwAAAAAADgAAAAADDgAAAAABDgAAAAACDgAAAAACTgAAAAAAXgAAAAABXgAAAAAAfwAAAAAAegAAAAACegAAAAABQwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAADgAAAAABDgAAAAACDgAAAAADDgAAAAACfwAAAAAATgAAAAAAXgAAAAACXgAAAAACfwAAAAAAegAAAAACegAAAAADUAAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAegAAAAABegAAAAADQQAAAAAAUAAAAAAAIAAAAAABIAAAAAAAIAAAAAACIAAAAAACIAAAAAACIAAAAAADIAAAAAABfwAAAAAAbAAAAAAAMAAAAAAAbAAAAAADfwAAAAAAfwAAAAAAfwAAAAAAQQAAAAAAbQAAAAAAIAAAAAACIAAAAAADIAAAAAACIAAAAAADIAAAAAADIAAAAAADIAAAAAACbQAAAAAAbAAAAAABYwAAAAAAbAAAAAADfwAAAAAAegAAAAACegAAAAABfwAAAAAAfwAAAAAAfwAAAAAAIAAAAAAAIAAAAAADIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAbAAAAAACMAAAAAAAbAAAAAABfwAAAAAAegAAAAADegAAAAAAfQAAAAABfQAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAbAAAAAADYwAAAAADbAAAAAACfwAAAAAAegAAAAAAegAAAAABewAAAAABfQAAAAABbQAAAAAAIAAAAAAAIAAAAAADIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAbAAAAAACMAAAAAAAbAAAAAADfwAAAAAAUAAAAAAAUAAAAAAAewAAAAAAfQAAAAACbQAAAAAAIAAAAAAAIAAAAAAAIAAAAAADIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAbAAAAAADYwAAAAACbAAAAAAAbQAAAAAAegAAAAABMAAAAAABfQAAAAAAfQAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAbAAAAAADMAAAAAAAbAAAAAADbQAAAAAAMAAAAAACegAAAAAD version: 6 -2,-3: ind: -2,-3 @@ -183,7 +184,7 @@ entities: version: 6 1,-3: ind: 1,-3 - tiles: fgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAKQAAAAABKQAAAAADKQAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAKQAAAAAAKQAAAAAAKQAAAAADfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAKQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAZgAAAAAAawAAAAAAZgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAABAAAAAAABAAAAAAABAAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAABAAAAAAABAAAAAAABAAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAbQAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAABAAAAAAABAAAAAAABAAAAAAAbQAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAbQAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAA + tiles: fgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAKQAAAAABKQAAAAADKQAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAKQAAAAAAKQAAAAAAKQAAAAADfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAKQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAABAAAAAADBAAAAAACBAAAAAACfwAAAAAAZgAAAAAAawAAAAAAZgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAABAAAAAAABAAAAAAABAAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAABAAAAAAABAAAAAAABAAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAbQAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAewAAAAADewAAAAADewAAAAABbQAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAbQAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAA version: 6 1,-2: ind: 1,-2 @@ -195,7 +196,7 @@ entities: version: 6 1,-1: ind: 1,-1 - tiles: UAAAAAAAJQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAATwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAIQAAAAAAJgAAAAAAIQAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAUAAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAJQAAAAAAIQAAAAAAJgAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAATwAAAAAAIQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJQAAAAAAJgAAAAAAJgAAAAAAIQAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAUAAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAJgAAAAAAIQAAAAAAIQAAAAAAJQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAJAAAAAAAIQAAAAAAJgAAAAAAIQAAAAAAJAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAagAAAAAAagAAAAAAbQAAAAAATgAAAAAATgAAAAAATgAAAAAAfwAAAAAAJAAAAAAAIQAAAAAAJgAAAAAAIQAAAAAAJAAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAAagAAAAAAagAAAAAAUAAAAAAAaQAAAAAATgAAAAAATgAAAAAAUAAAAAAAJAAAAAAAIQAAAAAAJgAAAAAAIQAAAAAAJAAAAAAAfwAAAAAAIwAAAAAAJwAAAAAAJwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAATgAAAAAATgAAAAAATgAAAAAATwAAAAAAJAAAAAAAIQAAAAAAJgAAAAAAIQAAAAAAJAAAAAAAfwAAAAAAKAAAAAAAVAAAAAAAVAAAAAAAagAAAAAAagAAAAAAbQAAAAAATgAAAAAATgAAAAAATgAAAAAAfwAAAAAAJAAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAJAAAAAAAfwAAAAAAKAAAAAAAVAAAAAAAVAAAAAAAagAAAAAAagAAAAAAUAAAAAAAaQAAAAAATgAAAAAATgAAAAAAfwAAAAAAfwAAAAAAUAAAAAAATwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAIwAAAAAAJwAAAAAAJwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAATgAAAAAATgAAAAAATgAAAAAATwAAAAAAIwAAAAAAKAAAAAAAIQAAAAAAKAAAAAAAKAAAAAAAfwAAAAAAfwAAAAAAJQAAAAAAJQAAAAAAagAAAAAAagAAAAAAbQAAAAAATgAAAAAATgAAAAAATgAAAAAAUAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAagAAAAAAagAAAAAAUAAAAAAAaQAAAAAATgAAAAAATgAAAAAAfwAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAfwAAAAAAJwAAAAAAJwAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAJQAAAAAAIQAAAAAAIQAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAA + tiles: UAAAAAAAJQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAATwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAIQAAAAAAJgAAAAAAIQAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAUAAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAJQAAAAAAIQAAAAAAJgAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAATwAAAAAAIQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJQAAAAAAJgAAAAAAJgAAAAAAIQAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAUAAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAJgAAAAAAIQAAAAAAIQAAAAAAJQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAJAAAAAAAIQAAAAAAJgAAAAAAIQAAAAAAJAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAABAAAAAACBAAAAAABbQAAAAAATgAAAAAATgAAAAAATgAAAAAAfwAAAAAAJAAAAAAAIQAAAAAAJgAAAAAAIQAAAAAAJAAAAAAAfwAAAAAAQwAAAAAAQwAAAAAAQwAAAAAABAAAAAADBAAAAAACUAAAAAAAaQAAAAAATgAAAAAATgAAAAAAUAAAAAAAJAAAAAAAIQAAAAAAJgAAAAAAIQAAAAAAJAAAAAAAfwAAAAAAIwAAAAAAJwAAAAAAJwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAATgAAAAAATgAAAAAATgAAAAAATwAAAAAAJAAAAAAAIQAAAAAAJgAAAAAAIQAAAAAAJAAAAAAAfwAAAAAAKAAAAAAAVAAAAAAAVAAAAAAABAAAAAACBAAAAAABbQAAAAAATgAAAAAATgAAAAAATgAAAAAAfwAAAAAAJAAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAJAAAAAAAfwAAAAAAKAAAAAAAVAAAAAAAVAAAAAAABAAAAAABBAAAAAACUAAAAAAAaQAAAAAATgAAAAAATgAAAAAAfwAAAAAAfwAAAAAAUAAAAAAATwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAIwAAAAAAJwAAAAAAJwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAATgAAAAAATgAAAAAATgAAAAAATwAAAAAAIwAAAAAAKAAAAAAAIQAAAAAAKAAAAAAAKAAAAAAAfwAAAAAAfwAAAAAAJQAAAAAAJQAAAAAABAAAAAADBAAAAAACbQAAAAAATgAAAAAATgAAAAAATgAAAAAAUAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAABAAAAAACBAAAAAABUAAAAAAAaQAAAAAATgAAAAAATgAAAAAAfwAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAfwAAAAAAJwAAAAAAJwAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAJQAAAAAAIQAAAAAAIQAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAAOAAAAAAA version: 6 1,0: ind: 1,0 @@ -203,11 +204,11 @@ entities: version: 6 2,-2: ind: 2,-2 - tiles: UAAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAewAAAAAAMAAAAAAAewAAAAAAMAAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAUAAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAMAAAAAAAewAAAAAAMAAAAAAAewAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAewAAAAAAMAAAAAAAewAAAAAAMAAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIQAAAAAAIAAAAAAAIAAAAAAAfwAAAAAAUAAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAMAAAAAAAewAAAAAAMAAAAAAAewAAAAAAbQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAbQAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAewAAAAAAMAAAAAAAewAAAAAAMAAAAAAAfwAAAAAAIAAAAAAAIQAAAAAAIAAAAAAAIQAAAAAAIAAAAAAAfwAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAfwAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAfwAAAAAAbAAAAAAAawAAAAAAbAAAAAAAawAAAAAAbAAAAAAAfwAAAAAAawAAAAAAZgAAAAAAYwAAAAAAZgAAAAAAawAAAAADawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAZgAAAAAAYwAAAAAAbAAAAAAAYwAAAAAAZgAAAAAAawAAAAAAYwAAAAADYwAAAAACYwAAAAAAYwAAAAABYwAAAAADYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAawAAAAADZgAAAAAAYwAAAAAAZgAAAAAAawAAAAADawAAAAADawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAfwAAAAAAZgAAAAAAawAAAAAAZgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAABQAAAAAABQAAAAAAbAAAAAAAMgAAAAAAMgAAAAAAfwAAAAAAfwAAAAAAUAAAAAAATwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAfwAAAAAAIwAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAIwAAAAAAfwAAAAAACwAAAAAACwAAAAAACwAAAAAAfwAAAAAAfgAAAAAAIQAAAAAAIQAAAAAAJgAAAAAAIQAAAAAAJQAAAAAAIwAAAAAAIwAAAAAAIwAAAAAAIwAAAAAAIwAAAAAAfwAAAAAACwAAAAAACwAAAAAACwAAAAAAfwAAAAAAfgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAIQAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAJQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAfwAAAAAATwAAAAAAegAAAAAATwAAAAAAUAAAAAAAfgAAAAAA + tiles: UAAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAewAAAAAAMAAAAAAAewAAAAAAMAAAAAAAfwAAAAAAIQAAAAAAEgAAAAAAIQAAAAADIQAAAAAAIQAAAAAAIQAAAAABUAAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAMAAAAAAAewAAAAAAMAAAAAAAewAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAewAAAAAAMAAAAAAAewAAAAAAMAAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIQAAAAAAIAAAAAAAIAAAAAAAfwAAAAAAUAAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAMAAAAAAAewAAAAAAMAAAAAAAewAAAAAAbQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAbQAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAewAAAAAAMAAAAAAAewAAAAAAMAAAAAAAfwAAAAAAIAAAAAAAIQAAAAAAIAAAAAAAIQAAAAAAIAAAAAAAfwAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAfwAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAfwAAAAAAbAAAAAAAawAAAAAAbAAAAAAAawAAAAAAbAAAAAAAfwAAAAAAawAAAAAAZgAAAAAAYwAAAAAAZgAAAAAAawAAAAADawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAZgAAAAAAYwAAAAAAbAAAAAAAYwAAAAAAZgAAAAAAawAAAAAAYwAAAAADYwAAAAACYwAAAAAAYwAAAAABYwAAAAADYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAYwAAAAAAawAAAAADZgAAAAAAYwAAAAAAZgAAAAAAawAAAAADawAAAAADawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAawAAAAAAfwAAAAAAZgAAAAAAawAAAAAAZgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAMgAAAAAABQAAAAAABQAAAAAAbAAAAAAAMgAAAAAAMgAAAAAAfwAAAAAAfwAAAAAAUAAAAAAATwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAfwAAAAAAIwAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAIwAAAAAAfwAAAAAACwAAAAAACwAAAAAACwAAAAAAfwAAAAAAfgAAAAAAIQAAAAAAIQAAAAAAJgAAAAAAIQAAAAAAJQAAAAAAIwAAAAAAIwAAAAAAIwAAAAAAIwAAAAAAIwAAAAAAfwAAAAAACwAAAAAACwAAAAAACwAAAAAAfwAAAAAAfgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAIQAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAJQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAfwAAAAAATwAAAAAAegAAAAAATwAAAAAAUAAAAAAAfgAAAAAA version: 6 2,-1: ind: 2,-1 - tiles: fwAAAAAAUAAAAAAAJQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAfwAAAAAAegAAAAAATwAAAAAAegAAAAAAUAAAAAAAfgAAAAAAUAAAAAAAKAAAAAAAJwAAAAAAJwAAAAAAKAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAKAAAAAAAIgAAAAAAIgAAAAAAKAAAAAAAfwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAfwAAAAAAXgAAAAADXgAAAAACXgAAAAADXgAAAAABUAAAAAAAIAAAAAABUAAAAAAAKAAAAAAAIgAAAAAAIgAAAAAAKAAAAAAAewAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfwAAAAAATwAAAAAAXgAAAAADXgAAAAAATwAAAAAAbQAAAAAAIAAAAAABfwAAAAAAKAAAAAAAJwAAAAAAJwAAAAAAKAAAAAAAfwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAfwAAAAAATwAAAAACXgAAAAABXgAAAAADTwAAAAABfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAJQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAAATwAAAAADTwAAAAACXgAAAAABUAAAAAAAIAAAAAADJwAAAAAAJwAAAAAAIwAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAZAAAAAAAfwAAAAAAcQAAAAAAaQAAAAAAXgAAAAADTwAAAAADTwAAAAABXgAAAAACbQAAAAAAIAAAAAACVAAAAAAAVAAAAAAAKAAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAZAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAATwAAAAAAXgAAAAABXgAAAAACTwAAAAADfwAAAAAAfwAAAAAAVAAAAAAAVAAAAAAAKAAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAZAAAAAAAQwAAAAAAfwAAAAAAaQAAAAAATwAAAAACXgAAAAACXgAAAAAATwAAAAABUAAAAAAAIAAAAAAAJwAAAAAAJwAAAAAAIwAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAZAAAAAAAQwAAAAAAfwAAAAAAaQAAAAAAXgAAAAACXgAAAAABXgAAAAABXgAAAAAAbQAAAAAAIAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAATwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAUAAAAAAAawAAAAAAawAAAAAAawAAAAAAUAAAAAAAXgAAAAAATwAAAAADXgAAAAADTwAAAAADXgAAAAABfwAAAAAAewAAAAADIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAATwAAAAAAXgAAAAAAXgAAAAAAXgAAAAAATwAAAAAAXgAAAAAAXgAAAAACXgAAAAADXgAAAAADXgAAAAACbQAAAAAAewAAAAABJwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAUAAAAAAAawAAAAAAawAAAAAAawAAAAAAUAAAAAAAXgAAAAAATwAAAAACXgAAAAACTwAAAAAAXgAAAAACUAAAAAAAewAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAaQAAAAAAXgAAAAABXgAAAAABXgAAAAACXgAAAAABUAAAAAAAewAAAAABfwAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAfwAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAfwAAAAAAXgAAAAADTwAAAAABXgAAAAAATwAAAAAAXgAAAAABUAAAAAAAewAAAAAC + tiles: fwAAAAAAUAAAAAAAJQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAAfwAAAAAAegAAAAAATwAAAAAAegAAAAAAUAAAAAAAfgAAAAAAUAAAAAAAKAAAAAAAJwAAAAAAJwAAAAAAKAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAKAAAAAAAIgAAAAAAIgAAAAAAKAAAAAAAfwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAfwAAAAAAXgAAAAADXgAAAAACXgAAAAADXgAAAAABUAAAAAAABAAAAAAAUAAAAAAAKAAAAAAAIgAAAAAAIgAAAAAAKAAAAAAAewAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfwAAAAAATwAAAAAAXgAAAAADXgAAAAAATwAAAAAAbQAAAAAABAAAAAADfwAAAAAAKAAAAAAAJwAAAAAAJwAAAAAAKAAAAAAAfwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAfwAAAAAATwAAAAACXgAAAAABXgAAAAADTwAAAAABfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAJQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAAATwAAAAADTwAAAAACXgAAAAABUAAAAAAABAAAAAAAJwAAAAAAJwAAAAAAIwAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAZAAAAAAAfwAAAAAAcQAAAAAAaQAAAAAAXgAAAAADTwAAAAADTwAAAAABXgAAAAACbQAAAAAABAAAAAADVAAAAAAAVAAAAAAAKAAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAZAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAATwAAAAAAXgAAAAABXgAAAAACTwAAAAADfwAAAAAAfwAAAAAAVAAAAAAAVAAAAAAAKAAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAZAAAAAAAQwAAAAAAfwAAAAAAaQAAAAAATwAAAAACXgAAAAACXgAAAAAATwAAAAABUAAAAAAABAAAAAADJwAAAAAAJwAAAAAAIwAAAAAAQwAAAAAAfwAAAAAAQwAAAAAAZAAAAAAAQwAAAAAAfwAAAAAAaQAAAAAAXgAAAAACXgAAAAABXgAAAAABXgAAAAAAbQAAAAAABAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAATwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAUAAAAAAAawAAAAAAawAAAAAAawAAAAAAUAAAAAAAXgAAAAAATwAAAAADXgAAAAADTwAAAAADXgAAAAABfwAAAAAAewAAAAADIQAAAAAAIQAAAAAAIQAAAAAAIQAAAAAATwAAAAAAXgAAAAAAXgAAAAAAXgAAAAAATwAAAAAAXgAAAAAAXgAAAAACXgAAAAADXgAAAAADXgAAAAACbQAAAAAAewAAAAABJwAAAAAAJwAAAAAAJwAAAAAAJwAAAAAAUAAAAAAAawAAAAAAawAAAAAAawAAAAAAUAAAAAAAXgAAAAAATwAAAAACXgAAAAACTwAAAAAAXgAAAAACUAAAAAAAewAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAaQAAAAAAXgAAAAABXgAAAAABXgAAAAACXgAAAAABUAAAAAAAewAAAAABfwAAAAAAKQAAAAAAKQAAAAAAKQAAAAAAfwAAAAAAQAAAAAAAQAAAAAAAQAAAAAAAfwAAAAAAXgAAAAADTwAAAAABXgAAAAAATwAAAAAAXgAAAAABUAAAAAAAewAAAAAC version: 6 2,0: ind: 2,0 @@ -215,11 +216,11 @@ entities: version: 6 2,-3: ind: 2,-3 - tiles: fwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAZgAAAAAAawAAAAAAZgAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAIAAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAIAAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAIAAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUAAAAAAAIAAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAIAAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAbQAAAAAAIAAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAIAAAAAAAbQAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUAAAAAAAIAAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAIAAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAIAAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAXgAAAAAAIAAAAAAA + tiles: fwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAZgAAAAAAawAAAAAAZgAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAIQAAAAABEgAAAAAAIQAAAAADEgAAAAAAEgAAAAAAIQAAAAADfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAEgAAAAAAIQAAAAACIQAAAAAAIQAAAAACIQAAAAABIQAAAAADfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUAAAAAAAEgAAAAAAIQAAAAADIQAAAAABIQAAAAADIQAAAAACEgAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAbQAAAAAAIQAAAAACIQAAAAAAIQAAAAADIQAAAAADIQAAAAABEgAAAAAAbQAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUgAAAAAAUAAAAAAAEgAAAAAAIQAAAAADIQAAAAAAIQAAAAABIQAAAAADEgAAAAAAfwAAAAAAbAAAAAAAYwAAAAAAbAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAEgAAAAAAIQAAAAAAIQAAAAAAIQAAAAACIQAAAAABIQAAAAAD version: 6 -1,-4: ind: -1,-4 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAXgAAAAACXgAAAAABXgAAAAAAXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAACYwAAAAAAYwAAAAADYwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAewAAAAAAewAAAAADewAAAAAAewAAAAACLAAAAAAALAAAAAAALAAAAAAAXgAAAAACYwAAAAACYwAAAAACYwAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAUAAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAXgAAAAACXgAAAAABXgAAAAAAXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAXgAAAAACYwAAAAAAYwAAAAADYwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAUAAAAAAAewAAAAAAewAAAAADewAAAAAAewAAAAACLAAAAAAALAAAAAAALAAAAAAAXgAAAAACYwAAAAACYwAAAAACYwAAAAAA version: 6 0,-4: ind: 0,-4 @@ -227,11 +228,11 @@ entities: version: 6 3,-1: ind: 3,-1 - tiles: fgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAIAAAAAACfwAAAAAAfgAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAADfwAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAABfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAADfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAADfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAABfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAADewAAAAADfwAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAABewAAAAAATwAAAAADUAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAABewAAAAAATwAAAAAAUAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAACewAAAAAAewAAAAADUAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAABewAAAAAATwAAAAABUAAAAAAAfgAAAAAAAAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: fgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABAAAAAABfwAAAAAAfgAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAACfwAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAABfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAABfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAACfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAADewAAAAADfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAABewAAAAAATwAAAAADUAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAABewAAAAAATwAAAAAAUAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAACewAAAAAAewAAAAADUAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAABewAAAAAATwAAAAABUAAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 3,0: ind: 3,0 - tiles: ewAAAAADewAAAAADTwAAAAAAUAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAADXgAAAAABXgAAAAABfwAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: ewAAAAADewAAAAADTwAAAAAAUAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAAADXgAAAAABXgAAAAABfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 0,1: ind: 0,1 @@ -247,7 +248,7 @@ entities: version: 6 3,-2: ind: 3,-2 - tiles: fwAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAUAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAEgAAAAAAOQAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAUAAAAAAAbQAAAAAAIAAAAAAATwAAAAAAbQAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAUAAAAAAAbQAAAAAATwAAAAAAIAAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAUAAAAAAAbQAAAAAAIAAAAAAATwAAAAAAawAAAAAAawAAAAAAawAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAawAAAAAAawAAAAAAawAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAwAAAAAAAwAAAAAAAwAAAAAAAwAAAAAAAwAAAAAAfwAAAAAAIAAAAAAAIAAAAAAATwAAAAAAYwAAAAAAYwAAAAAAZgAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAJQAAAAAATwAAAAAAJQAAAAAAawAAAAAAawAAAAAAawAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAwAAAAAAAwAAAAAAAwAAAAAAAwAAAAAAAwAAAAAAfwAAAAAAIAAAAAAAIAAAAAAATwAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAJQAAAAAAIAAAAAAATwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfwAAAAAAJQAAAAAATwAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAJQAAAAAAIAAAAAAAEgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAJQAAAAAAOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAA + tiles: fwAAAAAAfQAAAAADewAAAAAAewAAAAADewAAAAABewAAAAAAewAAAAADfQAAAAABUAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAEgAAAAAAOQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAUAAAAAAAbQAAAAAAIAAAAAAATwAAAAAAbQAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAUAAAAAAAbQAAAAAATwAAAAAAIAAAAAAAfwAAAAAAbQAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAUAAAAAAAbQAAAAAAIAAAAAAATwAAAAAAawAAAAAAawAAAAAAawAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAawAAAAAAawAAAAAAawAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAwAAAAAAAwAAAAAAAwAAAAAAAwAAAAAAAwAAAAAAfwAAAAAAIAAAAAAAIAAAAAAATwAAAAAAYwAAAAAAYwAAAAAAZgAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAbQAAAAAAJQAAAAAATwAAAAAAJQAAAAAAawAAAAAAawAAAAAAawAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAwAAAAAAAwAAAAAAAwAAAAAAAwAAAAAAAwAAAAAAfwAAAAAAIAAAAAAAIAAAAAAATwAAAAAAMgAAAAAAMgAAAAAAMgAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAABwAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAbQAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAJQAAAAAAIAAAAAAATwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfwAAAAAAJQAAAAAATwAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAJQAAAAAAIAAAAAAAEgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAJQAAAAAAOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAfwAAAAAAfwAAAAAA version: 6 -1,1: ind: -1,1 @@ -263,7 +264,7 @@ entities: version: 6 3,-3: ind: 3,-3 - tiles: fgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAUAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAUAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAUAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAUAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAACwAAAAAAfwAAAAAAfgAAAAAAfwAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAUAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAbQAAAAAACwAAAAAAfwAAAAAAAAAAAAAAfwAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAUAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAIAAAAAAACwAAAAAAfwAAAAAAAAAAAAAAfwAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfwAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAUAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAIAAAAAAAIAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAUAAAAAAAAAAAAAAAfgAAAAAAbQAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAIAAAAAAAIAAAAAAAbQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAUAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAIAAAAAAAIAAAAAAAbQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAUAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAIAAAAAAAIAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAJgAAAAAAJgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAJgAAAAAAJgAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAUAAAAAAAJgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAJgAAAAAAUAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAUAAAAAAAJgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAJgAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAUAAAAAAAJgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAJgAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAbQAAAAAAJgAAAAAAJgAAAAAAfQAAAAAAfQAAAAAAfQAAAAAAJgAAAAAAJgAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAA + tiles: fgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAUAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAUAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAUAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAUAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAACwAAAAAAfwAAAAAAfgAAAAAAfwAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAUAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAbQAAAAAACwAAAAAAfwAAAAAAAAAAAAAAfwAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAUAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAIAAAAAAACwAAAAAAfwAAAAAAAAAAAAAAfwAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfwAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAUAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAIAAAAAAAIAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAUAAAAAAAAAAAAAAAfgAAAAAAbQAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAIAAAAAAAIAAAAAAAbQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAUAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAIAAAAAAAIAAAAAAAbQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAUAAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAIAAAAAAAIAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAUAAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfwAAAAAAbQAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfwAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfwAAAAAAfQAAAAACewAAAAADewAAAAAAewAAAAACewAAAAABewAAAAACfQAAAAADUAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAUAAAAAAAewAAAAACewAAAAACewAAAAACewAAAAADewAAAAACewAAAAAAewAAAAABUAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAUAAAAAAAewAAAAABewAAAAADewAAAAAAewAAAAACewAAAAABewAAAAACewAAAAAAUAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAUAAAAAAAewAAAAACewAAAAAAewAAAAADewAAAAAAewAAAAADewAAAAACewAAAAACUAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAbQAAAAAAewAAAAABewAAAAADewAAAAABewAAAAAAewAAAAAAewAAAAACewAAAAACUAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfgAAAAAA version: 6 1,1: ind: 1,1 @@ -279,7 +280,7 @@ entities: version: 6 3,-4: ind: 3,-4 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAUAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAUAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAUAAAAAAAfgAAAAAAfgAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAfwAAAAAAfwAAAAAAUAAAAAAAfwAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAUAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAfgAAAAAAAAAAAAAAUAAAAAAAfwAAAAAAVAAAAAAAfwAAAAAAUAAAAAAAfgAAAAAAfgAAAAAA version: 6 -3,-5: ind: -3,-5 @@ -287,7 +288,7 @@ entities: version: 6 -2,-5: ind: -2,-5 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAAAAfgAAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 -5,-2: ind: -5,-2 @@ -334,6 +335,17 @@ entities: 833: -41,-40 834: -41,-44 835: -41,-46 + - node: + color: '#FFFFFFFF' + id: Bot + decals: + 1339: 39,-36 + - node: + angle: 3.141592653589793 rad + color: '#FFFFFFFF' + id: Bot + decals: + 1358: -29,-32 - node: color: '#FFFFFFFF' id: BotRight @@ -364,6 +376,18 @@ entities: 508: -53,-33 509: -53,-34 514: -46,-19 + - node: + angle: 3.141592653589793 rad + color: '#FFFFFFFF' + id: Box + decals: + 1357: -40,7 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkBox + decals: + 1263: 42,-38 + 1264: 42,-32 - node: color: '#FFFFFFFF' id: BrickTileDarkCornerNe @@ -373,12 +397,17 @@ entities: 814: 30,-14 815: 34,-18 962: -8,4 + 1291: 47,-32 + 1297: 47,-37 + 1334: 40,-34 - node: color: '#FFFFFFFF' id: BrickTileDarkCornerNw decals: 665: 17,-18 706: 21,-17 + 1266: 43,-33 + 1330: 37,-34 - node: color: '#FFFFFFFF' id: BrickTileDarkCornerSe @@ -386,6 +415,7 @@ entities: 666: 18,-20 707: 26,-20 943: -8,2 + 1333: 40,-36 - node: color: '#FFFFFFFF' id: BrickTileDarkCornerSw @@ -395,6 +425,8 @@ entities: 708: 21,-20 813: 30,-18 944: -9,2 + 1265: 43,-37 + 1329: 37,-36 - node: color: '#FFFFFFFF' id: BrickTileDarkEndE @@ -410,6 +442,7 @@ entities: id: BrickTileDarkEndS decals: 770: 34,-19 + 1296: 47,-38 - node: color: '#FFFFFFFF' id: BrickTileDarkEndW @@ -428,17 +461,28 @@ entities: decals: 802: 25,-14 812: 30,-18 + 1284: 46,-37 + 1294: 44,-32 + 1295: 47,-33 - node: color: '#FFFFFFFF' id: BrickTileDarkInnerNw decals: 803: 25,-14 902: 19,-4 + 1281: 43,-35 + 1282: 44,-33 - node: color: '#E6E6E6FF' id: BrickTileDarkInnerSe decals: 883: 21,-11 + - node: + color: '#FFFFFFFF' + id: BrickTileDarkInnerSe + decals: + 1283: 46,-33 + 1286: 44,-37 - node: color: '#FFFFFFFF' id: BrickTileDarkInnerSw @@ -447,6 +491,10 @@ entities: 808: 34,-18 903: 19,-11 964: -9,4 + 1269: 44,-37 + 1280: 43,-35 + 1298: 47,-37 + 1347: -12,-9 - node: color: '#E6E6E6FF' id: BrickTileDarkLineE @@ -475,6 +523,11 @@ entities: 821: 21,-10 822: 21,-11 942: -8,3 + 1267: 44,-38 + 1287: 46,-36 + 1288: 46,-35 + 1289: 46,-34 + 1332: 40,-35 - node: color: '#E6E6E6FF' id: BrickTileDarkLineN @@ -500,6 +553,11 @@ entities: 948: -10,4 949: -11,4 963: -9,4 + 1277: 42,-35 + 1292: 46,-32 + 1293: 45,-32 + 1335: 39,-34 + 1336: 38,-34 - node: color: '#E6E6E6FF' id: BrickTileDarkLineS @@ -532,6 +590,13 @@ entities: 900: 19,-11 946: -10,4 947: -11,4 + 1274: 45,-37 + 1275: 46,-37 + 1276: 47,-33 + 1279: 42,-35 + 1337: 38,-36 + 1338: 39,-36 + 1346: -13,-9 - node: color: '#E6E6E6FF' id: BrickTileDarkLineW @@ -562,6 +627,12 @@ entities: 898: 19,-7 899: 19,-4 945: -9,3 + 1268: 44,-38 + 1270: 43,-36 + 1271: 43,-34 + 1272: 44,-32 + 1331: 37,-35 + 1345: -12,-10 - node: color: '#FF5C5CFF' id: BrickTileSteelCornerNe @@ -763,7 +834,6 @@ entities: 280: -45,-26 375: -37,-50 453: 5,16 - 635: 23,-4 636: 23,-3 637: 23,-2 638: 23,-1 @@ -890,28 +960,12 @@ entities: 420: 6,-34 421: 3,-34 574: 6,-29 - - node: - color: '#252637FF' - id: BrickTileWhiteLineE - decals: - 575: 40,-35 - 585: 40,-36 - 586: 40,-34 - node: color: '#34FFFFFF' id: BrickTileWhiteLineE decals: 521: 1,-42 522: 1,-43 - - node: - color: '#505050FF' - id: BrickTileWhiteLineE - decals: - 598: 46,-35 - 599: 46,-36 - 600: 46,-37 - 601: 46,-34 - 602: 46,-33 - node: color: '#FF000066' id: BrickTileWhiteLineE @@ -929,28 +983,12 @@ entities: 561: 6,-27 562: 6,-28 563: 6,-30 - - node: - color: '#252637FF' - id: BrickTileWhiteLineN - decals: - 577: 40,-34 - 578: 39,-34 - 579: 38,-34 - 580: 37,-34 - node: color: '#34FFFFFF' id: BrickTileWhiteLineN decals: 518: -1,-40 519: 0,-40 - - node: - color: '#505050FF' - id: BrickTileWhiteLineN - decals: - 603: 46,-33 - 604: 45,-33 - 605: 44,-33 - 606: 43,-33 - node: color: '#FF000066' id: BrickTileWhiteLineN @@ -975,28 +1013,12 @@ entities: decals: 478: 11,-38 479: 12,-38 - - node: - color: '#252637FF' - id: BrickTileWhiteLineS - decals: - 581: 40,-36 - 582: 39,-36 - 583: 38,-36 - 584: 37,-36 - node: color: '#34FFFFFF' id: BrickTileWhiteLineS decals: 526: -1,-44 527: 0,-44 - - node: - color: '#505050FF' - id: BrickTileWhiteLineS - decals: - 594: 43,-37 - 595: 44,-37 - 596: 45,-37 - 597: 46,-37 - node: color: '#7FDFFFFF' id: BrickTileWhiteLineS @@ -1027,13 +1049,6 @@ entities: decals: 480: 11,-38 481: 12,-38 - - node: - color: '#252637FF' - id: BrickTileWhiteLineW - decals: - 576: 37,-35 - 587: 37,-34 - 588: 37,-36 - node: color: '#34FFFFFF' id: BrickTileWhiteLineW @@ -1041,15 +1056,6 @@ entities: 515: -2,-42 516: -2,-41 525: -2,-43 - - node: - color: '#505050FF' - id: BrickTileWhiteLineW - decals: - 589: 43,-35 - 590: 43,-36 - 591: 43,-34 - 592: 43,-33 - 593: 43,-37 - node: color: '#FF000066' id: BrickTileWhiteLineW @@ -1151,6 +1157,24 @@ entities: 362: 1.6279085,-2.063757 542: 43,-22 1141: -30.513037,-20.209612 + - node: + color: '#FFFFFFFF' + id: Caution + decals: + 1352: -49,-9 + - node: + angle: 1.5707963267948966 rad + color: '#FFFFFFFF' + id: Caution + decals: + 1370: 72,-24 + - node: + angle: 3.141592653589793 rad + color: '#FFFFFFFF' + id: Caution + decals: + 1327: 39,-35 + 1355: 59,-48 - node: color: '#52B4E996' id: CheckerNESW @@ -1211,6 +1235,8 @@ entities: 536: -43,-14 836: -46,-13 984: -49,2 + 1354: -49,-7 + 1398: 69,-24 - node: cleanable: True color: '#FFFFFFFF' @@ -1562,6 +1588,7 @@ entities: 65: -25.831413,-20.112501 343: 8.925723,-2.1344383 1138: -31.075537,-20.131487 + 1348: -13,-10 - node: color: '#FFFFFFFF' id: Flowersy2 @@ -2076,11 +2103,24 @@ entities: id: SpaceStationSign7 decals: 449: 12,16 + - node: + angle: -1.5707963267948966 rad + color: '#FFFFFFFF' + id: StandClear + decals: + 1349: -40,9 - node: color: '#FFFFFFFF' id: StandClear decals: 471: -8.9951935,-32.015106 + 1363: 72,-25 + - node: + angle: 3.141592653589793 rad + color: '#FFFFFFFF' + id: StandClear + decals: + 1364: 72,-23 - node: color: '#37789B7F' id: ThreeQuarterTileOverlayGreyscale @@ -2163,17 +2203,23 @@ entities: decals: 986: -48,-1 1217: -57,-44 + 1379: 74,-23 + 1392: 73,-22 - node: color: '#FFFFFFFF' id: WarnCornerNW decals: 985: -52,-1 1220: -59,-44 + 1375: 69,-22 + 1376: 68,-23 - node: color: '#FFFFFFFF' id: WarnCornerSE decals: 1218: -57,-46 + 1378: 74,-25 + 1393: 73,-26 - node: color: '#FFFFFFFF' id: WarnCornerSW @@ -2181,6 +2227,8 @@ entities: 75: -48,-34 298: -37,4 1219: -59,-46 + 1381: 69,-26 + 1382: 68,-25 - node: color: '#FFFFFFFF' id: WarnCornerSmallGreyscaleSW @@ -2191,6 +2239,16 @@ entities: id: WarnCornerSmallNE decals: 1196: 28,15 + - node: + color: '#FFFFFFFF' + id: WarnCornerSmallNW + decals: + 1399: 69,-23 + - node: + color: '#FFFFFFFF' + id: WarnCornerSmallSW + decals: + 1400: 69,-25 - node: color: '#FFFFFFFF' id: WarnEndS @@ -2206,6 +2264,8 @@ entities: 987: -48,-2 1195: 28,16 1221: -57,-45 + 1369: 71,-24 + 1384: 74,-24 - node: angle: 1.5707963267948966 rad color: '#FFFFFFFF' @@ -2227,6 +2287,11 @@ entities: 369: -39,-48 512: -46,-18 1222: -58,-46 + 1328: 39,-35 + 1367: 72,-23 + 1385: 70,-26 + 1394: 71,-26 + 1395: 72,-26 - node: color: '#FFFFFFFF' id: WarnLineS @@ -2239,6 +2304,7 @@ entities: 510: -45,-19 988: -52,-2 1223: -59,-45 + 1383: 68,-24 - node: color: '#FFFFFFFF' id: WarnLineW @@ -2252,6 +2318,11 @@ entities: 991: -50,-1 1194: 29,15 1224: -58,-44 + 1353: -49,-9 + 1368: 72,-25 + 1387: 70,-22 + 1396: 71,-22 + 1397: 72,-22 - node: color: '#FFFFFFFF' id: WoodTrimThinCornerNe @@ -2261,8 +2332,8 @@ entities: 206: -18,-2 253: -53,12 872: 52,-39 - 910: 53,-33 - 911: 54,-34 + 1303: 54,-32 + 1304: 55,-33 - node: color: '#FFFFFFFF' id: WoodTrimThinCornerNw @@ -2272,26 +2343,25 @@ entities: 207: -21,-2 257: -54,12 873: 49,-39 - 908: 50,-34 - 909: 51,-33 956: -7,5 + 1302: 50,-32 - node: color: '#FFFFFFFF' id: WoodTrimThinCornerSe decals: 842: 27,-31 - 905: 53,-37 - 906: 54,-36 1191: 52,-46 + 1305: 55,-36 + 1306: 54,-37 - node: color: '#FFFFFFFF' id: WoodTrimThinCornerSw decals: 841: 29,-31 - 904: 51,-37 - 907: 50,-36 957: -7,2 1192: 49,-46 + 1307: 50,-37 + 1308: 49,-36 - node: color: '#FFFFFFFF' id: WoodTrimThinEndE @@ -2310,6 +2380,7 @@ entities: 54: -10,-28 254: -53,11 255: -55,12 + 1311: 54,-33 - node: color: '#FFFFFFFF' id: WoodTrimThinInnerNw @@ -2317,12 +2388,14 @@ entities: 49: -8,-28 50: -13,-28 865: -4,-50 + 1310: 50,-33 - node: color: '#FFFFFFFF' id: WoodTrimThinInnerSe decals: 51: -15,-25 52: -10,-25 + 1312: 54,-36 - node: color: '#FFFFFFFF' id: WoodTrimThinInnerSw @@ -2333,6 +2406,9 @@ entities: 856: -5,-45 861: -5,-46 863: -4,-48 + 1309: 50,-36 + 1324: 49,-33 + 1325: 52,-35 - node: color: '#FFFFFFFF' id: WoodTrimThinLineE @@ -2362,10 +2438,11 @@ entities: 869: 52,-42 870: 52,-41 871: 52,-40 - 913: 54,-35 1186: 52,-43 1187: 52,-44 1188: 52,-45 + 1313: 55,-35 + 1314: 55,-34 - node: color: '#FFFFFFFF' id: WoodTrimThinLineN @@ -2409,8 +2486,10 @@ entities: 209: -19,-2 878: 50,-39 879: 51,-39 - 912: 52,-33 - 915: 52,-33 + 1320: 51,-32 + 1321: 52,-32 + 1322: 53,-32 + 1323: 49,-33 - node: color: '#FFFFFFFF' id: WoodTrimThinLineS @@ -2440,9 +2519,11 @@ entities: 840: 30,-31 857: -6,-45 860: -5,-46 - 916: 52,-37 1189: 51,-46 1190: 50,-46 + 1315: 53,-37 + 1316: 52,-37 + 1317: 51,-37 - node: color: '#FFFFFFFF' id: WoodTrimThinLineW @@ -2468,12 +2549,13 @@ entities: 875: 49,-42 876: 49,-41 877: 49,-40 - 914: 50,-35 954: -7,4 955: -7,3 1182: 49,-43 1183: 49,-44 1184: 49,-45 + 1318: 49,-35 + 1319: 49,-34 - node: color: '#FFFFFFFF' id: b @@ -2908,7 +2990,8 @@ entities: 2: 35060 -13,3: 2: 59520 - 0: 51 + 0: 49 + 3: 2 -11,1: 0: 58623 -11,3: @@ -2920,7 +3003,8 @@ entities: -11,0: 0: 61156 -11,2: - 0: 3822 + 3: 2 + 0: 3820 -11,4: 0: 4 2: 11 @@ -3081,7 +3165,7 @@ entities: 0: 52224 -13,-12: 2: 3840 - 3: 6 + 4: 6 -12,-11: 0: 65535 -13,-11: @@ -3090,7 +3174,7 @@ entities: 0: 65535 -13,-10: 0: 47240 - 3: 48 + 4: 48 -13,-9: 0: 16379 -11,-12: @@ -3104,13 +3188,13 @@ entities: 2: 3 -10,-10: 0: 63232 - 6: 14 + 5: 14 -10,-12: 0: 14 - 3: 3584 + 4: 3584 -10,-11: - 4: 14 - 5: 3584 + 6: 14 + 7: 3584 -10,-13: 0: 61166 -9,-13: @@ -3209,10 +3293,10 @@ entities: -16,-8: 2: 4465 -15,-11: - 3: 65280 + 4: 65280 0: 14 -15,-10: - 3: 4095 + 4: 4095 -15,-9: 0: 65535 -15,-12: @@ -3221,9 +3305,9 @@ entities: 0: 65535 -14,-11: 0: 25805 - 3: 4352 + 4: 4352 -14,-10: - 3: 273 + 4: 273 0: 50244 -14,-9: 0: 65535 @@ -3418,11 +3502,13 @@ entities: 6,0: 0: 24687 7,-2: - 0: 64750 + 0: 64718 + 3: 32 7,-1: 0: 65535 7,-3: - 0: 61152 + 0: 28384 + 3: 32768 7,0: 0: 65327 8,-3: @@ -3883,6 +3969,21 @@ entities: - 0 - 0 - 0 + - volume: 2500 + temperature: 293.14975 + moles: + - 20.078888 + - 75.53487 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - volume: 2500 temperature: 293.15 moles: @@ -3902,9 +4003,9 @@ entities: temperature: 293.15 moles: - 0 + - 6666.982 - 0 - 0 - - 6666.982 - 0 - 0 - 0 @@ -3916,10 +4017,10 @@ entities: - volume: 2500 temperature: 293.15 moles: - - 6666.982 - 0 - 0 - 0 + - 6666.982 - 0 - 0 - 0 @@ -3931,7 +4032,6 @@ entities: - volume: 2500 temperature: 293.15 moles: - - 0 - 6666.982 - 0 - 0 @@ -3943,11 +4043,10 @@ entities: - 0 - 0 - 0 + - 0 chunkSize: 4 - type: OccluderTree - type: Shuttle - angularDamping: 0.05 - linearDamping: 0.05 - type: GridPathfinding - type: RadiationGridResistance - type: GasTileOverlay @@ -4013,6 +4112,7 @@ entities: - 8868 - 6275 - 6423 + - 15260 - uid: 14 components: - type: Transform @@ -4023,7 +4123,6 @@ entities: devices: - 8908 - 6294 - - 335 - 6253 - 6272 - 6292 @@ -4031,6 +4130,7 @@ entities: - 6416 - 9093 - 9084 + - 14816 - uid: 15 components: - type: Transform @@ -4085,6 +4185,7 @@ entities: - 6395 - 9003 - 8925 + - 14834 - uid: 18 components: - type: Transform @@ -4095,6 +4196,13 @@ entities: devices: - 8903 - 9041 + - 14998 + - 6394 + - 6395 + - 6430 + - 6431 + - 6386 + - 6387 - uid: 19 components: - type: Transform @@ -4117,6 +4225,7 @@ entities: - 6352 - 9085 - 8852 + - 15259 - uid: 20 components: - type: Transform @@ -4241,19 +4350,20 @@ entities: parent: 2 - type: DeviceList devices: - - 8960 - - 9101 - - 9100 - - 8959 - - 6262 - - 6273 - - 6354 - - 6370 - - 6372 - - 6324 - - 6378 - - 9006 + - 15256 - 8943 + - 9006 + - 6378 + - 6324 + - 6372 + - 6370 + - 6354 + - 6273 + - 6262 + - 8959 + - 9100 + - 9101 + - 8960 - uid: 29 components: - type: Transform @@ -4293,6 +4403,7 @@ entities: - 6451 - 6355 - 6373 + - 15258 - uid: 32 components: - type: Transform @@ -4342,7 +4453,7 @@ entities: - 8843 - 8835 - 8834 - - 8934 + - 15261 - uid: 35 components: - type: Transform @@ -4415,6 +4526,7 @@ entities: - 6420 - 6406 - 6416 + - 15254 - uid: 39 components: - type: Transform @@ -4433,6 +4545,7 @@ entities: - 8865 - 8907 - 9072 + - 14817 - uid: 40 components: - type: Transform @@ -4522,6 +4635,7 @@ entities: - 8881 - 8999 - 8998 + - 14724 - uid: 45 components: - type: Transform @@ -4540,6 +4654,7 @@ entities: - 9039 - 8883 - 6334 + - 14654 - uid: 46 components: - type: Transform @@ -4569,6 +4684,7 @@ entities: - 6328 - 6401 - 6348 + - 14999 - uid: 47 components: - type: Transform @@ -4589,6 +4705,7 @@ entities: - 9035 - 6367 - 8847 + - 14805 - uid: 48 components: - type: Transform @@ -4658,6 +4775,7 @@ entities: - 8945 - 9091 - 6423 + - 15262 - uid: 52 components: - type: Transform @@ -4745,13 +4863,15 @@ entities: parent: 2 - type: DeviceList devices: - - 9084 - - 6253 - - 6251 + - 15110 + - 15109 + - 524 + - 15000 + - 14806 - 6292 - - 9093 - - 6416 - 6272 + - 8948 + - 9093 - uid: 60 components: - type: Transform @@ -4759,11 +4879,10 @@ entities: parent: 2 - type: DeviceList devices: - - 8952 - - 9067 - 6297 - 6298 - 6440 + - 15265 - uid: 61 components: - type: Transform @@ -4780,8 +4899,6 @@ entities: - 6437 - 6438 - 6439 - - 8912 - - 9030 - uid: 62 components: - type: Transform @@ -4791,10 +4908,9 @@ entities: devices: - 8927 - 9066 - - 8952 - - 9067 - 6440 - 6439 + - 15266 - uid: 63 components: - type: Transform @@ -4841,6 +4957,7 @@ entities: - 8955 - 9097 - 6373 + - 15257 - uid: 66 components: - type: Transform @@ -4859,6 +4976,7 @@ entities: - 8958 - 6452 - 6451 + - 15255 - uid: 67 components: - type: Transform @@ -4882,6 +5000,41 @@ entities: - 9105 - 8961 - 9104 + - uid: 15111 + components: + - type: Transform + pos: -33.5,-2.5 + parent: 2 + - type: DeviceList + devices: + - 6317 + - 6318 + - 6319 + - 6320 + - 6321 + - 6322 + - 6323 + - 6287 + - 15253 + - 8921 + - 9063 + - 6444 + - 6445 + - uid: 15263 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 41.5,-36.5 + parent: 2 + - type: DeviceList + devices: + - 8172 + - 5285 + - 6438 + - 6439 + - 15264 + - 9102 + - 8836 - proto: AirCanister entities: - uid: 69 @@ -4899,7 +5052,7 @@ entities: - type: Transform pos: -1.5,-42.5 parent: 2 - - uid: 14806 + - uid: 314 components: - type: Transform pos: 62.5,-22.5 @@ -5155,6 +5308,13 @@ entities: - type: Transform pos: 47.5,-28.5 parent: 2 +- proto: AirlockCorpsmanGlassLocked + entities: + - uid: 335 + components: + - type: Transform + pos: 15.5,-0.5 + parent: 2 - proto: AirlockDetectiveLocked entities: - uid: 110 @@ -5313,6 +5473,13 @@ entities: - type: Transform pos: 49.5,-26.5 parent: 2 +- proto: AirlockExternalCommandLocked + entities: + - uid: 15108 + components: + - type: Transform + pos: 59.5,-48.5 + parent: 2 - proto: AirlockExternalGlass entities: - uid: 138 @@ -5610,6 +5777,18 @@ entities: rot: 3.141592653589793 rad pos: 6.5,20.5 parent: 2 + - uid: 15557 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,-66.5 + parent: 2 + - uid: 15558 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,-68.5 + parent: 2 - proto: AirlockExternalGlassShuttleShipyard entities: - uid: 172 @@ -5622,15 +5801,27 @@ entities: - type: Transform pos: 60.5,-50.5 parent: 2 -- proto: AirlockFreezerKitchenHydroLocked +- proto: AirlockFreezerHydroponicsLocked entities: - uid: 174 components: - - type: MetaData - name: walk-in freezer + - type: Transform + pos: -15.5,-5.5 + parent: 2 +- proto: AirlockFreezerKitchenHydroLocked + entities: + - uid: 205 + components: - type: Transform pos: -13.5,-2.5 parent: 2 +- proto: AirlockFreezerLocked + entities: + - uid: 211 + components: + - type: Transform + pos: -11.5,-5.5 + parent: 2 - proto: AirlockGlass entities: - uid: 175 @@ -5827,13 +6018,6 @@ entities: parent: 2 - proto: AirlockHydroGlassLocked entities: - - uid: 205 - components: - - type: MetaData - name: walk-in freezer - - type: Transform - pos: -15.5,-5.5 - parent: 2 - uid: 206 components: - type: MetaData @@ -5871,13 +6055,6 @@ entities: - type: Transform pos: -6.5,-7.5 parent: 2 - - uid: 211 - components: - - type: MetaData - name: walk-in freezer - - type: Transform - pos: -11.5,-5.5 - parent: 2 - uid: 212 components: - type: Transform @@ -5940,12 +6117,6 @@ entities: parent: 2 - proto: AirlockMaintClerkLocked entities: - - uid: 221 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 18.5,-40.5 - parent: 2 - uid: 222 components: - type: Transform @@ -6086,11 +6257,6 @@ entities: - type: Transform pos: -54.5,2.5 parent: 2 - - uid: 246 - components: - - type: Transform - pos: -52.5,-0.5 - parent: 2 - uid: 247 components: - type: Transform @@ -6200,6 +6366,11 @@ entities: parent: 2 - proto: AirlockMaintRnDLocked entities: + - uid: 246 + components: + - type: Transform + pos: -52.5,-0.5 + parent: 2 - uid: 266 components: - type: Transform @@ -6511,15 +6682,13 @@ entities: rot: -1.5707963267948966 rad pos: 44.5,-14.5 parent: 2 -- proto: AirlockSecurityGlassLocked - entities: - - uid: 314 + - uid: 326 components: - - type: MetaData - name: Corpsman's Office - type: Transform - pos: 15.5,-0.5 + pos: 15.5,-13.5 parent: 2 +- proto: AirlockSecurityGlassLocked + entities: - uid: 315 components: - type: MetaData @@ -6537,10 +6706,8 @@ entities: parent: 2 - uid: 317 components: - - type: MetaData - name: Extended Confinement EVA - type: Transform - pos: 38.5,-5.5 + pos: 20.5,-0.5 parent: 2 - uid: 318 components: @@ -6566,7 +6733,7 @@ entities: pos: 18.5,-7.5 parent: 2 - type: Door - secondsUntilStateChange: -140896.94 + secondsUntilStateChange: -167812.6 state: Opening - type: DeviceLinkSource lastSignals: @@ -6600,6 +6767,11 @@ entities: rot: -1.5707963267948966 rad pos: 40.5,-3.5 parent: 2 + - uid: 330 + components: + - type: Transform + pos: 38.5,-5.5 + parent: 2 - proto: AirlockSecurityLawyerGlassLocked entities: - uid: 325 @@ -6609,19 +6781,6 @@ entities: - type: Transform pos: 34.5,-20.5 parent: 2 - - uid: 326 - components: - - type: MetaData - name: Security Lobby - - type: Transform - pos: 15.5,-13.5 - parent: 2 - - type: DeviceLinkSink - invokeCounter: 2 - - type: DeviceLinkSource - linkedPorts: - 328: - - DoorStatus: Close - uid: 327 components: - type: MetaData @@ -6638,10 +6797,6 @@ entities: parent: 2 - type: DeviceLinkSink invokeCounter: 2 - - type: DeviceLinkSource - linkedPorts: - 326: - - DoorStatus: Close - proto: AirlockSecurityLocked entities: - uid: 329 @@ -6651,13 +6806,6 @@ entities: - type: Transform pos: 36.5,-16.5 parent: 2 - - uid: 330 - components: - - type: MetaData - name: Corpsman's Office - - type: Transform - pos: 20.5,-0.5 - parent: 2 - uid: 331 components: - type: MetaData @@ -6692,12 +6840,6 @@ entities: parent: 2 - proto: AirSensor entities: - - uid: 335 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -10.5,-35.5 - parent: 2 - uid: 336 components: - type: Transform @@ -6768,6 +6910,185 @@ entities: - type: DeviceNetwork deviceLists: - 67 + - uid: 14654 + components: + - type: Transform + pos: -4.5,-1.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 45 + - uid: 14724 + components: + - type: Transform + pos: -18.5,-0.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 44 + - uid: 14805 + components: + - type: Transform + pos: 0.5,-47.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 47 + - uid: 14806 + components: + - type: Transform + pos: -17.5,-41.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 59 + - uid: 14816 + components: + - type: Transform + pos: -9.5,-33.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 14 + - uid: 14817 + components: + - type: Transform + pos: -21.5,-23.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 39 + - uid: 14834 + components: + - type: Transform + pos: -38.5,-21.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 17 + - uid: 14998 + components: + - type: Transform + pos: -39.5,-8.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 18 + - uid: 14999 + components: + - type: Transform + pos: -11.5,-16.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 46 + - uid: 15253 + components: + - type: Transform + pos: -30.5,-7.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 15111 + - uid: 15254 + components: + - type: Transform + pos: -3.5,-31.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 38 + - uid: 15255 + components: + - type: Transform + pos: 20.5,-6.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 66 + - uid: 15256 + components: + - type: Transform + pos: 32.5,-18.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 28 + - uid: 15257 + components: + - type: Transform + pos: 19.5,-19.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 65 + - uid: 15258 + components: + - type: Transform + pos: 27.5,-7.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 31 + - uid: 15259 + components: + - type: Transform + pos: 22.5,-1.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 19 + - uid: 15260 + components: + - type: Transform + pos: 41.5,5.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 13 + - uid: 15261 + components: + - type: Transform + pos: 41.5,-6.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 34 + - uid: 15262 + components: + - type: Transform + pos: 41.5,-0.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 51 + - uid: 15264 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 44.5,-35.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 15263 + - uid: 15265 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-42.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 60 + - uid: 15266 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,-31.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 62 - proto: AltarConvertMaint entities: - uid: 344 @@ -7250,6 +7571,11 @@ entities: - type: Transform pos: 34.77097,-0.1909771 parent: 2 + - uid: 11368 + components: + - type: Transform + pos: 44.54211,-34.8575 + parent: 2 - proto: AsimovCircuitBoard entities: - uid: 14738 @@ -7832,12 +8158,12 @@ entities: - uid: 507 components: - type: Transform - pos: -43.380802,-5.7486744 + pos: -43.657806,-4.45889 parent: 2 - uid: 508 components: - type: Transform - pos: -43.615177,-5.6392994 + pos: -43.421696,-4.5514827 parent: 2 - uid: 509 components: @@ -7901,11 +8227,6 @@ entities: - type: Transform pos: 26.5,5.5 parent: 2 - - uid: 521 - components: - - type: Transform - pos: 18.5,1.5 - parent: 2 - uid: 522 components: - type: Transform @@ -7916,41 +8237,11 @@ entities: - type: Transform pos: 15.5,-34.5 parent: 2 - - uid: 524 - components: - - type: Transform - pos: 17.5,-9.5 - parent: 2 - - uid: 525 - components: - - type: Transform - pos: 17.5,-3.5 - parent: 2 - uid: 526 components: - type: Transform pos: 39.5,-11.5 parent: 2 - - uid: 527 - components: - - type: Transform - pos: 17.5,-6.5 - parent: 2 - - uid: 528 - components: - - type: Transform - pos: 48.5,-13.5 - parent: 2 - - uid: 529 - components: - - type: Transform - pos: 48.5,-10.5 - parent: 2 - - uid: 530 - components: - - type: Transform - pos: 48.5,-7.5 - parent: 2 - uid: 531 components: - type: Transform @@ -7993,6 +8284,8 @@ entities: parent: 2 - uid: 539 components: + - type: MetaData + name: captain's bed - type: Transform pos: 38.5,-27.5 parent: 2 @@ -8011,6 +8304,41 @@ entities: - type: Transform pos: -16.5,-15.5 parent: 2 + - uid: 5300 + components: + - type: Transform + pos: 17.5,-35.5 + parent: 2 + - uid: 10781 + components: + - type: Transform + pos: 17.5,-6.5 + parent: 2 + - uid: 12398 + components: + - type: Transform + pos: 17.5,-3.5 + parent: 2 + - uid: 15431 + components: + - type: Transform + pos: 17.5,-9.5 + parent: 2 + - uid: 15473 + components: + - type: Transform + pos: 48.5,-13.5 + parent: 2 + - uid: 15474 + components: + - type: Transform + pos: 48.5,-10.5 + parent: 2 + - uid: 15475 + components: + - type: Transform + pos: 48.5,-7.5 + parent: 2 - proto: BedsheetBlack entities: - uid: 543 @@ -8038,6 +8366,11 @@ entities: - type: Transform pos: 34.5,2.5 parent: 2 + - uid: 15079 + components: + - type: Transform + pos: 17.5,-35.5 + parent: 2 - proto: BedsheetCaptain entities: - uid: 547 @@ -8127,23 +8460,6 @@ entities: - type: Transform pos: 2.5,-20.5 parent: 2 -- proto: BedsheetOrange - entities: - - uid: 561 - components: - - type: Transform - pos: 17.5,-6.5 - parent: 2 - - uid: 562 - components: - - type: Transform - pos: 17.5,-9.5 - parent: 2 - - uid: 563 - components: - - type: Transform - pos: 17.5,-3.5 - parent: 2 - proto: BedsheetPurple entities: - uid: 564 @@ -8182,21 +8498,11 @@ entities: parent: 2 - proto: BedsheetSpawner entities: - - uid: 569 - components: - - type: Transform - pos: 48.5,-7.5 - parent: 2 - uid: 570 components: - type: Transform pos: -17.5,-32.5 parent: 2 - - uid: 571 - components: - - type: Transform - pos: 48.5,-10.5 - parent: 2 - uid: 572 components: - type: Transform @@ -8217,55 +8523,56 @@ entities: - type: Transform pos: 9.5,-8.5 parent: 2 - - uid: 576 + - uid: 577 components: - type: Transform - pos: 48.5,-13.5 + pos: 20.5,19.5 parent: 2 - - uid: 577 + - uid: 15432 components: - type: Transform - pos: 20.5,19.5 + pos: 17.5,-9.5 parent: 2 -- proto: BedsheetUSA - entities: - - uid: 578 + - uid: 15433 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 18.5,19.5 + pos: 17.5,-6.5 parent: 2 -- proto: BedsheetWiz - entities: - - uid: 579 + - uid: 15434 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 23.5,11.5 + pos: 17.5,-3.5 parent: 2 -- proto: BenchSofaCorpLeft - entities: - - uid: 580 + - uid: 15476 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 54.5,-35.5 + pos: 48.5,-13.5 + parent: 2 + - uid: 15477 + components: + - type: Transform + pos: 48.5,-10.5 parent: 2 -- proto: BenchSofaCorpMiddle + - uid: 15478 + components: + - type: Transform + pos: 48.5,-7.5 + parent: 2 +- proto: BedsheetUSA entities: - - uid: 581 + - uid: 578 components: - type: Transform rot: -1.5707963267948966 rad - pos: 54.5,-34.5 + pos: 18.5,19.5 parent: 2 -- proto: BenchSofaCorpRight +- proto: BedsheetWiz entities: - - uid: 582 + - uid: 579 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 54.5,-33.5 + rot: 1.5707963267948966 rad + pos: 23.5,11.5 parent: 2 - proto: BenchSofaLeft entities: @@ -8275,12 +8582,6 @@ entities: rot: -1.5707963267948966 rad pos: 27.5,-9.5 parent: 2 - - uid: 584 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 50.5,-33.5 - parent: 2 - uid: 585 components: - type: Transform @@ -8294,12 +8595,6 @@ entities: rot: -1.5707963267948966 rad pos: 27.5,-8.5 parent: 2 - - uid: 587 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 50.5,-34.5 - parent: 2 - proto: BenchSofaRight entities: - uid: 588 @@ -8308,12 +8603,6 @@ entities: rot: -1.5707963267948966 rad pos: 27.5,-7.5 parent: 2 - - uid: 589 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 50.5,-35.5 - parent: 2 - uid: 590 components: - type: Transform @@ -8436,6 +8725,38 @@ entities: - type: Transform pos: 39.5,-44.5 parent: 2 +- proto: BookAtmosAirAlarms + entities: + - uid: 15316 + components: + - type: Transform + parent: 15315 + - type: Physics + canCollide: False +- proto: BookAtmosDistro + entities: + - uid: 15317 + components: + - type: Transform + parent: 15315 + - type: Physics + canCollide: False +- proto: BookAtmosVentsMore + entities: + - uid: 15318 + components: + - type: Transform + parent: 15315 + - type: Physics + canCollide: False +- proto: BookAtmosWaste + entities: + - uid: 15319 + components: + - type: Transform + parent: 15315 + - type: Physics + canCollide: False - proto: BookBartendersManual entities: - uid: 610 @@ -8461,14 +8782,6 @@ entities: rot: -1.5707963267948966 rad pos: 72.57143,-19.435083 parent: 2 -- proto: BookFishops - entities: - - uid: 14836 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 62.550274,-18.277761 - parent: 2 - proto: BookHowToCookForFortySpaceman entities: - uid: 613 @@ -8483,16 +8796,6 @@ entities: parent: 2 - proto: BookRandom entities: - - uid: 615 - components: - - type: Transform - pos: 52.202553,-31.350613 - parent: 2 - - uid: 616 - components: - - type: Transform - pos: 52.765053,-31.381863 - parent: 2 - uid: 617 components: - type: Transform @@ -8505,6 +8808,12 @@ entities: - type: Transform pos: -35.702923,-7.408367 parent: 2 + - uid: 14836 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.550274,-18.277761 + parent: 2 - proto: BookScientistsGuidebook entities: - uid: 619 @@ -8594,6 +8903,20 @@ entities: - type: Transform pos: -35.499798,-7.298992 parent: 2 +- proto: BookSpaceLaw + entities: + - uid: 15018 + components: + - type: Transform + pos: 52.256832,-31.434801 + parent: 2 +- proto: BookWatched + entities: + - uid: 10281 + components: + - type: Transform + pos: 33.08821,18.584204 + parent: 2 - proto: BookWorld entities: - uid: 635 @@ -8748,7 +9071,7 @@ entities: - uid: 657 components: - type: Transform - pos: 13.448544,-30.298645 + pos: 14.199131,-30.463066 parent: 2 - uid: 658 components: @@ -8760,8 +9083,19 @@ entities: - type: Transform pos: 26.336384,-30.435444 parent: 2 + - uid: 10989 + components: + - type: Transform + pos: 44.95878,-33.482502 + parent: 2 - proto: BoxFolderClipboard entities: + - uid: 616 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.59873,-38.31128 + parent: 2 - uid: 660 components: - type: Transform @@ -8773,12 +9107,6 @@ entities: rot: -1.5707963267948966 rad pos: 41.553917,-15.84091 parent: 2 - - uid: 662 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 19.551626,-37.77035 - parent: 2 - proto: BoxFolderRed entities: - uid: 663 @@ -8815,7 +9143,7 @@ entities: - uid: 668 components: - type: Transform - pos: 13.990211,-30.298645 + pos: 14.567186,-30.254734 parent: 2 - proto: BoxInflatable entities: @@ -8879,6 +9207,11 @@ entities: - type: Transform pos: -1.7050788,-36.142494 parent: 2 + - uid: 15491 + components: + - type: Transform + pos: 37.39944,6.7046647 + parent: 2 - proto: BriefcaseBrown entities: - uid: 678 @@ -8996,6 +9329,12 @@ entities: rot: 3.141592653589793 rad pos: 71.5,-24.5 parent: 2 + - uid: 15252 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,-6.5 + parent: 2 - proto: ButtonFrameCautionSecurity entities: - uid: 696 @@ -9009,6 +9348,15 @@ entities: - type: Transform pos: -51.5,-2.5 parent: 2 + - uid: 15058 + components: + - type: MetaData + desc: '"ONLY USE IN EMERGENCY SITUATIONS"' + name: warning frame + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,-18.5 + parent: 2 - proto: ButtonFrameExit entities: - uid: 698 @@ -9043,8 +9391,24 @@ entities: rot: 1.5707963267948966 rad pos: -47.5,-6.5 parent: 2 + - uid: 11681 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,-16.5 + parent: 2 - proto: CableApcExtension entities: + - uid: 530 + components: + - type: Transform + pos: -40.5,7.5 + parent: 2 + - uid: 561 + components: + - type: Transform + pos: -41.5,9.5 + parent: 2 - uid: 703 components: - type: Transform @@ -15762,16 +16126,6 @@ entities: - type: Transform pos: -41.5,8.5 parent: 2 - - uid: 2046 - components: - - type: Transform - pos: -40.5,8.5 - parent: 2 - - uid: 2047 - components: - - type: Transform - pos: -39.5,8.5 - parent: 2 - uid: 2048 components: - type: Transform @@ -19607,6 +19961,161 @@ entities: - type: Transform pos: 69.5,-27.5 parent: 2 + - uid: 15392 + components: + - type: Transform + pos: -59.5,-36.5 + parent: 2 + - uid: 15393 + components: + - type: Transform + pos: -60.5,-36.5 + parent: 2 + - uid: 15394 + components: + - type: Transform + pos: -60.5,-37.5 + parent: 2 + - uid: 15395 + components: + - type: Transform + pos: -61.5,-37.5 + parent: 2 + - uid: 15396 + components: + - type: Transform + pos: -62.5,-37.5 + parent: 2 + - uid: 15397 + components: + - type: Transform + pos: -63.5,-37.5 + parent: 2 + - uid: 15398 + components: + - type: Transform + pos: -63.5,-38.5 + parent: 2 + - uid: 15399 + components: + - type: Transform + pos: -63.5,-39.5 + parent: 2 + - uid: 15400 + components: + - type: Transform + pos: -63.5,-40.5 + parent: 2 + - uid: 15401 + components: + - type: Transform + pos: -63.5,-41.5 + parent: 2 + - uid: 15402 + components: + - type: Transform + pos: -62.5,-41.5 + parent: 2 + - uid: 15403 + components: + - type: Transform + pos: -61.5,-41.5 + parent: 2 + - uid: 15404 + components: + - type: Transform + pos: -60.5,-41.5 + parent: 2 + - uid: 15405 + components: + - type: Transform + pos: -59.5,-41.5 + parent: 2 + - uid: 15406 + components: + - type: Transform + pos: -58.5,-41.5 + parent: 2 + - uid: 15409 + components: + - type: Transform + pos: -46.5,6.5 + parent: 2 + - uid: 15410 + components: + - type: Transform + pos: -46.5,7.5 + parent: 2 + - uid: 15411 + components: + - type: Transform + pos: -46.5,8.5 + parent: 2 + - uid: 15412 + components: + - type: Transform + pos: -46.5,9.5 + parent: 2 + - uid: 15413 + components: + - type: Transform + pos: -45.5,9.5 + parent: 2 + - uid: 15414 + components: + - type: Transform + pos: -47.5,9.5 + parent: 2 + - uid: 15415 + components: + - type: Transform + pos: -48.5,9.5 + parent: 2 + - uid: 15416 + components: + - type: Transform + pos: -51.5,8.5 + parent: 2 + - uid: 15417 + components: + - type: Transform + pos: -51.5,9.5 + parent: 2 + - uid: 15418 + components: + - type: Transform + pos: -51.5,10.5 + parent: 2 + - uid: 15419 + components: + - type: Transform + pos: -51.5,11.5 + parent: 2 + - uid: 15420 + components: + - type: Transform + pos: -51.5,12.5 + parent: 2 + - uid: 15421 + components: + - type: Transform + pos: -52.5,11.5 + parent: 2 + - uid: 15422 + components: + - type: Transform + pos: -42.5,9.5 + parent: 2 + - uid: 15423 + components: + - type: Transform + pos: -41.5,10.5 + parent: 2 + - uid: 15424 + components: + - type: Transform + pos: -39.5,7.5 + parent: 2 - proto: CableApcStack1 entities: - uid: 2760 @@ -22748,6 +23257,36 @@ entities: - type: Transform pos: 61.5,-29.5 parent: 2 + - uid: 15105 + components: + - type: Transform + pos: 43.5,-36.5 + parent: 2 + - uid: 15106 + components: + - type: Transform + pos: 42.5,-36.5 + parent: 2 + - uid: 15566 + components: + - type: Transform + pos: 62.5,-25.5 + parent: 2 + - uid: 15567 + components: + - type: Transform + pos: 63.5,-25.5 + parent: 2 + - uid: 15568 + components: + - type: Transform + pos: 64.5,-25.5 + parent: 2 + - uid: 15569 + components: + - type: Transform + pos: 65.5,-25.5 + parent: 2 - proto: CableHVStack entities: - uid: 3380 @@ -23647,7 +24186,7 @@ entities: - uid: 3557 components: - type: Transform - pos: 41.5,-4.5 + pos: 40.5,-5.5 parent: 2 - uid: 3558 components: @@ -26139,6 +26678,21 @@ entities: - type: Transform pos: 24.5,12.5 parent: 2 + - uid: 5870 + components: + - type: Transform + pos: 50.5,-19.5 + parent: 2 + - uid: 9902 + components: + - type: Transform + pos: 40.5,9.5 + parent: 2 + - uid: 11137 + components: + - type: Transform + pos: 51.5,-19.5 + parent: 2 - uid: 14722 components: - type: Transform @@ -26194,6 +26748,941 @@ entities: - type: Transform pos: 61.5,-29.5 parent: 2 + - uid: 15131 + components: + - type: Transform + pos: 54.5,1.5 + parent: 2 + - uid: 15138 + components: + - type: Transform + pos: 35.5,-15.5 + parent: 2 + - uid: 15139 + components: + - type: Transform + pos: 36.5,-15.5 + parent: 2 + - uid: 15140 + components: + - type: Transform + pos: 37.5,-15.5 + parent: 2 + - uid: 15141 + components: + - type: Transform + pos: 37.5,-14.5 + parent: 2 + - uid: 15142 + components: + - type: Transform + pos: 39.5,-14.5 + parent: 2 + - uid: 15143 + components: + - type: Transform + pos: 38.5,-14.5 + parent: 2 + - uid: 15144 + components: + - type: Transform + pos: 40.5,-14.5 + parent: 2 + - uid: 15145 + components: + - type: Transform + pos: 41.5,-14.5 + parent: 2 + - uid: 15146 + components: + - type: Transform + pos: 42.5,-14.5 + parent: 2 + - uid: 15147 + components: + - type: Transform + pos: 42.5,-15.5 + parent: 2 + - uid: 15148 + components: + - type: Transform + pos: 42.5,-16.5 + parent: 2 + - uid: 15149 + components: + - type: Transform + pos: 42.5,-17.5 + parent: 2 + - uid: 15150 + components: + - type: Transform + pos: 43.5,-17.5 + parent: 2 + - uid: 15151 + components: + - type: Transform + pos: 44.5,-17.5 + parent: 2 + - uid: 15152 + components: + - type: Transform + pos: 45.5,-17.5 + parent: 2 + - uid: 15153 + components: + - type: Transform + pos: 46.5,-17.5 + parent: 2 + - uid: 15154 + components: + - type: Transform + pos: 46.5,-18.5 + parent: 2 + - uid: 15155 + components: + - type: Transform + pos: 46.5,-19.5 + parent: 2 + - uid: 15156 + components: + - type: Transform + pos: 47.5,-19.5 + parent: 2 + - uid: 15157 + components: + - type: Transform + pos: 48.5,-19.5 + parent: 2 + - uid: 15158 + components: + - type: Transform + pos: 49.5,-19.5 + parent: 2 + - uid: 15159 + components: + - type: Transform + pos: 52.5,-19.5 + parent: 2 + - uid: 15160 + components: + - type: Transform + pos: 52.5,-18.5 + parent: 2 + - uid: 15161 + components: + - type: Transform + pos: 52.5,-17.5 + parent: 2 + - uid: 15162 + components: + - type: Transform + pos: 53.5,-17.5 + parent: 2 + - uid: 15163 + components: + - type: Transform + pos: 53.5,-16.5 + parent: 2 + - uid: 15164 + components: + - type: Transform + pos: 53.5,-15.5 + parent: 2 + - uid: 15165 + components: + - type: Transform + pos: 54.5,-15.5 + parent: 2 + - uid: 15166 + components: + - type: Transform + pos: 54.5,-14.5 + parent: 2 + - uid: 15167 + components: + - type: Transform + pos: 54.5,-13.5 + parent: 2 + - uid: 15168 + components: + - type: Transform + pos: 54.5,-12.5 + parent: 2 + - uid: 15169 + components: + - type: Transform + pos: 54.5,-11.5 + parent: 2 + - uid: 15170 + components: + - type: Transform + pos: 54.5,-10.5 + parent: 2 + - uid: 15171 + components: + - type: Transform + pos: 54.5,-9.5 + parent: 2 + - uid: 15172 + components: + - type: Transform + pos: 54.5,-8.5 + parent: 2 + - uid: 15173 + components: + - type: Transform + pos: 54.5,-7.5 + parent: 2 + - uid: 15174 + components: + - type: Transform + pos: 54.5,-5.5 + parent: 2 + - uid: 15175 + components: + - type: Transform + pos: 54.5,-6.5 + parent: 2 + - uid: 15176 + components: + - type: Transform + pos: 54.5,-4.5 + parent: 2 + - uid: 15177 + components: + - type: Transform + pos: 54.5,-3.5 + parent: 2 + - uid: 15178 + components: + - type: Transform + pos: 54.5,-2.5 + parent: 2 + - uid: 15179 + components: + - type: Transform + pos: 54.5,-1.5 + parent: 2 + - uid: 15180 + components: + - type: Transform + pos: 54.5,0.5 + parent: 2 + - uid: 15181 + components: + - type: Transform + pos: 54.5,-0.5 + parent: 2 + - uid: 15182 + components: + - type: Transform + pos: 54.5,2.5 + parent: 2 + - uid: 15183 + components: + - type: Transform + pos: 54.5,3.5 + parent: 2 + - uid: 15184 + components: + - type: Transform + pos: 54.5,4.5 + parent: 2 + - uid: 15185 + components: + - type: Transform + pos: 54.5,5.5 + parent: 2 + - uid: 15186 + components: + - type: Transform + pos: 54.5,5.5 + parent: 2 + - uid: 15187 + components: + - type: Transform + pos: 53.5,5.5 + parent: 2 + - uid: 15188 + components: + - type: Transform + pos: 53.5,6.5 + parent: 2 + - uid: 15189 + components: + - type: Transform + pos: 52.5,6.5 + parent: 2 + - uid: 15190 + components: + - type: Transform + pos: 52.5,7.5 + parent: 2 + - uid: 15191 + components: + - type: Transform + pos: 51.5,7.5 + parent: 2 + - uid: 15193 + components: + - type: Transform + pos: 51.5,8.5 + parent: 2 + - uid: 15194 + components: + - type: Transform + pos: 50.5,8.5 + parent: 2 + - uid: 15195 + components: + - type: Transform + pos: 49.5,8.5 + parent: 2 + - uid: 15196 + components: + - type: Transform + pos: 49.5,9.5 + parent: 2 + - uid: 15197 + components: + - type: Transform + pos: 48.5,9.5 + parent: 2 + - uid: 15198 + components: + - type: Transform + pos: 48.5,10.5 + parent: 2 + - uid: 15199 + components: + - type: Transform + pos: 48.5,11.5 + parent: 2 + - uid: 15200 + components: + - type: Transform + pos: 47.5,11.5 + parent: 2 + - uid: 15201 + components: + - type: Transform + pos: 47.5,12.5 + parent: 2 + - uid: 15202 + components: + - type: Transform + pos: 46.5,12.5 + parent: 2 + - uid: 15203 + components: + - type: Transform + pos: 45.5,12.5 + parent: 2 + - uid: 15204 + components: + - type: Transform + pos: 44.5,12.5 + parent: 2 + - uid: 15205 + components: + - type: Transform + pos: 43.5,12.5 + parent: 2 + - uid: 15206 + components: + - type: Transform + pos: 42.5,12.5 + parent: 2 + - uid: 15207 + components: + - type: Transform + pos: 41.5,12.5 + parent: 2 + - uid: 15208 + components: + - type: Transform + pos: 40.5,12.5 + parent: 2 + - uid: 15209 + components: + - type: Transform + pos: 40.5,11.5 + parent: 2 + - uid: 15210 + components: + - type: Transform + pos: 40.5,10.5 + parent: 2 + - uid: 15214 + components: + - type: Transform + pos: 39.5,10.5 + parent: 2 + - uid: 15215 + components: + - type: Transform + pos: 38.5,10.5 + parent: 2 + - uid: 15216 + components: + - type: Transform + pos: 37.5,10.5 + parent: 2 + - uid: 15217 + components: + - type: Transform + pos: 36.5,10.5 + parent: 2 + - uid: 15218 + components: + - type: Transform + pos: 35.5,10.5 + parent: 2 + - uid: 15219 + components: + - type: Transform + pos: 35.5,9.5 + parent: 2 + - uid: 15220 + components: + - type: Transform + pos: 35.5,8.5 + parent: 2 + - uid: 15221 + components: + - type: Transform + pos: 35.5,7.5 + parent: 2 + - uid: 15222 + components: + - type: Transform + pos: 35.5,6.5 + parent: 2 + - uid: 15223 + components: + - type: Transform + pos: 35.5,5.5 + parent: 2 + - uid: 15224 + components: + - type: Transform + pos: 35.5,4.5 + parent: 2 + - uid: 15225 + components: + - type: Transform + pos: 35.5,3.5 + parent: 2 + - uid: 15226 + components: + - type: Transform + pos: 36.5,3.5 + parent: 2 + - uid: 15227 + components: + - type: Transform + pos: 36.5,2.5 + parent: 2 + - uid: 15228 + components: + - type: Transform + pos: 36.5,1.5 + parent: 2 + - uid: 15229 + components: + - type: Transform + pos: 36.5,0.5 + parent: 2 + - uid: 15230 + components: + - type: Transform + pos: 36.5,-0.5 + parent: 2 + - uid: 15231 + components: + - type: Transform + pos: 36.5,-1.5 + parent: 2 + - uid: 15232 + components: + - type: Transform + pos: 36.5,-2.5 + parent: 2 + - uid: 15233 + components: + - type: Transform + pos: 40.5,-2.5 + parent: 2 + - uid: 15234 + components: + - type: Transform + pos: 40.5,-4.5 + parent: 2 + - uid: 15339 + components: + - type: Transform + pos: 40.5,8.5 + parent: 2 + - uid: 15340 + components: + - type: Transform + pos: 45.5,8.5 + parent: 2 + - uid: 15341 + components: + - type: Transform + pos: 45.5,9.5 + parent: 2 + - uid: 15342 + components: + - type: Transform + pos: 45.5,10.5 + parent: 2 + - uid: 15343 + components: + - type: Transform + pos: 45.5,11.5 + parent: 2 + - uid: 15344 + components: + - type: Transform + pos: 36.5,7.5 + parent: 2 + - uid: 15345 + components: + - type: Transform + pos: 37.5,7.5 + parent: 2 + - uid: 15346 + components: + - type: Transform + pos: 38.5,7.5 + parent: 2 + - uid: 15347 + components: + - type: Transform + pos: 39.5,7.5 + parent: 2 + - uid: 15348 + components: + - type: Transform + pos: 40.5,7.5 + parent: 2 + - uid: 15349 + components: + - type: Transform + pos: 41.5,7.5 + parent: 2 + - uid: 15350 + components: + - type: Transform + pos: 42.5,7.5 + parent: 2 + - uid: 15351 + components: + - type: Transform + pos: 43.5,7.5 + parent: 2 + - uid: 15352 + components: + - type: Transform + pos: 44.5,7.5 + parent: 2 + - uid: 15353 + components: + - type: Transform + pos: 45.5,7.5 + parent: 2 + - uid: 15354 + components: + - type: Transform + pos: 46.5,7.5 + parent: 2 + - uid: 15355 + components: + - type: Transform + pos: 46.5,6.5 + parent: 2 + - uid: 15356 + components: + - type: Transform + pos: 46.5,5.5 + parent: 2 + - uid: 15357 + components: + - type: Transform + pos: 46.5,4.5 + parent: 2 + - uid: 15358 + components: + - type: Transform + pos: 46.5,3.5 + parent: 2 + - uid: 15359 + components: + - type: Transform + pos: 46.5,2.5 + parent: 2 + - uid: 15360 + components: + - type: Transform + pos: 47.5,2.5 + parent: 2 + - uid: 15361 + components: + - type: Transform + pos: 48.5,2.5 + parent: 2 + - uid: 15362 + components: + - type: Transform + pos: 49.5,2.5 + parent: 2 + - uid: 15363 + components: + - type: Transform + pos: 50.5,2.5 + parent: 2 + - uid: 15364 + components: + - type: Transform + pos: 51.5,2.5 + parent: 2 + - uid: 15365 + components: + - type: Transform + pos: 51.5,1.5 + parent: 2 + - uid: 15366 + components: + - type: Transform + pos: 51.5,0.5 + parent: 2 + - uid: 15367 + components: + - type: Transform + pos: 51.5,-0.5 + parent: 2 + - uid: 15368 + components: + - type: Transform + pos: 51.5,-1.5 + parent: 2 + - uid: 15369 + components: + - type: Transform + pos: 51.5,-2.5 + parent: 2 + - uid: 15370 + components: + - type: Transform + pos: 51.5,-3.5 + parent: 2 + - uid: 15371 + components: + - type: Transform + pos: 51.5,-4.5 + parent: 2 + - uid: 15372 + components: + - type: Transform + pos: 51.5,-5.5 + parent: 2 + - uid: 15373 + components: + - type: Transform + pos: 50.5,-5.5 + parent: 2 + - uid: 15374 + components: + - type: Transform + pos: 49.5,-5.5 + parent: 2 + - uid: 15375 + components: + - type: Transform + pos: 49.5,-6.5 + parent: 2 + - uid: 15376 + components: + - type: Transform + pos: 49.5,-7.5 + parent: 2 + - uid: 15377 + components: + - type: Transform + pos: 49.5,-8.5 + parent: 2 + - uid: 15378 + components: + - type: Transform + pos: 49.5,-9.5 + parent: 2 + - uid: 15379 + components: + - type: Transform + pos: 49.5,-10.5 + parent: 2 + - uid: 15380 + components: + - type: Transform + pos: 49.5,-11.5 + parent: 2 + - uid: 15381 + components: + - type: Transform + pos: 49.5,-12.5 + parent: 2 + - uid: 15382 + components: + - type: Transform + pos: 49.5,-13.5 + parent: 2 + - uid: 15383 + components: + - type: Transform + pos: 49.5,-14.5 + parent: 2 + - uid: 15384 + components: + - type: Transform + pos: 48.5,-14.5 + parent: 2 + - uid: 15385 + components: + - type: Transform + pos: 47.5,-14.5 + parent: 2 + - uid: 15386 + components: + - type: Transform + pos: 46.5,-14.5 + parent: 2 + - uid: 15387 + components: + - type: Transform + pos: 46.5,-15.5 + parent: 2 + - uid: 15388 + components: + - type: Transform + pos: 46.5,-16.5 + parent: 2 + - uid: 15430 + components: + - type: Transform + pos: 36.5,-5.5 + parent: 2 + - uid: 15436 + components: + - type: Transform + pos: 20.5,-2.5 + parent: 2 + - uid: 15437 + components: + - type: Transform + pos: 19.5,-2.5 + parent: 2 + - uid: 15438 + components: + - type: Transform + pos: 18.5,-2.5 + parent: 2 + - uid: 15439 + components: + - type: Transform + pos: 18.5,-3.5 + parent: 2 + - uid: 15440 + components: + - type: Transform + pos: 17.5,-2.5 + parent: 2 + - uid: 15441 + components: + - type: Transform + pos: 16.5,-2.5 + parent: 2 + - uid: 15442 + components: + - type: Transform + pos: 15.5,-2.5 + parent: 2 + - uid: 15443 + components: + - type: Transform + pos: 15.5,-3.5 + parent: 2 + - uid: 15444 + components: + - type: Transform + pos: 15.5,-4.5 + parent: 2 + - uid: 15445 + components: + - type: Transform + pos: 15.5,-5.5 + parent: 2 + - uid: 15446 + components: + - type: Transform + pos: 15.5,-6.5 + parent: 2 + - uid: 15447 + components: + - type: Transform + pos: 15.5,-7.5 + parent: 2 + - uid: 15448 + components: + - type: Transform + pos: 15.5,-8.5 + parent: 2 + - uid: 15449 + components: + - type: Transform + pos: 15.5,-9.5 + parent: 2 + - uid: 15450 + components: + - type: Transform + pos: 15.5,-10.5 + parent: 2 + - uid: 15451 + components: + - type: Transform + pos: 15.5,-11.5 + parent: 2 + - uid: 15452 + components: + - type: Transform + pos: 16.5,-11.5 + parent: 2 + - uid: 15453 + components: + - type: Transform + pos: 17.5,-11.5 + parent: 2 + - uid: 15454 + components: + - type: Transform + pos: 18.5,-11.5 + parent: 2 + - uid: 15455 + components: + - type: Transform + pos: 18.5,-10.5 + parent: 2 + - uid: 15456 + components: + - type: Transform + pos: 18.5,-9.5 + parent: 2 + - uid: 15457 + components: + - type: Transform + pos: 18.5,-8.5 + parent: 2 + - uid: 15458 + components: + - type: Transform + pos: 18.5,-7.5 + parent: 2 + - uid: 15459 + components: + - type: Transform + pos: 18.5,-6.5 + parent: 2 + - uid: 15460 + components: + - type: Transform + pos: 18.5,-5.5 + parent: 2 + - uid: 15461 + components: + - type: Transform + pos: 18.5,-4.5 + parent: 2 + - uid: 15497 + components: + - type: Transform + pos: 48.5,-5.5 + parent: 2 + - uid: 15498 + components: + - type: Transform + pos: 47.5,-5.5 + parent: 2 + - uid: 15499 + components: + - type: Transform + pos: 46.5,-5.5 + parent: 2 + - uid: 15500 + components: + - type: Transform + pos: 46.5,-6.5 + parent: 2 + - uid: 15501 + components: + - type: Transform + pos: 46.5,-7.5 + parent: 2 + - uid: 15502 + components: + - type: Transform + pos: 46.5,-8.5 + parent: 2 + - uid: 15503 + components: + - type: Transform + pos: 46.5,-9.5 + parent: 2 + - uid: 15504 + components: + - type: Transform + pos: 46.5,-10.5 + parent: 2 + - uid: 15505 + components: + - type: Transform + pos: 46.5,-11.5 + parent: 2 + - uid: 15506 + components: + - type: Transform + pos: 46.5,-12.5 + parent: 2 + - uid: 15507 + components: + - type: Transform + pos: 46.5,-13.5 + parent: 2 + - uid: 15508 + components: + - type: Transform + pos: 42.5,-5.5 + parent: 2 + - uid: 15509 + components: + - type: Transform + pos: 43.5,-5.5 + parent: 2 + - uid: 15510 + components: + - type: Transform + pos: 44.5,-5.5 + parent: 2 + - uid: 15511 + components: + - type: Transform + pos: 45.5,-5.5 + parent: 2 + - uid: 15545 + components: + - type: Transform + pos: 50.5,-28.5 + parent: 2 - proto: CableMVStack1 entities: - uid: 4057 @@ -26290,6 +27779,18 @@ entities: rot: -1.5707963267948966 rad pos: 16.510334,18.521833 parent: 2 +- proto: CannabisSeeds + entities: + - uid: 10284 + components: + - type: Transform + pos: -47.501823,10.789616 + parent: 2 + - uid: 10360 + components: + - type: Transform + pos: -45.033073,10.648991 + parent: 2 - proto: Carpet entities: - uid: 4072 @@ -26579,59 +28080,11 @@ entities: - type: Transform pos: 28.5,-33.5 parent: 2 - - uid: 4123 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 19.5,-37.5 - parent: 2 - - uid: 4124 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 18.5,-37.5 - parent: 2 - - uid: 4125 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 17.5,-37.5 - parent: 2 - - uid: 4126 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 19.5,-38.5 - parent: 2 - - uid: 4127 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 18.5,-38.5 - parent: 2 - - uid: 4128 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 17.5,-38.5 - parent: 2 - - uid: 4129 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 19.5,-36.5 - parent: 2 - uid: 4130 components: - type: Transform rot: -1.5707963267948966 rad - pos: 18.5,-36.5 - parent: 2 - - uid: 4131 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 17.5,-36.5 + pos: 17.5,-37.5 parent: 2 - uid: 4132 components: @@ -26696,6 +28149,59 @@ entities: - type: Transform pos: 17.5,19.5 parent: 2 + - uid: 5243 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-37.5 + parent: 2 + - uid: 6507 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,-37.5 + parent: 2 + - uid: 15066 + components: + - type: Transform + pos: 42.5,-13.5 + parent: 2 + - uid: 15073 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-38.5 + parent: 2 + - uid: 15074 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,-38.5 + parent: 2 + - uid: 15075 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,-38.5 + parent: 2 + - uid: 15076 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 17.5,-39.5 + parent: 2 + - uid: 15077 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,-39.5 + parent: 2 + - uid: 15078 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-39.5 + parent: 2 - proto: CarpetBlue entities: - uid: 4143 @@ -26738,50 +28244,86 @@ entities: - type: Transform pos: 13.5,-26.5 parent: 2 - - uid: 4151 + - uid: 4156 components: - type: Transform - pos: 50.5,-31.5 + pos: 26.5,-29.5 parent: 2 - - uid: 4152 + - uid: 4157 components: - type: Transform - pos: 51.5,-31.5 + pos: 26.5,-30.5 parent: 2 - - uid: 4153 + - uid: 4158 components: - type: Transform - pos: 52.5,-31.5 + pos: 27.5,-30.5 parent: 2 - - uid: 4154 + - uid: 4159 components: - type: Transform - pos: 53.5,-31.5 + pos: 27.5,-29.5 parent: 2 - - uid: 4155 + - uid: 10301 components: - type: Transform - pos: 54.5,-31.5 + rot: 3.141592653589793 rad + pos: 45.5,-33.5 parent: 2 - - uid: 4156 + - uid: 10304 components: - type: Transform - pos: 26.5,-29.5 + rot: 3.141592653589793 rad + pos: 44.5,-33.5 parent: 2 - - uid: 4157 + - uid: 10305 components: - type: Transform - pos: 26.5,-30.5 + rot: 3.141592653589793 rad + pos: 44.5,-34.5 parent: 2 - - uid: 4158 + - uid: 10306 components: - type: Transform - pos: 27.5,-30.5 + rot: 3.141592653589793 rad + pos: 45.5,-34.5 parent: 2 - - uid: 4159 + - uid: 10307 components: - type: Transform - pos: 27.5,-29.5 + rot: 3.141592653589793 rad + pos: 45.5,-35.5 + parent: 2 + - uid: 10308 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,-35.5 + parent: 2 + - uid: 14456 + components: + - type: Transform + pos: 51.5,-31.5 + parent: 2 + - uid: 14457 + components: + - type: Transform + pos: 52.5,-31.5 + parent: 2 + - uid: 14833 + components: + - type: Transform + pos: 53.5,-31.5 + parent: 2 + - uid: 15001 + components: + - type: Transform + pos: 54.5,-31.5 + parent: 2 + - uid: 15002 + components: + - type: Transform + pos: 50.5,-31.5 parent: 2 - proto: CarpetChapel entities: @@ -26863,11 +28405,6 @@ entities: - type: Transform pos: -17.5,-18.5 parent: 2 - - uid: 4174 - components: - - type: Transform - pos: -18.5,-18.5 - parent: 2 - uid: 4175 components: - type: Transform @@ -26909,6 +28446,11 @@ entities: rot: 3.141592653589793 rad pos: -30.5,-4.5 parent: 2 + - uid: 5449 + components: + - type: Transform + pos: -18.5,-18.5 + parent: 2 - proto: CarpetOrange entities: - uid: 4182 @@ -26933,15 +28475,15 @@ entities: rot: -1.5707963267948966 rad pos: -25.5,-31.5 parent: 2 - - uid: 4186 + - uid: 15482 components: - type: Transform - pos: 48.5,-6.5 + pos: 48.5,-7.5 parent: 2 - - uid: 4187 + - uid: 15485 components: - type: Transform - pos: 48.5,-7.5 + pos: 48.5,-6.5 parent: 2 - proto: CarpetPurple entities: @@ -29649,11 +31191,6 @@ entities: - type: Transform pos: -51.5,-26.5 parent: 2 - - uid: 4708 - components: - - type: Transform - pos: -53.5,-26.5 - parent: 2 - uid: 4709 components: - type: Transform @@ -29899,14 +31436,55 @@ entities: - type: Transform pos: 32.5,9.5 parent: 2 -- proto: Chair - entities: - - uid: 4757 + - uid: 8221 + components: + - type: Transform + pos: -53.5,-26.5 + parent: 2 + - uid: 15546 components: - type: Transform rot: 3.141592653589793 rad - pos: 16.5,-10.5 + pos: 50.5,-28.5 + parent: 2 + - uid: 15556 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,-66.5 + parent: 2 + - uid: 15560 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-66.5 + parent: 2 + - uid: 15561 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-68.5 + parent: 2 + - uid: 15562 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,-68.5 + parent: 2 + - uid: 15563 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,-66.5 parent: 2 + - uid: 15564 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,-68.5 + parent: 2 +- proto: Chair + entities: - uid: 4758 components: - type: Transform @@ -29970,12 +31548,6 @@ entities: - type: Transform pos: 16.5,-12.5 parent: 2 - - uid: 4769 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 16.5,-7.5 - parent: 2 - uid: 4770 components: - type: Transform @@ -30083,12 +31655,6 @@ entities: - type: Transform pos: 11.5,-47.5 parent: 2 - - uid: 4789 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 16.5,-4.5 - parent: 2 - uid: 4790 components: - type: Transform @@ -30288,6 +31854,13 @@ entities: rot: 3.141592653589793 rad pos: 23.5,-14.5 parent: 2 +- proto: ChairBrass + entities: + - uid: 14442 + components: + - type: Transform + pos: 52.5,-32.5 + parent: 2 - proto: ChairFolding entities: - uid: 4827 @@ -30649,6 +32222,12 @@ entities: parent: 2 - proto: ChairOfficeDark entities: + - uid: 662 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 18.580013,-38.311268 + parent: 2 - uid: 4889 components: - type: Transform @@ -30811,29 +32390,40 @@ entities: rot: 1.5707963267948966 rad pos: 30.5,-6.5 parent: 2 - - uid: 4918 + - uid: 4920 components: - type: Transform rot: 1.5707963267948966 rad - pos: 46.5,-34.5 + pos: 34.655407,1.1178577 parent: 2 - - uid: 4919 + - uid: 4921 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 18.536001,-37.504726 + rot: 3.141592653589793 rad + pos: 33.510635,17.784647 parent: 2 - - uid: 4920 + - uid: 6885 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 34.655407,1.1178577 + rot: 3.141592653589793 rad + pos: 16.48411,-7.391966 parent: 2 - - uid: 4921 + - uid: 9904 components: - type: Transform rot: 3.141592653589793 rad - pos: 33.510635,17.784647 + pos: 16.499735,-10.266966 + parent: 2 + - uid: 11114 + components: + - type: Transform + pos: 45.49003,-34.399166 + parent: 2 + - uid: 11528 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 16.437235,-4.376341 parent: 2 - uid: 14703 components: @@ -30888,18 +32478,6 @@ entities: - type: Transform pos: 1.5,-42.5 parent: 2 - - uid: 4930 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 43.5,-36.5 - parent: 2 - - uid: 4931 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 45.42106,-35.277954 - parent: 2 - proto: ChairRitual entities: - uid: 4932 @@ -31172,12 +32750,6 @@ entities: rot: 3.141592653589793 rad pos: -27.581554,-5.2400603 parent: 2 - - uid: 4977 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 47.5,-9.5 - parent: 2 - uid: 4978 components: - type: Transform @@ -31464,6 +33036,11 @@ entities: - type: Transform pos: -51.367073,12.549892 parent: 2 + - uid: 11666 + components: + - type: Transform + pos: 44.61503,-34.784584 + parent: 2 - proto: CigCartonBlack entities: - uid: 5028 @@ -31807,6 +33384,24 @@ entities: - type: Transform pos: -42.5,8.5 parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 - uid: 5090 components: - type: Transform @@ -32257,6 +33852,13 @@ entities: - type: Transform pos: -28.254768,-6.494113 parent: 2 +- proto: ClothingHeadHatHardhatBlue + entities: + - uid: 12076 + components: + - type: Transform + pos: 42.38491,-37.21423 + parent: 2 - proto: ClothingHeadHatJesterAlt entities: - uid: 5158 @@ -32270,7 +33872,7 @@ entities: - uid: 5159 components: - type: Transform - pos: -9.693979,-27.423695 + pos: -9.045805,-27.472795 parent: 2 - proto: ClothingHeadHatParamedicsoftFlipped entities: @@ -32317,7 +33919,7 @@ entities: - uid: 5166 components: - type: Transform - pos: -9.611714,-26.883451 + pos: -9.496511,-26.771038 parent: 2 - uid: 5167 components: @@ -32360,6 +33962,18 @@ entities: - type: Transform pos: 35.27891,-9.2339115 parent: 2 +- proto: ClothingHeadsetGrey + entities: + - uid: 15552 + components: + - type: Transform + pos: -37.616165,-51.427876 + parent: 2 + - uid: 15553 + components: + - type: Transform + pos: -37.28283,-51.56329 + parent: 2 - proto: ClothingKimonoBlue entities: - uid: 5174 @@ -32453,7 +34067,8 @@ entities: - uid: 5188 components: - type: Transform - pos: -17.810858,-18.777485 + rot: 6.283185307179586 rad + pos: -18.432543,-16.565762 parent: 2 - proto: ClothingNeckCargomedal entities: @@ -32615,7 +34230,7 @@ entities: - uid: 5211 components: - type: Transform - pos: 16.979752,12.782106 + pos: 18.65963,4.337933 parent: 2 - proto: ClothingShoesSlippers entities: @@ -32847,6 +34462,12 @@ entities: rot: 3.141592653589793 rad pos: 34.5,15.5 parent: 2 + - uid: 15099 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-5.5 + parent: 2 - proto: Cobweb2 entities: - uid: 5235 @@ -32897,12 +34518,6 @@ entities: rot: -1.5707963267948966 rad pos: 19.5,-29.5 parent: 2 - - uid: 5243 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 52.5,-36.5 - parent: 2 - uid: 5244 components: - type: Transform @@ -32932,11 +34547,6 @@ entities: - type: Transform pos: 38.5,-30.5 parent: 2 - - uid: 5249 - components: - - type: Transform - pos: 52.5,-32.5 - parent: 2 - uid: 5250 components: - type: Transform @@ -32955,19 +34565,61 @@ entities: rot: -1.5707963267948966 rad pos: -33.5,-5.5 parent: 2 -- proto: ComputerAlert - entities: - - uid: 5253 + - uid: 12606 components: - type: Transform rot: 3.141592653589793 rad - pos: 46.5,-37.5 + pos: 52.5,-36.5 + parent: 2 + - uid: 12673 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-33.5 + parent: 2 + - uid: 12732 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-34.5 + parent: 2 + - uid: 12816 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 50.5,-35.5 + parent: 2 + - uid: 14167 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,-33.5 + parent: 2 + - uid: 14255 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,-34.5 + parent: 2 + - uid: 14285 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,-35.5 parent: 2 +- proto: ComputerAlert + entities: - uid: 5254 components: - type: Transform pos: -45.5,-29.5 parent: 2 + - uid: 10049 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 42.5,-35.5 + parent: 2 - proto: ComputerAnalysisConsole entities: - uid: 5255 @@ -33009,11 +34661,11 @@ entities: parent: 2 - proto: ComputerComms entities: - - uid: 5260 + - uid: 10201 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 42.5,-33.5 + rot: -1.5707963267948966 rad + pos: 47.5,-34.5 parent: 2 - proto: ComputerCrewMonitoring entities: @@ -33029,7 +34681,7 @@ entities: rot: 3.141592653589793 rad pos: 10.5,-34.5 parent: 2 - - uid: 5263 + - uid: 10300 components: - type: Transform rot: -1.5707963267948966 rad @@ -33054,7 +34706,7 @@ entities: rot: -1.5707963267948966 rad pos: 35.5,0.5 parent: 2 - - uid: 5267 + - uid: 10270 components: - type: Transform pos: 43.5,-31.5 @@ -33100,16 +34752,16 @@ entities: rot: 3.141592653589793 rad pos: 39.5,-31.5 parent: 2 - - uid: 5275 + - uid: 5276 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 47.5,-35.5 + pos: 30.5,-36.5 parent: 2 - - uid: 5276 + - uid: 10030 components: - type: Transform - pos: 30.5,-36.5 + rot: 3.141592653589793 rad + pos: 46.5,-37.5 parent: 2 - proto: ComputerMassMedia entities: @@ -33118,6 +34770,12 @@ entities: - type: Transform pos: -35.5,-17.5 parent: 2 + - uid: 10272 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-37.5 + parent: 2 - proto: ComputerMedicalRecords entities: - uid: 5278 @@ -33132,12 +34790,6 @@ entities: rot: 3.141592653589793 rad pos: 11.5,-34.5 parent: 2 - - uid: 5280 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 47.5,-34.5 - parent: 2 - proto: ComputerPowerMonitoring entities: - uid: 5281 @@ -33163,11 +34815,11 @@ entities: rot: -1.5707963267948966 rad pos: -28.5,-31.5 parent: 2 - - uid: 5285 + - uid: 10273 components: - type: Transform rot: 1.5707963267948966 rad - pos: 42.5,-35.5 + pos: 42.5,-36.5 parent: 2 - uid: 14745 components: @@ -33177,23 +34829,23 @@ entities: parent: 2 - proto: ComputerRadar entities: - - uid: 5286 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -30.5,-56.5 - parent: 2 - - uid: 5287 + - uid: 571 components: - type: Transform rot: 3.141592653589793 rad - pos: 43.5,-37.5 + pos: -31.5,-70.5 parent: 2 - uid: 5288 components: - type: Transform pos: -16.5,-40.5 parent: 2 + - uid: 10271 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,-35.5 + parent: 2 - proto: ComputerResearchAndDevelopment entities: - uid: 5289 @@ -33201,12 +34853,6 @@ entities: - type: Transform pos: -41.5,-4.5 parent: 2 - - uid: 5290 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 45.5,-37.5 - parent: 2 - proto: ComputerShipyard entities: - uid: 5291 @@ -33236,6 +34882,12 @@ entities: rot: -1.5707963267948966 rad pos: -20.5,2.5 parent: 2 + - uid: 10275 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 43.5,-37.5 + parent: 2 - proto: ComputerStationRecords entities: - uid: 5295 @@ -33255,11 +34907,11 @@ entities: - type: Transform pos: 30.5,5.5 parent: 2 - - uid: 5298 + - uid: 10274 components: - type: Transform rot: 1.5707963267948966 rad - pos: 42.5,-32.5 + pos: 42.5,-33.5 parent: 2 - proto: ComputerSurveillanceCameraMonitor entities: @@ -33269,12 +34921,13 @@ entities: rot: 1.5707963267948966 rad pos: 16.5,-19.5 parent: 2 - - uid: 5300 + - uid: 10195 components: - type: Transform rot: 1.5707963267948966 rad - pos: 42.5,-36.5 + pos: 42.5,-32.5 parent: 2 + - type: DeviceNetwork - uid: 14686 components: - type: Transform @@ -33305,22 +34958,17 @@ entities: - type: Transform pos: 0.5,-3.5 parent: 2 - - uid: 5305 + - uid: 5307 components: - type: Transform - pos: 54.5,-31.5 + rot: 3.141592653589793 rad + pos: 31.5,18.5 parent: 2 - - uid: 5306 + - uid: 15082 components: - type: Transform rot: -1.5707963267948966 rad - pos: 19.5,-39.5 - parent: 2 - - uid: 5307 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 31.5,18.5 + pos: 17.5,-39.5 parent: 2 - proto: ConveyorBelt entities: @@ -33384,20 +35032,10 @@ entities: pos: -38.5,7.5 parent: 2 - uid: 5318 - components: - - type: Transform - pos: -38.5,8.5 - parent: 2 - - uid: 5319 components: - type: Transform pos: -38.5,9.5 parent: 2 - - uid: 5320 - components: - - type: Transform - pos: -38.5,10.5 - parent: 2 - uid: 5321 components: - type: Transform @@ -33530,6 +35168,34 @@ entities: rot: 3.141592653589793 rad pos: -30.5,-53.5 parent: 2 + - uid: 5811 + components: + - type: Transform + pos: -38.5,8.5 + parent: 2 + - uid: 10505 + components: + - type: Transform + pos: -38.5,10.5 + parent: 2 + - uid: 15326 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -30.5,-43.5 + parent: 2 + - uid: 15327 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -30.5,-42.5 + parent: 2 + - uid: 15328 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -29.5,-42.5 + parent: 2 - proto: CorporateCircuitBoard entities: - uid: 14739 @@ -33762,13 +35428,6 @@ entities: - type: Transform pos: -7.5,-34.5 parent: 2 -- proto: CrateFreezer - entities: - - uid: 5358 - components: - - type: Transform - pos: 51.5,-45.5 - parent: 2 - proto: CrateGenericSteel entities: - uid: 5359 @@ -33858,6 +35517,16 @@ entities: - 0 - 0 - 0 +- proto: CrateNPCHamlet + entities: + - uid: 15044 + components: + - type: MetaData + desc: Only the best for Hamlet. + name: expensive hamster cage + - type: Transform + pos: 54.5,-31.5 + parent: 2 - proto: CrateNPCHamster entities: - uid: 5368 @@ -33872,6 +35541,47 @@ entities: - type: Transform pos: 16.5,19.5 parent: 2 + - uid: 15426 + components: + - type: Transform + pos: -50.5,12.5 + parent: 2 + - type: EntityStorage + air: + volume: 200 + immutable: False + temperature: 293.14673 + moles: + - 1.7459903 + - 6.568249 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - type: ContainerContainer + containers: + entity_storage: !type:Container + showEnts: False + occludes: True + ents: + - 11935 + - 11934 + - 11936 + - 11933 + - 15428 + - 15427 + - 15429 + - 10178 + paper_label: !type:ContainerSlot + showEnts: False + occludes: True + ent: null - proto: CrateScience entities: - uid: 5370 @@ -34103,11 +35813,28 @@ entities: parent: 2 - proto: CurtainsBlackOpen entities: + - uid: 5298 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-37.5 + parent: 2 - uid: 5398 components: - type: Transform pos: -32.5,-13.5 parent: 2 + - uid: 6510 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 20.5,-38.5 + parent: 2 + - uid: 15080 + components: + - type: Transform + pos: 17.5,-35.5 + parent: 2 - proto: CurtainsBlueOpen entities: - uid: 5399 @@ -34126,6 +35853,16 @@ entities: - type: Transform pos: -16.5,-15.5 parent: 2 + - uid: 15514 + components: + - type: Transform + pos: 13.5,-25.5 + parent: 2 + - uid: 15515 + components: + - type: Transform + pos: 14.5,-25.5 + parent: 2 - proto: CurtainsGreenOpen entities: - uid: 5402 @@ -34164,6 +35901,12 @@ entities: parent: 2 - proto: CurtainsPurpleOpen entities: + - uid: 5305 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -31.5,4.5 + parent: 2 - uid: 5407 components: - type: Transform @@ -34175,11 +35918,32 @@ entities: rot: -1.5707963267948966 rad pos: 31.5,-36.5 parent: 2 + - type: Door + secondsUntilStateChange: -2004.0092 + state: Closing - uid: 5409 components: - type: Transform pos: -49.5,-11.5 parent: 2 + - uid: 5898 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -32.5,4.5 + parent: 2 + - uid: 15071 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -30.5,4.5 + parent: 2 + - uid: 15072 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,4.5 + parent: 2 - proto: CyborgEndoskeleton entities: - uid: 5410 @@ -34199,6 +35963,13 @@ entities: - type: Transform pos: 17.480783,3.5951743 parent: 2 +- proto: DefaultStationBeaconAICore + entities: + - uid: 15337 + components: + - type: Transform + pos: 72.5,-23.5 + parent: 2 - proto: DefaultStationBeaconAnomalyGenerator entities: - uid: 5413 @@ -34271,10 +36042,17 @@ entities: parent: 2 - proto: DefaultStationBeaconCargoReception entities: - - uid: 5423 + - uid: 15336 components: - type: Transform - pos: -10.5,-31.5 + pos: -13.5,-26.5 + parent: 2 +- proto: DefaultStationBeaconChapel + entities: + - uid: 15425 + components: + - type: Transform + pos: -27.5,-17.5 parent: 2 - proto: DefaultStationBeaconChemistry entities: @@ -34339,6 +36117,13 @@ entities: - type: Transform pos: -41.5,8.5 parent: 2 +- proto: DefaultStationBeaconDorms + entities: + - uid: 15334 + components: + - type: Transform + pos: 19.5,15.5 + parent: 2 - proto: DefaultStationBeaconEngineering entities: - uid: 5433 @@ -34451,10 +36236,10 @@ entities: parent: 2 - proto: DefaultStationBeaconPermaBrig entities: - - uid: 5449 + - uid: 5458 components: - type: Transform - pos: 45.5,1.5 + pos: 43.5,-3.5 parent: 2 - proto: DefaultStationBeaconProsecutor entities: @@ -34507,6 +36292,13 @@ entities: - type: Transform pos: 32.5,-44.5 parent: 2 +- proto: DefaultStationBeaconSupply + entities: + - uid: 576 + components: + - type: Transform + pos: -10.5,-34.5 + parent: 2 - proto: DefaultStationBeaconSurgery entities: - uid: 5457 @@ -34516,10 +36308,10 @@ entities: parent: 2 - proto: DefaultStationBeaconTEG entities: - - uid: 5458 + - uid: 15320 components: - type: Transform - pos: -53.5,-26.5 + pos: -55.5,-29.5 parent: 2 - proto: DefaultStationBeaconTelecoms entities: @@ -34616,6 +36408,13 @@ entities: - type: Transform pos: -1.7226835,-30.526058 parent: 2 +- proto: Dinkystar + entities: + - uid: 11548 + components: + - type: Transform + pos: 29.51613,4.467462 + parent: 2 - proto: DiseaseDiagnoser entities: - uid: 5475 @@ -34625,6 +36424,17 @@ entities: parent: 2 - proto: DisposalBend entities: + - uid: 4154 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -39.5,9.5 + parent: 2 + - uid: 5319 + components: + - type: Transform + pos: -38.5,10.5 + parent: 2 - uid: 5476 components: - type: Transform @@ -34741,6 +36551,12 @@ entities: rot: -1.5707963267948966 rad pos: -7.5,4.5 parent: 2 + - uid: 11090 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,10.5 + parent: 2 - proto: DisposalJunction entities: - uid: 5497 @@ -36327,18 +38143,6 @@ entities: rot: 3.141592653589793 rad pos: 45.5,-28.5 parent: 2 - - uid: 5773 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 45.5,-29.5 - parent: 2 - - uid: 5774 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 45.5,-30.5 - parent: 2 - uid: 5775 components: - type: Transform @@ -36548,12 +38352,6 @@ entities: rot: 1.5707963267948966 rad pos: -40.5,9.5 parent: 2 - - uid: 5811 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -39.5,9.5 - parent: 2 - uid: 5812 components: - type: Transform @@ -36784,6 +38582,12 @@ entities: parent: 2 - proto: DisposalTrunk entities: + - uid: 4151 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-29.5 + parent: 2 - uid: 5850 components: - type: Transform @@ -36871,12 +38675,6 @@ entities: rot: 1.5707963267948966 rad pos: 10.5,-12.5 parent: 2 - - uid: 5865 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 45.5,-31.5 - parent: 2 - uid: 5866 components: - type: Transform @@ -36900,12 +38698,6 @@ entities: - type: Transform pos: -48.5,-24.5 parent: 2 - - uid: 5870 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -38.5,9.5 - parent: 2 - uid: 5871 components: - type: Transform @@ -36952,8 +38744,19 @@ entities: - type: Transform pos: -7.5,5.5 parent: 2 + - uid: 11087 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -38.5,9.5 + parent: 2 - proto: DisposalUnit entities: + - uid: 4152 + components: + - type: Transform + pos: 45.5,-29.5 + parent: 2 - uid: 5879 components: - type: Transform @@ -37049,11 +38852,6 @@ entities: - type: Transform pos: 23.5,-7.5 parent: 2 - - uid: 5898 - components: - - type: Transform - pos: 45.5,-31.5 - parent: 2 - uid: 5899 components: - type: Transform @@ -37111,36 +38909,56 @@ entities: entities: - uid: 5908 components: + - type: MetaData + desc: A comfy-looking pet bed. It's covered in large bite marks... + name: carp bed - type: Transform pos: 29.5,-38.5 parent: 2 - uid: 5909 components: + - type: MetaData + desc: A comfy-looking cat bed. A handmade plate on the side reads "Runtime". + name: soft cat bed - type: Transform pos: -28.5,-34.5 parent: 2 - uid: 5910 components: + - type: MetaData + desc: A comfy-looking dog bed meant only for the best corgi in spess. + name: comfy corgi bed - type: Transform pos: -16.5,-16.5 parent: 2 - uid: 5911 components: + - type: MetaData + desc: A comfy-looking pet bed besides the spit stains. "Silvia" is marked on the side. + name: snake bed - type: Transform pos: 9.5,-34.5 parent: 2 - uid: 5912 components: + - type: MetaData + desc: A comfy-looking dog bed. "McGriff" is professionally carved on the side. + name: name brand dog bed - type: Transform pos: 38.5,-11.5 parent: 2 - uid: 5913 components: + - type: MetaData + desc: A comfy-looking pet bed. "Siobhan" is plated on the side in cold steel. - type: Transform pos: -41.5,-9.5 parent: 2 - uid: 5914 components: + - type: MetaData + desc: A comfy-looking cat bed. You can even strap your pet in, in case the gravity turns off. + name: cat bed - type: Transform pos: 20.5,14.5 parent: 2 @@ -37151,16 +38969,25 @@ entities: parent: 2 - uid: 5916 components: + - type: MetaData + desc: A comfy-looking pet bed. "Paperwork" is carefully carved in the side. + name: sloth bed - type: Transform pos: -31.5,-7.5 parent: 2 - uid: 5917 components: + - type: MetaData + desc: A very comfy-looking fox bed. Hand crafted with a golden plate on the side reading "Renault" + name: luxury fox bed - type: Transform pos: 40.5,-29.5 parent: 2 - uid: 5918 components: + - type: MetaData + desc: A comfy-looking pet bed. Covered top to bottom in silk... + name: spider bed - type: Transform pos: 27.5,-5.5 parent: 2 @@ -37169,6 +38996,70 @@ entities: - type: Transform pos: 17.5,11.5 parent: 2 + - uid: 5992 + components: + - type: MetaData + desc: A okay-ish quality pet bed. "Bandito" is roughly carved in the side. + name: cheap pet bed + - type: Transform + pos: 42.5,-13.5 + parent: 2 + - uid: 6012 + components: + - type: MetaData + desc: A scratched up pet bed. Smells of death... + name: possum bed + - type: Transform + pos: 9.5,-40.5 + parent: 2 + - uid: 15064 + components: + - type: MetaData + desc: 'A large comfy-looking cat bed. Looks like the perfect spot for Floppa! ' + name: big cat bed + - type: Transform + pos: -3.5,-4.5 + parent: 2 + - uid: 15089 + components: + - type: MetaData + desc: A comfy-looking cat bed. Looks slept in but not a single piece of fur is seen. + name: cat bed + - type: Transform + pos: -59.5,-8.5 + parent: 2 + - uid: 15091 + components: + - type: MetaData + desc: A comfy-looking cat bed. "Exception" is carved in the side. + name: cat bed + - type: Transform + pos: -7.5,-38.5 + parent: 2 + - uid: 15093 + components: + - type: MetaData + desc: A dirty pet bed perfect for a trash loving pet. + name: trashy pet bed + - type: Transform + pos: -40.5,10.5 + parent: 2 + - uid: 15095 + components: + - type: MetaData + desc: A comfy-looking pet bed. All the cushions have been cut and pinced... + name: crab bed + - type: Transform + pos: -46.5,-31.5 + parent: 2 + - uid: 15101 + components: + - type: MetaData + desc: A large messed-up dog bed. Laika sure did a number on this thing... + name: large dog bed + - type: Transform + pos: 31.5,-12.5 + parent: 2 - proto: DonkpocketBoxSpawner entities: - uid: 5920 @@ -37237,6 +39128,11 @@ entities: - type: Transform pos: 26.5,-36.5 parent: 2 + - uid: 15472 + components: + - type: Transform + pos: 48.5,-12.5 + parent: 2 - proto: DresserCaptainFilled entities: - uid: 5932 @@ -37265,11 +39161,6 @@ entities: - type: Transform pos: 19.5,11.5 parent: 2 - - uid: 5936 - components: - - type: Transform - pos: 48.5,-12.5 - parent: 2 - uid: 5937 components: - type: Transform @@ -37414,6 +39305,9 @@ entities: entities: - uid: 5960 components: + - type: MetaData + desc: Looks almost identical but taste 10x better... or atleast they say. + name: expensive champagne bottle - type: Transform pos: 52.2794,-45.25103 parent: 2 @@ -37458,6 +39352,25 @@ entities: - type: Transform pos: -9.31508,-26.42109 parent: 2 +- proto: DrinkFlask + entities: + - uid: 15033 + components: + - type: Transform + rot: 6.283185307179586 rad + pos: 52.7902,-33.305115 + parent: 2 +- proto: DrinkFlaskBar + entities: + - uid: 15034 + components: + - type: MetaData + desc: A simple flask meant for an important person. + name: chief justice's flask + - type: Transform + rot: 6.283185307179586 rad + pos: 52.227356,-35.202225 + parent: 2 - proto: DrinkGinBottleFull entities: - uid: 5968 @@ -37502,63 +39415,6 @@ entities: - type: Transform pos: 19.483168,-28.42277 parent: 2 - - uid: 5976 - components: - - type: Transform - pos: 52.138706,-35.281868 - parent: 2 - - uid: 5977 - components: - - type: Transform - pos: 51.749428,-35.522484 - parent: 2 - - uid: 5978 - components: - - type: Transform - pos: 51.749428,-34.88186 - parent: 2 - - uid: 5979 - components: - - type: Transform - pos: 51.749428,-33.834988 - parent: 2 - - uid: 5980 - components: - - type: Transform - pos: 52.858803,-33.319363 - parent: 2 - - uid: 5981 - components: - - type: Transform - pos: 53.202553,-33.803738 - parent: 2 - - uid: 5982 - components: - - type: Transform - pos: 53.218178,-34.741234 - parent: 2 - - uid: 5983 - components: - - type: Transform - pos: 53.249428,-35.616234 - parent: 2 - - uid: 5984 - components: - - type: Transform - pos: 50.262745,-42.297348 - parent: 2 - - uid: 5985 - components: - - type: Transform - pos: 51.43462,-42.344223 - parent: 2 -- proto: DrinkGlassCoupeShaped - entities: - - uid: 5986 - components: - - type: Transform - pos: 49.375183,-42.297348 - parent: 2 - proto: DrinkGoldenCup entities: - uid: 5987 @@ -37580,6 +39436,13 @@ entities: - type: Transform pos: 8.726354,-5.1830006 parent: 2 +- proto: DrinkHosFlask + entities: + - uid: 15028 + components: + - type: Transform + pos: 53.475582,-33.22486 + parent: 2 - proto: DrinkHotCoffee entities: - uid: 14705 @@ -37599,12 +39462,34 @@ entities: - type: Transform pos: -55.40976,-1.432474 parent: 2 +- proto: DrinkLithiumFlask + entities: + - uid: 15030 + components: + - type: Transform + pos: 51.475582,-34.342915 + parent: 2 +- proto: DrinkMREFlask + entities: + - uid: 15032 + components: + - type: Transform + rot: 6.283185307179586 rad + pos: 53.459175,-35.07092 + parent: 2 +- proto: DrinkMugDog + entities: + - uid: 15035 + components: + - type: Transform + pos: 51.55197,-33.16236 + parent: 2 - proto: DrinkMugHeart entities: - - uid: 5992 + - uid: 4125 components: - type: Transform - pos: 19.645376,-38.5516 + pos: 19.543175,-38.714058 parent: 2 - proto: DrinkMugMetal entities: @@ -37625,6 +39510,11 @@ entities: parent: 2 - proto: DrinkMugOne entities: + - uid: 5306 + components: + - type: Transform + pos: -17.21106,-18.882215 + parent: 2 - uid: 5996 components: - type: Transform @@ -37655,6 +39545,12 @@ entities: - type: Transform pos: 2.775886,-3.3874476 parent: 2 + - uid: 15012 + components: + - type: Transform + parent: 15011 + - type: Physics + canCollide: False - proto: DrinkSakeCup entities: - uid: 6001 @@ -37672,6 +39568,23 @@ entities: - type: Transform pos: -56.68782,-11.4757805 parent: 2 + - uid: 15013 + components: + - type: Transform + rot: 6.283185307179586 rad + pos: 53.164227,-31.113262 + parent: 2 + - uid: 15014 + components: + - type: Transform + rot: 6.283185307179586 rad + pos: 53.323948,-31.411873 + parent: 2 + - uid: 15015 + components: + - type: Transform + pos: 52.99082,-31.433586 + parent: 2 - proto: DrinkSakeGlass entities: - uid: 6004 @@ -37701,6 +39614,13 @@ entities: - type: Transform pos: 41.310482,5.6547894 parent: 2 +- proto: DrinkShinyFlask + entities: + - uid: 15029 + components: + - type: Transform + pos: 53.461693,-34.266525 + parent: 2 - proto: DrinkShotGlass entities: - uid: 6009 @@ -37720,13 +39640,6 @@ entities: - type: Transform pos: 3.0978847,-3.2770853 parent: 2 -- proto: DrinkSoyLatte - entities: - - uid: 6012 - components: - - type: Transform - pos: -17.281527,-18.907257 - parent: 2 - proto: DrinkSpaceGlue entities: - uid: 6013 @@ -37806,6 +39719,11 @@ entities: - type: Transform pos: -56.271152,-11.152639 parent: 2 + - uid: 15019 + components: + - type: Transform + pos: 53.692005,-31.26051 + parent: 2 - proto: DrinkVacuumFlask entities: - uid: 6027 @@ -37813,6 +39731,11 @@ entities: - type: Transform pos: -32.50218,3.7678924 parent: 2 + - uid: 15031 + components: + - type: Transform + pos: 51.48947,-35.349857 + parent: 2 - proto: DrinkWaterBottleFull entities: - uid: 6028 @@ -37868,7 +39791,7 @@ entities: - uid: 6038 components: - type: Transform - pos: -8.266013,-29.266947 + pos: -8.720007,-29.222837 parent: 2 - proto: DrinkWaterCup entities: @@ -37973,15 +39896,15 @@ entities: parent: 2 - proto: Dropper entities: - - uid: 6057 + - uid: 6058 components: - type: Transform - pos: -43.51763,-6.0741534 + pos: -16.748014,-8.658751 parent: 2 - - uid: 6058 + - uid: 10025 components: - type: Transform - pos: -16.748014,-8.658751 + pos: -43.532806,-4.9079638 parent: 2 - proto: DungeonMasterCircuitBoard entities: @@ -38656,6 +40579,14 @@ entities: - type: Transform pos: 40.16681,-43.301426 parent: 2 +- proto: EncryptionKeyBinary + entities: + - uid: 8382 + components: + - type: Transform + parent: 6153 + - type: Physics + canCollide: False - proto: EncryptionKeyCargo entities: - uid: 6154 @@ -38664,6 +40595,14 @@ entities: parent: 6153 - type: Physics canCollide: False +- proto: EncryptionKeyCommand + entities: + - uid: 12743 + components: + - type: Transform + parent: 11679 + - type: Physics + canCollide: False - proto: EncryptionKeyCommon entities: - uid: 6156 @@ -38680,6 +40619,14 @@ entities: parent: 6157 - type: Physics canCollide: False +- proto: EncryptionKeyJustice + entities: + - uid: 15529 + components: + - type: Transform + parent: 15325 + - type: Physics + canCollide: False - proto: EncryptionKeyMedical entities: - uid: 6161 @@ -38704,6 +40651,20 @@ entities: parent: 6157 - type: Physics canCollide: False +- proto: EncryptionKeySecurity + entities: + - uid: 12778 + components: + - type: Transform + parent: 11679 + - type: Physics + canCollide: False + - uid: 15335 + components: + - type: Transform + parent: 15325 + - type: Physics + canCollide: False - proto: EncryptionKeyService entities: - uid: 6164 @@ -38717,7 +40678,7 @@ entities: - uid: 6165 components: - type: Transform - pos: -9.508378,-27.114075 + pos: -9.448584,-27.21585 parent: 2 - proto: ExosuitFabricator entities: @@ -38728,6 +40689,11 @@ entities: parent: 2 - proto: ExtinguisherCabinetFilled entities: + - uid: 4931 + components: + - type: Transform + pos: 15.5,6.5 + parent: 2 - uid: 6167 components: - type: Transform @@ -38830,11 +40796,6 @@ entities: rot: -1.5707963267948966 rad pos: 46.5,-11.5 parent: 2 - - uid: 6187 - components: - - type: Transform - pos: 11.5,4.5 - parent: 2 - uid: 6188 components: - type: Transform @@ -38860,6 +40821,13 @@ entities: parent: 2 - proto: FaxMachineBase entities: + - uid: 4124 + components: + - type: Transform + pos: 18.5,-39.5 + parent: 2 + - type: FaxMachine + name: Clerk - uid: 6192 components: - type: Transform @@ -38873,35 +40841,35 @@ entities: pos: -32.5,-17.5 parent: 2 - type: FaxMachine - name: Reporter + name: Station News - uid: 6194 components: - type: Transform pos: -26.5,-31.5 parent: 2 - type: FaxMachine - name: Engie, Chief + name: Chief Engineer - uid: 6195 components: - type: Transform pos: -17.5,-18.5 parent: 2 - type: FaxMachine - name: Service, HoP + name: Head of Personnel - uid: 6196 components: - type: Transform pos: -31.5,3.5 parent: 2 - type: FaxMachine - name: Epi, Forensic + name: Psionic Mantis - uid: 6197 components: - type: Transform pos: 9.5,7.5 parent: 2 - type: FaxMachine - name: Service, Lawyer + name: Attorney - uid: 6198 components: - type: Transform @@ -38922,14 +40890,14 @@ entities: pos: 29.5,-45.5 parent: 2 - type: FaxMachine - name: Engie, South Solar + name: South Solars - uid: 6201 components: - type: Transform pos: 28.5,3.5 parent: 2 - type: FaxMachine - name: HoS + name: Head of Security - uid: 6202 components: - type: Transform @@ -38943,21 +40911,21 @@ entities: pos: -21.5,5.5 parent: 2 - type: FaxMachine - name: Engie, North Solar + name: North Solars - uid: 6204 components: - type: Transform pos: -8.5,-27.5 parent: 2 - type: FaxMachine - name: Service, Cargo + name: Mailing - uid: 6205 components: - type: Transform pos: -32.5,-29.5 parent: 2 - type: FaxMachine - name: Engie, Main + name: Engineering - uid: 6206 components: - type: Transform @@ -38971,33 +40939,56 @@ entities: pos: 2.5,-17.5 parent: 2 - type: FaxMachine - name: Service, Clown/Mime + name: Mime & Clown - uid: 6208 components: - type: Transform pos: -48.5,-31.5 parent: 2 - type: FaxMachine - name: Atmos department - - uid: 6209 + name: Atmospherics + - uid: 6210 components: - type: Transform - pos: 44.5,-34.5 + pos: -51.5,-14.5 + parent: 2 + - type: FaxMachine + name: Mystagogue + - uid: 10280 + components: + - type: Transform + pos: 41.5,-0.5 + parent: 2 + - type: FaxMachine + name: Perma + - uid: 10501 + components: + - type: Transform + pos: 45.5,-33.5 parent: 2 - type: FaxMachine name: Bridge - - uid: 6210 + - uid: 15494 components: - type: Transform - pos: -51.5,-14.5 + pos: -14.5,-24.5 parent: 2 - type: FaxMachine - name: Mystagogue's Office - - uid: 6211 + name: Logistics + - uid: 15496 components: - type: Transform - pos: 17.5,-39.5 + pos: 13.5,-30.5 + parent: 2 + - type: FaxMachine + name: Psychologist + - uid: 15513 + components: + - type: Transform + pos: -43.5,-5.5 parent: 2 + - type: FaxMachine + name: Epistemics - proto: FaxMachineCaptain entities: - uid: 6212 @@ -39039,23 +41030,6 @@ entities: - type: Transform pos: 31.5,15.5 parent: 2 -- proto: filingCabinetRandom - entities: - - uid: 6219 - components: - - type: Transform - pos: 44.5,-33.5 - parent: 2 - - uid: 6220 - components: - - type: Transform - pos: 45.5,-33.5 - parent: 2 - - uid: 6221 - components: - - type: Transform - pos: 19.5,-35.5 - parent: 2 - proto: filingCabinetTallRandom entities: - uid: 6222 @@ -39311,6 +41285,16 @@ entities: - 6350 - 6260 - 6257 + - uid: 15516 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,-37.5 + parent: 2 + - type: DeviceList + devices: + - 6439 + - 6438 - proto: FireAxeCabinetFilled entities: - uid: 6242 @@ -39510,6 +41494,9 @@ entities: rot: 1.5707963267948966 rad pos: -12.5,-39.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 59 - uid: 6273 components: - type: Transform @@ -39595,6 +41582,9 @@ entities: rot: 3.141592653589793 rad pos: -32.5,-8.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 15111 - uid: 6288 components: - type: Transform @@ -39627,6 +41617,9 @@ entities: rot: -1.5707963267948966 rad pos: -13.5,-39.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 59 - uid: 6293 components: - type: Transform @@ -39789,6 +41782,7 @@ entities: - type: DeviceNetwork deviceLists: - 6239 + - 15111 - uid: 6318 components: - type: Transform @@ -39798,6 +41792,7 @@ entities: - type: DeviceNetwork deviceLists: - 6239 + - 15111 - uid: 6319 components: - type: Transform @@ -39807,6 +41802,7 @@ entities: - type: DeviceNetwork deviceLists: - 6239 + - 15111 - uid: 6320 components: - type: Transform @@ -39816,6 +41812,7 @@ entities: - type: DeviceNetwork deviceLists: - 6239 + - 15111 - uid: 6321 components: - type: Transform @@ -39825,6 +41822,7 @@ entities: - type: DeviceNetwork deviceLists: - 6239 + - 15111 - uid: 6322 components: - type: Transform @@ -39834,6 +41832,7 @@ entities: - type: DeviceNetwork deviceLists: - 6239 + - 15111 - uid: 6323 components: - type: Transform @@ -39843,8 +41842,17 @@ entities: - type: DeviceNetwork deviceLists: - 6239 + - 15111 - proto: FirelockGlass entities: + - uid: 524 + components: + - type: Transform + pos: -21.5,-43.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 59 - uid: 6324 components: - type: Transform @@ -40308,11 +42316,17 @@ entities: - type: Transform pos: -33.5,-1.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 18 - uid: 6387 components: - type: Transform pos: -33.5,-0.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 18 - uid: 6388 components: - type: Transform @@ -40348,11 +42362,17 @@ entities: - type: Transform pos: -38.5,-14.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 18 - uid: 6395 components: - type: Transform pos: -37.5,-14.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 18 - uid: 6396 components: - type: Transform @@ -40556,11 +42576,17 @@ entities: - type: Transform pos: -40.5,-1.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 18 - uid: 6431 components: - type: Transform pos: -40.5,-0.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 18 - uid: 6432 components: - type: Transform @@ -40616,6 +42642,8 @@ entities: - type: DeviceNetwork deviceLists: - 61 + - 15263 + - 15516 - uid: 6439 components: - type: Transform @@ -40626,6 +42654,8 @@ entities: deviceLists: - 61 - 62 + - 15263 + - 15516 - uid: 6440 components: - type: Transform @@ -40659,6 +42689,7 @@ entities: - type: DeviceNetwork deviceLists: - 6239 + - 15111 - uid: 6445 components: - type: Transform @@ -40667,6 +42698,7 @@ entities: - type: DeviceNetwork deviceLists: - 6239 + - 15111 - uid: 6446 components: - type: Transform @@ -40798,6 +42830,30 @@ entities: - type: DeviceNetwork deviceLists: - 6240 + - uid: 15000 + components: + - type: Transform + pos: -17.5,-43.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 59 + - uid: 15109 + components: + - type: Transform + pos: -22.5,-41.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 59 + - uid: 15110 + components: + - type: Transform + pos: -22.5,-42.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 59 - proto: Fireplace entities: - uid: 6461 @@ -40986,18 +43042,6 @@ entities: rot: -1.5707963267948966 rad pos: -45.69743,9.479406 parent: 2 -- proto: FolderSpawner - entities: - - uid: 6488 - components: - - type: Transform - pos: 44.32923,-35.50129 - parent: 2 - - uid: 6489 - components: - - type: Transform - pos: 44.563606,-35.516914 - parent: 2 - proto: FoodApple entities: - uid: 6490 @@ -41052,15 +43096,10 @@ entities: - type: Transform pos: -13.488058,-27.226809 parent: 2 - - uid: 6498 + - uid: 15010 components: - type: Transform - pos: 45.32923,-34.329414 - parent: 2 - - uid: 6499 - components: - - type: Transform - pos: 51.561928,-31.397488 + pos: 51.562138,-31.350248 parent: 2 - proto: FoodBoxPizzaFilled entities: @@ -41095,70 +43134,18 @@ entities: parent: 2 - proto: FoodBurgerBacon entities: - - uid: 6505 - components: - - type: Transform - pos: 51.405678,-35.41311 - parent: 2 - uid: 6506 components: - type: Transform pos: -54.361538,-45.419434 parent: 2 -- proto: FoodBurgerBig - entities: - - uid: 6507 - components: - - type: Transform - pos: 51.374428,-34.584984 - parent: 2 -- proto: FoodBurgerCarp - entities: - - uid: 6508 - components: - - type: Transform - pos: 52.451206,-35.516243 - parent: 2 -- proto: FoodBurgerDuck - entities: - - uid: 6509 - components: - - type: Transform - pos: 53.640053,-35.366234 - parent: 2 - proto: FoodBurgerMcguffin entities: - - uid: 6510 - components: - - type: Transform - pos: 51.390053,-33.538113 - parent: 2 - uid: 6511 components: - type: Transform pos: 33.450184,-29.531673 parent: 2 -- proto: FoodBurgerMcrib - entities: - - uid: 6512 - components: - - type: Transform - pos: 53.577553,-34.428734 - parent: 2 -- proto: FoodBurgerPlain - entities: - - uid: 6513 - components: - - type: Transform - pos: 53.577553,-33.569363 - parent: 2 -- proto: FoodBurgerSuper - entities: - - uid: 6514 - components: - - type: Transform - pos: 52.436928,-33.381863 - parent: 2 - proto: FoodCakeSuppermatterSlice entities: - uid: 6515 @@ -41305,6 +43292,20 @@ entities: - type: Transform pos: -12.593711,-4.5953608 parent: 2 +- proto: FoodShakerPepper + entities: + - uid: 15251 + components: + - type: Transform + pos: -11.51545,-10.405111 + parent: 2 +- proto: FoodShakerSalt + entities: + - uid: 15250 + components: + - type: Transform + pos: -11.737672,-10.377335 + parent: 2 - proto: FoodSnackChowMein entities: - uid: 6537 @@ -41548,6 +43549,13 @@ entities: parent: 2 - proto: GasPassiveGate entities: + - uid: 4789 + components: + - type: Transform + pos: -10.5,-6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' - uid: 6570 components: - type: Transform @@ -41555,14 +43563,16 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FF1212FF' -- proto: GasPassiveVent - entities: - - uid: 6571 + - uid: 15308 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -12.5,-4.5 + rot: -1.5707963267948966 rad + pos: 67.5,-30.5 parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' +- proto: GasPassiveVent + entities: - uid: 6572 components: - type: Transform @@ -41609,6 +43619,18 @@ entities: rot: 3.141592653589793 rad pos: -42.5,-51.5 parent: 2 + - uid: 9067 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,-5.5 + parent: 2 + - uid: 15307 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 68.5,-30.5 + parent: 2 - proto: GasPipeBend entities: - uid: 6580 @@ -41885,13 +43907,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FF1212FF' - - uid: 6617 - components: - - type: Transform - pos: -10.5,-5.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 6618 components: - type: Transform @@ -42866,12 +44881,6 @@ entities: - type: Transform pos: -45.5,-37.5 parent: 2 - - uid: 6746 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -10.5,-4.5 - parent: 2 - uid: 6747 components: - type: Transform @@ -42931,8 +44940,71 @@ entities: rot: 3.141592653589793 rad pos: -47.5,-55.5 parent: 2 + - uid: 15273 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 63.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 15274 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 63.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 15281 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 15286 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 62.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15287 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 61.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15291 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 61.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15306 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,-30.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' - proto: GasPipeFourway entities: + - uid: 5423 + components: + - type: Transform + pos: -10.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' - uid: 6755 components: - type: Transform @@ -42968,13 +45040,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FF1212FF' - - uid: 6760 - components: - - type: Transform - pos: 43.5,-34.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 6761 components: - type: Transform @@ -43132,8 +45197,116 @@ entities: - type: Transform pos: -45.5,-51.5 parent: 2 + - uid: 6807 + components: + - type: Transform + pos: -11.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 15270 + components: + - type: Transform + pos: 63.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 15294 + components: + - type: Transform + pos: 64.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' - proto: GasPipeStraight entities: + - uid: 527 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,-7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 528 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 562 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,-7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 563 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 4174 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 4708 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 5263 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 5936 + components: + - type: Transform + pos: -10.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 5978 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 50.5,-35.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 6617 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 6746 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,-13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' - uid: 6784 components: - type: Transform @@ -43303,12 +45476,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 6807 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -11.5,-4.5 - parent: 2 - uid: 6808 components: - type: Transform @@ -43844,14 +46011,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FF1212FF' - - uid: 6885 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -10.5,-6.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 6886 components: - type: Transform @@ -50467,13 +52626,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FF1212FF' - - uid: 7741 - components: - - type: Transform - pos: -10.5,-26.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - uid: 7742 components: - type: Transform @@ -50516,14 +52668,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FF1212FF' - - uid: 7748 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -9.5,-25.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - uid: 7749 components: - type: Transform @@ -53798,14 +55942,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 8172 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 46.5,-33.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 8173 components: - type: Transform @@ -53893,14 +56029,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FF1212FF' - - uid: 8184 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 50.5,-35.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - uid: 8185 components: - type: Transform @@ -54185,14 +56313,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FF1212FF' - - uid: 8221 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 53.5,-40.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - uid: 8222 components: - type: Transform @@ -55349,13 +57469,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 8372 - components: - - type: Transform - pos: 43.5,-7.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - uid: 8373 components: - type: Transform @@ -55370,13 +57483,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FF1212FF' - - uid: 8375 - components: - - type: Transform - pos: 43.5,-10.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - uid: 8376 components: - type: Transform @@ -55391,13 +57497,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FF1212FF' - - uid: 8378 - components: - - type: Transform - pos: 43.5,-13.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - uid: 8379 components: - type: Transform @@ -55421,14 +57520,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 8382 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 53.5,-39.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 8383 components: - type: Transform @@ -56230,8 +58321,273 @@ entities: rot: 3.141592653589793 rad pos: -42.5,-50.5 parent: 2 + - uid: 9348 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 9774 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 9903 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 10282 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,-7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 10283 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,-13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 11945 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,-13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15271 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 63.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 15272 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 63.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 15275 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 63.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 15276 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 63.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 15280 + components: + - type: Transform + pos: 67.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 15282 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 66.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 15283 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 65.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 15284 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 64.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 15288 + components: + - type: Transform + pos: 61.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15289 + components: + - type: Transform + pos: 61.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15290 + components: + - type: Transform + pos: 61.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15292 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 62.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15293 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 63.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15295 + components: + - type: Transform + pos: 64.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15296 + components: + - type: Transform + pos: 64.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15299 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 65.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15302 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15303 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,-27.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15304 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15305 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 66.5,-29.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15332 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -11.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' - proto: GasPipeTJunction entities: + - uid: 4769 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -10.5,-5.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 5267 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-33.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 5280 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 43.5,-34.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 5287 + components: + - type: Transform + pos: 44.5,-36.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 5984 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 5985 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 5986 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 43.5,-13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' - uid: 8487 components: - type: Transform @@ -56244,6 +58600,8 @@ entities: rot: 3.141592653589793 rad pos: -30.5,-37.5 parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' - uid: 8489 components: - type: Transform @@ -57141,14 +59499,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 8606 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -11.5,-25.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 8607 components: - type: Transform @@ -57507,14 +59857,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 8653 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 44.5,-36.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - uid: 8654 components: - type: Transform @@ -57723,14 +60065,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FF1212FF' - - uid: 8681 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -10.5,-25.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - uid: 8682 components: - type: Transform @@ -58481,6 +60815,36 @@ entities: rot: 3.141592653589793 rad pos: -46.5,-55.5 parent: 2 + - uid: 8944 + components: + - type: Transform + pos: 53.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 8952 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 15268 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 62.5,-23.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 15300 + components: + - type: Transform + pos: 66.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' - proto: GasPort entities: - uid: 8780 @@ -58549,8 +60913,24 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FF1212FF' + - uid: 15267 + components: + - type: Transform + pos: 62.5,-22.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' - proto: GasPressurePump entities: + - uid: 5286 + components: + - type: Transform + pos: -10.5,-4.5 + parent: 2 + - type: GasPressurePump + targetPressure: 4500 + - type: AtmosPipeColor + color: '#0335FCFF' - uid: 8790 components: - type: Transform @@ -58835,7 +61215,7 @@ entities: pos: -10.5,-3.5 parent: 2 - type: GasThermoMachine - targetTemperature: 150 + targetTemperature: 73.15 - uid: 8825 components: - type: Transform @@ -58863,6 +61243,24 @@ entities: targetTemperature: 290.15 - proto: GasVentPump entities: + - uid: 525 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,-6.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 8172 + components: + - type: Transform + pos: 46.5,-32.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 15263 + - type: AtmosPipeColor + color: '#0335FCFF' - uid: 8828 components: - type: Transform @@ -58942,6 +61340,9 @@ entities: rot: 1.5707963267948966 rad pos: 40.5,-34.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 15263 - type: AtmosPipeColor color: '#0335FCFF' - uid: 8837 @@ -59600,17 +62001,6 @@ entities: - 20 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 8912 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 44.5,-34.5 - parent: 2 - - type: DeviceNetwork - deviceLists: - - 61 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 8913 components: - type: Transform @@ -59684,6 +62074,7 @@ entities: - type: DeviceNetwork deviceLists: - 57 + - 15111 - type: AtmosPipeColor color: '#0335FCFF' - uid: 8922 @@ -59792,17 +62183,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 8934 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 47.5,-6.5 - parent: 2 - - type: DeviceNetwork - deviceLists: - - 34 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 8935 components: - type: Transform @@ -59902,14 +62282,6 @@ entities: - 28 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 8944 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -12.5,-5.5 - parent: 2 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 8945 components: - type: Transform @@ -59946,6 +62318,9 @@ entities: rot: 3.141592653589793 rad pos: -12.5,-40.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 59 - type: AtmosPipeColor color: '#0335FCFF' - uid: 8949 @@ -59972,18 +62347,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 8952 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 54.5,-39.5 - parent: 2 - - type: DeviceNetwork - deviceLists: - - 62 - - 60 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 8953 components: - type: Transform @@ -60144,8 +62507,97 @@ entities: parent: 2 - type: AtmosPipeColor color: '#0335FCFF' + - uid: 15269 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 62.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 15277 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 64.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 15278 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 64.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 15279 + components: + - type: Transform + pos: 67.5,-21.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 15331 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 15539 + components: + - type: Transform + pos: 53.5,-38.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 15540 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 56.5,-39.5 + parent: 2 + - type: AtmosPipeColor + color: '#0335FCFF' - proto: GasVentScrubber entities: + - uid: 529 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,-10.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 2046 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,-13.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 5285 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 46.5,-36.5 + parent: 2 + - type: DeviceNetwork + deviceLists: + - 15263 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 6571 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' - uid: 8969 components: - type: Transform @@ -60574,14 +63026,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FF1212FF' - - uid: 9017 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -8.5,-25.5 - parent: 2 - - type: AtmosPipeColor - color: '#FF1212FF' - uid: 9018 components: - type: Transform @@ -60680,16 +63124,6 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FF1212FF' - - uid: 9030 - components: - - type: Transform - pos: 44.5,-35.5 - parent: 2 - - type: DeviceNetwork - deviceLists: - - 61 - - type: AtmosPipeColor - color: '#FF1212FF' - uid: 9031 components: - type: Transform @@ -60982,6 +63416,7 @@ entities: - type: DeviceNetwork deviceLists: - 57 + - 15111 - type: AtmosPipeColor color: '#FF1212FF' - uid: 9064 @@ -61013,18 +63448,6 @@ entities: - 62 - type: AtmosPipeColor color: '#FF1212FF' - - uid: 9067 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 54.5,-40.5 - parent: 2 - - type: DeviceNetwork - deviceLists: - - 62 - - 60 - - type: AtmosPipeColor - color: '#FF1212FF' - uid: 9068 components: - type: Transform @@ -61263,6 +63686,9 @@ entities: rot: 3.141592653589793 rad pos: -13.5,-40.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 59 - type: AtmosPipeColor color: '#FF1212FF' - uid: 9094 @@ -61349,6 +63775,9 @@ entities: rot: 1.5707963267948966 rad pos: 40.5,-35.5 parent: 2 + - type: DeviceNetwork + deviceLists: + - 15263 - type: AtmosPipeColor color: '#FF1212FF' - uid: 9103 @@ -61425,6 +63854,68 @@ entities: parent: 2 - type: AtmosPipeColor color: '#FF1212FF' + - uid: 11977 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,-7.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15285 + components: + - type: Transform + pos: 62.5,-20.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15297 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 64.5,-28.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15298 + components: + - type: Transform + pos: 64.5,-24.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15301 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 67.5,-25.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15333 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -12.5,-26.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15537 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,-41.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 15538 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 56.5,-40.5 + parent: 2 + - type: AtmosPipeColor + color: '#FF1212FF' - proto: GasVolumePump entities: - uid: 9111 @@ -61597,6 +64088,11 @@ entities: - type: Transform pos: 61.5,-25.5 parent: 2 + - uid: 15565 + components: + - type: Transform + pos: 65.5,-25.5 + parent: 2 - proto: Girder entities: - uid: 9132 @@ -61640,6 +64136,37 @@ entities: - type: Transform pos: 73.5,-23.5 parent: 2 + - uid: 4757 + components: + - type: Transform + pos: -61.5,-37.5 + parent: 2 + - uid: 4977 + components: + - type: Transform + pos: -62.5,-37.5 + parent: 2 + - uid: 5290 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-30.5 + parent: 2 + - uid: 8372 + components: + - type: Transform + pos: 39.5,-5.5 + parent: 2 + - uid: 8375 + components: + - type: Transform + pos: -63.5,-36.5 + parent: 2 + - uid: 8378 + components: + - type: Transform + pos: -63.5,-34.5 + parent: 2 - uid: 9137 components: - type: Transform @@ -61972,11 +64499,6 @@ entities: - type: Transform pos: -15.5,-3.5 parent: 2 - - uid: 9203 - components: - - type: Transform - pos: 39.5,-5.5 - parent: 2 - uid: 9204 components: - type: Transform @@ -62128,11 +64650,6 @@ entities: - type: Transform pos: -46.5,-46.5 parent: 2 - - uid: 9234 - components: - - type: Transform - pos: -48.5,-46.5 - parent: 2 - uid: 9235 components: - type: Transform @@ -62153,11 +64670,6 @@ entities: - type: Transform pos: -46.5,-45.5 parent: 2 - - uid: 9239 - components: - - type: Transform - pos: -48.5,-48.5 - parent: 2 - uid: 9240 components: - type: Transform @@ -62596,11 +65108,6 @@ entities: - type: Transform pos: 15.5,-3.5 parent: 2 - - uid: 9327 - components: - - type: Transform - pos: 37.5,-5.5 - parent: 2 - uid: 9328 components: - type: Transform @@ -62701,11 +65208,6 @@ entities: - type: Transform pos: -3.5,-39.5 parent: 2 - - uid: 9348 - components: - - type: Transform - pos: 45.5,10.5 - parent: 2 - uid: 9349 components: - type: Transform @@ -63076,11 +65578,6 @@ entities: - type: Transform pos: -44.5,11.5 parent: 2 - - uid: 9423 - components: - - type: Transform - pos: 49.5,-20.5 - parent: 2 - uid: 9424 components: - type: Transform @@ -63216,12 +65713,6 @@ entities: - type: Transform pos: 31.5,-46.5 parent: 2 - - uid: 9451 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 45.5,-30.5 - parent: 2 - uid: 9452 components: - type: Transform @@ -64846,11 +67337,6 @@ entities: - type: Transform pos: -60.5,-32.5 parent: 2 - - uid: 9774 - components: - - type: Transform - pos: 45.5,9.5 - parent: 2 - uid: 9775 components: - type: Transform @@ -65018,7 +67504,7 @@ entities: - uid: 9812 components: - type: Transform - pos: 61.5,-48.5 + pos: 58.5,-48.5 parent: 2 - uid: 9813 components: @@ -65038,7 +67524,7 @@ entities: - uid: 9816 components: - type: Transform - pos: 57.5,-48.5 + pos: 54.5,-14.5 parent: 2 - uid: 9817 components: @@ -65255,6 +67741,51 @@ entities: rot: 1.5707963267948966 rad pos: -41.5,-56.5 parent: 2 + - uid: 10092 + components: + - type: Transform + pos: 54.5,-15.5 + parent: 2 + - uid: 11119 + components: + - type: Transform + pos: 54.5,-5.5 + parent: 2 + - uid: 11131 + components: + - type: Transform + pos: 54.5,-12.5 + parent: 2 + - uid: 11132 + components: + - type: Transform + pos: 53.5,-15.5 + parent: 2 + - uid: 11134 + components: + - type: Transform + pos: 47.5,11.5 + parent: 2 + - uid: 11135 + components: + - type: Transform + pos: 42.5,12.5 + parent: 2 + - uid: 11136 + components: + - type: Transform + pos: 54.5,-13.5 + parent: 2 + - uid: 11326 + components: + - type: Transform + pos: 60.5,-48.5 + parent: 2 + - uid: 11529 + components: + - type: Transform + pos: 37.5,-5.5 + parent: 2 - uid: 14673 components: - type: Transform @@ -65425,6 +67956,146 @@ entities: - type: Transform pos: 64.5,-32.5 parent: 2 + - uid: 15114 + components: + - type: Transform + pos: 51.5,8.5 + parent: 2 + - uid: 15115 + components: + - type: Transform + pos: 48.5,10.5 + parent: 2 + - uid: 15116 + components: + - type: Transform + pos: 48.5,9.5 + parent: 2 + - uid: 15117 + components: + - type: Transform + pos: 49.5,9.5 + parent: 2 + - uid: 15118 + components: + - type: Transform + pos: 54.5,-11.5 + parent: 2 + - uid: 15120 + components: + - type: Transform + pos: 54.5,-9.5 + parent: 2 + - uid: 15121 + components: + - type: Transform + pos: 53.5,-16.5 + parent: 2 + - uid: 15122 + components: + - type: Transform + pos: 52.5,-17.5 + parent: 2 + - uid: 15123 + components: + - type: Transform + pos: 53.5,-17.5 + parent: 2 + - uid: 15124 + components: + - type: Transform + pos: 52.5,-18.5 + parent: 2 + - uid: 15125 + components: + - type: Transform + pos: 52.5,-19.5 + parent: 2 + - uid: 15126 + components: + - type: Transform + pos: 51.5,-19.5 + parent: 2 + - uid: 15127 + components: + - type: Transform + pos: 47.5,-19.5 + parent: 2 + - uid: 15128 + components: + - type: Transform + pos: 48.5,-19.5 + parent: 2 + - uid: 15129 + components: + - type: Transform + pos: 49.5,-19.5 + parent: 2 + - uid: 15130 + components: + - type: Transform + pos: 50.5,-19.5 + parent: 2 + - uid: 15132 + components: + - type: Transform + pos: 54.5,-1.5 + parent: 2 + - uid: 15133 + components: + - type: Transform + pos: 54.5,-0.5 + parent: 2 + - uid: 15134 + components: + - type: Transform + pos: 54.5,3.5 + parent: 2 + - uid: 15135 + components: + - type: Transform + pos: 52.5,6.5 + parent: 2 + - uid: 15136 + components: + - type: Transform + pos: 51.5,7.5 + parent: 2 + - uid: 15137 + components: + - type: Transform + pos: 53.5,5.5 + parent: 2 + - uid: 15211 + components: + - type: Transform + pos: 39.5,10.5 + parent: 2 + - uid: 15212 + components: + - type: Transform + pos: 38.5,10.5 + parent: 2 + - uid: 15213 + components: + - type: Transform + pos: 37.5,10.5 + parent: 2 + - uid: 15245 + components: + - type: Transform + pos: 49.5,-20.5 + parent: 2 + - uid: 15407 + components: + - type: Transform + pos: -62.5,-41.5 + parent: 2 + - uid: 15408 + components: + - type: Transform + pos: -61.5,-41.5 + parent: 2 - proto: GrilleBroken entities: - uid: 9858 @@ -65445,11 +68116,6 @@ entities: rot: 1.5707963267948966 rad pos: 24.5,-56.5 parent: 2 - - uid: 9861 - components: - - type: Transform - pos: 54.5,-1.5 - parent: 2 - uid: 9862 components: - type: Transform @@ -65474,17 +68140,6 @@ entities: rot: 3.141592653589793 rad pos: -63.5,-18.5 parent: 2 - - uid: 9866 - components: - - type: Transform - pos: -63.5,-36.5 - parent: 2 - - uid: 9867 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: -63.5,-34.5 - parent: 2 - uid: 9868 components: - type: Transform @@ -65534,6 +68189,17 @@ entities: rot: 1.5707963267948966 rad pos: -42.5,-56.5 parent: 2 + - uid: 12674 + components: + - type: Transform + pos: 45.5,9.5 + parent: 2 + - uid: 12749 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,10.5 + parent: 2 - uid: 14882 components: - type: Transform @@ -65749,43 +68415,6 @@ entities: showEnts: False occludes: True ent: null - - uid: 9902 - components: - - type: MetaData - name: m-90 safe - - type: Transform - pos: 31.5,-10.5 - parent: 2 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.1462 - moles: - - 1.606311 - - 6.042789 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - type: ContainerContainer - containers: - entity_storage: !type:Container - showEnts: False - occludes: True - ents: - - 9903 - - 9904 - paper_label: !type:ContainerSlot - showEnts: False - occludes: True - ent: null - proto: GunSafeLaserCarbine entities: - uid: 9905 @@ -65800,13 +68429,6 @@ entities: - type: Transform pos: 35.5,-6.5 parent: 2 -- proto: GunSafeSubMachineGunDrozd - entities: - - uid: 9907 - components: - - type: Transform - pos: 29.5,-10.5 - parent: 2 - proto: HandheldGPSBasic entities: - uid: 9908 @@ -65860,6 +68482,11 @@ entities: - type: Transform pos: 26.04872,7.231669 parent: 2 + - uid: 15248 + components: + - type: Transform + pos: 53.171825,-2.1592908 + parent: 2 - proto: HeatExchanger entities: - uid: 9917 @@ -66211,6 +68838,13 @@ entities: parent: 2 - type: Stack count: 10 + - uid: 15428 + components: + - type: Transform + parent: 15426 + - type: Physics + canCollide: False + - type: InsideEntityStorage - proto: IngotSilver entities: - uid: 9972 @@ -66572,6 +69206,11 @@ entities: parent: 2 - proto: KitchenReagentGrinder entities: + - uid: 6057 + components: + - type: Transform + pos: -43.5,-4.5 + parent: 2 - uid: 10021 components: - type: Transform @@ -66592,11 +69231,6 @@ entities: - type: Transform pos: -9.5,-3.5 parent: 2 - - uid: 10025 - components: - - type: Transform - pos: -43.5,-5.5 - parent: 2 - proto: KitchenSpike entities: - uid: 10026 @@ -66641,23 +69275,28 @@ entities: - type: Physics canCollide: True - type: ActionsContainer + - uid: 589 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.570953,-37.08211 + parent: 2 - uid: 10029 components: - type: Transform rot: 1.5707963267948966 rad pos: -30.832159,-6.1734247 parent: 2 - - uid: 10030 + - uid: 10031 components: - type: Transform rot: -1.5707963267948966 rad - pos: 19.723501,-37.02035 + pos: -5.297533,3.9668517 parent: 2 - - uid: 10031 + - uid: 11975 components: - type: Transform - rot: -1.5707963267948966 rad - pos: -5.297533,3.9668517 + pos: 42.334484,-31.130898 parent: 2 - proto: LampInterrogator entities: @@ -66726,6 +69365,47 @@ entities: linkedPorts: 9969: - Pressed: Trigger +- proto: LockableButtonHeadOfPersonnel + entities: + - uid: 15059 + components: + - type: MetaData + desc: It's a button for activating shutters in emergencies. + name: lockable shutters button + - type: Transform + rot: -1.5707963267948966 rad + pos: -15.5,-18.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 5358: + - Pressed: Toggle + 5773: + - Pressed: Toggle + 5865: + - Pressed: Toggle + 5774: + - Pressed: Toggle + 14481: + - Pressed: DoorBolt +- proto: LockableButtonKitchen + entities: + - uid: 11623 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -11.5,-6.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 11622: + - Pressed: Toggle + 11621: + - Pressed: Toggle + 11536: + - Pressed: Toggle + 11514: + - Pressed: Toggle - proto: LockerAtmosphericsFilled entities: - uid: 10039 @@ -66796,10 +69476,10 @@ entities: parent: 2 - proto: LockerClerkFilled entities: - - uid: 10049 + - uid: 15081 components: - type: Transform - pos: 17.5,-35.5 + pos: 19.5,-35.5 parent: 2 - proto: LockerClown entities: @@ -67078,8 +69758,10 @@ entities: parent: 2 - proto: LockerWarden entities: - - uid: 10092 + - uid: 9861 components: + - type: MetaData + name: armory locker - type: Transform pos: 29.5,-6.5 parent: 2 @@ -67090,6 +69772,13 @@ entities: - type: Transform pos: 40.5,-13.5 parent: 2 +- proto: LockerWeldingSuppliesFilled + entities: + - uid: 15046 + components: + - type: Transform + pos: 48.5,-27.5 + parent: 2 - proto: LogicGateOr entities: - uid: 10094 @@ -67150,6 +69839,12 @@ entities: parent: 2 - proto: LuxuryPen entities: + - uid: 4919 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.466785,-37.804333 + parent: 2 - uid: 10098 components: - type: Transform @@ -67172,6 +69867,11 @@ entities: rot: 1.5707963267948966 rad pos: -10.24382,2.322003 parent: 2 + - uid: 10945 + components: + - type: Transform + pos: 44.47961,-33.659584 + parent: 2 - proto: MachineAnomalyGenerator entities: - uid: 10102 @@ -67565,11 +70265,6 @@ entities: - type: Transform pos: -41.5,-21.5 parent: 2 - - uid: 10170 - components: - - type: Transform - pos: 54.5,-1.5 - parent: 2 - uid: 10171 components: - type: Transform @@ -67626,8 +70321,10 @@ entities: - uid: 10178 components: - type: Transform - pos: -50.257698,12.299719 - parent: 2 + parent: 15426 + - type: Physics + canCollide: False + - type: InsideEntityStorage - proto: MaterialDurathread entities: - uid: 10179 @@ -67655,6 +70352,11 @@ entities: parent: 2 - proto: MedicalBed entities: + - uid: 521 + components: + - type: Transform + pos: 18.5,1.5 + parent: 2 - uid: 10183 components: - type: Transform @@ -67728,10 +70430,10 @@ entities: - type: Transform pos: 19.42368,1.7345049 parent: 2 - - uid: 10195 + - uid: 15544 components: - type: Transform - pos: 47.751106,-37.588215 + pos: 19.674706,1.6165662 parent: 2 - proto: MedkitFilled entities: @@ -67760,11 +70462,6 @@ entities: - type: Transform pos: 0.33109748,-32.21473 parent: 2 - - uid: 10201 - components: - - type: Transform - pos: 47.32923,-37.35384 - parent: 2 - proto: MedkitOxygenFilled entities: - uid: 10202 @@ -67789,7 +70486,7 @@ entities: - uid: 10205 components: - type: Transform - pos: 19.61118,1.5157549 + pos: 19.455956,1.5228162 parent: 2 - proto: MicrophoneInstrument entities: @@ -67860,12 +70557,12 @@ entities: - uid: 10216 components: - type: Transform - pos: 11.538644,-40.647446 + pos: 11.704154,-40.17062 parent: 2 - uid: 10217 components: - type: Transform - pos: 11.679269,-40.272446 + pos: 11.589571,-40.20187 parent: 2 - proto: MopBucket entities: @@ -68022,6 +70719,21 @@ entities: - type: Transform pos: 60.5,-47.5 parent: 2 + - uid: 15310 + components: + - type: Transform + pos: 25.5,-40.5 + parent: 2 + - uid: 15312 + components: + - type: Transform + pos: 45.5,-39.5 + parent: 2 + - uid: 15314 + components: + - type: Transform + pos: 21.5,7.5 + parent: 2 - proto: NitrousOxideTankFilled entities: - uid: 9 @@ -68074,6 +70786,12 @@ entities: - type: Transform pos: 28.5,-35.5 parent: 2 + - uid: 11946 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 47.5,-30.5 + parent: 2 - proto: NuclearBomb entities: - uid: 10248 @@ -68082,6 +70800,13 @@ entities: rot: -1.5707963267948966 rad pos: 39.5,-35.5 parent: 2 +- proto: NuclearBombKeg + entities: + - uid: 15531 + components: + - type: Transform + pos: -54.5,10.5 + parent: 2 - proto: NutimovCircuitBoard entities: - uid: 14742 @@ -68124,10 +70849,10 @@ entities: parent: 2 - proto: OreProcessor entities: - - uid: 10254 + - uid: 9017 components: - type: Transform - pos: -18.5,-40.5 + pos: -30.5,-45.5 parent: 2 - proto: OrganArachnidStomach entities: @@ -68180,6 +70905,21 @@ entities: - type: Transform pos: -50.5,-24.5 parent: 2 + - uid: 15309 + components: + - type: Transform + pos: 15.5,-40.5 + parent: 2 + - uid: 15311 + components: + - type: Transform + pos: 46.5,-39.5 + parent: 2 + - uid: 15313 + components: + - type: Transform + pos: 29.5,7.5 + parent: 2 - proto: PaintingBlunt entities: - uid: 10264 @@ -68218,36 +70958,6 @@ entities: - type: Transform pos: 10.512076,-32.02653 parent: 2 - - uid: 10270 - components: - - type: Transform - pos: -9.339812,-27.507086 - parent: 2 - - uid: 10271 - components: - - type: Transform - pos: -17.327166,-19.47925 - parent: 2 - - uid: 10272 - components: - - type: Transform - pos: -17.31675,-19.47925 - parent: 2 - - uid: 10273 - components: - - type: Transform - pos: -17.31675,-19.47925 - parent: 2 - - uid: 10274 - components: - - type: Transform - pos: -17.31675,-19.47925 - parent: 2 - - uid: 10275 - components: - - type: Transform - pos: -17.31675,-19.47925 - parent: 2 - uid: 10276 components: - type: Transform @@ -68264,36 +70974,6 @@ entities: rot: -1.5707963267948966 rad pos: 2.3629673,-18.321917 parent: 2 - - uid: 10279 - components: - - type: Transform - pos: 41.321945,-0.09843111 - parent: 2 - - uid: 10280 - components: - - type: Transform - pos: 41.71257,-0.0046162605 - parent: 2 - - uid: 10281 - components: - - type: Transform - pos: 41.58757,-0.2078824 - parent: 2 - - uid: 10282 - components: - - type: Transform - pos: 41.759445,-0.3955121 - parent: 2 - - uid: 10283 - components: - - type: Transform - pos: 41.40007,-0.3955121 - parent: 2 - - uid: 10284 - components: - - type: Transform - pos: 41.321945,-0.2078824 - parent: 2 - uid: 10285 components: - type: Transform @@ -68371,79 +71051,128 @@ entities: rot: -1.5707963267948966 rad pos: 30.2323,-44.872406 parent: 2 - - uid: 10300 + - uid: 10302 components: - type: Transform - pos: -9.339812,-27.434118 + pos: -54.258076,-35.258347 parent: 2 - - uid: 10301 + - uid: 10303 components: - type: Transform - pos: -9.339812,-27.309032 + pos: -54.226826,-35.52397 parent: 2 - - uid: 10302 + - uid: 10309 components: + - type: MetaData + name: gas recycler notice - type: Transform - pos: -54.258076,-35.258347 + pos: -46.389156,-35.841656 parent: 2 - - uid: 10303 + - type: Paper + stampState: paper_stamp-centcom + stampedBy: + - stampedColor: '#006600FF' + stampedName: stamp-component-stamped-name-centcom + - stampedColor: '#C69B17FF' + stampedName: stamp-component-stamped-name-ce + content: >- + This is a notice issued to Shōkō's Atmospherics staff. + + + Our gas giant has no usable oxygen gas, therefore it must be recycled from carbon dioxide. This installation uses heat from the TEG's burn chamber to heat up the CO2 in a controlled manner, using small volume pump adjustments. + + + The recycler pumps should all be at ideal starting values, but should be adjusted regularly to keep pressure and temperature within working parameters. Going over 4.5Mpa will prevent heating or result in a complete stall, so manage pressure with utmost care. + + + The recycled oxygen is pumped into a high-efficiency radiator array south of here. All pumps are at ideal settings, turn them on and it will cool the oxygen from thousands of degrees to around room temperature. The thermomachines inside will do the final adjustments. + + + Once you have safe oxygen it can be either used directly in distribution or injected into the oxygen reserve. Please note that this voids the reserve's warranty and NanoTrasen is not responsible for any atmospheric disasters including, but not limited to: the crew's skin melting off, lethal overpressurization, complete atmospheric shutdown or sudden death. + - uid: 15518 components: - type: Transform - pos: -54.226826,-35.52397 + pos: -43.75781,-5.8882527 parent: 2 - - uid: 10304 + - uid: 15519 components: - type: Transform - pos: 44.313606,-35.048164 + pos: -43.75781,-5.8882527 parent: 2 - - uid: 10305 + - uid: 15520 components: - type: Transform - pos: 44.469856,-35.079414 + pos: -43.75781,-5.8882527 parent: 2 - - uid: 10306 + - uid: 15521 components: - type: Transform - pos: 44.469856,-35.079414 + pos: -43.75781,-5.8882527 parent: 2 - - uid: 10307 + - uid: 15522 components: - type: Transform - pos: 44.48548,-35.079414 + pos: -43.75781,-5.8882527 parent: 2 - - uid: 10308 + - uid: 15523 components: - type: Transform - pos: 44.501106,-35.079414 + pos: -43.75781,-5.8882527 parent: 2 - - uid: 10309 + - uid: 15524 components: - - type: MetaData - name: gas recycler notice - type: Transform - pos: -46.389156,-35.841656 + pos: -43.75781,-5.8882527 + parent: 2 + - uid: 15525 + components: + - type: Transform + pos: -43.75781,-5.8882527 + parent: 2 + - uid: 15526 + components: + - type: Transform + pos: -43.75781,-5.8882527 + parent: 2 + - uid: 15527 + components: + - type: Transform + pos: -43.75781,-5.8882527 + parent: 2 + - uid: 15549 + components: + - type: Transform + pos: 50.519657,-28.275526 parent: 2 - type: Paper - stampState: paper_stamp-centcom + stampState: paper_stamp-ce stampedBy: - - stampedColor: '#006600FF' - stampedName: stamp-component-stamped-name-centcom - stampedColor: '#C69B17FF' stampedName: stamp-component-stamped-name-ce - content: >- - This is a notice issued to Shōkō's Atmospherics staff. + - stampedColor: '#006600FF' + stampedName: stamp-component-stamped-name-centcom + content: >2+ + [color=orange][head=3] How to use P.A.C.M.A.N. Generator [/head][/color] - Our gas giant has no usable oxygen gas, therefore it must be recycled from carbon dioxide. This installation uses heat from the TEG's burn chamber to heat up the CO2 in a controlled manner, using small volume pump adjustments. + The P.A.C.M.A.N. Generator is a staple point of Nanotrasen Emergency Power Scenarios. In the event of an emergency this helpful guide will instruct you on how to start up the generator and continue running command as normal. - The recycler pumps should all be at ideal starting values, but should be adjusted regularly to keep pressure and temperature within working parameters. Going over 4.5Mpa will prevent heating or result in a complete stall, so manage pressure with utmost care. + 1. Make sure generator is bolted to the floor - The recycled oxygen is pumped into a high-efficiency radiator array south of here. All pumps are at ideal settings, turn them on and it will cool the oxygen from thousands of degrees to around room temperature. The thermomachines inside will do the final adjustments. + 2. Insert [color=purple]Plasma Sheets[/color] into fuel chamber + + + 3. Change the ouput to [color=yellow]MV[/color] instead of [color=orange]HV[/color] + + + 4. Pull the starting cord to activate the generator + + + After that you will be able to use bridge controls for a short period of time. It is advisable to use it wisely as fuel will burn up in a matter of minutes, check the fuel timer on the left side of the generator to see how much time you have left. - Once you have safe oxygen it can be either used directly in distribution or injected into the oxygen reserve. Please note that this voids the reserve's warranty and NanoTrasen is not responsible for any atmospheric disasters including, but not limited to: the crew's skin melting off, lethal overpressurization, complete atmospheric shutdown or sudden death. - proto: PaperBin entities: - uid: 10310 @@ -68458,14 +71187,29 @@ entities: - type: Transform pos: -33.5,-17.5 parent: 2 - - uid: 10312 +- proto: PaperBin20 + entities: + - uid: 4123 components: - type: Transform - rot: 3.141592653589793 rad - pos: 19.5,-38.5 + pos: 19.5,-39.5 + parent: 2 + - uid: 5976 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-27.5 + parent: 2 + - uid: 6508 + components: + - type: Transform + pos: -17.5,-19.5 + parent: 2 + - uid: 9234 + components: + - type: Transform + pos: 41.5,0.5 parent: 2 -- proto: PaperBin20 - entities: - uid: 10313 components: - type: Transform @@ -68482,6 +71226,11 @@ entities: - type: Transform pos: -28.5,-6.5 parent: 2 + - uid: 10559 + components: + - type: Transform + pos: 44.5,-33.5 + parent: 2 - proto: PaperBin5 entities: - uid: 10316 @@ -68494,6 +71243,58 @@ entities: - type: Transform pos: 30.5,3.5 parent: 2 +- proto: PaperCaptainsThoughts + entities: + - uid: 15048 + components: + - type: Transform + pos: 37.943455,-31.413465 + parent: 2 + - uid: 15049 + components: + - type: Transform + pos: 37.943455,-31.413465 + parent: 2 + - uid: 15050 + components: + - type: Transform + pos: 37.943455,-31.413465 + parent: 2 + - uid: 15051 + components: + - type: Transform + pos: 37.943455,-31.413465 + parent: 2 + - uid: 15052 + components: + - type: Transform + pos: 37.943455,-31.413465 + parent: 2 + - uid: 15053 + components: + - type: Transform + pos: 37.943455,-31.413465 + parent: 2 + - uid: 15054 + components: + - type: Transform + pos: 37.943455,-31.413465 + parent: 2 + - uid: 15055 + components: + - type: Transform + pos: 37.943455,-31.413465 + parent: 2 + - uid: 15056 + components: + - type: Transform + pos: 37.943455,-31.413465 + parent: 2 + - uid: 15057 + components: + - type: Transform + pos: 37.943455,-31.413465 + parent: 2 - proto: PaperCNCSheet entities: - uid: 10318 @@ -68567,6 +71368,36 @@ entities: parent: 2 - proto: PaperOffice entities: + - uid: 587 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.515396,-37.79739 + parent: 2 + - uid: 4126 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.515396,-37.79739 + parent: 2 + - uid: 4127 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.515396,-37.79739 + parent: 2 + - uid: 5977 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.515396,-37.79739 + parent: 2 + - uid: 6509 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.515396,-37.79739 + parent: 2 - uid: 10330 components: - type: Transform @@ -68702,7 +71533,7 @@ entities: It has always been a station intended as a location for long term work and as a stop for passersby. - Colin fell out of love with Shoukou, so then Shoukou was embellished and changed around by Adrian >'-'<, and it is now currently being maintained by Adeinitas current-day. + Colin fell out of love with Shoukou, so then Shoukou was embellished and changed around by Adrian >'-'<, and then it was being maintained by Adeinitas for a short period who originally wrote this note. As of today, it is being maintained by Unkn0wn_Gh0st. It has been with a community through hell and back. @@ -68712,6 +71543,23 @@ entities: Now that you've read this, I suggest you get back to Engineering and out of the station anchor room before something bad happens. + + - uid: 15330 + components: + - type: Transform + pos: -18.504515,-40.38329 + parent: 2 + - type: Paper + stampState: paper_stamp-signature + stampedBy: + - stampedColor: '#2F4F4FFF' + stampedName: Rock-and-Stone + content: >+ + We moved the ore processor outside on the conveyor belt with our new recycler centcom just sent up. Got some engie intern to add some "security" measures to the thing so no one tries to nab it but hell they'd be stupid to mess with us. Hope ya enjoy next shift. + + + Rock and Stone, brother. Salvie heading out. + - proto: PaperScrap entities: - uid: 10343 @@ -68724,10 +71572,10 @@ entities: - uid: 10344 components: - type: Transform - pos: 45.99733,-49.654293 + pos: 45.9584,-48.06076 parent: 2 - type: Stack - count: 22 + count: 20 - uid: 10345 components: - type: Transform @@ -68735,8 +71583,32 @@ entities: parent: 2 - type: Stack count: 3 + - uid: 15119 + components: + - type: Transform + pos: 51.301815,-17.692083 + parent: 2 + - type: Stack + count: 6 + - uid: 15541 + components: + - type: Transform + pos: -12.171196,-45.919193 + parent: 2 + - type: Stack + count: 23 - proto: Pen entities: + - uid: 9203 + components: + - type: Transform + pos: 41.609093,0.15470839 + parent: 2 + - uid: 9239 + components: + - type: Transform + pos: 41.67854,0.30054164 + parent: 2 - uid: 10346 components: - type: Transform @@ -68763,6 +71635,11 @@ entities: - type: Transform pos: -29.441534,-6.502117 parent: 2 + - uid: 15528 + components: + - type: Transform + pos: -43.424477,-6.013253 + parent: 2 - proto: PersonalAI entities: - uid: 14748 @@ -68770,6 +71647,19 @@ entities: - type: Transform pos: 64.591995,-18.484604 parent: 2 + - uid: 15489 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.46874,-12.254066 + parent: 2 +- proto: PhoneInstrument + entities: + - uid: 10990 + components: + - type: Transform + pos: 44.49003,-34.409584 + parent: 2 - proto: PianoInstrument entities: - uid: 10351 @@ -68804,6 +71694,39 @@ entities: - type: Transform pos: -57.5,-31.5 parent: 2 +- proto: PlasmaReinforcedWindowDirectional + entities: + - uid: 10972 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 59.5,-26.5 + parent: 2 + - uid: 11096 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 59.5,-27.5 + parent: 2 + - uid: 11173 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 59.5,-28.5 + parent: 2 +- proto: PlasmaWindoorSecureCommandLocked + entities: + - uid: 12670 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 72.5,-22.5 + parent: 2 + - uid: 12707 + components: + - type: Transform + pos: 72.5,-24.5 + parent: 2 - proto: PlasticFlapsAirtightClear entities: - uid: 10356 @@ -68818,6 +71741,23 @@ entities: rot: 1.5707963267948966 rad pos: -21.5,-43.5 parent: 2 +- proto: PlasticFlapsAirtightOpaque + entities: + - uid: 15321 + components: + - type: Transform + pos: -30.5,-46.5 + parent: 2 + - uid: 15322 + components: + - type: Transform + pos: -30.5,-44.5 + parent: 2 + - uid: 15536 + components: + - type: Transform + pos: -32.5,-62.5 + parent: 2 - proto: PlushieAtmosian entities: - uid: 10358 @@ -68832,11 +71772,6 @@ entities: parent: 2 - proto: PlushieBee entities: - - uid: 10360 - components: - - type: Transform - pos: 48.453728,-6.551665 - parent: 2 - uid: 10361 components: - type: Transform @@ -68850,6 +71785,16 @@ entities: - type: Transform pos: 61.546658,-27.781536 parent: 2 +- proto: PlushieGhost + entities: + - uid: 15103 + components: + - type: MetaData + desc: A strange forgotten toy... + name: unknown ghost toy + - type: Transform + pos: 39.040783,-35.417225 + parent: 1 - proto: PlushieHampter entities: - uid: 5377 @@ -68864,7 +71809,7 @@ entities: - uid: 14928 components: - type: Transform - pos: 72.5058,-23.445868 + pos: 72.70667,-23.536297 parent: 2 - proto: PlushieLamp entities: @@ -68946,7 +71891,7 @@ entities: desc: Don't knock his hustle! name: Fred - type: Transform - pos: -50.507698,12.956425 + pos: -50.50994,13.041668 parent: 2 - proto: PlushieRouny entities: @@ -69050,6 +71995,14 @@ entities: - type: Transform pos: -57.5,-4.5 parent: 2 + - uid: 15547 + components: + - type: Transform + anchored: True + pos: 50.5,-28.5 + parent: 2 + - type: Physics + bodyType: Static - proto: PortableGeneratorSuperPacman entities: - uid: 10389 @@ -69290,6 +72243,14 @@ entities: - type: Transform pos: 30.5,12.5 parent: 2 +- proto: PosterLegitNoTouching + entities: + - uid: 12407 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 44.5,2.5 + parent: 2 - proto: PosterLegitNTTGC entities: - uid: 10426 @@ -69297,6 +72258,14 @@ entities: - type: Transform pos: 32.5,-0.5 parent: 2 +- proto: PosterLegitObey + entities: + - uid: 12406 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,2.5 + parent: 2 - proto: PosterLegitPeriodicTable entities: - uid: 10427 @@ -69321,11 +72290,22 @@ entities: parent: 2 - proto: PosterLegitSafetyInternals entities: + - uid: 9327 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-8.5 + parent: 2 - uid: 10430 components: - type: Transform pos: -24.5,-40.5 parent: 2 + - uid: 15493 + components: + - type: Transform + pos: 57.5,-43.5 + parent: 2 - proto: PosterLegitSafetyMothFires entities: - uid: 10431 @@ -69341,6 +72321,13 @@ entities: - type: Transform pos: -50.5,-5.5 parent: 2 +- proto: PosterLegitSafetyMothMeth + entities: + - uid: 15061 + components: + - type: Transform + pos: 2.5,-25.5 + parent: 2 - proto: PosterLegitScience entities: - uid: 10433 @@ -69355,6 +72342,18 @@ entities: - type: Transform pos: 23.5,-15.5 parent: 2 + - uid: 11999 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-32.5 + parent: 2 + - uid: 15391 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 45.5,7.5 + parent: 2 - proto: PosterLegitShoukou entities: - uid: 10435 @@ -69377,6 +72376,11 @@ entities: - type: Transform pos: 7.5,19.5 parent: 2 + - uid: 15017 + components: + - type: Transform + pos: 51.5,-30.5 + parent: 2 - proto: PosterLegitStateLaws entities: - uid: 14704 @@ -69409,6 +72413,11 @@ entities: - type: Transform pos: 30.5,14.5 parent: 2 + - uid: 15016 + components: + - type: Transform + pos: 52.5,-30.5 + parent: 2 - proto: PottedPlant10 entities: - uid: 10443 @@ -69481,40 +72490,40 @@ entities: - type: Transform pos: 5.5,1.5 parent: 2 - - uid: 10457 + - uid: 10460 components: - type: Transform - pos: 49.5,-31.5 + pos: 42.5,-29.5 parent: 2 - - uid: 10458 + - uid: 10461 components: - type: Transform - pos: 55.5,-31.5 + pos: 46.5,-29.5 parent: 2 - - uid: 10459 + - uid: 14726 components: - type: Transform - pos: 55.5,-36.5 + pos: 65.5,-22.5 parent: 2 - - uid: 10460 + - uid: 14807 components: - type: Transform - pos: 42.5,-29.5 + pos: 61.5,-26.5 parent: 2 - - uid: 10461 + - uid: 15007 components: - type: Transform - pos: 46.5,-29.5 + pos: 55.5,-31.5 parent: 2 - - uid: 14726 + - uid: 15008 components: - type: Transform - pos: 65.5,-22.5 + pos: 49.5,-31.5 parent: 2 - - uid: 14807 + - uid: 15009 components: - type: Transform - pos: 61.5,-26.5 + pos: 55.5,-36.5 parent: 2 - proto: PottedPlant22 entities: @@ -69547,6 +72556,11 @@ entities: parent: 2 - proto: PottedPlantRandom entities: + - uid: 4153 + components: + - type: Transform + pos: 45.5,-31.5 + parent: 2 - uid: 10467 components: - type: Transform @@ -69697,11 +72711,6 @@ entities: - type: Transform pos: -1.5,-45.5 parent: 2 - - uid: 10497 - components: - - type: Transform - pos: -14.5,-24.5 - parent: 2 - uid: 10498 components: - type: Transform @@ -69717,11 +72726,6 @@ entities: - type: Transform pos: 30.5,-38.5 parent: 2 - - uid: 10501 - components: - - type: Transform - pos: 42.5,-37.5 - parent: 2 - uid: 10502 components: - type: Transform @@ -69737,15 +72741,20 @@ entities: - type: Transform pos: 24.5,-16.5 parent: 2 - - uid: 10505 + - uid: 10506 components: - type: Transform - pos: 59.5,-49.5 + pos: -44.5,7.5 parent: 2 - - uid: 10506 + - uid: 11991 components: - type: Transform - pos: -44.5,7.5 + pos: 47.5,-36.5 + parent: 2 + - uid: 15495 + components: + - type: Transform + pos: -9.5,-24.5 parent: 2 - proto: PottedPlantRandomPlastic entities: @@ -69880,8 +72889,22 @@ entities: - type: Transform pos: 71.5,-19.5 parent: 2 +- proto: PoweredLEDLightPostSmall + entities: + - uid: 9907 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -33.5,-69.5 + parent: 2 - proto: Poweredlight entities: + - uid: 5979 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -19.5,-18.5 + parent: 2 - uid: 10529 components: - type: Transform @@ -70075,11 +73098,6 @@ entities: parent: 2 - type: ApcPowerReceiver powerLoad: 0 - - uid: 10559 - components: - - type: Transform - pos: -17.5,-15.5 - parent: 2 - uid: 10560 components: - type: Transform @@ -71104,15 +74122,22 @@ entities: - type: Transform pos: -29.5,-64.5 parent: 2 - - uid: 10713 + - uid: 10714 components: - type: Transform - pos: -31.5,-70.5 + pos: -62.5,-18.5 parent: 2 - - uid: 10714 + - uid: 15542 components: - type: Transform - pos: -62.5,-18.5 + rot: -1.5707963267948966 rad + pos: -31.5,-52.5 + parent: 2 + - uid: 15543 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -27.5,-43.5 parent: 2 - proto: PoweredlightRed entities: @@ -71464,12 +74489,6 @@ entities: rot: 1.5707963267948966 rad pos: 17.5,-37.5 parent: 2 - - uid: 10771 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -50.5,10.5 - parent: 2 - uid: 10772 components: - type: Transform @@ -71509,6 +74528,17 @@ entities: rot: 3.141592653589793 rad pos: 62.5,-24.5 parent: 2 + - uid: 15045 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 54.5,-44.5 + parent: 2 + - uid: 15060 + components: + - type: Transform + pos: -17.5,-15.5 + parent: 2 - proto: PoweredSmallLightEmpty entities: - uid: 10776 @@ -71545,12 +74575,6 @@ entities: - type: Transform pos: 35.5,13.5 parent: 2 - - uid: 10781 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -44.5,10.5 - parent: 2 - uid: 10782 components: - type: Transform @@ -71559,6 +74583,18 @@ entities: parent: 2 - proto: PoweredSmallLightMaintenance entities: + - uid: 10254 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -44.5,10.5 + parent: 2 + - uid: 10279 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -50.5,10.5 + parent: 2 - uid: 10783 components: - type: Transform @@ -72017,11 +75053,10 @@ entities: parent: 2 - proto: RadioHandheld entities: - - uid: 10867 + - uid: 9867 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 41.50296,0.532346 + pos: 41.22715,0.64081955 parent: 2 - uid: 10868 components: @@ -72469,22 +75504,23 @@ entities: - type: Transform pos: 71.5,-27.5 parent: 2 -- proto: RandomBook +- proto: RandomDrinkGlass entities: - - uid: 10944 + - uid: 2047 components: - type: Transform - pos: 33.437737,18.616049 + pos: 50.5,-42.5 parent: 2 -- proto: RandomDrinkBottle - entities: - - uid: 10945 + - uid: 4186 components: - type: Transform - pos: 53.5,-31.5 + pos: 49.5,-42.5 + parent: 2 + - uid: 4187 + components: + - type: Transform + pos: 51.5,-42.5 parent: 2 -- proto: RandomDrinkGlass - entities: - uid: 10946 components: - type: Transform @@ -72510,6 +75546,13 @@ entities: - type: Transform pos: -42.5,-19.5 parent: 2 +- proto: RandomDrinkSoda + entities: + - uid: 15463 + components: + - type: Transform + pos: 16.5,-9.5 + parent: 2 - proto: RandomFoodBakedSingle entities: - uid: 10951 @@ -72546,6 +75589,46 @@ entities: - type: Transform pos: -7.5,-44.5 parent: 2 + - uid: 15020 + components: + - type: Transform + pos: 51.5,-33.5 + parent: 2 + - uid: 15021 + components: + - type: Transform + pos: 52.5,-33.5 + parent: 2 + - uid: 15022 + components: + - type: Transform + pos: 53.5,-33.5 + parent: 2 + - uid: 15023 + components: + - type: Transform + pos: 53.5,-34.5 + parent: 2 + - uid: 15024 + components: + - type: Transform + pos: 53.5,-35.5 + parent: 2 + - uid: 15025 + components: + - type: Transform + pos: 52.5,-35.5 + parent: 2 + - uid: 15026 + components: + - type: Transform + pos: 51.5,-35.5 + parent: 2 + - uid: 15027 + components: + - type: Transform + pos: 51.5,-34.5 + parent: 2 - proto: RandomFoodSingle entities: - uid: 10957 @@ -72593,6 +75676,11 @@ entities: - type: Transform pos: -10.5,2.5 parent: 2 + - uid: 15462 + components: + - type: Transform + pos: 16.5,-3.5 + parent: 2 - proto: RandomInstruments entities: - uid: 10966 @@ -72619,17 +75707,17 @@ entities: parent: 2 - proto: RandomItem entities: - - uid: 10970 + - uid: 15479 components: - type: Transform - pos: 47.5,-12.5 + pos: 48.5,-9.5 parent: 2 - - uid: 10971 + - uid: 15480 components: - type: Transform - pos: 47.5,-10.5 + pos: 47.5,-13.5 parent: 2 - - uid: 10972 + - uid: 15481 components: - type: Transform pos: 47.5,-6.5 @@ -72717,16 +75805,6 @@ entities: - type: Transform pos: -33.5,-16.5 parent: 2 - - uid: 10989 - components: - - type: Transform - pos: 42.5,-30.5 - parent: 2 - - uid: 10990 - components: - - type: Transform - pos: 46.5,-30.5 - parent: 2 - uid: 10991 components: - type: Transform @@ -72752,6 +75830,16 @@ entities: - type: Transform pos: -8.5,6.5 parent: 2 + - uid: 11959 + components: + - type: Transform + pos: 46.5,-30.5 + parent: 2 + - uid: 12000 + components: + - type: Transform + pos: 42.5,-30.5 + parent: 2 - proto: RandomPosterAny entities: - uid: 10996 @@ -73090,8 +76178,18 @@ entities: - type: Transform pos: 38.5,-0.5 parent: 2 + - uid: 15047 + components: + - type: Transform + pos: 54.5,-45.5 + parent: 2 - proto: RandomSpawner entities: + - uid: 5320 + components: + - type: Transform + pos: -38.5,8.5 + parent: 2 - uid: 11061 components: - type: Transform @@ -73220,30 +76318,10 @@ entities: pos: -54.5,-10.5 parent: 2 - uid: 11086 - components: - - type: Transform - pos: -38.5,8.5 - parent: 2 - - uid: 11087 components: - type: Transform pos: -38.5,9.5 parent: 2 - - uid: 11088 - components: - - type: Transform - pos: -38.5,10.5 - parent: 2 - - uid: 11089 - components: - - type: Transform - pos: -39.5,7.5 - parent: 2 - - uid: 11090 - components: - - type: Transform - pos: -40.5,10.5 - parent: 2 - uid: 11091 components: - type: Transform @@ -73269,15 +76347,25 @@ entities: - type: Transform pos: 44.5,10.5 parent: 2 - - uid: 11096 + - uid: 11097 components: - type: Transform - pos: 17.5,-7.5 + pos: -44.5,4.5 parent: 2 - - uid: 11097 + - uid: 13889 components: - type: Transform - pos: -44.5,4.5 + pos: -38.5,10.5 + parent: 2 + - uid: 15112 + components: + - type: Transform + pos: -40.5,10.5 + parent: 2 + - uid: 15113 + components: + - type: Transform + pos: -40.5,8.5 parent: 2 - proto: RandomSpawner100 entities: @@ -73376,13 +76464,13 @@ entities: - type: Transform pos: 4.5,16.5 parent: 2 - - uid: 11114 +- proto: RandomVendingSnacks + entities: + - uid: 5980 components: - type: Transform - pos: 60.5,-39.5 + pos: 54.5,-38.5 parent: 2 -- proto: RandomVendingSnacks - entities: - uid: 11115 components: - type: Transform @@ -73398,6 +76486,20 @@ entities: - type: Transform pos: 10.5,-10.5 parent: 2 +- proto: RandomWoodenStructure + entities: + - uid: 14443 + components: + - type: Transform + pos: -55.5,-18.5 + parent: 2 +- proto: RandomWoodenSupport + entities: + - uid: 14601 + components: + - type: Transform + pos: -54.5,-18.5 + parent: 2 - proto: ReagentGrinderMachineCircuitboard entities: - uid: 11118 @@ -73407,11 +76509,16 @@ entities: parent: 2 - proto: Recycler entities: - - uid: 11119 + - uid: 11088 components: - type: Transform pos: -38.5,7.5 parent: 2 + - uid: 14465 + components: + - type: Transform + pos: -32.5,-60.5 + parent: 2 - proto: ReinforcedGirder entities: - uid: 11120 @@ -73470,51 +76577,16 @@ entities: - type: Transform pos: -34.5,16.5 parent: 2 - - uid: 11131 - components: - - type: Transform - pos: 54.5,-9.5 - parent: 2 - - uid: 11132 - components: - - type: Transform - pos: 54.5,3.5 - parent: 2 - uid: 11133 components: - type: Transform pos: -27.5,16.5 parent: 2 - - uid: 11134 - components: - - type: Transform - pos: 51.5,7.5 - parent: 2 - - uid: 11135 - components: - - type: Transform - pos: 54.5,-5.5 - parent: 2 - - uid: 11136 - components: - - type: Transform - pos: 47.5,11.5 - parent: 2 - - uid: 11137 - components: - - type: Transform - pos: 42.5,12.5 - parent: 2 - uid: 11138 components: - type: Transform pos: 28.5,20.5 parent: 2 - - uid: 11139 - components: - - type: Transform - pos: 54.5,-0.5 - parent: 2 - uid: 11140 components: - type: Transform @@ -73716,8 +76788,40 @@ entities: - type: Transform pos: 63.5,-32.5 parent: 2 + - uid: 15559 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -28.5,-67.5 + parent: 2 - proto: ReinforcedPlasmaWindow entities: + - uid: 10713 + components: + - type: Transform + pos: -26.5,-35.5 + parent: 2 + - uid: 10771 + components: + - type: Transform + pos: -25.5,-35.5 + parent: 2 + - uid: 10944 + components: + - type: Transform + pos: -53.5,-45.5 + parent: 2 + - uid: 10970 + components: + - type: Transform + pos: -53.5,-46.5 + parent: 2 + - uid: 10971 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 73.5,-23.5 + parent: 2 - uid: 11168 components: - type: Transform @@ -73743,16 +76847,6 @@ entities: - type: Transform pos: -50.5,-46.5 parent: 2 - - uid: 11173 - components: - - type: Transform - pos: -48.5,-48.5 - parent: 2 - - uid: 11174 - components: - - type: Transform - pos: -48.5,-46.5 - parent: 2 - uid: 11175 components: - type: Transform @@ -73833,8 +76927,44 @@ entities: - type: Transform pos: -59.5,-36.5 parent: 2 + - uid: 12740 + components: + - type: Transform + pos: 60.5,-27.5 + parent: 2 + - uid: 13150 + components: + - type: Transform + pos: 60.5,-26.5 + parent: 2 + - uid: 13952 + components: + - type: Transform + pos: 60.5,-28.5 + parent: 2 - proto: ReinforcedWindow entities: + - uid: 5981 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 45.5,-30.5 + parent: 2 + - uid: 8934 + components: + - type: Transform + pos: 39.5,-5.5 + parent: 2 + - uid: 10170 + components: + - type: Transform + pos: 58.5,-48.5 + parent: 2 + - uid: 10867 + components: + - type: Transform + pos: 37.5,-5.5 + parent: 2 - uid: 11191 components: - type: Transform @@ -73970,21 +77100,6 @@ entities: - type: Transform pos: -22.5,-24.5 parent: 2 - - uid: 11218 - components: - - type: Transform - pos: -25.5,-35.5 - parent: 2 - - uid: 11219 - components: - - type: Transform - pos: -26.5,-35.5 - parent: 2 - - uid: 11220 - components: - - type: Transform - pos: 39.5,-5.5 - parent: 2 - uid: 11221 components: - type: Transform @@ -74399,11 +77514,6 @@ entities: - type: Transform pos: -36.5,-35.5 parent: 2 - - uid: 11303 - components: - - type: Transform - pos: 37.5,-5.5 - parent: 2 - uid: 11304 components: - type: Transform @@ -74514,11 +77624,6 @@ entities: - type: Transform pos: 51.5,-25.5 parent: 2 - - uid: 11326 - components: - - type: Transform - pos: 49.5,-20.5 - parent: 2 - uid: 11327 components: - type: Transform @@ -74724,12 +77829,6 @@ entities: - type: Transform pos: 45.5,-46.5 parent: 2 - - uid: 11368 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 45.5,-30.5 - parent: 2 - uid: 11369 components: - type: Transform @@ -75440,11 +78539,6 @@ entities: - type: Transform pos: 61.5,-47.5 parent: 2 - - uid: 11510 - components: - - type: Transform - pos: 61.5,-48.5 - parent: 2 - uid: 11511 components: - type: Transform @@ -75460,11 +78554,6 @@ entities: - type: Transform pos: 57.5,-47.5 parent: 2 - - uid: 11514 - components: - - type: Transform - pos: 57.5,-48.5 - parent: 2 - uid: 11515 components: - type: Transform @@ -75532,40 +78621,15 @@ entities: - type: Transform pos: 31.5,19.5 parent: 2 - - uid: 11528 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -53.5,-45.5 - parent: 2 - - uid: 11529 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: -53.5,-46.5 - parent: 2 - - uid: 14805 + - uid: 15107 components: - type: Transform - pos: 73.5,-23.5 + pos: 60.5,-48.5 parent: 2 - - uid: 14998 + - uid: 15246 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 60.5,-26.5 - parent: 2 - - uid: 14999 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 60.5,-27.5 - parent: 2 - - uid: 15000 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: 60.5,-28.5 + pos: 49.5,-20.5 parent: 2 - proto: ResearchAndDevelopmentServer entities: @@ -75581,6 +78645,18 @@ entities: - type: Transform pos: -43.5,-8.5 parent: 2 +- proto: RifleSafeSpawner + entities: + - uid: 8606 + components: + - type: Transform + pos: 29.5,-10.5 + parent: 2 + - uid: 8681 + components: + - type: Transform + pos: 31.5,-10.5 + parent: 2 - proto: RiotShield entities: - uid: 11532 @@ -75607,10 +78683,9 @@ entities: parent: 2 - proto: Roboisseur entities: - - uid: 11536 + - uid: 15249 components: - type: Transform - rot: -1.5707963267948966 rad pos: -11.5,-11.5 parent: 2 - proto: RobustHarvestChemistryBottle @@ -75637,7 +78712,8 @@ entities: - uid: 11540 components: - type: Transform - pos: -17.69175,-19.103989 + rot: 6.283185307179586 rad + pos: -17.713688,-18.93777 parent: 2 - uid: 11541 components: @@ -75649,7 +78725,8 @@ entities: - uid: 11542 components: - type: Transform - pos: -17.681334,-19.270771 + rot: 6.283185307179586 rad + pos: -17.428967,-18.958605 parent: 2 - uid: 11543 components: @@ -75682,11 +78759,11 @@ entities: parent: 2 - proto: ScalpelShiv entities: - - uid: 11548 + - uid: 11174 components: - type: Transform - rot: 3.141592653589793 rad - pos: 40.427826,3.6428523 + rot: -1.5707963267948966 rad + pos: 40.785152,3.511335 parent: 2 - proto: SchoolgirlUniformSpawner entities: @@ -75769,7 +78846,7 @@ entities: - uid: 11558 components: - type: Transform - pos: 15.5,-16.5 + pos: 15.5,-17.5 parent: 2 - uid: 11559 components: @@ -75830,6 +78907,11 @@ entities: - type: Transform pos: -16.5,-3.5 parent: 2 + - uid: 12565 + components: + - type: Transform + pos: 36.5,5.5 + parent: 2 - proto: ShardGlass entities: - uid: 11569 @@ -75982,6 +79064,13 @@ entities: - type: Transform pos: -1.0009673,-26.397503 parent: 2 +- proto: SheetPlasma10 + entities: + - uid: 15548 + components: + - type: Transform + pos: 50.623825,-29.619276 + parent: 2 - proto: SheetPlasteel entities: - uid: 11595 @@ -76097,6 +79186,32 @@ entities: - type: Transform pos: -28.644379,-30.493353 parent: 2 +- proto: ShelfBar + entities: + - uid: 15011 + components: + - type: Transform + pos: 53.5,-30.5 + parent: 2 + - type: Storage + storedItems: + 15012: + position: 3,3 + _rotation: South + - type: ContainerContainer + containers: + storagebase: !type:Container + showEnts: False + occludes: True + ents: + - 15012 +- proto: ShelfChemistryChemistrySecure + entities: + - uid: 15062 + components: + - type: Transform + pos: 0.5,-25.5 + parent: 2 - proto: ShelfMetal entities: - uid: 11612 @@ -76125,6 +79240,36 @@ entities: - type: Transform pos: -18.5,-32.5 parent: 2 + - uid: 15315 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -49.5,-31.5 + parent: 2 + - type: Storage + storedItems: + 15316: + position: 0,0 + _rotation: South + 15317: + position: 1,3 + _rotation: South + 15318: + position: 1,0 + _rotation: South + 15319: + position: 2,3 + _rotation: East + - type: ContainerContainer + containers: + storagebase: !type:Container + showEnts: False + occludes: True + ents: + - 15316 + - 15317 + - 15319 + - 15318 - proto: Shinai entities: - uid: 11616 @@ -76156,6 +79301,12 @@ entities: - type: Transform pos: 39.5,-10.5 parent: 2 + - uid: 11943 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 48.5,-31.5 + parent: 2 - proto: ShowcaseRobot entities: - uid: 14829 @@ -76165,7 +79316,7 @@ entities: parent: 2 - proto: ShowcaseRobotMarauder entities: - - uid: 14724 + - uid: 11218 components: - type: Transform pos: 61.5,-22.5 @@ -76179,25 +79330,20 @@ entities: parent: 2 - proto: ShuttersNormalOpen entities: - - uid: 11621 - components: - - type: Transform - pos: -11.5,-10.5 - parent: 2 - - uid: 11622 + - uid: 5358 components: - type: Transform - pos: -10.5,-10.5 + pos: -16.5,-20.5 parent: 2 - - uid: 11623 + - uid: 5773 components: - type: Transform - pos: -9.5,-10.5 + pos: -17.5,-20.5 parent: 2 - - uid: 11624 + - uid: 5774 components: - type: Transform - pos: -8.5,-10.5 + pos: -19.5,-20.5 parent: 2 - uid: 11625 components: @@ -76440,9 +79586,51 @@ entities: - type: Transform pos: 73.5,-23.5 parent: 2 +- proto: ShuttersWindowOpen + entities: + - uid: 5865 + components: + - type: Transform + pos: -18.5,-20.5 + parent: 2 + - uid: 11514 + components: + - type: Transform + pos: -8.5,-10.5 + parent: 2 + - uid: 11536 + components: + - type: Transform + pos: -9.5,-10.5 + parent: 2 + - uid: 11621 + components: + - type: Transform + pos: -10.5,-10.5 + parent: 2 + - uid: 11622 + components: + - type: Transform + pos: -11.5,-10.5 + parent: 2 + - uid: 15533 + components: + - type: Transform + pos: 18.5,-3.5 + parent: 2 + - uid: 15534 + components: + - type: Transform + pos: 18.5,-6.5 + parent: 2 + - uid: 15535 + components: + - type: Transform + pos: 18.5,-9.5 + parent: 2 - proto: ShuttleManipulator entities: - - uid: 11666 + - uid: 12451 components: - type: Transform pos: 52.5,-34.5 @@ -76503,6 +79691,16 @@ entities: linkedPorts: 277: - Pressed: Open + - uid: 11676 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 15.5,-16.5 + parent: 2 + - type: DeviceLinkSource + linkedPorts: + 10006: + - Pressed: Toggle - proto: SignalButtonDirectional entities: - uid: 11672 @@ -76595,18 +79793,6 @@ entities: - Pressed: Open - Pressed: Close - Pressed: Toggle - - uid: 11676 - components: - - type: MetaData - name: Front door - - type: Transform - rot: 1.5707963267948966 rad - pos: 16.5,-16.5 - parent: 2 - - type: DeviceLinkSource - linkedPorts: - 326: - - Pressed: Toggle - uid: 11677 components: - type: MetaData @@ -76639,26 +79825,6 @@ entities: color: '#0335FCFF' - proto: SignalSwitch entities: - - uid: 11679 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -11.5,-6.5 - parent: 2 - - type: DeviceLinkSource - linkedPorts: - 11621: - - On: Close - - Off: Open - 11622: - - On: Close - - Off: Open - 11623: - - On: Close - - Off: Open - 11624: - - On: Close - - Off: Open - uid: 11680 components: - type: Transform @@ -76700,18 +79866,6 @@ entities: 5328: - On: Forward - Off: Off - - uid: 11681 - components: - - type: MetaData - name: Janitorial service light - - type: Transform - pos: 16.5,-16.5 - parent: 2 - - type: DeviceLinkSource - linkedPorts: - 10006: - - On: On - - Off: Off - proto: SignalSwitchDirectional entities: - uid: 11682 @@ -76786,6 +79940,9 @@ entities: 11629: - On: Close - Off: Open + 15533: + - On: Close + - Off: Open - uid: 11686 components: - type: Transform @@ -76802,6 +79959,9 @@ entities: 11630: - On: Close - Off: Open + 15535: + - On: Close + - Off: Open lastSignals: Status: True - uid: 11687 @@ -76818,6 +79978,9 @@ entities: 11632: - On: Close - Off: Open + 15534: + - On: Close + - Off: Open - uid: 11688 components: - type: Transform @@ -76970,6 +80133,11 @@ entities: rot: -1.5707963267948966 rad pos: 33.5,-5.5 parent: 2 + - uid: 15338 + components: + - type: Transform + pos: 28.5,-5.5 + parent: 2 - proto: SignAtmos entities: - uid: 11699 @@ -77536,6 +80704,61 @@ entities: - type: Transform pos: 66.5,-25.5 parent: 2 + - uid: 15192 + components: + - type: Transform + pos: 53.5,-17.5 + parent: 2 + - uid: 15235 + components: + - type: Transform + pos: 49.5,-19.5 + parent: 2 + - uid: 15236 + components: + - type: Transform + pos: 54.5,-15.5 + parent: 2 + - uid: 15237 + components: + - type: Transform + pos: 54.5,-10.5 + parent: 2 + - uid: 15238 + components: + - type: Transform + pos: 54.5,-5.5 + parent: 2 + - uid: 15239 + components: + - type: Transform + pos: 54.5,2.5 + parent: 2 + - uid: 15240 + components: + - type: Transform + pos: 52.5,7.5 + parent: 2 + - uid: 15241 + components: + - type: Transform + pos: 49.5,9.5 + parent: 2 + - uid: 15242 + components: + - type: Transform + pos: 47.5,12.5 + parent: 2 + - uid: 15243 + components: + - type: Transform + pos: 40.5,12.5 + parent: 2 + - uid: 15244 + components: + - type: Transform + pos: 38.5,10.5 + parent: 2 - proto: SignEngineering entities: - uid: 11786 @@ -77645,22 +80868,21 @@ entities: parent: 2 - proto: SignLawyer entities: - - uid: 11801 + - uid: 5982 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 11.5,7.5 + pos: 11.5,4.5 parent: 2 - - uid: 11802 + - uid: 5983 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 29.5,-25.5 + pos: -7.5,1.5 parent: 2 - - uid: 11803 + - uid: 11802 components: - type: Transform - pos: -10.5,1.5 + rot: -1.5707963267948966 rad + pos: 29.5,-25.5 parent: 2 - proto: SignLibrary entities: @@ -77915,6 +81137,24 @@ entities: parent: 2 - proto: Sink entities: + - uid: 11219 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,1.5 + parent: 2 + - uid: 11220 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,0.5 + parent: 2 + - uid: 11303 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 39.5,-0.5 + parent: 2 - uid: 11838 components: - type: Transform @@ -77940,24 +81180,6 @@ entities: rot: 1.5707963267948966 rad pos: 40.5,-9.5 parent: 2 - - uid: 11842 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 39.5,1.5 - parent: 2 - - uid: 11843 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 39.5,0.5 - parent: 2 - - uid: 11844 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 39.5,-0.5 - parent: 2 - proto: SinkWide entities: - uid: 11845 @@ -78463,23 +81685,31 @@ entities: - uid: 11933 components: - type: Transform - pos: -50.507698,12.237175 - parent: 2 + parent: 15426 + - type: Physics + canCollide: False + - type: InsideEntityStorage - uid: 11934 components: - type: Transform - pos: -50.304573,12.393534 - parent: 2 + parent: 15426 + - type: Physics + canCollide: False + - type: InsideEntityStorage - uid: 11935 components: - type: Transform - pos: -50.538948,12.518621 - parent: 2 + parent: 15426 + - type: Physics + canCollide: False + - type: InsideEntityStorage - uid: 11936 components: - type: Transform - pos: -50.773323,12.33099 - parent: 2 + parent: 15426 + - type: Physics + canCollide: False + - type: InsideEntityStorage - proto: SpaceCash1000 entities: - uid: 11937 @@ -78507,6 +81737,13 @@ entities: rot: 3.141592653589793 rad pos: 40.5,-36.5 parent: 2 +- proto: SpawnMobAlexander + entities: + - uid: 15098 + components: + - type: Transform + pos: -19.5,-5.5 + parent: 2 - proto: SpawnMobArcticFoxSiobhan entities: - uid: 11941 @@ -78516,15 +81753,31 @@ entities: parent: 2 - proto: SpawnMobBandito entities: - - uid: 11942 + - uid: 15065 components: - type: Transform - pos: 22.5,-37.5 + pos: 42.5,-13.5 parent: 2 - - uid: 11943 +- proto: SpawnMobCatBingus + entities: + - uid: 15090 + components: + - type: Transform + pos: -59.5,-8.5 + parent: 2 +- proto: SpawnMobCatException + entities: + - uid: 15092 + components: + - type: Transform + pos: -7.5,-38.5 + parent: 2 +- proto: SpawnMobCatFloppa + entities: + - uid: 15063 components: - type: Transform - pos: -55.5,-13.5 + pos: -3.5,-4.5 parent: 2 - proto: SpawnMobCatGeneric entities: @@ -78533,17 +81786,19 @@ entities: - type: Transform pos: 20.5,14.5 parent: 2 - - uid: 11945 +- proto: SpawnMobCatKitten + entities: + - uid: 11842 components: - type: Transform pos: 17.5,11.5 parent: 2 - proto: SpawnMobCatRuntime entities: - - uid: 11946 + - uid: 6211 components: - type: Transform - pos: 9.5,-34.5 + pos: -28.5,-34.5 parent: 2 - proto: SpawnMobCleanBot entities: @@ -78557,6 +81812,13 @@ entities: - type: Transform pos: -39.5,-0.5 parent: 2 +- proto: SpawnMobCMOPetSilvia + entities: + - uid: 6187 + components: + - type: Transform + pos: 9.5,-34.5 + parent: 2 - proto: SpawnMobCorgi entities: - uid: 11949 @@ -78579,6 +81841,13 @@ entities: - type: Transform pos: -1.5,10.5 parent: 2 +- proto: SpawnMobCrabAtmos + entities: + - uid: 15096 + components: + - type: Transform + pos: -46.5,-31.5 + parent: 2 - proto: SpawnMobFoxRenault entities: - uid: 11952 @@ -78593,6 +81862,13 @@ entities: - type: Transform pos: 29.5,-38.5 parent: 2 +- proto: SpawnMobKangarooWillow + entities: + - uid: 15088 + components: + - type: Transform + pos: -54.5,6.5 + parent: 2 - proto: SpawnMobMcGriff entities: - uid: 11954 @@ -78625,9 +81901,30 @@ entities: rot: 1.5707963267948966 rad pos: 3.5,-4.5 parent: 2 -- proto: SpawnMobSecLaikaOrShiva +- proto: SpawnMobPossumMorty entities: - - uid: 11959 + - uid: 15087 + components: + - type: Transform + pos: 9.5,-40.5 + parent: 2 +- proto: SpawnMobRaccoonMorticia + entities: + - uid: 11089 + components: + - type: Transform + pos: -40.5,10.5 + parent: 2 +- proto: SpawnMobSecDogLaika + entities: + - uid: 15102 + components: + - type: Transform + pos: 31.5,-12.5 + parent: 2 +- proto: SpawnMobShiva + entities: + - uid: 6209 components: - type: Transform pos: 27.5,-5.5 @@ -78641,22 +81938,22 @@ entities: parent: 2 - proto: SpawnMobSmile entities: - - uid: 11961 + - uid: 15097 components: - type: Transform - pos: -28.5,-34.5 + pos: -27.5,-17.5 parent: 2 - proto: SpawnPointAtmos entities: - uid: 11962 components: - type: Transform - pos: -34.5,-37.5 + pos: -45.5,-30.5 parent: 2 - - uid: 11963 + - uid: 12127 components: - type: Transform - pos: -34.5,-36.5 + pos: -47.5,-27.5 parent: 2 - proto: SpawnPointBartender entities: @@ -78725,22 +82022,22 @@ entities: rot: -1.5707963267948966 rad pos: 38.5,-27.5 parent: 2 - - uid: 11975 + - uid: 15036 components: - type: Transform pos: 52.5,-32.5 parent: 2 - proto: SpawnPointCargoTechnician entities: - - uid: 11976 + - uid: 11843 components: - type: Transform - pos: -13.5,-25.5 + pos: -13.5,-26.5 parent: 2 - - uid: 11977 + - uid: 11976 components: - type: Transform - pos: -13.5,-26.5 + pos: -13.5,-25.5 parent: 2 - uid: 11978 components: @@ -78810,31 +82107,31 @@ entities: parent: 2 - proto: SpawnPointChiefEngineer entities: - - uid: 11990 + - uid: 15037 components: - type: Transform - pos: 50.5,-33.5 + pos: 50.5,-35.5 parent: 2 - proto: SpawnPointChiefJustice entities: - - uid: 11991 + - uid: 15039 components: - type: Transform pos: 52.5,-36.5 parent: 2 - proto: SpawnPointChiefMedicalOfficer entities: - - uid: 11992 + - uid: 15038 components: - type: Transform - pos: 50.5,-34.5 + pos: 54.5,-34.5 parent: 2 - proto: SpawnPointClerk entities: - - uid: 11993 + - uid: 15083 components: - type: Transform - pos: 18.5,-37.5 + pos: 18.5,-38.5 parent: 2 - proto: SpawnPointClown entities: @@ -78843,20 +82140,25 @@ entities: - type: Transform pos: -1.5,-19.5 parent: 2 - - uid: 14833 + - uid: 14835 components: - type: Transform - pos: 53.5,-32.5 + pos: -8.5,-17.5 parent: 2 - - uid: 14834 + - uid: 15470 components: - type: Transform - pos: 17.5,-9.5 + pos: 16.5,-10.5 parent: 2 - - uid: 14835 + - uid: 15517 components: - type: Transform - pos: -8.5,-17.5 + pos: 53.5,-32.5 + parent: 2 + - uid: 15551 + components: + - type: Transform + pos: -38.5,9.5 parent: 2 - proto: SpawnPointCourier entities: @@ -78886,14 +82188,14 @@ entities: parent: 2 - proto: SpawnPointHeadOfPersonnel entities: - - uid: 11999 + - uid: 15040 components: - type: Transform - pos: 54.5,-34.5 + pos: 50.5,-33.5 parent: 2 - proto: SpawnPointHeadOfSecurity entities: - - uid: 12000 + - uid: 15041 components: - type: Transform pos: 54.5,-33.5 @@ -79017,67 +82319,67 @@ entities: parent: 2 - proto: SpawnPointMedicalDoctor entities: - - uid: 12022 - components: - - type: Transform - pos: 3.5,-33.5 - parent: 2 - uid: 12023 components: - type: Transform - pos: 3.5,-32.5 + pos: 5.5,-26.5 parent: 2 - uid: 12024 components: - type: Transform - pos: 6.5,-33.5 + pos: -0.5,-40.5 parent: 2 - uid: 12025 components: - type: Transform - pos: 6.5,-32.5 + pos: 0.5,-31.5 parent: 2 - uid: 12026 components: - type: Transform - pos: 5.5,-33.5 + pos: -0.5,-36.5 parent: 2 - uid: 12027 components: - type: Transform - pos: 4.5,-33.5 + pos: 5.5,-33.5 parent: 2 - uid: 12028 components: - type: Transform - pos: 4.5,-32.5 + pos: 10.5,-41.5 parent: 2 - uid: 12029 components: - type: Transform - pos: 5.5,-32.5 + pos: 7.5,-41.5 parent: 2 -- proto: SpawnPointMedicalIntern - entities: - uid: 12030 components: - type: Transform - pos: 6.5,-34.5 + pos: 10.5,-36.5 parent: 2 +- proto: SpawnPointMedicalIntern + entities: - uid: 12031 components: - type: Transform - pos: 6.5,-35.5 + pos: 3.5,-34.5 parent: 2 - uid: 12032 components: - type: Transform - pos: 3.5,-34.5 + pos: 4.5,-31.5 parent: 2 - uid: 12033 components: - type: Transform - pos: 3.5,-35.5 + pos: 3.5,-38.5 + parent: 2 + - uid: 12122 + components: + - type: Transform + pos: 6.5,-37.5 parent: 2 - proto: SpawnPointMime entities: @@ -79261,26 +82563,26 @@ entities: parent: 2 - proto: SpawnPointPrisoner entities: - - uid: 12068 - components: - - type: Transform - pos: 47.5,-7.5 - parent: 2 - uid: 12069 components: - type: Transform pos: 37.5,0.5 parent: 2 - - uid: 12070 + - uid: 15486 components: - type: Transform - pos: 47.5,-13.5 + pos: 47.5,-7.5 parent: 2 - - uid: 12071 + - uid: 15487 components: - type: Transform pos: 47.5,-9.5 parent: 2 + - uid: 15488 + components: + - type: Transform + pos: 47.5,-12.5 + parent: 2 - proto: SpawnPointProsecutor entities: - uid: 12072 @@ -79308,10 +82610,10 @@ entities: - type: Transform pos: -17.5,-38.5 parent: 2 - - uid: 12076 + - uid: 15042 components: - type: Transform - pos: 50.5,-35.5 + pos: 54.5,-35.5 parent: 2 - proto: SpawnPointReporter entities: @@ -79354,10 +82656,10 @@ entities: parent: 2 - proto: SpawnPointResearchDirector entities: - - uid: 12084 + - uid: 15043 components: - type: Transform - pos: 54.5,-35.5 + pos: 50.5,-34.5 parent: 2 - proto: SpawnPointSalvageSpecialist entities: @@ -79557,52 +82859,52 @@ entities: parent: 2 - proto: SpawnPointStationEngineer entities: - - uid: 12122 + - uid: 11963 components: - type: Transform - pos: -30.5,-37.5 + pos: -45.5,-27.5 parent: 2 - - uid: 12123 + - uid: 12022 components: - type: Transform - pos: -30.5,-38.5 + pos: -46.5,-26.5 parent: 2 - - uid: 12124 + - uid: 12128 components: - type: Transform - pos: -30.5,-39.5 + pos: -40.5,-27.5 parent: 2 - - uid: 12125 + - uid: 12129 components: - type: Transform - pos: -30.5,-36.5 + pos: -36.5,-27.5 parent: 2 - - uid: 12126 + - uid: 12130 components: - type: Transform - pos: -30.5,-35.5 + pos: -32.5,-30.5 parent: 2 - proto: SpawnPointTechnicalAssistant entities: - - uid: 12127 + - uid: 12123 components: - type: Transform - pos: -32.5,-40.5 + pos: -29.5,-34.5 parent: 2 - - uid: 12128 + - uid: 12124 components: - type: Transform - pos: -34.5,-40.5 + pos: -29.5,-30.5 parent: 2 - - uid: 12129 + - uid: 12125 components: - type: Transform - pos: -34.5,-38.5 + pos: -38.5,-27.5 parent: 2 - - uid: 12130 + - uid: 12126 components: - type: Transform - pos: -34.5,-39.5 + pos: -39.5,-30.5 parent: 2 - proto: SpawnPointWarden entities: @@ -79627,6 +82929,12 @@ entities: - type: Transform pos: 47.5,-45.5 parent: 2 + - uid: 15100 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 27.5,-5.5 + parent: 2 - proto: SprayBottleSpaceCleaner entities: - uid: 12133 @@ -80200,18 +83508,19 @@ entities: setupAvailableNetworks: - SurveillanceCameraCommand nameSet: True - id: Meeting room + id: Conference Room - uid: 12219 components: - type: Transform rot: -1.5707963267948966 rad pos: 42.5,-36.5 parent: 2 + - type: DeviceNetwork - type: SurveillanceCamera setupAvailableNetworks: - SurveillanceCameraCommand nameSet: True - id: Main operation room + id: Bridge - uid: 12220 components: - type: Transform @@ -80755,6 +84064,7 @@ entities: - type: Transform pos: 65.5,-18.5 parent: 2 + - type: DeviceNetwork - proto: SurveillanceCameraRouterEngineering entities: - uid: 14680 @@ -80762,6 +84072,7 @@ entities: - type: Transform pos: 61.5,-18.5 parent: 2 + - type: DeviceNetwork - proto: SurveillanceCameraRouterGeneral entities: - uid: 14681 @@ -80769,6 +84080,7 @@ entities: - type: Transform pos: 62.5,-17.5 parent: 2 + - type: DeviceNetwork - proto: SurveillanceCameraRouterMedical entities: - uid: 14684 @@ -80776,6 +84088,7 @@ entities: - type: Transform pos: 65.5,-19.5 parent: 2 + - type: DeviceNetwork - proto: SurveillanceCameraRouterScience entities: - uid: 14685 @@ -80783,6 +84096,7 @@ entities: - type: Transform pos: 65.5,-20.5 parent: 2 + - type: DeviceNetwork - proto: SurveillanceCameraRouterSecurity entities: - uid: 14679 @@ -80790,6 +84104,7 @@ entities: - type: Transform pos: 61.5,-20.5 parent: 2 + - type: DeviceNetwork - proto: SurveillanceCameraRouterService entities: - uid: 14682 @@ -80797,6 +84112,7 @@ entities: - type: Transform pos: 64.5,-17.5 parent: 2 + - type: DeviceNetwork - proto: SurveillanceCameraRouterSupply entities: - uid: 14678 @@ -80804,6 +84120,7 @@ entities: - type: Transform pos: 61.5,-19.5 parent: 2 + - type: DeviceNetwork - proto: SurveillanceCameraScience entities: - uid: 12266 @@ -81286,6 +84603,12 @@ entities: parent: 2 - proto: Table entities: + - uid: 10497 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -14.5,-24.5 + parent: 2 - uid: 12315 components: - type: Transform @@ -81631,11 +84954,6 @@ entities: - type: Transform pos: 3.5,-3.5 parent: 2 - - uid: 12377 - components: - - type: Transform - pos: 16.5,-9.5 - parent: 2 - uid: 12378 components: - type: Transform @@ -81647,12 +84965,6 @@ entities: - type: Transform pos: -42.5,-19.5 parent: 2 - - uid: 12380 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -43.5,-5.5 - parent: 2 - uid: 12381 components: - type: Transform @@ -81736,22 +85048,6 @@ entities: - type: Transform pos: 39.5,3.5 parent: 2 - - uid: 12397 - components: - - type: Transform - pos: 16.5,-3.5 - parent: 2 - - uid: 12398 - components: - - type: Transform - pos: 16.5,-6.5 - parent: 2 - - uid: 12399 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -43.5,-7.5 - parent: 2 - uid: 12400 components: - type: Transform @@ -81783,16 +85079,6 @@ entities: rot: -1.5707963267948966 rad pos: 6.5,-3.5 parent: 2 - - uid: 12406 - components: - - type: Transform - pos: 49.5,-45.5 - parent: 2 - - uid: 12407 - components: - - type: Transform - pos: 50.5,-45.5 - parent: 2 - uid: 12408 components: - type: Transform @@ -81803,12 +85089,6 @@ entities: - type: Transform pos: -42.5,-16.5 parent: 2 - - uid: 12410 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -43.5,-6.5 - parent: 2 - uid: 12411 components: - type: Transform @@ -81948,21 +85228,6 @@ entities: - type: Transform pos: -56.5,-11.5 parent: 2 - - uid: 12437 - components: - - type: Transform - pos: 51.5,-31.5 - parent: 2 - - uid: 12438 - components: - - type: Transform - pos: 52.5,-31.5 - parent: 2 - - uid: 12439 - components: - - type: Transform - pos: 53.5,-31.5 - parent: 2 - uid: 12440 components: - type: Transform @@ -81979,53 +85244,47 @@ entities: rot: -1.5707963267948966 rad pos: 51.5,-42.5 parent: 2 -- proto: TableFancyBlack +- proto: TableFancyBlue entities: - - uid: 12443 + - uid: 12482 components: - type: Transform pos: 51.5,-35.5 parent: 2 - - uid: 12444 - components: - - type: Transform - pos: 51.5,-34.5 - parent: 2 - - uid: 12445 + - uid: 12483 components: - type: Transform - pos: 51.5,-33.5 + pos: 52.5,-35.5 parent: 2 - - uid: 12446 + - uid: 12484 components: - type: Transform - pos: 53.5,-33.5 + pos: 53.5,-35.5 parent: 2 - - uid: 12447 + - uid: 12491 components: - type: Transform - pos: 52.5,-33.5 + pos: 53.5,-34.5 parent: 2 - - uid: 12448 + - uid: 12492 components: - type: Transform - pos: 53.5,-34.5 + pos: 53.5,-33.5 parent: 2 - - uid: 12449 + - uid: 12493 components: - type: Transform - pos: 52.5,-35.5 + pos: 52.5,-33.5 parent: 2 - - uid: 12450 + - uid: 12561 components: - type: Transform - pos: 53.5,-35.5 + pos: 51.5,-33.5 parent: 2 - - uid: 12451 + - uid: 12603 components: - type: Transform - rot: -1.5707963267948966 rad - pos: 17.5,-39.5 + pos: 51.5,-34.5 parent: 2 - proto: TableFancyGreen entities: @@ -82200,33 +85459,43 @@ entities: - type: Transform pos: -8.5,-29.5 parent: 2 - - uid: 12482 + - uid: 12485 components: - type: Transform - pos: 44.5,-34.5 + pos: 22.5,-14.5 parent: 2 - - uid: 12483 + - uid: 12486 components: - type: Transform - pos: 44.5,-35.5 + pos: 16.5,18.5 parent: 2 - - uid: 12484 +- proto: TablePlasmaGlass + entities: + - uid: 8184 components: - type: Transform - pos: 45.5,-34.5 + pos: 47.5,-37.5 parent: 2 - - uid: 12485 + - uid: 8653 components: - type: Transform - pos: 22.5,-14.5 + pos: 42.5,-37.5 parent: 2 - - uid: 12486 + - uid: 8912 components: - type: Transform - pos: 16.5,18.5 + pos: 42.5,-31.5 + parent: 2 + - uid: 9030 + components: + - type: Transform + pos: 46.5,-31.5 + parent: 2 + - uid: 9451 + components: + - type: Transform + pos: 47.5,-31.5 parent: 2 -- proto: TablePlasmaGlass - entities: - uid: 12487 components: - type: Transform @@ -82247,34 +85516,71 @@ entities: - type: Transform pos: -54.5,-35.5 parent: 2 - - uid: 12491 +- proto: TableReinforced + entities: + - uid: 569 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 46.5,-31.5 + pos: 16.5,-3.5 parent: 2 - - uid: 12492 + - uid: 2665 components: - type: Transform - rot: 1.5707963267948966 rad - pos: 47.5,-31.5 + pos: 61.5,-28.5 parent: 2 - - uid: 12493 + - uid: 2666 components: - type: Transform - pos: 47.5,-37.5 + pos: 61.5,-27.5 parent: 2 -- proto: TableReinforced - entities: - - uid: 2665 + - uid: 10312 components: - type: Transform - pos: 61.5,-28.5 + rot: 3.141592653589793 rad + pos: 45.5,-33.5 parent: 2 - - uid: 2666 + - uid: 10457 components: - type: Transform - pos: 61.5,-27.5 + rot: 3.141592653589793 rad + pos: 44.5,-33.5 + parent: 2 + - uid: 10458 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,-34.5 + parent: 2 + - uid: 10459 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 44.5,-35.5 + parent: 2 + - uid: 11844 + components: + - type: Transform + pos: 16.5,-9.5 + parent: 2 + - uid: 12068 + components: + - type: Transform + pos: 16.5,-6.5 + parent: 2 + - uid: 12380 + components: + - type: Transform + pos: -43.5,-7.5 + parent: 2 + - uid: 12399 + components: + - type: Transform + pos: -43.5,-5.5 + parent: 2 + - uid: 12410 + components: + - type: Transform + pos: -43.5,-6.5 parent: 2 - uid: 12494 components: @@ -82500,8 +85806,29 @@ entities: - type: Transform pos: 65.5,-28.5 parent: 2 + - uid: 15329 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -18.5,-40.5 + parent: 2 + - uid: 15512 + components: + - type: Transform + pos: -43.5,-4.5 + parent: 2 - proto: TableReinforcedGlass entities: + - uid: 12070 + components: + - type: Transform + pos: 50.5,-45.5 + parent: 2 + - uid: 12071 + components: + - type: Transform + pos: 49.5,-45.5 + parent: 2 - uid: 12533 components: - type: Transform @@ -82584,6 +85911,12 @@ entities: rot: 3.141592653589793 rad pos: -46.5,-24.5 parent: 2 + - uid: 14472 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -12.5,-11.5 + parent: 2 - proto: TableStone entities: - uid: 12549 @@ -82614,6 +85947,11 @@ entities: parent: 2 - proto: TableWood entities: + - uid: 4930 + components: + - type: Transform + pos: -17.5,-19.5 + parent: 2 - uid: 12554 components: - type: Transform @@ -82651,11 +85989,6 @@ entities: - type: Transform pos: -17.5,-18.5 parent: 2 - - uid: 12561 - components: - - type: Transform - pos: -17.5,-19.5 - parent: 2 - uid: 12562 components: - type: Transform @@ -82671,11 +86004,6 @@ entities: - type: Transform pos: -26.5,-31.5 parent: 2 - - uid: 12565 - components: - - type: Transform - pos: 48.5,-9.5 - parent: 2 - uid: 12566 components: - type: Transform @@ -82797,8 +86125,38 @@ entities: rot: 3.141592653589793 rad pos: 32.5,18.5 parent: 2 + - uid: 15471 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 48.5,-9.5 + parent: 2 - proto: TableWoodReinforced entities: + - uid: 615 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-39.5 + parent: 2 + - uid: 4129 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-38.5 + parent: 2 + - uid: 5249 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 19.5,-37.5 + parent: 2 + - uid: 6221 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,-39.5 + parent: 2 - uid: 12588 components: - type: Transform @@ -82876,11 +86234,6 @@ entities: rot: 3.141592653589793 rad pos: -8.5,-40.5 parent: 2 - - uid: 12603 - components: - - type: Transform - pos: 19.5,-38.5 - parent: 2 - uid: 12604 components: - type: Transform @@ -82891,11 +86244,6 @@ entities: - type: Transform pos: 27.5,-38.5 parent: 2 - - uid: 12606 - components: - - type: Transform - pos: 19.5,-37.5 - parent: 2 - uid: 12607 components: - type: Transform @@ -82944,8 +86292,155 @@ entities: - type: Transform pos: -9.5,9.5 parent: 2 + - uid: 15003 + components: + - type: Transform + pos: 53.5,-31.5 + parent: 2 + - uid: 15004 + components: + - type: Transform + pos: 52.5,-31.5 + parent: 2 + - uid: 15005 + components: + - type: Transform + pos: 51.5,-31.5 + parent: 2 - proto: tatamimat entities: + - uid: 580 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,-34.5 + parent: 2 + - uid: 581 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,-33.5 + parent: 2 + - uid: 582 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,-35.5 + parent: 2 + - uid: 584 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,-34.5 + parent: 2 + - uid: 4128 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,-34.5 + parent: 2 + - uid: 4155 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,-33.5 + parent: 2 + - uid: 4918 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 50.5,-35.5 + parent: 2 + - uid: 5253 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,-35.5 + parent: 2 + - uid: 5260 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,-35.5 + parent: 2 + - uid: 5275 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,-36.5 + parent: 2 + - uid: 6219 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,-33.5 + parent: 2 + - uid: 6220 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,-34.5 + parent: 2 + - uid: 6488 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 53.5,-36.5 + parent: 2 + - uid: 6489 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,-34.5 + parent: 2 + - uid: 6498 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 51.5,-33.5 + parent: 2 + - uid: 6499 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 53.5,-33.5 + parent: 2 + - uid: 6505 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 52.5,-35.5 + parent: 2 + - uid: 12446 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-36.5 + parent: 2 + - uid: 12447 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 51.5,-32.5 + parent: 2 + - uid: 12448 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,-32.5 + parent: 2 + - uid: 12449 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 53.5,-32.5 + parent: 2 + - uid: 12450 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 52.5,-34.5 + parent: 2 - uid: 12616 components: - type: Transform @@ -83240,6 +86735,46 @@ entities: rot: -1.5707963267948966 rad pos: -59.5,-8.5 parent: 2 + - uid: 15464 + components: + - type: Transform + pos: 17.5,-9.5 + parent: 2 + - uid: 15465 + components: + - type: Transform + pos: 16.5,-9.5 + parent: 2 + - uid: 15466 + components: + - type: Transform + pos: 16.5,-6.5 + parent: 2 + - uid: 15467 + components: + - type: Transform + pos: 17.5,-6.5 + parent: 2 + - uid: 15468 + components: + - type: Transform + pos: 17.5,-3.5 + parent: 2 + - uid: 15469 + components: + - type: Transform + pos: 16.5,-3.5 + parent: 2 + - uid: 15483 + components: + - type: Transform + pos: 48.5,-10.5 + parent: 2 + - uid: 15484 + components: + - type: Transform + pos: 48.5,-13.5 + parent: 2 - proto: tatamisingle entities: - uid: 12668 @@ -83256,7 +86791,7 @@ entities: parent: 2 - proto: TegCenter entities: - - uid: 12670 + - uid: 12377 components: - type: Transform pos: -55.5,-29.5 @@ -83293,6 +86828,7 @@ entities: occludes: True ents: - 6154 + - 8382 machine_board: !type:Container showEnts: False occludes: True @@ -83383,20 +86919,48 @@ entities: showEnts: False occludes: True ents: [] -- proto: TelecomServerFilled - entities: - - uid: 12673 + - uid: 11679 components: - type: Transform - pos: 42.5,-31.5 + pos: 40.5,-33.5 parent: 2 -- proto: TelecomServerFilledSecurity - entities: - - uid: 12674 + - type: ContainerContainer + containers: + key_slots: !type:Container + showEnts: False + occludes: True + ents: + - 12743 + - 12778 + machine_board: !type:Container + showEnts: False + occludes: True + ents: [] + machine_parts: !type:Container + showEnts: False + occludes: True + ents: [] + - uid: 15325 components: - type: Transform pos: 38.5,-13.5 parent: 2 + - type: ContainerContainer + containers: + key_slots: !type:Container + showEnts: False + occludes: True + ents: + - 15335 + - 15529 + machine_board: !type:Container + showEnts: False + occludes: True + ents: [] + machine_parts: !type:Container + showEnts: False + occludes: True + ents: [] - proto: TintedWindow entities: - uid: 12675 @@ -83568,9 +87132,9 @@ entities: rot: -1.5707963267948966 rad pos: -44.5,8.5 parent: 2 -- proto: ToiletGoldenEmpty +- proto: ToiletGoldenDirtyWater entities: - - uid: 12707 + - uid: 12397 components: - type: Transform pos: 54.5,-43.5 @@ -83594,6 +87158,11 @@ entities: - type: Transform pos: -43.548855,-6.4401016 parent: 2 + - uid: 12715 + components: + - type: Transform + pos: 11.629884,-38.225056 + parent: 2 - uid: 14735 components: - type: Transform @@ -83621,11 +87190,6 @@ entities: - type: Transform pos: -42.40179,9.528585 parent: 2 - - uid: 12715 - components: - - type: Transform - pos: 11.630091,-37.747 - parent: 2 - uid: 12716 components: - type: Transform @@ -83644,8 +87208,20 @@ entities: - type: Transform pos: 38.424706,-33.760246 parent: 2 +- proto: ToolboxMechanical + entities: + - uid: 15554 + components: + - type: Transform + pos: -36.522415,-47.18852 + parent: 2 - proto: ToolboxMechanicalFilled entities: + - uid: 12084 + components: + - type: Transform + pos: 40.476063,-33.183887 + parent: 2 - uid: 12718 components: - type: Transform @@ -83685,6 +87261,13 @@ entities: - type: Transform pos: -17.041487,-8.192725 parent: 2 +- proto: ToyFigurineCaptain + entities: + - uid: 11993 + components: + - type: Transform + pos: 44.43865,-35.23506 + parent: 2 - proto: ToyFigurineChaplain entities: - uid: 12722 @@ -83692,13 +87275,39 @@ entities: - type: Transform pos: -35.27926,-14.8256855 parent: 2 +- proto: ToyFigurineChiefEngineer + entities: + - uid: 11990 + components: + - type: Transform + pos: 42.667816,-37.318394 + parent: 2 +- proto: ToyFigurineHeadOfPersonnel + entities: + - uid: 11992 + components: + - type: Transform + pos: 47.521984,-37.30798 + parent: 2 - proto: ToyFigurineHeadOfSecurity entities: + - uid: 11961 + components: + - type: Transform + pos: 42.699066,-31.318398 + parent: 2 - uid: 12723 components: - type: Transform pos: 29.45367,4.57589 parent: 2 +- proto: ToyFigurineLawyer + entities: + - uid: 15084 + components: + - type: Transform + pos: 19.062578,-39.343605 + parent: 2 - proto: ToyFigurineLibrarian entities: - uid: 12724 @@ -83739,7 +87348,8 @@ entities: - uid: 12729 components: - type: Transform - pos: -17.75425,-19.468826 + rot: 6.283185307179586 rad + pos: -19.725365,-19.194715 parent: 2 - uid: 12730 components: @@ -83755,10 +87365,10 @@ entities: parent: 2 - proto: ToyRenault entities: - - uid: 12732 + - uid: 11803 components: - type: Transform - pos: 46.95423,-31.313793 + pos: 46.98172,-31.245213 parent: 2 - proto: ToyRipley entities: @@ -83809,11 +87419,27 @@ entities: parent: 2 - proto: TrashBag entities: - - uid: 12740 + - uid: 15435 components: - type: Transform - pos: 16.45031,-6.399351 + pos: 16.26536,-6.345091 parent: 2 +- proto: TreasureCoinGold + entities: + - uid: 15427 + components: + - type: Transform + parent: 15426 + - type: Physics + canCollide: False + - type: InsideEntityStorage + - uid: 15429 + components: + - type: Transform + parent: 15426 + - type: Physics + canCollide: False + - type: InsideEntityStorage - proto: TreasureHardDiskDrive entities: - uid: 12741 @@ -83833,22 +87459,22 @@ entities: parent: 2 - proto: TwoWayLever entities: - - uid: 12743 + - uid: 11624 components: - type: Transform - pos: -40.5,9.5 + pos: -39.5,7.5 parent: 2 - type: DeviceLinkSource linkedPorts: - 5320: + 10505: - Left: Forward - Right: Reverse - Middle: Off - 5319: + 5318: - Left: Forward - Right: Reverse - Middle: Off - 5318: + 5811: - Left: Forward - Right: Reverse - Middle: Off @@ -83856,7 +87482,7 @@ entities: - Left: Forward - Right: Reverse - Middle: Off - 11119: + 11088: - Left: Forward - Right: Reverse - Middle: Off @@ -83955,6 +87581,22 @@ entities: - Left: Forward - Right: Reverse - Middle: Off + 15326: + - Left: Forward + - Right: Reverse + - Middle: Off + 15327: + - Left: Forward + - Right: Reverse + - Middle: Off + 15328: + - Left: Forward + - Right: Reverse + - Middle: Off + 14465: + - Left: Reverse + - Right: Forward + - Middle: Off - proto: UnfinishedMachineFrame entities: - uid: 12745 @@ -83984,12 +87626,15 @@ entities: rot: 1.5707963267948966 rad pos: 5.5,-9.5 parent: 2 - - uid: 12749 + - uid: 15530 components: - type: Transform + anchored: True rot: 3.141592653589793 rad pos: 45.5,1.5 parent: 2 + - type: Physics + bodyType: Static - proto: Urn entities: - uid: 12750 @@ -84025,6 +87670,11 @@ entities: parent: 2 - proto: VendingMachineBooze entities: + - uid: 4131 + components: + - type: Transform + pos: 51.5,-45.5 + parent: 2 - uid: 12755 components: - type: Transform @@ -84166,10 +87816,10 @@ entities: parent: 2 - proto: VendingMachineCondiments entities: - - uid: 12778 + - uid: 11510 components: - type: Transform - pos: -11.5,-10.5 + pos: -12.5,-11.5 parent: 2 - uid: 12779 components: @@ -84385,8 +88035,20 @@ entities: - type: Transform pos: 34.5,9.5 parent: 2 +- proto: VendingMachineSustenance + entities: + - uid: 9866 + components: + - type: Transform + pos: 42.5,6.5 + parent: 2 - proto: VendingMachineTankDispenserEVA entities: + - uid: 6512 + components: + - type: Transform + pos: 60.5,-39.5 + parent: 2 - uid: 12811 components: - type: Transform @@ -84412,11 +88074,6 @@ entities: - type: Transform pos: -32.5,-44.5 parent: 2 - - uid: 12816 - components: - - type: Transform - pos: 54.5,-38.5 - parent: 2 - proto: VendingMachineTheater entities: - uid: 12817 @@ -84453,7 +88110,7 @@ entities: desc: Shitai ni kiru no yō... name: the mortician's scalpel - type: Transform - pos: 9.741736,-40.32208 + pos: 11.599988,-40.48312 parent: 2 - proto: WallmountTelescreen entities: @@ -84563,6 +88220,36 @@ entities: parent: 2 - proto: WallReinforced entities: + - uid: 6513 + components: + - type: Transform + pos: 48.5,-37.5 + parent: 2 + - uid: 6514 + components: + - type: Transform + pos: 48.5,-31.5 + parent: 2 + - uid: 6760 + components: + - type: Transform + pos: 48.5,-36.5 + parent: 2 + - uid: 7741 + components: + - type: Transform + pos: -48.5,-46.5 + parent: 2 + - uid: 7748 + components: + - type: Transform + pos: -48.5,-48.5 + parent: 2 + - uid: 9423 + components: + - type: Transform + pos: 57.5,-48.5 + parent: 2 - uid: 9784 components: - type: Transform @@ -84609,6 +88296,11 @@ entities: - type: Transform pos: 61.5,-25.5 parent: 2 + - uid: 11139 + components: + - type: Transform + pos: 61.5,-48.5 + parent: 2 - uid: 12841 components: - type: Transform @@ -86165,11 +89857,6 @@ entities: - type: Transform pos: -43.5,-20.5 parent: 2 - - uid: 13150 - components: - - type: Transform - pos: 40.5,-5.5 - parent: 2 - uid: 13151 components: - type: Transform @@ -89894,11 +93581,6 @@ entities: - type: Transform pos: 22.5,20.5 parent: 2 - - uid: 13889 - components: - - type: Transform - pos: 46.5,-17.5 - parent: 2 - uid: 13890 components: - type: Transform @@ -90212,12 +93894,6 @@ entities: rot: -1.5707963267948966 rad pos: 46.5,-19.5 parent: 2 - - uid: 13952 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 46.5,-18.5 - parent: 2 - uid: 13953 components: - type: Transform @@ -90707,6 +94383,23 @@ entities: rot: -1.5707963267948966 rad pos: 67.5,-17.5 parent: 2 + - uid: 15389 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-18.5 + parent: 2 + - uid: 15390 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 46.5,-17.5 + parent: 2 + - uid: 15492 + components: + - type: Transform + pos: 40.5,-5.5 + parent: 2 - proto: WallReinforcedRust entities: - uid: 13955 @@ -90721,6 +94414,12 @@ entities: parent: 2 - proto: WallSolid entities: + - uid: 221 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 18.5,-40.5 + parent: 2 - uid: 13957 components: - type: Transform @@ -91790,11 +95489,6 @@ entities: - type: Transform pos: -39.5,2.5 parent: 2 - - uid: 14167 - components: - - type: Transform - pos: 48.5,-37.5 - parent: 2 - uid: 14168 components: - type: Transform @@ -92234,11 +95928,6 @@ entities: rot: -1.5707963267948966 rad pos: 45.5,-20.5 parent: 2 - - uid: 14255 - components: - - type: Transform - pos: 48.5,-31.5 - parent: 2 - uid: 14256 components: - type: Transform @@ -92385,11 +96074,6 @@ entities: - type: Transform pos: 44.5,-26.5 parent: 2 - - uid: 14285 - components: - - type: Transform - pos: 48.5,-36.5 - parent: 2 - uid: 14286 components: - type: Transform @@ -92909,6 +96593,20 @@ entities: - type: Transform pos: -52.5,9.5 parent: 2 +- proto: WallWeaponCapacitorRecharger + entities: + - uid: 15532 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 32.5,-10.5 + parent: 2 + - uid: 15555 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 41.5,-30.5 + parent: 2 - proto: WardrobeCargoFilled entities: - uid: 14388 @@ -93318,18 +97016,13 @@ entities: - type: Transform pos: -47.5,-24.5 parent: 2 - - uid: 14442 + - uid: 15006 components: - type: Transform pos: 50.5,-31.5 parent: 2 - proto: WaterTankFull entities: - - uid: 14443 - components: - - type: Transform - pos: 36.5,5.5 - parent: 2 - uid: 14444 components: - type: Transform @@ -93372,6 +97065,11 @@ entities: - type: Transform pos: -18.5,-8.5 parent: 2 + - uid: 15490 + components: + - type: Transform + pos: 41.5,3.5 + parent: 2 - proto: WaterVaporCanister entities: - uid: 14452 @@ -93381,6 +97079,11 @@ entities: parent: 2 - proto: WeaponCapacitorRecharger entities: + - uid: 11801 + components: + - type: Transform + pos: 46.5,-31.5 + parent: 2 - uid: 14453 components: - type: Transform @@ -93397,11 +97100,6 @@ entities: - type: Transform pos: 31.5,-5.5 parent: 2 - - uid: 14456 - components: - - type: Transform - pos: 46.5,-31.5 - parent: 2 - uid: 14827 components: - type: Transform @@ -93409,10 +97107,10 @@ entities: parent: 2 - proto: WeaponDisabler entities: - - uid: 14457 + - uid: 11942 components: - type: Transform - pos: 47.501106,-31.454418 + pos: 47.48172,-31.463963 parent: 2 - proto: WeaponRevolverSnub entities: @@ -93423,22 +97121,6 @@ entities: - type: Physics canCollide: False - type: InsideEntityStorage -- proto: WeaponRifleM90 - entities: - - uid: 9903 - components: - - type: Transform - parent: 9902 - - type: Physics - canCollide: False - - type: InsideEntityStorage - - uid: 9904 - components: - - type: Transform - parent: 9902 - - type: Physics - canCollide: False - - type: InsideEntityStorage - proto: WeaponTurretSyndicateBroken entities: - uid: 14458 @@ -93515,13 +97197,6 @@ entities: - type: Transform pos: 7.5,-13.5 parent: 2 - - uid: 14465 - components: - - type: MetaData - desc: Fred insists it's alright to put the fuel tank here. Take it up with him if you have a problem with it. - - type: Transform - pos: -54.5,10.5 - parent: 2 - uid: 14466 components: - type: Transform @@ -93557,12 +97232,6 @@ entities: rot: -1.5707963267948966 rad pos: -10.5,-16.5 parent: 2 - - uid: 14472 - components: - - type: Transform - rot: 1.5707963267948966 rad - pos: -39.5,9.5 - parent: 2 - proto: WindoorBarLocked entities: - uid: 14473 @@ -93625,6 +97294,12 @@ entities: - type: Transform pos: -18.5,-20.5 parent: 2 + - uid: 14603 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,9.5 + parent: 2 - proto: WindoorSecureArmoryLocked entities: - uid: 14482 @@ -93695,6 +97370,22 @@ entities: rot: -1.5707963267948966 rad pos: 4.5,-26.5 parent: 2 +- proto: WindoorSecureChiefJusticeLocked + entities: + - uid: 15085 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 30.5,-34.5 + parent: 2 +- proto: WindoorSecureClerkLocked + entities: + - uid: 15086 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 26.5,-34.5 + parent: 2 - proto: WindoorSecureCommandLocked entities: - uid: 14493 @@ -93751,17 +97442,6 @@ entities: rot: -1.5707963267948966 rad pos: 65.5,-26.5 parent: 2 - - uid: 14816 - components: - - type: Transform - pos: 72.5,-24.5 - parent: 2 - - uid: 14817 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 72.5,-22.5 - parent: 2 - proto: WindoorSecureEngineeringLocked entities: - uid: 14499 @@ -93790,6 +97470,14 @@ entities: rot: 3.141592653589793 rad pos: -18.5,-20.5 parent: 2 +- proto: WindoorSecureMailLocked + entities: + - uid: 15070 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-25.5 + parent: 2 - proto: WindoorSecureReporterLocked entities: - uid: 14503 @@ -93804,6 +97492,14 @@ entities: rot: 3.141592653589793 rad pos: -32.5,-19.5 parent: 2 +- proto: WindoorSecureSalvageLocked + entities: + - uid: 15324 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-45.5 + parent: 2 - proto: WindoorSecureScienceLocked entities: - uid: 14505 @@ -94304,26 +98000,50 @@ entities: rot: 1.5707963267948966 rad pos: -34.5,-19.5 parent: 2 - - uid: 14601 +- proto: WindowReinforcedDirectional + entities: + - uid: 12437 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -39.5,7.5 + rot: -1.5707963267948966 rad + pos: 57.5,-31.5 parent: 2 - - uid: 14602 + - uid: 12438 components: - type: Transform - rot: 1.5707963267948966 rad - pos: -39.5,8.5 + rot: -1.5707963267948966 rad + pos: 57.5,-32.5 parent: 2 - - uid: 14603 + - uid: 12439 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 57.5,-33.5 + parent: 2 + - uid: 12443 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 57.5,-34.5 + parent: 2 + - uid: 12444 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 57.5,-35.5 + parent: 2 + - uid: 12445 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 57.5,-36.5 + parent: 2 + - uid: 14602 components: - type: Transform rot: 1.5707963267948966 rad - pos: -39.5,10.5 + pos: -39.5,8.5 parent: 2 -- proto: WindowReinforcedDirectional - entities: - uid: 14604 components: - type: Transform @@ -94526,6 +98246,48 @@ entities: - type: Transform pos: 29.5,18.5 parent: 2 + - uid: 14651 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-44.5 + parent: 2 + - uid: 15067 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-24.5 + parent: 2 + - uid: 15068 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-26.5 + parent: 2 + - uid: 15069 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -9.5,-27.5 + parent: 2 + - uid: 15094 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,7.5 + parent: 2 + - uid: 15104 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -39.5,10.5 + parent: 2 + - uid: 15323 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: -29.5,-46.5 + parent: 2 - proto: WindowTintedDirectional entities: - uid: 14641 @@ -94552,6 +98314,11 @@ entities: - type: Transform pos: 42.52252,13.337198 parent: 2 + - uid: 15247 + components: + - type: Transform + pos: 53.890575,-2.6905408 + parent: 2 - proto: WoodDoor entities: - uid: 14645 @@ -94586,11 +98353,6 @@ entities: - type: Transform pos: 47.5,-42.5 parent: 2 - - uid: 14651 - components: - - type: Transform - pos: -55.5,-18.5 - parent: 2 - uid: 14652 components: - type: Transform @@ -94603,11 +98365,6 @@ entities: - type: Transform pos: 39.5,-42.5 parent: 2 - - uid: 14654 - components: - - type: Transform - pos: -54.5,-18.5 - parent: 2 - uid: 14655 components: - type: Transform diff --git a/Resources/Maps/tortuga.yml b/Resources/Maps/tortuga.yml index d02e1724476..08b5b78eb7d 100644 --- a/Resources/Maps/tortuga.yml +++ b/Resources/Maps/tortuga.yml @@ -284,7 +284,7 @@ entities: version: 6 3,1: ind: 3,1 - tiles: fAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAAfAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAATgAAAAAATgAAAAAANwAAAAAANwAAAAAAfAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAfAAAAAAAfAAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAANwAAAAAAfAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAfAAAAAAATgAAAAAATgAAAAAANwAAAAAANwAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAAAAfAAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAfAAAAAAATgAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAAABfAAAAAAATgAAAAAAQQAAAAAATgAAAAAAfAAAAAAATgAAAAAAQQAAAAAATgAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAewAAAAAAfAAAAAAAfAAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAHgAAAAABQQAAAAAAQQAAAAAAQQAAAAAAHgAAAAACfAAAAAAAawAAAAAAawAAAAAAawAAAAAAfAAAAAAAewAAAAAAHgAAAAADHgAAAAADHgAAAAACHgAAAAAAHgAAAAABHgAAAAABHgAAAAACHgAAAAAAHgAAAAACHgAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAawAAAAAAfAAAAAAAewAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAHgAAAAABHgAAAAACHgAAAAABHgAAAAAAHgAAAAABHgAAAAAAHgAAAAACQQAAAAAAQQAAAAAAQQAAAAAAawAAAAAAfAAAAAAAAAAAAAAAHgAAAAABHgAAAAABfAAAAAAAHgAAAAAAHgAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAHgAAAAACQQAAAAAAQQAAAAAAQQAAAAAAawAAAAAAfAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAHgAAAAABfAAAAAAAawAAAAAAawAAAAAAawAAAAAAfAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAHgAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAHgAAAAADfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAABHgAAAAACfAAAAAAAHgAAAAABHgAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAHgAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAHgAAAAAAHgAAAAAAHgAAAAADHgAAAAACHgAAAAABHgAAAAAAHgAAAAABTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + tiles: fAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAAfAAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAANwAAAAAANwAAAAAANwAAAAAANwAAAAAAfAAAAAAATQAAAAAATQAAAAAATQAAAAAATQAAAAAATgAAAAAAfAAAAAAAfAAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATQAAAAAANwAAAAAANwAAAAAANwAAAAAATgAAAAAAfAAAAAAAfAAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAfAAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATgAAAAAATQAAAAAANwAAAAAANwAAAAAANwAAAAAATgAAAAAAXAAAAAAAfAAAAAAAKwAAAAAAKwAAAAAAKwAAAAAAfAAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAfAAAAAAATQAAAAAANwAAAAAANwAAAAAANwAAAAAAfAAAAAAAXAAAAAABfAAAAAAATgAAAAAAQQAAAAAATgAAAAAAfAAAAAAATgAAAAAAQQAAAAAATgAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAHgAAAAABQQAAAAAAQQAAAAAAQQAAAAAAHgAAAAACfAAAAAAAawAAAAAAawAAAAAAawAAAAAAfAAAAAAAewAAAAAAHgAAAAADHgAAAAADHgAAAAACHgAAAAAAHgAAAAABHgAAAAABHgAAAAACHgAAAAAAHgAAAAACHgAAAAAAQQAAAAAAQQAAAAAAQQAAAAAAawAAAAAAfAAAAAAAewAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAHgAAAAABHgAAAAACHgAAAAABHgAAAAAAHgAAAAABHgAAAAAAHgAAAAACQQAAAAAAQQAAAAAAQQAAAAAAawAAAAAAfAAAAAAAAAAAAAAAHgAAAAABHgAAAAABfAAAAAAAHgAAAAAAHgAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAHgAAAAACQQAAAAAAQQAAAAAAQQAAAAAAawAAAAAAfAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAHgAAAAABfAAAAAAAawAAAAAAawAAAAAAawAAAAAAfAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAHgAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAUAAAAAAAUAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAHgAAAAADfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAAABHgAAAAACfAAAAAAAHgAAAAABHgAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAHgAAAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAHgAAAAAAHgAAAAAAHgAAAAADHgAAAAACHgAAAAABHgAAAAAAHgAAAAABTgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA version: 6 3,2: ind: 3,2 @@ -484,7 +484,7 @@ entities: version: 6 4,1: ind: 4,1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAA + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAAfAAAAAAAAAAAAAAAfAAAAAAAfAAAAAAA version: 6 5,1: ind: 5,1 @@ -601,8 +601,8 @@ entities: - type: Broadphase - type: Physics bodyStatus: InAir - angularDamping: 10000 - linearDamping: 10000 + angularDamping: 0.05 + linearDamping: 0.05 fixedRotation: False bodyType: Dynamic - type: Fixtures @@ -11039,8 +11039,8 @@ entities: 0: 65535 7,16: 0: 255 - 3: 32768 - 4: 8192 + 4: 32768 + 6: 8192 8,12: 0: 30583 8,13: @@ -11291,10 +11291,10 @@ entities: 13,8: 0: 13071 14,4: - 1: 34947 - 0: 13056 + 1: 3 + 0: 64256 14,5: - 0: 45107 + 0: 45243 14,6: 0: 48059 14,7: @@ -11303,17 +11303,17 @@ entities: 0: 3 1: 35976 15,4: - 1: 3840 + 0: 30464 15,5: - 0: 12288 - 1: 34816 + 0: 12407 + 1: 32768 15,6: 0: 13107 1: 8 16,4: - 1: 3840 + 1: 7952 16,5: - 1: 61440 + 1: 61696 12,9: 0: 65535 11,9: @@ -11507,8 +11507,8 @@ entities: 0: 4359 8,16: 0: 255 - 5: 8192 - 6: 32768 + 3: 8192 + 5: 32768 9,12: 0: 14327 9,13: @@ -11521,7 +11521,7 @@ entities: 0: 30583 9,16: 0: 255 - 6: 40960 + 5: 40960 10,12: 0: 2032 10,13: @@ -11534,7 +11534,7 @@ entities: 0: 65535 10,16: 0: 255 - 6: 40960 + 5: 40960 11,12: 0: 30583 11,13: @@ -12068,11 +12068,11 @@ entities: 23,13: 0: 4369 8,17: - 5: 34 - 6: 136 + 3: 34 + 5: 136 7,17: - 3: 136 - 4: 34 + 4: 136 + 6: 34 8,18: 1: 61471 7,18: @@ -12086,7 +12086,7 @@ entities: 9,19: 1: 29936 9,17: - 6: 170 + 5: 170 9,20: 1: 62579 10,18: @@ -12094,7 +12094,7 @@ entities: 10,19: 1: 17532 10,17: - 6: 170 + 5: 170 10,20: 1: 29764 11,18: @@ -12786,10 +12786,10 @@ entities: - volume: 2500 temperature: 293.15 moles: - - 6666.982 - 0 - 0 - 0 + - 6666.982 - 0 - 0 - 0 @@ -12801,7 +12801,6 @@ entities: - volume: 2500 temperature: 293.15 moles: - - 0 - 6666.982 - 0 - 0 @@ -12813,13 +12812,14 @@ entities: - 0 - 0 - 0 + - 0 - volume: 2500 temperature: 293.15 moles: - 0 - 0 - 0 - - 6666.982 + - 0 - 0 - 0 - 0 @@ -12832,7 +12832,7 @@ entities: temperature: 293.15 moles: - 0 - - 0 + - 6666.982 - 0 - 0 - 0 @@ -12847,13 +12847,11 @@ entities: - type: BecomesStation id: Tortuga - type: OccluderTree - - type: Shuttle - angularDamping: 10000 - linearDamping: 10000 - type: GridPathfinding - type: RadiationGridResistance - type: GasTileOverlay - type: SpreaderGrid + - type: Shuttle - uid: 35 components: - type: MetaData @@ -15507,6 +15505,11 @@ entities: - type: Transform pos: 51.5,22.5 parent: 33 + - uid: 31594 + components: + - type: Transform + pos: 58.5,19.5 + parent: 33 - proto: AirlockChiefEngineerLocked entities: - uid: 8824 @@ -21599,6 +21602,13 @@ entities: parent: 31457 - type: Physics canCollide: False +- proto: Biofabricator + entities: + - uid: 8298 + components: + - type: Transform + pos: -19.5,38.5 + parent: 33 - proto: BiomassReclaimer entities: - uid: 4088 @@ -41588,6 +41598,26 @@ entities: - type: Transform pos: 56.5,-22.5 parent: 33 + - uid: 31597 + components: + - type: Transform + pos: 57.5,19.5 + parent: 33 + - uid: 31598 + components: + - type: Transform + pos: 58.5,19.5 + parent: 33 + - uid: 31599 + components: + - type: Transform + pos: 59.5,19.5 + parent: 33 + - uid: 31600 + components: + - type: Transform + pos: 59.5,20.5 + parent: 33 - proto: CableApcStack entities: - uid: 8123 @@ -63213,11 +63243,6 @@ entities: - type: Transform pos: -60.5,45.5 parent: 33 - - uid: 26995 - components: - - type: Transform - pos: 26.5,65.5 - parent: 33 - uid: 27705 components: - type: Transform @@ -65465,6 +65490,11 @@ entities: rot: -1.5707963267948966 rad pos: 34.5,18.5 parent: 33 + - uid: 3182 + components: + - type: Transform + pos: 26.5,65.5 + parent: 33 - uid: 3328 components: - type: Transform @@ -65828,14 +65858,6 @@ entities: rot: -1.5707963267948966 rad pos: 36.5,-17.5 parent: 33 -- proto: ComputerShuttleSalvage - entities: - - uid: 23868 - components: - - type: Transform - rot: -1.5707963267948966 rad - pos: 59.5,-8.5 - parent: 33 - proto: ComputerSolarControl entities: - uid: 676 @@ -67535,29 +67557,11 @@ entities: - 0 - proto: CrateHydroponicsSeedsMedicinal entities: - - uid: 3182 + - uid: 31616 components: - type: Transform - pos: -19.5,38.5 + pos: -19.48779,34.864456 parent: 33 - - type: EntityStorage - air: - volume: 200 - immutable: False - temperature: 293.1496 - moles: - - 9.117112 - - 34.29771 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - - 0 - proto: CrateLivestock entities: - uid: 18614 @@ -68570,6 +68574,13 @@ entities: - type: Transform pos: 31.5,22.5 parent: 33 + - uid: 31596 + components: + - type: Transform + pos: 60.5,19.5 + parent: 33 + - type: NavMapBeacon + text: Anchor - proto: DefaultStationBeaconEngiOutpost entities: - uid: 11248 @@ -86481,18 +86492,6 @@ entities: - type: Transform pos: -9.06601,26.59333 parent: 33 -- proto: FoodMeat - entities: - - uid: 8318 - components: - - type: Transform - pos: -5.5087547,44.53925 - parent: 33 - - uid: 8319 - components: - - type: Transform - pos: -5.4879217,44.476707 - parent: 33 - proto: FoodMeatChicken entities: - uid: 6653 @@ -86572,23 +86571,6 @@ entities: - type: Physics canCollide: False - type: InsideEntityStorage -- proto: FoodMeatChickenCutlet - entities: - - uid: 8322 - components: - - type: Transform - pos: -0.5508643,38.61676 - parent: 33 - - uid: 8323 - components: - - type: Transform - pos: -0.46753103,38.491673 - parent: 33 - - uid: 27307 - components: - - type: Transform - pos: -0.49878103,38.56464 - parent: 33 - proto: FoodMeatChickenFried entities: - uid: 6669 @@ -86624,28 +86606,6 @@ entities: - type: Physics canCollide: False - type: InsideEntityStorage -- proto: FoodMeatMeatball - entities: - - uid: 8313 - components: - - type: Transform - pos: -1.5913324,38.67354 - parent: 33 - - uid: 8314 - components: - - type: Transform - pos: -1.4142492,38.590145 - parent: 33 - - uid: 8315 - components: - - type: Transform - pos: -1.5496657,38.465057 - parent: 33 - - uid: 8316 - components: - - type: Transform - pos: -1.3309157,38.465057 - parent: 33 - proto: FoodMeatRotten entities: - uid: 10681 @@ -90331,6 +90291,53 @@ entities: parent: 33 - type: AtmosPipeColor color: '#FF1212FF' + - uid: 31602 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 54.5,20.5 + parent: 33 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 31603 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,18.5 + parent: 33 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 31604 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 57.5,18.5 + parent: 33 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 31605 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.5,19.5 + parent: 33 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 31606 + components: + - type: Transform + pos: 59.5,19.5 + parent: 33 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 31607 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 59.5,20.5 + parent: 33 + - type: AtmosPipeColor + color: '#0335FCFF' - proto: GasPipeFourway entities: - uid: 2955 @@ -117718,14 +117725,6 @@ entities: parent: 33 - type: AtmosPipeColor color: '#0335FCFF' - - uid: 29089 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 55.5,20.5 - parent: 33 - - type: AtmosPipeColor - color: '#FF1212FF' - uid: 29090 components: - type: Transform @@ -117742,14 +117741,6 @@ entities: parent: 33 - type: AtmosPipeColor color: '#FF1212FF' - - uid: 29092 - components: - - type: Transform - rot: 3.141592653589793 rad - pos: 56.5,20.5 - parent: 33 - - type: AtmosPipeColor - color: '#0335FCFF' - uid: 29093 components: - type: Transform @@ -119440,6 +119431,54 @@ entities: parent: 33 - type: AtmosPipeColor color: '#FF1212FF' + - uid: 31608 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 58.5,19.5 + parent: 33 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 31609 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 56.5,18.5 + parent: 33 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 31610 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,18.5 + parent: 33 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 31611 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 54.5,19.5 + parent: 33 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 31612 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 57.5,20.5 + parent: 33 + - type: AtmosPipeColor + color: '#0335FCFF' + - uid: 31613 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 58.5,20.5 + parent: 33 + - type: AtmosPipeColor + color: '#0335FCFF' - proto: GasPipeTJunction entities: - uid: 633 @@ -119587,6 +119626,22 @@ entities: parent: 33 - type: AtmosPipeColor color: '#FF1212FF' + - uid: 8322 + components: + - type: Transform + rot: -1.5707963267948966 rad + pos: 55.5,20.5 + parent: 33 + - type: AtmosPipeColor + color: '#FF1212FF' + - uid: 8323 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: 56.5,20.5 + parent: 33 + - type: AtmosPipeColor + color: '#0335FCFF' - uid: 9506 components: - type: Transform @@ -125840,6 +125895,13 @@ entities: parent: 33 - type: AtmosPipeColor color: '#0335FCFF' + - uid: 31614 + components: + - type: Transform + pos: 59.5,21.5 + parent: 33 + - type: AtmosPipeColor + color: '#0335FCFF' - proto: GasVentScrubber entities: - uid: 1551 @@ -127795,6 +127857,14 @@ entities: parent: 33 - type: AtmosPipeColor color: '#FF1212FF' + - uid: 31615 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: 59.5,18.5 + parent: 33 + - type: AtmosPipeColor + color: '#FF1212FF' - proto: GasVolumePump entities: - uid: 4166 @@ -134891,6 +134961,16 @@ entities: - type: Transform pos: 0.5,70.5 parent: 33 + - uid: 29089 + components: + - type: Transform + pos: 58.5,20.5 + parent: 33 + - uid: 29092 + components: + - type: Transform + pos: 61.5,17.5 + parent: 33 - uid: 29173 components: - type: Transform @@ -135356,6 +135436,31 @@ entities: - type: Transform pos: -18.5,85.5 parent: 33 + - uid: 31581 + components: + - type: Transform + pos: 60.5,17.5 + parent: 33 + - uid: 31582 + components: + - type: Transform + pos: 62.5,17.5 + parent: 33 + - uid: 31585 + components: + - type: Transform + pos: 63.5,18.5 + parent: 33 + - uid: 31586 + components: + - type: Transform + pos: 63.5,19.5 + parent: 33 + - uid: 31587 + components: + - type: Transform + pos: 63.5,20.5 + parent: 33 - proto: GrilleBroken entities: - uid: 5569 @@ -139070,7 +139175,7 @@ entities: - type: Transform pos: 5.56503,-22.863274 parent: 33 -- proto: MailPAI +- proto: MailNFPAI entities: - uid: 6330 components: @@ -148967,6 +149072,58 @@ entities: rot: 1.5707963267948966 rad pos: -61.46199,29.57894 parent: 33 +- proto: PaperCNCSheet + entities: + - uid: 8299 + components: + - type: Transform + pos: -64.418884,-35.3573 + parent: 33 + - uid: 8300 + components: + - type: Transform + pos: -65.47096,-35.513657 + parent: 33 + - uid: 8315 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -67.512634,-34.460842 + parent: 33 + - uid: 8316 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -66.50221,-34.512962 + parent: 33 + - uid: 8318 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -65.47096,-34.48169 + parent: 33 + - uid: 8319 + components: + - type: Transform + rot: 1.5707963267948966 rad + pos: -64.4918,-34.544235 + parent: 33 + - uid: 25143 + components: + - type: Transform + pos: -66.512634,-35.471962 + parent: 33 + - uid: 31617 + components: + - type: Transform + pos: -67.50221,-35.451115 + parent: 33 + - uid: 31618 + components: + - type: Transform + rot: 3.141592653589793 rad + pos: -70.21878,-28.42456 + parent: 33 - proto: PartRodMetal entities: - uid: 1803 @@ -151374,9 +151531,16 @@ entities: parent: 33 - uid: 28309 components: + - type: MetaData + desc: >2- + + It doesn't look very healthy... + name: wilted potted plant - type: Transform pos: -42.5,-34.5 parent: 33 + missingComponents: + - StealTarget - proto: PowerCellHigh entities: - uid: 4644 @@ -154781,6 +154945,11 @@ entities: rot: -1.5707963267948966 rad pos: 61.5,25.5 parent: 33 + - uid: 31601 + components: + - type: Transform + pos: 61.5,21.5 + parent: 33 - proto: PoweredSmallLight entities: - uid: 546 @@ -156534,15 +156703,15 @@ entities: - type: Transform pos: -68.5,-49.5 parent: 33 - - uid: 27026 + - uid: 27011 components: - type: Transform - pos: 54.5,19.5 + pos: 57.5,20.5 parent: 33 - - uid: 27030 + - uid: 27026 components: - type: Transform - pos: 54.5,18.5 + pos: 54.5,19.5 parent: 33 - uid: 27310 components: @@ -157590,6 +157759,23 @@ entities: - type: Transform pos: -103.5,4.5 parent: 33 +- proto: RandomIngredient + entities: + - uid: 23868 + components: + - type: Transform + pos: -8.544202,44.595825 + parent: 33 + - uid: 24769 + components: + - type: Transform + pos: -10.471286,44.606247 + parent: 33 + - uid: 25006 + components: + - type: Transform + pos: -7.440036,44.668793 + parent: 33 - proto: RandomInstruments entities: - uid: 2507 @@ -157802,6 +157988,23 @@ entities: - type: Transform pos: -25.5,117.5 parent: 33 +- proto: RandomMeat + entities: + - uid: 8301 + components: + - type: Transform + pos: -5.5172763,44.512432 + parent: 33 + - uid: 8313 + components: + - type: Transform + pos: -1.4860258,38.508263 + parent: 33 + - uid: 8314 + components: + - type: Transform + pos: -0.5276926,38.508263 + parent: 33 - proto: RandomPainting entities: - uid: 4656 @@ -160631,11 +160834,6 @@ entities: - type: Transform pos: -26.525337,35.575306 parent: 33 - - uid: 8300 - components: - - type: Transform - pos: -7.53673,44.657608 - parent: 33 - proto: ReagentContainerOliveoil entities: - uid: 6667 @@ -160648,25 +160846,6 @@ entities: - type: Transform pos: -8.569332,43.625645 parent: 33 -- proto: ReagentContainerRice - entities: - - uid: 8301 - components: - - type: Transform - pos: -10.475582,44.657608 - parent: 33 -- proto: ReagentContainerSugar - entities: - - uid: 8298 - components: - - type: Transform - pos: -8.515896,44.730576 - parent: 33 - - uid: 8299 - components: - - type: Transform - pos: -8.359646,44.647186 - parent: 33 - proto: ReagentGrinderMachineCircuitboard entities: - uid: 17159 @@ -164969,6 +165148,11 @@ entities: - type: Transform pos: -64.5,-45.5 parent: 33 + - uid: 26948 + components: + - type: Transform + pos: 58.5,20.5 + parent: 33 - uid: 26958 components: - type: Transform @@ -165229,6 +165413,36 @@ entities: - type: Transform pos: 58.5,-25.5 parent: 33 + - uid: 31588 + components: + - type: Transform + pos: 63.5,20.5 + parent: 33 + - uid: 31589 + components: + - type: Transform + pos: 63.5,19.5 + parent: 33 + - uid: 31590 + components: + - type: Transform + pos: 63.5,18.5 + parent: 33 + - uid: 31591 + components: + - type: Transform + pos: 62.5,17.5 + parent: 33 + - uid: 31592 + components: + - type: Transform + pos: 61.5,17.5 + parent: 33 + - uid: 31593 + components: + - type: Transform + pos: 60.5,17.5 + parent: 33 - proto: RemoteSignaller entities: - uid: 27714 @@ -166088,10 +166302,10 @@ entities: parent: 33 - proto: SheetGlass10 entities: - - uid: 9222 + - uid: 27030 components: - type: Transform - pos: 54.60101,18.570824 + pos: 57.601383,20.563738 parent: 33 - uid: 27346 components: @@ -166311,10 +166525,10 @@ entities: parent: 33 - proto: SheetPlastic10 entities: - - uid: 26948 + - uid: 31595 components: - type: Transform - pos: 54.517677,18.591671 + pos: 57.445133,20.532467 parent: 33 - proto: SheetRGlass entities: @@ -173104,15 +173318,15 @@ entities: - type: Transform pos: 56.5,18.5 parent: 33 - - uid: 24769 + - uid: 9222 components: - type: Transform - pos: 56.5,20.5 + pos: 54.5,18.5 parent: 33 - - uid: 25143 + - uid: 26995 components: - type: Transform - pos: 57.5,20.5 + pos: 55.5,18.5 parent: 33 - proto: SpawnMobFoxRenault entities: @@ -174364,6 +174578,13 @@ entities: - type: Transform pos: -2.5,-9.5 parent: 33 +- proto: StationAnchor + entities: + - uid: 27307 + components: + - type: Transform + pos: 61.5,20.5 + parent: 33 - proto: StationMap entities: - uid: 3765 @@ -193000,11 +193221,6 @@ entities: - type: Transform pos: 53.5,17.5 parent: 33 - - uid: 25006 - components: - - type: Transform - pos: 58.5,19.5 - parent: 33 - uid: 25144 components: - type: Transform @@ -193315,11 +193531,6 @@ entities: - type: Transform pos: 47.5,82.5 parent: 33 - - uid: 27011 - components: - - type: Transform - pos: 58.5,20.5 - parent: 33 - uid: 27043 components: - type: Transform @@ -193965,6 +194176,26 @@ entities: - type: Transform pos: 71.5,69.5 parent: 33 + - uid: 31577 + components: + - type: Transform + pos: 63.5,22.5 + parent: 33 + - uid: 31579 + components: + - type: Transform + pos: 59.5,17.5 + parent: 33 + - uid: 31583 + components: + - type: Transform + pos: 63.5,17.5 + parent: 33 + - uid: 31584 + components: + - type: Transform + pos: 63.5,21.5 + parent: 33 - proto: WallReinforcedRust entities: - uid: 31423 diff --git a/Resources/Migrations/migration.yml b/Resources/Migrations/migration.yml index c96d0afd03b..57636eae33b 100644 --- a/Resources/Migrations/migration.yml +++ b/Resources/Migrations/migration.yml @@ -402,7 +402,7 @@ FoodMeatFiestaKebab: FoodKebabSkewer ClothingBeltSuspenders: ClothingBeltSuspendersRed # 2024-08-19 -ClothingNeckShockCollar: ClothingBackpackElectropack +# ClothingNeckShockCollar: ClothingBackpackElectropack # DeltaV - We keep shock collar and have our own migration # 2024-08-22 ComputerShuttleSalvage: null @@ -424,3 +424,6 @@ HatBase: null # 2024-09-19 BlueprintFlare: null + +# 2024-10-04 +BaseAdvancedPen: Pen diff --git a/Resources/Prototypes/Accents/word_replacements.yml b/Resources/Prototypes/Accents/word_replacements.yml index d6495514119..f6f95fb1dc0 100644 --- a/Resources/Prototypes/Accents/word_replacements.yml +++ b/Resources/Prototypes/Accents/word_replacements.yml @@ -46,7 +46,7 @@ accent-italian-words-18: accent-italian-words-replace-18 accent-italian-words-19: accent-italian-words-replace-19 accent-italian-words-20: accent-italian-words-replace-20 - accent-italian-words-21: accent-italian-words-replace-21 + # accent-italian-words-21: accent-italian-words-replace-21 # DeltaV - Remove nuke->spiciest meatball accent-italian-words-22: accent-italian-words-replace-22 accent-italian-words-23: accent-italian-words-replace-23 accent-italian-words-24: accent-italian-words-replace-24 diff --git a/Resources/Prototypes/Access/misc.yml b/Resources/Prototypes/Access/misc.yml index 417d2cdb028..4617797bb51 100644 --- a/Resources/Prototypes/Access/misc.yml +++ b/Resources/Prototypes/Access/misc.yml @@ -49,3 +49,4 @@ - Prosecutor # DeltaV - Add Prosecutor access - Clerk # DeltaV - Add Clerk access - Corpsman # DeltaV - Add Corpsman access + - Robotics # DeltaV: Robotics access diff --git a/Resources/Prototypes/Access/research.yml b/Resources/Prototypes/Access/research.yml index f0de2c93db4..70785ce89a2 100644 --- a/Resources/Prototypes/Access/research.yml +++ b/Resources/Prototypes/Access/research.yml @@ -12,3 +12,4 @@ - ResearchDirector - Research - Mantis # DeltaV - Psionic Mantis, see Resources/Prototypes/DeltaV/Access/epistemics.yml + - Robotics # DeltaV: Robotics access diff --git a/Resources/Prototypes/Atmospherics/gases.yml b/Resources/Prototypes/Atmospherics/gases.yml index 5c703c0eae6..bd28640786e 100644 --- a/Resources/Prototypes/Atmospherics/gases.yml +++ b/Resources/Prototypes/Atmospherics/gases.yml @@ -81,7 +81,7 @@ molarMass: 44 color: 8F00FF reagent: NitrousOxide - pricePerMole: 1 + pricePerMole: 1 # DeltaV - Change back to 1 - type: gas id: 8 @@ -94,4 +94,4 @@ gasMolesVisible: 0.6 color: 3a758c reagent: Frezon - pricePerMole: 3 + pricePerMole: 3 # DeltaV - Change back to 3 diff --git a/Resources/Prototypes/Body/Organs/Animal/animal.yml b/Resources/Prototypes/Body/Organs/Animal/animal.yml index 8384e006df7..e59aad9da3f 100644 --- a/Resources/Prototypes/Body/Organs/Animal/animal.yml +++ b/Resources/Prototypes/Body/Organs/Animal/animal.yml @@ -60,6 +60,9 @@ reagents: - ReagentId: UncookedAnimalProteins Quantity: 5 + - type: Item + size: Small + heldPrefix: lungs - type: entity id: OrganAnimalStomach @@ -86,6 +89,9 @@ groups: - id: Food - id: Drink + - type: Item + size: Small + heldPrefix: stomach - type: entity id: OrganMouseStomach @@ -97,6 +103,9 @@ solutions: stomach: maxVol: 30 + - type: Item + size: Small + heldPrefix: stomach - type: entity id: OrganAnimalLiver @@ -113,6 +122,9 @@ groups: - id: Alcohol rateModifier: 0.1 + - type: Item + size: Small + heldPrefix: liver - type: entity id: OrganAnimalHeart @@ -130,6 +142,9 @@ - id: Medicine - id: Poison - id: Narcotic + - type: Item + size: Small + heldPrefix: heart - type: entity id: OrganAnimalKidneys @@ -146,3 +161,6 @@ maxReagents: 5 metabolizerTypes: [ Animal ] removeEmpty: true + - type: Item + size: Small + heldPrefix: kidneys diff --git a/Resources/Prototypes/Body/Organs/arachnid.yml b/Resources/Prototypes/Body/Organs/arachnid.yml index 29ca393d137..c7542ae1118 100644 --- a/Resources/Prototypes/Body/Organs/arachnid.yml +++ b/Resources/Prototypes/Body/Organs/arachnid.yml @@ -34,6 +34,9 @@ - type: Sprite sprite: Mobs/Species/Arachnid/organs.rsi state: stomach + - type: Item + size: Small + heldPrefix: stomach - type: Stomach updateInterval: 1.5 - type: SolutionContainerManager @@ -91,6 +94,9 @@ components: - type: Sprite state: heart-on + - type: Item + size: Small + heldPrefix: heart - type: Metabolizer updateInterval: 1.5 maxReagents: 2 @@ -107,6 +113,9 @@ description: "Pairing suggestion: chianti and fava beans." categories: [ HideSpawnMenu ] components: + - type: Item + size: Small + heldPrefix: liver - type: Sprite state: liver - type: Metabolizer # The liver metabolizes certain chemicals only, like alcohol. @@ -129,6 +138,9 @@ - state: kidney-l - state: kidney-r # The kidneys just remove anything that doesn't currently have any metabolisms, as a stopgap. + - type: Item + size: Small + heldPrefix: kidneys - type: Metabolizer updateInterval: 1.5 maxReagents: 5 @@ -145,6 +157,9 @@ layers: - state: eyeball-l - state: eyeball-r + - type: Item + size: Small + heldPrefix: eyeballs - type: entity id: OrganArachnidTongue diff --git a/Resources/Prototypes/Body/Organs/diona.yml b/Resources/Prototypes/Body/Organs/diona.yml index e248355df2c..bf865a07fd9 100644 --- a/Resources/Prototypes/Body/Organs/diona.yml +++ b/Resources/Prototypes/Body/Organs/diona.yml @@ -29,8 +29,11 @@ id: OrganDionaBrain parent: [BaseDionaOrgan, OrganHumanBrain] name: brain - description: "The source of incredible, unending intelligence. Honk." + description: "The central hub of a diona's pseudo-neurological activity, its root-like tendrils search for its former body." components: + - type: Item + size: Small + heldPrefix: brain - type: Sprite state: brain - type: SolutionContainerManager @@ -64,7 +67,7 @@ id: OrganDionaStomach parent: BaseDionaOrgan name: stomach - description: "Gross. This is hard to stomach." + description: "The diona's equivalent of a stomach, it reeks of asparagus and vinegar." components: - type: Sprite state: stomach @@ -90,18 +93,21 @@ - id: Narcotic - id: Alcohol rateModifier: 0.1 + - type: Item + size: Small + heldPrefix: stomach - type: entity id: OrganDionaLungs parent: BaseDionaOrgan name: lungs - description: "Filters oxygen from an atmosphere, which is then sent into the bloodstream to be used as an electron carrier." + description: "A spongy mess of slimy, leaf-like structures. Capable of breathing both carbon dioxide and oxygen." components: - type: Sprite - sprite: Mobs/Species/Human/organs.rsi - layers: - - state: lung-l - - state: lung-r + state: lungs + - type: Item + size: Small + heldPrefix: lungs - type: Lung - type: Metabolizer removeEmpty: true diff --git a/Resources/Prototypes/Body/Organs/human.yml b/Resources/Prototypes/Body/Organs/human.yml index c67f4f6cd16..a57847da715 100644 --- a/Resources/Prototypes/Body/Organs/human.yml +++ b/Resources/Prototypes/Body/Organs/human.yml @@ -50,6 +50,8 @@ - type: Examiner - type: BlockMovement - type: BadFood + - type: Food # DeltaV: Prevent eating brains as borgs don't remember what happened to them + requiredStomachs: 20 - type: Tag tags: - Meat @@ -71,6 +73,9 @@ entries: Burger: Brain Taco: Brain + - type: Item + size: Small + heldPrefix: brain - type: entity id: OrganHumanEyes @@ -82,6 +87,9 @@ layers: - state: eyeball-l - state: eyeball-r + - type: Item + size: Small + heldPrefix: eyeballs - type: entity id: OrganHumanTongue @@ -122,6 +130,9 @@ layers: - state: lung-l - state: lung-r + - type: Item + size: Small + heldPrefix: lungs - type: Lung - type: Metabolizer removeEmpty: true @@ -164,6 +175,9 @@ - id: Medicine - id: Poison - id: Narcotic + - type: Item + size: Small + heldPrefix: heart - type: entity id: OrganHumanStomach @@ -173,6 +187,9 @@ components: - type: Sprite state: stomach + - type: Item + size: Small + heldPrefix: stomach - type: SolutionContainerManager solutions: stomach: @@ -202,6 +219,9 @@ components: - type: Sprite state: liver + - type: Item + size: Small + heldPrefix: liver - type: Metabolizer # The liver metabolizes certain chemicals only, like alcohol. maxReagents: 1 metabolizerTypes: [Human] @@ -219,6 +239,9 @@ layers: - state: kidney-l - state: kidney-r + - type: Item + size: Small + heldPrefix: kidneys # The kidneys just remove anything that doesn't currently have any metabolisms, as a stopgap. - type: Metabolizer maxReagents: 5 diff --git a/Resources/Prototypes/Body/Organs/slime.yml b/Resources/Prototypes/Body/Organs/slime.yml index 3da76c5d4aa..ca22d25423c 100644 --- a/Resources/Prototypes/Body/Organs/slime.yml +++ b/Resources/Prototypes/Body/Organs/slime.yml @@ -33,6 +33,9 @@ reagents: - ReagentId: Slime Quantity: 10 + - type: Item + size: Small + heldPrefix: brain - type: entity @@ -70,3 +73,6 @@ reagents: - ReagentId: UncookedAnimalProteins Quantity: 5 + - type: Item + size: Small + heldPrefix: lungs diff --git a/Resources/Prototypes/Body/Organs/vox.yml b/Resources/Prototypes/Body/Organs/vox.yml index 1b4d12116f8..70e07832712 100644 --- a/Resources/Prototypes/Body/Organs/vox.yml +++ b/Resources/Prototypes/Body/Organs/vox.yml @@ -1,9 +1,15 @@ - type: entity id: OrganVoxLungs parent: OrganHumanLungs + description: "The blue, anaerobic lungs of a vox, they intake nitrogen to breathe. Any form of gaseous oxygen is lethally toxic if breathed in." suffix: "vox" components: + - type: Sprite + sprite: Mobs/Species/Vox/organs.rsi - type: Metabolizer metabolizerTypes: [ Vox ] - type: Lung alert: LowNitrogen + - type: Item + size: Small + heldPrefix: lungs diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_armory.yml b/Resources/Prototypes/Catalog/Cargo/cargo_armory.yml index 6341042bf89..1682f56199d 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_armory.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_armory.yml @@ -24,7 +24,7 @@ sprite: Objects/Specific/Medical/implanter.rsi state: implanter0 product: CrateTrackingImplants - cost: 1000 + cost: 4000 # DeltaV - was 1000 category: cargoproduct-category-name-armory group: market diff --git a/Resources/Prototypes/Catalog/Cargo/cargo_engines.yml b/Resources/Prototypes/Catalog/Cargo/cargo_engines.yml index c27251bfca7..72f9d3a59bf 100644 --- a/Resources/Prototypes/Catalog/Cargo/cargo_engines.yml +++ b/Resources/Prototypes/Catalog/Cargo/cargo_engines.yml @@ -70,15 +70,15 @@ category: cargoproduct-category-name-engineering group: market -#- type: cargoProduct -# id: EngineTeslaGenerator -# icon: -# sprite: Structures/Power/Generation/Tesla/generator.rsi -# state: icon -# product: CrateEngineeringTeslaGenerator -# cost: 4000 -# category: cargoproduct-category-name-engineering -# group: market +- type: cargoProduct + id: EngineTeslaGenerator + icon: + sprite: Structures/Power/Generation/Tesla/generator.rsi + state: icon + product: CrateEngineeringTeslaGenerator + cost: 4000 + category: cargoproduct-category-name-engineering + group: market - type: cargoProduct id: EngineTeslaCoil diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml b/Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml index 6470a0437cb..aab8ad92871 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/dressers.yml @@ -76,7 +76,6 @@ - id: ClothingUniformJumpsuitHosFormal # - id: ClothingOuterWinterHoS # DeltaV - removed for incongruence - id: ClothingOuterCoatStasecHoS # DeltaV - add winter coat - - id: ClothingOuterGreatcoatStasecHoS # DeltaV - add greatcoat - id: ClothingShoesBootsWinterHeadOfSecurity # DeltaV - add HoS winter boots - type: entity @@ -120,5 +119,4 @@ - id: ClothingHeadHatWarden - id: ClothingHeadHatBeretWarden - id: ClothingOuterCoatStasecWarden # DeltaV - add winter coat - - id: ClothingOuterGreatcoatStasecWarden # DeltaV - add greatcoat - id: ClothingShoesBootsWinterWarden # DeltaV - add winter boots diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml b/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml index 0477d250db2..3723ccbceea 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/engineer.yml @@ -94,6 +94,7 @@ - id: GasAnalyzer - id: MedkitOxygenFilled - id: HolofanProjector + - id: DoorRemoteFirefight # DeltaV - Re-added fire-fighting remote. - id: RCD - id: RCDAmmo - id: LunchboxEngineeringFilledRandom # Delta-V Lunchboxes! @@ -112,6 +113,7 @@ - id: GasAnalyzer - id: MedkitOxygenFilled - id: HolofanProjector + - id: DoorRemoteFirefight # DeltaV - Re-added fire-fighting remote. - id: RCD - id: RCDAmmo - id: LunchboxEngineeringFilledRandom # Delta-V Lunchboxes! diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 5ed7b595ef6..9694ba828e5 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -19,6 +19,7 @@ - id: RubberStampApproved - id: RubberStampDenied - id: RubberStampQm + - id: AstroNavCartridge - type: entity id: LockerQuarterMasterFilled @@ -228,6 +229,7 @@ - id: MedicalTechFabCircuitboard - id: MedkitFilled - id: RubberStampCMO + - id: MedTekCartridge # Hardsuit table, used for suit storage as well - type: entityTable @@ -271,6 +273,7 @@ children: - !type:NestedSelector # DeltaV tableId: LockerFillResearchDirectorDeltaV + #- id: Intellicard # DeltaV: temporarily removed until AI is enabled - id: BoxEncryptionKeyScience - id: CircuitImprinterMachineCircuitboard - id: ClothingBeltUtilityFilled @@ -350,6 +353,7 @@ - id: ClothingOuterHardsuitCombatHoS # DeltaV - ClothingOuterHardsuitSecurityRed replaced in favour of head of security's advanced combat hardsuit. - id: JetpackSecurityFilled - id: OxygenTankFilled + - id: ClothingShoesBootsSecurityMagboots # DeltaV - Added security magboots. # No hardsuit locker - type: entity diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml index 8f7c5e8d1c9..66e0db3f7b7 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/security.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/security.yml @@ -32,6 +32,7 @@ amount: 2 - id: RemoteSignaller amount: 2 + - id: ClothingShoesBootsSecurityMagboots # DeltaV - Added security magboots. - type: entity id: LockerWardenFilled diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/suit_storage.yml b/Resources/Prototypes/Catalog/Fills/Lockers/suit_storage.yml index 82b928fb0ad..ff7d4fd4152 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/suit_storage.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/suit_storage.yml @@ -139,8 +139,13 @@ - type: StorageFill contents: - id: OxygenTankFilled + amount: 2 #DeltaV - Double the tanks - id: ClothingOuterHardsuitCombatOfficer # DeltaV - ClothingOuterHardsuitSecurity replaced in favour of security combat hardsuit. + amount: 2 #DeltaV - Double the suits - id: ClothingMaskBreath + amount: 2 #Delta-V Double the masks + - id: ClothingShoesBootsSecurityMagboots # DeltaV - Added security magboots. + amount: 2 - type: AccessReader access: [["Security"]] @@ -207,6 +212,7 @@ - id: OxygenTankFilled - id: ClothingOuterHardsuitCombatWarden # DeltaV - ClothingOuterHardsuitWarden replaced in favour of warden's riot combat hardsuit. - id: ClothingMaskBreath + - id: ClothingShoesBootsSecurityMagboots # DeltaV - Added security magboots. - type: AccessReader access: [["Armory"]] diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chemvend.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chemvend.yml index 78386af931a..7c44ce1cdda 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chemvend.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chemvend.yml @@ -24,6 +24,7 @@ JugSulfur: 1 emaggedInventory: ToxinChemistryBottle: 1 + LeadChemistryBottle: 2 # DeltaV: Added lead to standard chemvend - type: vendingMachineInventory id: ChemVendInventorySyndicate @@ -49,7 +50,7 @@ JugSodium: 2 JugSugar: 3 JugSulfur: 1 - JugWeldingFuel: 1 + JugWeldingFuel: 2 # DeltaV: raised to 2 from 1 emaggedInventory: PaxChemistryBottle: 3 MuteToxinChemistryBottle: 3 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml index b19ed1da6c5..178fea40b10 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml @@ -26,7 +26,6 @@ ClothingHeadsetPrison: 3 # DeltaV - prison headsets in secdrobe ClothingOuterStasecSweater: 2 # DeltaV - add sweaters to secdrobe ClothingOuterCoatStasec: 2 # DeltaV - replace ClothingOuterWinterSec - ClothingOuterGreatcoatStasec: 2 # DeltaV - added greatcoats to SecDrobe. Surplus, reminds the officers of the good times. ## ClothingOuterArmorBasic: 2 # DeltaV - moved body armour from SecDrobe to SecTech ## ClothingOuterArmorBasicSlim: 2 ClothingNeckScarfStripedRed: 3 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/tankdispenser.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/tankdispenser.yml index fce18024a7e..188aaf7641a 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/tankdispenser.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/tankdispenser.yml @@ -8,4 +8,5 @@ id: TankDispenserEngineeringInventory startingInventory: PlasmaTankFilled: 10 + NitrogenTankFilled: 10 OxygenTankFilled: 10 diff --git a/Resources/Prototypes/Catalog/VendingMachines/advertisements.yml b/Resources/Prototypes/Catalog/VendingMachines/advertisements.yml index 9314de97914..46edd7bafef 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/advertisements.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/advertisements.yml @@ -130,6 +130,12 @@ prefix: fat-extractor-fact- count: 6 +- type: localizedDataset + id: FirebotAd + values: + prefix: advertisement-firebot- + count: 4 + - type: localizedDataset id: GoodCleanFunAds values: diff --git a/Resources/Prototypes/Catalog/uplink_catalog.yml b/Resources/Prototypes/Catalog/uplink_catalog.yml index 92ff0dc62e0..93c6998469d 100644 --- a/Resources/Prototypes/Catalog/uplink_catalog.yml +++ b/Resources/Prototypes/Catalog/uplink_catalog.yml @@ -771,7 +771,7 @@ id: UplinkBinaryTranslatorKey name: uplink-binary-translator-key-name description: uplink-binary-translator-key-desc - icon: { sprite: /Textures/Objects/Devices/encryption_keys.rsi, state: borg_label } + icon: { sprite: /Textures/Objects/Devices/encryption_keys.rsi, state: ai_label } productEntity: EncryptionKeyBinarySyndicate cost: Telecrystal: 1 @@ -885,7 +885,7 @@ discountDownTo: Telecrystal: 2 cost: - Telecrystal: 4 + Telecrystal: 3 categories: - UplinkDisruption @@ -991,11 +991,47 @@ categories: - UplinkDisruption conditions: - - !type:BuyerWhitelistCondition + - !type:BuyerWhitelistCondition blacklist: components: - SurplusBundle +- type: listing + id: UplinkAntimovCircuitBoard + name: uplink-antimov-law-name + description: uplink-antimov-law-desc + productEntity: AntimovCircuitBoard + discountCategory: usualDiscounts + discountDownTo: + Telecrystal: 10 + cost: + Telecrystal: 14 + categories: + - UplinkDisruption + conditions: + - !type:StoreWhitelistCondition + blacklist: + tags: + - NukeOpsUplink + +- type: listing + id: UplinkNukieAntimovCircuitBoard + name: uplink-antimov-law-name + description: uplink-antimov-law-desc + productEntity: AntimovCircuitBoard + discountCategory: rareDiscounts + discountDownTo: + Telecrystal: 20 + cost: + Telecrystal: 24 + categories: + - UplinkDisruption + conditions: + - !type:StoreWhitelistCondition + whitelist: + tags: + - NukeOpsUplink + - type: listing id: UplinkSurplusBundle name: uplink-surplus-bundle-name @@ -1056,6 +1092,17 @@ components: - SurplusBundle +# DeltaV: disabled in favour of observation kit +#- type: listing +# id: UplinkCameraBug +# name: uplink-cameraBug-name +# description: uplink-cameraBug-desc +# productEntity: CameraBug +# cost: +# Telecrystal: 4 +# categories: +# - UplinkDisruption + # Allies - type: listing @@ -1766,6 +1813,17 @@ categories: - UplinkPointless +- type: listing + id: UplinkSyndicateBusinessCard + name: uplink-business-card-name + description: uplink-business-card-desc + productEntity: SyndicateBusinessCard + categories: + - UplinkPointless + conditions: + - !type:ListingLimitedStockCondition + stock: 3 + # Job Specific - type: listing diff --git a/Resources/Prototypes/DeltaV/Access/engineering.yml b/Resources/Prototypes/DeltaV/Access/engineering.yml new file mode 100644 index 00000000000..7f6557fb8f5 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Access/engineering.yml @@ -0,0 +1,5 @@ +- type: accessGroup + id: FireFight + tags: + - Engineering + - Atmospherics diff --git a/Resources/Prototypes/DeltaV/Access/epistemics.yml b/Resources/Prototypes/DeltaV/Access/epistemics.yml index 8ccee35e709..2803ccdbaa3 100644 --- a/Resources/Prototypes/DeltaV/Access/epistemics.yml +++ b/Resources/Prototypes/DeltaV/Access/epistemics.yml @@ -1,3 +1,7 @@ - type: accessLevel id: Mantis name: id-card-access-level-mantis # Custom access level for the Mantis so they can have their own locker and maybe doors + +- type: accessLevel + id: Robotics + name: id-card-access-level-robotics diff --git a/Resources/Prototypes/DeltaV/Access/misc.yml b/Resources/Prototypes/DeltaV/Access/misc.yml index 495e4cb456d..364b1ab4c2d 100644 --- a/Resources/Prototypes/DeltaV/Access/misc.yml +++ b/Resources/Prototypes/DeltaV/Access/misc.yml @@ -24,6 +24,7 @@ - Salvage - Cargo - Research + - Robotics # would be silly if they couldn't go to robo - Service - Maintenance - External diff --git a/Resources/Prototypes/DeltaV/Catalog/Cargo/cargo_fun.yml b/Resources/Prototypes/DeltaV/Catalog/Cargo/cargo_fun.yml index ddf3ebdb9e1..a7a64686dd5 100644 --- a/Resources/Prototypes/DeltaV/Catalog/Cargo/cargo_fun.yml +++ b/Resources/Prototypes/DeltaV/Catalog/Cargo/cargo_fun.yml @@ -17,3 +17,13 @@ cost: 1000 category: Fun group: market + +- type: cargoProduct + id: FoamWeapons + icon: + sprite: Objects/Weapons/Guns/Rifles/foam_rifle.rsi + state: icon + product: CrateFoamWeapons + cost: 1400 + category: Fun + group: market diff --git a/Resources/Prototypes/DeltaV/Catalog/Fills/Crates/fun.yml b/Resources/Prototypes/DeltaV/Catalog/Fills/Crates/fun.yml index 18185d975e3..c2b42985f41 100644 --- a/Resources/Prototypes/DeltaV/Catalog/Fills/Crates/fun.yml +++ b/Resources/Prototypes/DeltaV/Catalog/Fills/Crates/fun.yml @@ -23,3 +23,18 @@ amount: 2 - id: BoxCartridgeCap amount: 2 + +- type: entity + name: foam toys set + description: Foam weapon kit to play war with the clowns. + id: CrateFoamWeapons + parent: CrateToyBox + components: + - type: StorageFill + contents: + - id: WeaponRifleFoam + amount: 1 + - id: BoxDonkSoftBox + amount: 1 + - id: GrenadeFoamDart + amount: 2 diff --git a/Resources/Prototypes/DeltaV/Catalog/Fills/Lockers/clerk.yml b/Resources/Prototypes/DeltaV/Catalog/Fills/Lockers/clerk.yml index 9e48c28c706..eb7dda0d441 100644 --- a/Resources/Prototypes/DeltaV/Catalog/Fills/Lockers/clerk.yml +++ b/Resources/Prototypes/DeltaV/Catalog/Fills/Lockers/clerk.yml @@ -11,4 +11,5 @@ - id: BoxEncryptionKeyJustice - id: ClerkIDCard - id: RubberStampNotary + - id: LunchboxJusticeFilledRandom diff --git a/Resources/Prototypes/DeltaV/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/DeltaV/Catalog/Fills/Lockers/heads.yml index fd0773d3455..0579aaa5a0a 100644 --- a/Resources/Prototypes/DeltaV/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/DeltaV/Catalog/Fills/Lockers/heads.yml @@ -9,6 +9,7 @@ - id: BoxPDACargo - id: QuartermasterIDCard - id: ClothingShoesBootsWinterLogisticsOfficer + - id: StockTradingCartridge - id: LunchboxCommandFilledRandom prob: 0.3 diff --git a/Resources/Prototypes/DeltaV/Catalog/Jukebox/Standard.yml b/Resources/Prototypes/DeltaV/Catalog/Jukebox/Standard.yml index aec4fc35033..40f06ba7a9a 100644 --- a/Resources/Prototypes/DeltaV/Catalog/Jukebox/Standard.yml +++ b/Resources/Prototypes/DeltaV/Catalog/Jukebox/Standard.yml @@ -102,3 +102,9 @@ name: Amie Waters - Superposition path: path: /Audio/DeltaV/Jukebox/superposition-MONO.ogg + +- type: jukebox + id: LoneDigger + name: Caravan Palace - Lone Digger + path: + path: /Audio/DeltaV/Jukebox/Caravan_Palace_Lone_Digger-MONO.ogg diff --git a/Resources/Prototypes/DeltaV/Datasets/addictions.yml b/Resources/Prototypes/DeltaV/Datasets/addictions.yml new file mode 100644 index 00000000000..7f8bc2a6730 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Datasets/addictions.yml @@ -0,0 +1,5 @@ +- type: localizedDataset + id: AddictionEffects + values: + prefix: reagent-effect-medaddiction- + count: 8 diff --git a/Resources/Prototypes/DeltaV/Entities/Clothing/Eyes/glasses.yml b/Resources/Prototypes/DeltaV/Entities/Clothing/Eyes/glasses.yml index 287ccc3ba99..52c7a6f3821 100644 --- a/Resources/Prototypes/DeltaV/Entities/Clothing/Eyes/glasses.yml +++ b/Resources/Prototypes/DeltaV/Entities/Clothing/Eyes/glasses.yml @@ -31,6 +31,7 @@ node: glassesCorps - type: Tag tags: + - GlassesCorpsman # Added for prescription glasses. - HamsterWearable - WhitelistChameleon - SecDogWearable @@ -42,3 +43,43 @@ - type: IdentityBlocker coverage: EYES +- type: entity + parent: ClothingEyesBase + id: ClothingEyesPrescriptionBaseSecGlasses + abstract: true + components: + - type: FlashImmunity + - type: EyeProtection + protectionTime: 5 + - type: VisionCorrection + correctionPower: 1.50 # Being flash proof comes at the cost of less range of vision + - type: IdentityBlocker + coverage: EYES + +- type: entity + parent: [ClothingEyesPrescriptionBaseSecGlasses, ShowSecurityIcons, BaseRestrictedContraband] + id: ClothingEyesPrescriptionSecurityGlasses + name: prescription security glasses + description: A pair of security glasses with what appears to be a... prescription lens glued on top? + components: + - type: Construction + graph: PrescriptionSecGlasses + node: prescsecglasses + - type: Sprite + sprite: DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi + - type: Clothing + sprite: DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi + +- type: entity + parent: [ClothingEyesPrescriptionBaseSecGlasses, ShowMedicalIcons, BaseRestrictedContraband] + id: ClothingEyesPrescriptionCorpsmanGlasses + name: prescription corpsman glasses + description: A pair of corpsman glasses with what appears to be a... prescription lens glued on top? + components: + - type: Construction + graph: PrescriptionCorpsmanGlasses + node: presccorpsglasses + - type: Sprite + sprite: DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi + - type: Clothing + sprite: DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi diff --git a/Resources/Prototypes/DeltaV/Entities/Clothing/Head/hats.yml b/Resources/Prototypes/DeltaV/Entities/Clothing/Head/hats.yml index bdb5ad85d9a..3dcda0fd5ee 100644 --- a/Resources/Prototypes/DeltaV/Entities/Clothing/Head/hats.yml +++ b/Resources/Prototypes/DeltaV/Entities/Clothing/Head/hats.yml @@ -193,6 +193,17 @@ - type: Clothing sprite: DeltaV/Clothing/Head/Hats/beret_corpsman.rsi +- type: entity + parent: ClothingHeadBase + id: ClothingHeadHatBeretDet + name: detective's beret + description: For forensic specialists and dogged investigators. + components: + - type: Sprite + sprite: DeltaV/Clothing/Head/Hats/beret_det.rsi + - type: Clothing + sprite: DeltaV/Clothing/Head/Hats/beret_det.rsi + - type: entity parent: ClothingHeadBase id: ClothingHeadHatCJToque diff --git a/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/wintercoats.yml b/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/wintercoats.yml index fcc8033551b..ce4ee91cfef 100644 --- a/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/wintercoats.yml +++ b/Resources/Prototypes/DeltaV/Entities/Clothing/OuterClothing/wintercoats.yml @@ -73,7 +73,7 @@ parent: ClothingOuterStasecSweater id: ClothingOuterCoatStasecHoS name: head of security's coat - description: A warm and comfortable winter coat, reinforced with durathread and compliant with Station Security uniform standards. Bears HoS arm flashes. + description: A warm and comfortable winter coat, reinforced with durathread and compliant with Station Security uniform standards. This version is adorned with gold trim. components: - type: Sprite sprite: DeltaV/Clothing/OuterClothing/WinterCoats/hoscoat.rsi @@ -84,7 +84,7 @@ parent: ClothingOuterStasecSweater id: ClothingOuterCoatStasecWarden name: warden's coat - description: A warm and comfortable winter coat, reinforced with durathread and compliant with Station Security uniform standards. Sports warden arm flashes. + description: A warm and comfortable winter coat, reinforced with durathread and compliant with Station Security uniform standards. This version features ice-white trim. components: - type: Sprite sprite: DeltaV/Clothing/OuterClothing/WinterCoats/armourercoat.rsi @@ -92,44 +92,23 @@ sprite: DeltaV/Clothing/OuterClothing/WinterCoats/armourercoat.rsi - type: entity - parent: ClothingOuterStorageFoldableBase - id: ClothingOuterGreatcoatStasec - name: station security greatcoat - description: A long and heavy greatcoat, yet to be phased out of use for Station Security. It's hard to tell what's so great about it, but it sure is warm and sturdy. - components: - - type: Sprite - sprite: DeltaV/Clothing/OuterClothing/WinterCoats/stasecgreatcoat.rsi - - type: Clothing - sprite: DeltaV/Clothing/OuterClothing/WinterCoats/stasecgreatcoat.rsi - - type: TemperatureProtection - coolingCoefficient: 0.1 - - type: Armor - modifiers: - coefficients: - Blunt: 0.75 - Slash: 0.75 - Piercing: 0.75 - Heat: 0.75 - - type: AllowSuitStorage - -- type: entity - parent: ClothingOuterGreatcoatStasec - id: ClothingOuterGreatcoatStasecHoS - name: head of security's greatcoat - description: A long and heavy greatcoat, yet to be phased out of use for Station Security. Bears HoS arm flashes. + parent: ClothingOuterStasecSweater + id: ClothingOuterCoatStasecDet + name: detective's coat + description: A warm and comfortable winter coat, reinforced with durathread and compliant with Station Security uniform standards. This version is detective plum. components: - type: Sprite - sprite: DeltaV/Clothing/OuterClothing/WinterCoats/hosgreatcoat.rsi + sprite: DeltaV/Clothing/OuterClothing/WinterCoats/detcoat.rsi - type: Clothing - sprite: DeltaV/Clothing/OuterClothing/WinterCoats/hosgreatcoat.rsi + sprite: DeltaV/Clothing/OuterClothing/WinterCoats/detcoat.rsi - type: entity - parent: ClothingOuterGreatcoatStasec - id: ClothingOuterGreatcoatStasecWarden - name: warden's greatcoat - description: A long and heavy greatcoat, yet to be phased out of use for Station Security. Sports warden arm flashes. + parent: ClothingOuterStasecSweater + id: ClothingOuterCoatStasecCorpsman + name: corpsman's coat + description: A warm and comfortable winter coat, reinforced with durathread and compliant with Station Security uniform standards. This version is corpsman blue. components: - type: Sprite - sprite: DeltaV/Clothing/OuterClothing/WinterCoats/armourergreatcoat.rsi + sprite: DeltaV/Clothing/OuterClothing/WinterCoats/corpsmancoat.rsi - type: Clothing - sprite: DeltaV/Clothing/OuterClothing/WinterCoats/armourergreatcoat.rsi + sprite: DeltaV/Clothing/OuterClothing/WinterCoats/corpsmancoat.rsi diff --git a/Resources/Prototypes/DeltaV/Entities/Clothing/Shoes/magboots.yml b/Resources/Prototypes/DeltaV/Entities/Clothing/Shoes/magboots.yml new file mode 100644 index 00000000000..3752b22a74d --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Clothing/Shoes/magboots.yml @@ -0,0 +1,10 @@ +- type: entity + parent: [ClothingShoesBootsMagBase, BaseRestrictedContraband] + id: ClothingShoesBootsSecurityMagboots + name: security magboots + description: Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle. These ones bear security markings. + components: + - type: Sprite + sprite: DeltaV/Clothing/Shoes/Boots/magboots-security.rsi + - type: Clothing + sprite: DeltaV/Clothing/Shoes/Boots/magboots-security.rsi diff --git a/Resources/Prototypes/DeltaV/Entities/Clothing/Uniforms/jumpskirts.yml b/Resources/Prototypes/DeltaV/Entities/Clothing/Uniforms/jumpskirts.yml index 40e5381b843..33077504a70 100644 --- a/Resources/Prototypes/DeltaV/Entities/Clothing/Uniforms/jumpskirts.yml +++ b/Resources/Prototypes/DeltaV/Entities/Clothing/Uniforms/jumpskirts.yml @@ -46,6 +46,19 @@ - type: Clothing sprite: DeltaV/Clothing/Uniforms/Jumpskirt/security_blue.rsi +# Corpsman alt uniforms + +- type: entity + parent: ClothingUniformFoldableBase + id: ClothingUniformJumpskirtBrigmedicTurtle + name: corpsman's turtleneck + description: A comfortable and tight-fitting turtleneck for those with the dedication to reach the position of Corpsman. + components: + - type: Sprite + sprite: DeltaV/Clothing/Uniforms/Jumpskirt/brigmedic_alt.rsi + - type: Clothing + sprite: DeltaV/Clothing/Uniforms/Jumpskirt/brigmedic_alt.rsi + # Detective uniform - type: entity @@ -59,6 +72,17 @@ - type: Clothing sprite: DeltaV/Clothing/Uniforms/Jumpskirt/detective.rsi +- type: entity + parent: ClothingUniformFoldableBase + id: ClothingUniformJumpskirtDetTurtle + name: detective's turtleneck + description: A comfortable and tight-fitting turtleneck for those with the resolve to reach the position of Detective. + components: + - type: Sprite + sprite: DeltaV/Clothing/Uniforms/Jumpskirt/detective_alt.rsi + - type: Clothing + sprite: DeltaV/Clothing/Uniforms/Jumpskirt/detective_alt.rsi + # Senior Officer uniform - type: entity @@ -96,6 +120,17 @@ - type: Clothing sprite: DeltaV/Clothing/Uniforms/Jumpskirt/armourer_grey.rsi +- type: entity + parent: ClothingUniformFoldableBase + id: ClothingUniformJumpskirtWardenTurtle + name: warden's turtleneck + description: A comfortable and tight-fitting turtleneck for those with the patience to reach the position of Warden. + components: + - type: Sprite + sprite: DeltaV/Clothing/Uniforms/Jumpskirt/armourer_alt.rsi + - type: Clothing + sprite: DeltaV/Clothing/Uniforms/Jumpskirt/armourer_alt.rsi + # HoS alt uniforms - type: entity @@ -120,6 +155,17 @@ - type: Clothing sprite: DeltaV/Clothing/Uniforms/Jumpskirt/hos_grey.rsi +- type: entity + parent: ClothingUniformFoldableBase + id: ClothingUniformJumpskirtHoSTurtle + name: head of security's turtleneck + description: A comfortable and tight-fitting turtleneck for those with the tenacity to reach the position of Head of Security. + components: + - type: Sprite + sprite: DeltaV/Clothing/Uniforms/Jumpskirt/hos_alt.rsi + - type: Clothing + sprite: DeltaV/Clothing/Uniforms/Jumpskirt/hos_alt.rsi + # Central Command Uniform - ported from Velta - type: entity diff --git a/Resources/Prototypes/DeltaV/Entities/Clothing/Uniforms/jumpsuits.yml b/Resources/Prototypes/DeltaV/Entities/Clothing/Uniforms/jumpsuits.yml index 3fa17ed31f1..4f325b7cb00 100644 --- a/Resources/Prototypes/DeltaV/Entities/Clothing/Uniforms/jumpsuits.yml +++ b/Resources/Prototypes/DeltaV/Entities/Clothing/Uniforms/jumpsuits.yml @@ -8,7 +8,7 @@ sprite: DeltaV/Clothing/Uniforms/Jumpsuit/hopmesskit.rsi - type: Clothing sprite: DeltaV/Clothing/Uniforms/Jumpsuit/hopmesskit.rsi - + - type: entity parent: ClothingUniformBase id: ClothingUniformJumpsuitHoPFormal @@ -209,6 +209,19 @@ - type: Clothing sprite: DeltaV/Clothing/Uniforms/Jumpsuit/secformalsuit.rsi +# Corpsman alt uniforms + +- type: entity + parent: ClothingUniformFoldableBase + id: ClothingUniformJumpsuitBrigmedicTurtle + name: corpsman's turtleneck + description: A comfortable and tight-fitting turtleneck for those with the dedication to reach the position of Corpsman. + components: + - type: Sprite + sprite: DeltaV/Clothing/Uniforms/Jumpsuit/brigmedic_alt.rsi + - type: Clothing + sprite: DeltaV/Clothing/Uniforms/Jumpsuit/brigmedic_alt.rsi + # Detective uniform - type: entity @@ -222,6 +235,17 @@ - type: Clothing sprite: DeltaV/Clothing/Uniforms/Jumpsuit/detective.rsi +- type: entity + parent: ClothingUniformFoldableBase + id: ClothingUniformJumpsuitDetTurtle + name: detective's turtleneck + description: A comfortable and tight-fitting turtleneck for those with the resolve to reach the position of Detective. + components: + - type: Sprite + sprite: DeltaV/Clothing/Uniforms/Jumpsuit/detective_alt.rsi + - type: Clothing + sprite: DeltaV/Clothing/Uniforms/Jumpsuit/detective_alt.rsi + # Senior Officer uniform - type: entity @@ -259,6 +283,30 @@ - type: Clothing sprite: DeltaV/Clothing/Uniforms/Jumpsuit/armourer_grey.rsi +- type: entity + parent: ClothingUniformFoldableBase + id: ClothingUniformJumpsuitWardenTurtle + name: warden's turtleneck + description: A comfortable and tight-fitting turtleneck for those with the patience to reach the position of Warden. + components: + - type: Sprite + sprite: DeltaV/Clothing/Uniforms/Jumpsuit/armourer_alt.rsi + - type: Clothing + sprite: DeltaV/Clothing/Uniforms/Jumpsuit/armourer_alt.rsi + +# HoS alt uniforms + +- type: entity + parent: ClothingUniformFoldableBase + id: ClothingUniformJumpsuitHoSTurtle + name: head of security's turtleneck + description: A comfortable and tight-fitting turtleneck for those with the tenacity to reach the position of Head of Security. + components: + - type: Sprite + sprite: DeltaV/Clothing/Uniforms/Jumpsuit/hos_alt.rsi + - type: Clothing + sprite: DeltaV/Clothing/Uniforms/Jumpsuit/hos_alt.rsi + # Central Command Uniform - ported from Velta - type: entity diff --git a/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/ghost_roles.yml b/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/ghost_roles.yml index a3cf33bf1f3..0b822f9a1b4 100644 --- a/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/ghost_roles.yml +++ b/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/ghost_roles.yml @@ -1,14 +1,14 @@ - type: entity - categories: [ HideSpawnMenu, Spawner ] + categories: [ Spawner ] parent: MarkerBase id: SpawnPointPlayerCharacter name: ghost role spawn point - suffix: player character, DO NOT MAP + suffix: player character components: - type: GhostRole name: Roleplay Ghost Role - description: Placeholder - rules: Placeholder + description: This is a custom event ghost role. + rules: ghost-role-component-default-rules - type: GhostRoleCharacterSpawner - type: Sprite sprite: Markers/jobs.rsi @@ -17,6 +17,28 @@ - sprite: Mobs/Species/Human/parts.rsi state: full +- type: entity + parent: SpawnPointPlayerCharacter + id: SpawnPointPlayerCharacterMindShield + name: ghost role spawn point + suffix: mindshielded, player character + components: + - type: GhostRoleCharacterSpawner + addedComponents: + - type: MindShield + +- type: entity + parent: SpawnPointPlayerCharacter + id: SpawnPointPlayerCharacterTargetImmune + name: ghost role spawn point + suffix: mindshielded, KillObjectiveImmune, player character + components: + - type: GhostRoleCharacterSpawner + addedComponents: + - type: MindShield + - type: AntagImmune + - type: TargetObjectiveImmune + - type: entity # Part of ListeningPost categories: [ HideSpawnMenu, Spawner ] parent: BaseAntagSpawner diff --git a/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/jobs.yml b/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/jobs.yml index 4f671e14b28..e5d36ce9fdd 100644 --- a/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/jobs.yml +++ b/Resources/Prototypes/DeltaV/Entities/Markers/Spawners/jobs.yml @@ -79,3 +79,16 @@ state: security - sprite: DeltaV/Mobs/Silicon/chassis.rsi state: security_e + +- type: entity + parent: SpawnPointJobBase + id: SpawnPointRoboticist + name: roboticist + components: + - type: SpawnPoint + job_id: Scientist # TODO: change to Roboticist after merged + - type: Sprite + layers: + - state: green + - sprite: DeltaV/Markers/jobs.rsi + state: roboticist diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/scars.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/scars.yml new file mode 100644 index 00000000000..0b27c239baa --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/scars.yml @@ -0,0 +1,10 @@ +- type: marking + id: ScarChestFemale #DeltaV: Splitting the scars and tattoos + bodyPart: Chest + markingCategory: Chest + speciesRestriction: [Human, Dwarf, Felinid, Oni] #Einstein Engines - Felinid, Oni + sexRestriction: [Female] #DeltaV: Splitting the scars and tattoos + followSkinColor: true + sprites: + - sprite: DeltaV/Mobs/Customization/scars.rsi + state: scar_chest_female diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/tattoos.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/tattoos.yml new file mode 100644 index 00000000000..e8174f74b48 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Customization/Markings/tattoos.yml @@ -0,0 +1,29 @@ +- type: marking + id: TattooHiveChestFemale #DeltaV: Splitting the scars and tattoos + bodyPart: Chest + markingCategory: Chest + speciesRestriction: [Human, Dwarf, Felinid, Oni] # Delta V - Felinid, Oni + sexRestriction: [Female] #DeltaV: Splitting the scars and tattoos + coloring: + default: + type: + !type:TattooColoring + fallbackColor: "#666666" + sprites: + - sprite: DeltaV/Mobs/Customization/tattoos.rsi + state: tattoo_hive_chest_female + +- type: marking + id: TattooNightlingChestFemale #DeltaV: Splitting the scars and tattoos + bodyPart: Chest + markingCategory: Chest + speciesRestriction: [Human, Dwarf, Felinid, Oni] # Delta V - Felinid, Oni + sexRestriction: [Female] #DeltaV: Splitting the scars and tattoos + coloring: + default: + type: + !type:TattooColoring + fallbackColor: "#666666" + sprites: + - sprite: DeltaV/Mobs/Customization/tattoos.rsi + state: tattoo_nightling_female diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/nukiemouse.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/nukiemouse.yml index bde0a73504c..5036957a1d8 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/nukiemouse.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/NPCs/nukiemouse.yml @@ -44,8 +44,6 @@ - SmallMobMask layer: - SmallMobLayer - - type: MobState - - type: Deathgasp - type: MobStateActions actions: Critical: @@ -60,10 +58,6 @@ - type: MovementSpeedModifier baseWalkSpeed : 3 baseSprintSpeed : 4.9 - - type: Reactive - groups: - Flammable: [Touch] - Extinguish: [Touch] - type: InventorySlots - type: UserInterface interfaces: @@ -126,7 +120,6 @@ Female: Mouse Unsexed: Mouse wilhelmProbability: 0.01 - - type: CombatMode - type: MeleeWeapon soundHit: path: /Audio/Effects/bite.ogg @@ -153,10 +146,6 @@ - type: ActiveRadio channels: - Syndicate - # make the player a traitor once its taken - - type: AutoTraitor - giveUplink: false - giveObjectives: false - type: InteractionPopup successChance: 0.6 interactSuccessString: petting-success-nukie-mouse diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/harpy.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/harpy.yml index c537364dbc5..e02b1697e41 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/harpy.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/harpy.yml @@ -26,8 +26,6 @@ interfaces: enum.InstrumentUiKey.Key: type: InstrumentBoundUserInterface - enum.VoiceMaskUIKey.Key: - type: VoiceMaskBoundUserInterface enum.HumanoidMarkingModifierKey.Key: type: HumanoidMarkingModifierBoundUserInterface enum.StrippingUiKey.Key: diff --git a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/vulpkanin.yml b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/vulpkanin.yml index ff92b042650..81c48c49e65 100644 --- a/Resources/Prototypes/DeltaV/Entities/Mobs/Species/vulpkanin.yml +++ b/Resources/Prototypes/DeltaV/Entities/Mobs/Species/vulpkanin.yml @@ -109,3 +109,9 @@ components: - type: HumanoidAppearance species: Vulpkanin + hideLayersOnEquip: + - Snout + - HeadTop + - HeadSide + - type: Inventory + speciesId: vulpkanin diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Food/Baked/pie.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Food/Baked/pie.yml deleted file mode 100644 index ce4ed2aa7e0..00000000000 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Food/Baked/pie.yml +++ /dev/null @@ -1,38 +0,0 @@ -- type: entity - name: pumpkin pie - parent: FoodPieBase - id: FoodPiePumpkin - description: A seasonal favorite, consisting mostly of pumpkin and a handful of spooky spices. - components: - - type: FlavorProfile - flavors: - - sweet - - pumpkin - - type: Sprite - layers: - - state: tin - - sprite: DeltaV/Objects/Consumable/Food/Baked/pie.rsi - state: pumpkin - - type: SliceableFood - slice: FoodPiePumpkinSlice - - type: Tag - tags: - - Fruit - - Pie - -- type: entity - name: slice of pumpkin pie - parent: FoodPieSliceBase - id: FoodPiePumpkinSlice - components: - - type: FlavorProfile - flavors: - - sweet - - pumpkin - - type: Sprite - sprite: DeltaV/Objects/Consumable/Food/Baked/pie.rsi - state: pumpkin-slice - - type: Tag - tags: - - Fruit -# Tastes like pie, pumpkin. diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Food/Containers/lunchbox.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Food/Containers/lunchbox.yml index 26f23b23afe..b60063022c3 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Food/Containers/lunchbox.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Consumable/Food/Containers/lunchbox.yml @@ -410,3 +410,29 @@ map: [ "openLayer" ] - type: Item heldPrefix: syndicate + +- type: entity + parent: LunchboxGeneric + id: LunchboxJustice + suffix: Justice + components: + - type: Sprite + layers: + - state: justice + - state: justice-open + map: [ "openLayer" ] + - type: Item + heldPrefix: justice + +- type: entity + parent: LunchboxGenericFilledRandom + id: LunchboxJusticeFilledRandom + suffix: Justice, Filled, Random + components: + - type: Sprite + layers: + - state: justice + - state: justice-open + map: [ "openLayer" ] + - type: Item + heldPrefix: justice diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/Electronics/door_access.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/Electronics/door_access.yml index ce4e63e30fb..6f7450cc8f5 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/Electronics/door_access.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/Electronics/door_access.yml @@ -125,3 +125,11 @@ components: - type: AccessReader access: [["Clerk"]] + +- type: entity + parent: DoorElectronics + id: DoorElectronicsRobotics + suffix: Robotics, Locked + components: + - type: AccessReader + access: [["Research"]] # Uses research access until the job is added diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/cartridges.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/cartridges.yml index 3cf293ff3c2..02167b26b7f 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/cartridges.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/cartridges.yml @@ -1,7 +1,7 @@ - type: entity parent: BaseItem id: CrimeAssistCartridge - name: crime assist cartridge + name: CrimeAssist cartridge description: A cartridge that helps identify crimes and see appropriate punishment. components: - type: Sprite @@ -21,7 +21,7 @@ - type: entity parent: BaseItem id: SecWatchCartridge - name: sec watch cartridge + name: SecWatch cartridge description: A cartridge that tracks the status of currently wanted individuals. components: - type: Sprite @@ -42,7 +42,7 @@ - type: entity parent: BaseItem id: MailMetricsCartridge - name: mail metrics cartridge + name: MailMetrics cartridge description: A cartridge that tracks statistics related to mail deliveries. components: - type: Sprite @@ -59,3 +59,27 @@ icon: sprite: Nyanotrasen/Objects/Specific/Mail/mail.rsi state: icon + +- type: entity + parent: BaseItem + id: StockTradingCartridge + name: StockTrading cartridge + description: A cartridge that tracks the intergalactic stock market. + components: + - type: Sprite + sprite: DeltaV/Objects/Devices/cartridge.rsi + state: cart-stonk + - type: Icon + sprite: DeltaV/Objects/Devices/cartridge.rsi + state: cart-mail + - type: UIFragment + ui: !type:StockTradingUi + - type: StockTradingCartridge + - type: Cartridge + programName: stock-trading-program-name + icon: + sprite: DeltaV/Misc/program_icons.rsi + state: stock_trading + - type: BankClient + - type: AccessReader # This is so that we can restrict who can buy stocks + access: [["Orders"]] diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/door_remote.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/door_remote.yml index 27fa0a36530..fc10d1aa032 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/door_remote.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/door_remote.yml @@ -13,3 +13,20 @@ - type: Access groups: - Justice + +- type: entity + parent: [DoorRemoteDefault, BaseEngineeringContraband] + id: DoorRemoteFirefight + name: fire-fighting door remote + description: A gadget which can open and bolt FireDoors remotely. + components: + - type: Sprite + layers: + - state: door_remotebase + - state: door_remotelightscolour + color: "#ff9900" + - state: door_remotescreencolour + color: "#e02020" + - type: Access + groups: + - FireFight diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/pda.yml index 6903f60820d..c2f1b90f741 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/pda.yml @@ -40,6 +40,27 @@ - type: entity parent: BasePDA + id: BaseJusticePDA + abstract: true + components: + - type: Pda + penSlot: + startingItem: LuxuryPen + priority: -1 + whitelist: + tags: + - Write + - type: CartridgeLoader + diskSpace: 7 + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - CrimeAssistCartridge + - SecWatchCartridge + +- type: entity + parent: BaseJusticePDA id: ChiefJusticePDA name: chief justice PDA description: Whosoever bears this PDA is the law. @@ -59,26 +80,14 @@ - type: Pda id: ChiefJusticeIDCard state: pda-chiefjustice - penSlot: - startingItem: LuxuryPen - priority: -1 - whitelist: - tags: - - Write - type: PdaBorderColor borderColor: "#470823" - type: Icon sprite: DeltaV/Objects/Devices/pda.rsi state: pda-chiefjustice - - type: CartridgeLoader - preinstalled: - - CrewManifestCartridge - - NotekeeperCartridge - - NewsReaderCartridge - - CrimeAssistCartridge - type: entity - parent: BasePDA + parent: BaseJusticePDA id: ClerkPDA name: clerk PDA description: It has the stamp to prove it's been officially notarized! @@ -98,26 +107,14 @@ - type: Pda id: ClerkIDCard state: pda-clerk - penSlot: - startingItem: LuxuryPen - priority: -1 - whitelist: - tags: - - Write - type: PdaBorderColor borderColor: "#611528" - type: Icon sprite: DeltaV/Objects/Devices/pda.rsi state: pda-clerk - - type: CartridgeLoader - preinstalled: - - CrewManifestCartridge - - NotekeeperCartridge - - NewsReaderCartridge - - CrimeAssistCartridge - + - type: entity - parent: BasePDA + parent: BaseJusticePDA id: ProsecutorPDA name: prosecutor PDA description: Sharp. Looks like it could prosecute you all on its own. @@ -137,23 +134,11 @@ - type: Pda id: ProsecutorIDCard state: pda-prosecutor - penSlot: - startingItem: LuxuryPen - priority: -1 - whitelist: - tags: - - Write - type: PdaBorderColor borderColor: "#6f6192" - type: Icon sprite: DeltaV/Objects/Devices/pda.rsi state: pda-prosecutor - - type: CartridgeLoader # DeltaV - Crime Assist - preinstalled: - - CrewManifestCartridge - - NotekeeperCartridge - - NewsReaderCartridge - - CrimeAssistCartridge - type: entity parent: SyndiPDA diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Misc/identification_cards.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/identification_cards.yml index c65246f3815..1893483909c 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Misc/identification_cards.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/identification_cards.yml @@ -60,7 +60,7 @@ name: visitor ID card components: - type: IdCard - jobTitle: Visitor + jobTitle: job-title-visitor - type: entity parent: PassengerIDCard @@ -68,7 +68,7 @@ name: tourist ID card components: - type: IdCard - jobTitle: Tourist + jobTitle: job-alt-title-tourist - type: entity parent: PassengerIDCard @@ -76,7 +76,7 @@ name: off-duty crew ID card components: - type: IdCard - jobTitle: Off-Duty Crew + jobTitle: job-alt-title-off-duty-crew - type: entity parent: PassengerIDCard @@ -84,7 +84,7 @@ name: student ID card components: - type: IdCard - jobTitle: Student + jobTitle: job-alt-title-student # Bartender @@ -94,7 +94,7 @@ name: mixologist ID card components: - type: IdCard - jobTitle: Mixologist + jobTitle: job-alt-title-mixologist # Chef @@ -104,7 +104,7 @@ name: baker ID card components: - type: IdCard - jobTitle: Baker + jobTitle: job-alt-title-baker - type: entity parent: ChefIDCard @@ -112,7 +112,7 @@ name: butcher ID card components: - type: IdCard - jobTitle: Butcher + jobTitle: job-alt-title-butcher - type: entity parent: ChefIDCard @@ -120,7 +120,7 @@ name: pizzaiolo ID card components: - type: IdCard - jobTitle: Pizzaiolo + jobTitle: job-alt-title-pizzaiolo # Medical Intern @@ -130,7 +130,7 @@ name: practical nurse ID card components: - type: IdCard - jobTitle: Practical Nurse + jobTitle: job-alt-title-practical-nurse - type: entity parent: MedicalInternIDCard @@ -138,7 +138,7 @@ name: resident ID card components: - type: IdCard - jobTitle: Resident + jobTitle: job-alt-title-resident # Medical Doctor @@ -148,7 +148,7 @@ name: clinician ID card components: - type: IdCard - jobTitle: Clinician + jobTitle: job-alt-title-clinician # Atmospheric Technician @@ -158,7 +158,7 @@ name: life support technician ID card components: - type: IdCard - jobTitle: Life Support Technician + jobTitle: job-alt-title-life-support - type: entity parent: AtmosIDCard @@ -166,7 +166,7 @@ name: plasma scientist ID card components: - type: IdCard - jobTitle: Plasma Scientist + jobTitle: job-alt-title-plasma-scientist # Station Engineer @@ -176,7 +176,7 @@ name: electrician ID card components: - type: IdCard - jobTitle: Electrician + jobTitle: job-alt-title-electrician - type: entity parent: EngineeringIDCard @@ -184,7 +184,7 @@ name: mechanic ID card components: - type: IdCard - jobTitle: Mechanic + jobTitle: job-alt-title-mechanic # Cargo Technician @@ -194,7 +194,7 @@ name: deck worker ID card components: - type: IdCard - jobTitle: Deck Worker + jobTitle: job-alt-title-deck-worker - type: entity parent: CargoIDCard @@ -202,7 +202,7 @@ name: inventory associate ID card components: - type: IdCard - jobTitle: Inventory Associate + jobTitle: job-alt-title-inventory-associate # Salvage Specialist @@ -212,7 +212,7 @@ name: prospector ID card components: - type: IdCard - jobTitle: Prospector + jobTitle: job-alt-title-prospector - type: entity parent: SalvageIDCard @@ -220,7 +220,7 @@ name: excavator ID card components: - type: IdCard - jobTitle: Excavator + jobTitle: job-alt-title-excavator # Scientist @@ -230,7 +230,7 @@ name: lab technician ID card components: - type: IdCard - jobTitle: Lab Technician + jobTitle: job-alt-title-lab-technician - type: entity parent: ResearchIDCard @@ -238,7 +238,7 @@ name: xenoarchaeologist ID card components: - type: IdCard - jobTitle: Xenoarchaeologist + jobTitle: job-alt-title-xenoarch - type: entity parent: ResearchIDCard @@ -246,7 +246,7 @@ name: roboticist ID card components: - type: IdCard - jobTitle: Roboticist + jobTitle: job-alt-title-roboticist # Clown @@ -256,7 +256,7 @@ name: jester ID card components: - type: IdCard - jobTitle: Jester + jobTitle: job-alt-title-jester - type: entity parent: ClownIDCard @@ -264,4 +264,4 @@ name: fool ID card components: - type: IdCard - jobTitle: Fool + jobTitle: job-alt-title-fool diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Misc/mouth_storage.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/mouth_storage.yml index 2c1fafdf3ee..d6957c90e2a 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Misc/mouth_storage.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/mouth_storage.yml @@ -9,10 +9,11 @@ grid: - 0,0,1,1 maxItemSize: Small - blacklist: + blacklist: components: - Sharp - MindContainer + - NukeDisk - type: ContainerContainer containers: storagebase: !type:Container diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Misc/subdermal_implants.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/subdermal_implants.yml index 24c16c40e8e..65e29a4a75e 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Misc/subdermal_implants.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/subdermal_implants.yml @@ -5,16 +5,16 @@ name: bionic syrinx implant description: This implant lets a harpy adjust their voice to whoever they can think of. components: - - type: SubdermalImplant - implantAction: ActionSyrinxChangeVoiceMask - whitelist: - components: - - HarpySinger - - type: VoiceMasker - - type: Tag - tags: - - SubdermalImplant - - BionicSyrinxImplant + - type: SubdermalImplant + implantAction: ActionSyrinxChangeVoiceMask + whitelist: + components: + - HarpySinger # Ensure this is only for harpies and if this component gets renamed, CHANGE IT TO THE NEW VALUE!!! + - type: VoiceMask + - type: UserInterface + interfaces: + enum.VoiceMaskUIKey.Key: + type: VoiceMaskBoundUserInterface - type: entity categories: [ HideSpawnMenu, Spawner ] @@ -36,7 +36,7 @@ - 0,0,0,1 whitelist: components: - - EncryptionKey # encryption keys only! + - EncryptionKey # encryption keys only! - type: RadioImplant - type: entity diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail.yml index 3b600634109..3d5d66fc2a2 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Mail/mail.yml @@ -1484,9 +1484,9 @@ - id: MobMouse2 orGroup: Critter prob: 0.33 - - id: MobMouseCancer - orGroup: Critter - prob: 0.01 # Rare + #- id: MobMouseCancer #Delta-V change, This is supposed to be admin only, plus its just stupid. - Solaris + # orGroup: Critter + # prob: 0.01 # Rare - type: entity parent: BaseMail diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Robotics/borg_modules.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Robotics/borg_modules.yml index 9491cc6f329..ce70c9ac4c8 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Robotics/borg_modules.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/Robotics/borg_modules.yml @@ -94,3 +94,17 @@ - type: ItemBorgModule items: - WeaponEnergyGunMiniRecharging + +# Syndicate modules +- type: entity + parent: BorgModuleMartyr + id: BorgModuleMartyrDud + name: unfinished martyr cyborg module + description: This unfinished module has a large space for an explosive payload, with "boom" helpfully scribbled under it. + components: + - type: ItemBorgModule + items: + - SelfDestructSeqDud + - type: Construction + node: start + defaultTarget: live diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/recruiter.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/recruiter.yml index eba50f59c03..d17abefed8c 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Specific/recruiter.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Specific/recruiter.yml @@ -16,9 +16,8 @@ blacklist: components: - MindShield - mindBlacklist: - components: - - RecruiterRole # no silly goose + factionBlacklist: + - Syndicate # no silly goose - type: SolutionContainerManager solutions: blood: diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Throwable/grenades.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Throwable/grenades.yml new file mode 100644 index 00000000000..418b1437082 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Throwable/grenades.yml @@ -0,0 +1,9 @@ +# if you try to use an unfinished martyr module it does next to no damage, but still has a good scare +- type: entity + parent: SelfDestructSeq + id: SelfDestructSeqDud + components: + - type: Explosive + totalIntensity: 1 + canCreateVacuum: false + deleteAfterExplosion: false # prevent borg having an empty hand diff --git a/Resources/Prototypes/DeltaV/Entities/Stations/base.yml b/Resources/Prototypes/DeltaV/Entities/Stations/base.yml new file mode 100644 index 00000000000..fe31706b262 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Stations/base.yml @@ -0,0 +1,21 @@ +- type: entity + id: BaseStationStockMarket + abstract: true + components: + - type: StationStockMarket + companies: + - displayName: stock-trading-company-nanotrasen + basePrice: 100 + currentPrice: 100 + - displayName: stock-trading-company-gorlex + basePrice: 75 + currentPrice: 75 + - displayName: stock-trading-company-interdyne + basePrice: 300 + currentPrice: 300 + - displayName: stock-trading-company-fishinc + basePrice: 25 + currentPrice: 25 + - displayName: stock-trading-company-donk + basePrice: 90 + currentPrice: 90 diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/access.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/access.yml index 753f7cec457..d07778081e9 100644 --- a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/access.yml +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/access.yml @@ -154,6 +154,15 @@ - type: GridFill path: /Maps/Shuttles/DeltaV/sub_escape_pod.yml +- type: entity + parent: AirlockRobotics + id: AirlockRoboticsLocked + suffix: Robotics, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsRobotics ] + #Add airlocks from upstream roles - type: entity parent: AirlockServiceLocked @@ -360,6 +369,15 @@ containers: board: [ DoorElectronicsPsychologist ] +- type: entity + parent: AirlockRoboticsGlass + id: AirlockRoboticsGlassLocked + suffix: Robotics, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsRobotics ] + # Maintenance Hatches - type: entity parent: AirlockMaintRnDLocked @@ -471,6 +489,15 @@ containers: board: [ DoorElectronicsSecurityLawyer ] +- type: entity + parent: AirlockMaintRnDLocked + id: AirlockMaintRoboticsLocked + suffix: Robotics, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsRobotics ] + # Command-locked External airlocks. These don't exist upstream for some reason. - type: entity parent: AirlockExternal diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/airlocks.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/airlocks.yml index 93a8cec851a..b4d2436a0ac 100644 --- a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/airlocks.yml +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/airlocks.yml @@ -8,6 +8,14 @@ - type: PaintableAirlock department: Justice +- type: entity + parent: AirlockScience + id: AirlockRobotics + suffix: Robotics + components: + - type: Sprite + sprite: DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi + # Glass - type: entity @@ -20,3 +28,10 @@ - type: PaintableAirlock department: Justice +- type: entity + parent: AirlockScienceGlass + id: AirlockRoboticsGlass + suffix: Robotics + components: + - type: Sprite + sprite: DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/assembly.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/assembly.yml new file mode 100644 index 00000000000..5d616fd7ffa --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Airlocks/assembly.yml @@ -0,0 +1,38 @@ + +#Chemistry +- type: entity + parent: AirlockAssembly + id: AirlockAssemblyChemistry + suffix: Chemistry + components: + - type: Sprite + sprite: DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi #Delta V - Resprite Doors + state: "assembly" + +- type: entity + parent: AirlockAssembly + id: AirlockAssemblyChemistryGlass + suffix: Chemistry, Glass + components: + - type: Sprite + sprite: DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi #Delta V - Resprite Doors + state: "assembly" + +#Roboticist - Delta-V Creation +- type: entity + parent: AirlockAssembly + id: AirlockAssemblyRoboticist + suffix: Robotics + components: + - type: Sprite + sprite: DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi + state: "assembly" + +- type: entity + parent: AirlockAssembly + id: AirlockAssemblyRoboticistGlass + suffix: Robotics, Glass + components: + - type: Sprite + sprite: DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi + state: "assembly" diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Shutter/blast_door.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Shutter/blast_door.yml index 30f718cf42b..c6046ec68ac 100644 --- a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Shutter/blast_door.yml +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Shutter/blast_door.yml @@ -109,3 +109,19 @@ components: - type: AccessReader access: [["Command"], ["Armory"]] + +- type: entity + parent: BlastDoor + id: BlastDoorUnlinkedRobotics + suffix: Robotics + components: + - type: AccessReader + access: [["Robotics"]] + +- type: entity + parent: BlastDoorOpen + id: BlastDoorUnlinkedRoboticsOpen + suffix: Open, Robotics + components: + - type: AccessReader + access: [["Robotics"]] diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Windoors/windoor.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Windoors/windoor.yml index d770d620c68..3a144cdc202 100644 --- a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Windoors/windoor.yml +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/Windoors/windoor.yml @@ -79,6 +79,15 @@ containers: board: [ DoorElectronicsMantis ] +- type: entity + parent: WindoorSecure + id: WindoorSecureRoboticsLocked + suffix: Robotics, Locked + components: + - type: ContainerFill + containers: + board: [ DoorElectronicsRobotics ] + #Add windoors from upstream roles - type: entity parent: WindoorSecure diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Doors/airlock_groups.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/airlock_groups.yml new file mode 100644 index 00000000000..dba1dcd8f38 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Doors/airlock_groups.yml @@ -0,0 +1,41 @@ +# Door resprites +- type: AirlockGroup + id: StandardDeltaV + iconPriority: 200 # higher priority for spray painter + stylePaths: + atmospherics: DeltaV/Structures/Doors/Airlocks/Standard/atmospherics.rsi + basic: DeltaV/Structures/Doors/Airlocks/Standard/basic.rsi + cargo: DeltaV/Structures/Doors/Airlocks/Standard/cargo.rsi + chemistry: DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi + command: DeltaV/Structures/Doors/Airlocks/Standard/command.rsi + engineering: DeltaV/Structures/Doors/Airlocks/Standard/engineering.rsi + freezer: DeltaV/Structures/Doors/Airlocks/Standard/freezer.rsi + hydroponics: DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi + maintenance: DeltaV/Structures/Doors/Airlocks/Standard/maint.rsi + science: DeltaV/Structures/Doors/Airlocks/Standard/science.rsi + security: DeltaV/Structures/Doors/Airlocks/Standard/security.rsi + virology: DeltaV/Structures/Doors/Airlocks/Standard/virology.rsi + justice: DeltaV/Structures/Doors/Airlocks/Standard/justice.rsi # Add Justice Dept + roboticist: DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi #Added Roboticist Role + +- type: AirlockGroup + id: GlassDeltaV + iconPriority: 190 + stylePaths: + atmospherics: DeltaV/Structures/Doors/Airlocks/Glass/atmospherics.rsi + basic: DeltaV/Structures/Doors/Airlocks/Glass/basic.rsi + chemistry: DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi + command: DeltaV/Structures/Doors/Airlocks/Glass/command.rsi + science: DeltaV/Structures/Doors/Airlocks/Glass/science.rsi + cargo: DeltaV/Structures/Doors/Airlocks/Glass/cargo.rsi + engineering: DeltaV/Structures/Doors/Airlocks/Glass/engineering.rsi + glass: DeltaV/Structures/Doors/Airlocks/Glass/glass.rsi + hydroponics: DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi + maintenance: DeltaV/Structures/Doors/Airlocks/Glass/maint.rsi + medical: DeltaV/Structures/Doors/Airlocks/Glass/medical.rsi + security: DeltaV/Structures/Doors/Airlocks/Glass/security.rsi + virology: DeltaV/Structures/Doors/Airlocks/Glass/virology.rsi + justice: DeltaV/Structures/Doors/Airlocks/Glass/justice.rsi # Add Justice Dept + roboticist: DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi #Added Roboticist Role + + diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Wallmounts/switch.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Wallmounts/switch.yml new file mode 100644 index 00000000000..adb5f1f5b71 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Wallmounts/switch.yml @@ -0,0 +1,7 @@ +- type: entity + parent: LockableButton + suffix: Robotics + id: LockableButtonRobotics + components: + - type: AccessReader + access: [["Robotics"]] diff --git a/Resources/Prototypes/DeltaV/Entities/Structures/Walls/railing.yml b/Resources/Prototypes/DeltaV/Entities/Structures/Walls/railing.yml new file mode 100644 index 00000000000..9cb9f1ab6d6 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Entities/Structures/Walls/railing.yml @@ -0,0 +1,39 @@ +- type: entity + parent: Railing + id: RailingDeltaV + suffix: Modern + components: + - type: Sprite + sprite: DeltaV/Structures/Walls/railing.rsi + - type: Icon + sprite: DeltaV/Structures/Walls/railing.rsi + +- type: entity + parent: RailingCorner + id: RailingCornerDeltaV + suffix: Modern + components: + - type: Sprite + sprite: DeltaV/Structures/Walls/railing.rsi + - type: Icon + sprite: DeltaV/Structures/Walls/railing.rsi + +- type: entity + parent: RailingCornerSmall + id: RailingCornerSmallDeltaV + suffix: Modern + components: + - type: Sprite + sprite: DeltaV/Structures/Walls/railing.rsi + - type: Icon + sprite: DeltaV/Structures/Walls/railing.rsi + +- type: entity + parent: RailingRound + id: RailingRoundDeltaV + suffix: Modern + components: + - type: Sprite + sprite: DeltaV/Structures/Walls/railing.rsi + - type: Icon + sprite: DeltaV/Structures/Walls/railing.rsi diff --git a/Resources/Prototypes/DeltaV/GameRules/events.yml b/Resources/Prototypes/DeltaV/GameRules/events.yml index 1a434e85063..ddf95808f88 100644 --- a/Resources/Prototypes/DeltaV/GameRules/events.yml +++ b/Resources/Prototypes/DeltaV/GameRules/events.yml @@ -116,9 +116,8 @@ - type: NpcFactionMember factions: - Syndicate - mindComponents: - - type: ListeningPostRole - prototype: ListeningPost + mindRoles: + - MindRoleListeningPost # Mid round antag spawns - type: entity @@ -160,11 +159,8 @@ min: 1 max: 1 pickPlayer: false - mindComponents: - - type: RoleBriefing - briefing: paradox-anomaly-role-briefing - - type: ParadoxAnomalyRole - prototype: ParadoxAnomaly + mindRoles: + - MindRoleParadoxAnomaly - type: entity parent: BaseMidRoundAntag @@ -195,6 +191,5 @@ - fake_human_last - type: EmitSoundOnSpawn # fell out of the ceiling sound: /Audio/Effects/clang.ogg - mindComponents: - - type: FugitiveRole - prototype: Fugitive + mindRoles: + - MindRoleFugitive diff --git a/Resources/Prototypes/DeltaV/GameRules/unknown_shuttles.yml b/Resources/Prototypes/DeltaV/GameRules/unknown_shuttles.yml index 3cf5087c948..2959bebcc0b 100644 --- a/Resources/Prototypes/DeltaV/GameRules/unknown_shuttles.yml +++ b/Resources/Prototypes/DeltaV/GameRules/unknown_shuttles.yml @@ -44,11 +44,8 @@ - type: NpcFactionMember factions: - Syndicate - mindComponents: - - type: RecruiterRole - prototype: Recruiter - - type: RoleBriefing - briefing: Find candidates, conduct interviews and seal the deal by having them sign with your special recruiter's pen. + mindRoles: + - MindRoleRecruiter - type: entity parent: BaseUnknownShuttleRule @@ -88,8 +85,5 @@ - type: NpcFactionMember factions: - Syndicate - mindComponents: - - type: SynthesisRole - prototype: SynthesisSpecialist - - type: RoleBriefing - briefing: You are Interdyne's Synthesis Specialist! Prescribe deadly medications, barter your goods, and make a killing. + mindRoles: + - MindRoleSynthesis diff --git a/Resources/Prototypes/DeltaV/Guidebook/rules.yml b/Resources/Prototypes/DeltaV/Guidebook/rules.yml index 91ee9d5c708..d0417a8aca0 100644 --- a/Resources/Prototypes/DeltaV/Guidebook/rules.yml +++ b/Resources/Prototypes/DeltaV/Guidebook/rules.yml @@ -5,63 +5,61 @@ priority: -2 ruleEntry: true children: - - DeltaVDisclaimer1 - - DeltaVDisclaimer2 - DeltaVRule0 - - DeltaVRuleE1 - - DeltaVRuleE2 - - DeltaVRuleE3 + - DeltaVRuleA1 + - DeltaVRuleA2 + - DeltaVRuleA3 + - DeltaVRuleA4 + - DeltaVRuleA5 - DeltaVRule1 - DeltaVRule2 - DeltaVRule3 - DeltaVRule4 - DeltaVRule5 - - DeltaVRule6 - - DeltaVRule7 - DeltaVRuleC1 - DeltaVRuleC2 - DeltaVRuleC3 - type: guideEntry - id: DeltaVDisclaimer1 - name: guide-entry-deltav-disclaimer-1 - text: "/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/D1_AdminRespect.xml" + id: DeltaVRule0 + name: guide-entry-deltav-rule-0 + text: "/ServerInfo/Guidebook/DeltaV/Rules/0_Admin.xml" ruleEntry: true - type: guideEntry - id: DeltaVDisclaimer2 - name: guide-entry-deltav-disclaimer-2 - text: "/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/D2_Exploits.xml" + id: DeltaVRuleA1 + name: guide-entry-deltav-rule-a1 + text: "/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/A1_ERP.xml" ruleEntry: true - type: guideEntry - id: DeltaVRule0 - name: guide-entry-deltav-rule-0 - text: "/ServerInfo/Guidebook/DeltaV/Rules/0_Admin.xml" + id: DeltaVRuleA2 + name: guide-entry-deltav-rule-a2 + text: "/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/A2_Community.xml" ruleEntry: true - type: guideEntry - id: DeltaVRuleE1 - name: guide-entry-deltav-rule-e1 - text: "/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/E1_ERP.xml" + id: DeltaVRuleA3 + name: guide-entry-deltav-rule-a3 + text: "/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/A3_Streaming.xml" ruleEntry: true - type: guideEntry - id: DeltaVRuleE2 - name: guide-entry-deltav-rule-e2 - text: "/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/E2_Community.xml" + id: DeltaVRuleA4 + name: guide-entry-deltav-rule-a4 + text: "/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/A4_Ahelp.xml" ruleEntry: true - type: guideEntry - id: DeltaVRuleE3 - name: guide-entry-deltav-rule-e3 - text: "/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/E3_Streaming.xml" + id: DeltaVRuleA5 + name: guide-entry-deltav-rule-a5 + text: "/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/A5_Exploits.xml" ruleEntry: true - type: guideEntry id: DeltaVRule1 name: guide-entry-deltav-rule-1 - text: "/ServerInfo/Guidebook/DeltaV/Rules/GameRules/1_ServerExpectations.xml" + text: "/ServerInfo/Guidebook/DeltaV/Rules/GameRules/1_Behave.xml" ruleEntry: true - type: guideEntry @@ -73,31 +71,19 @@ - type: guideEntry id: DeltaVRule3 name: guide-entry-deltav-rule-3 - text: "/ServerInfo/Guidebook/DeltaV/Rules/GameRules/3_NewLife.xml" + text: "/ServerInfo/Guidebook/DeltaV/Rules/GameRules/3_Powergaming.xml" ruleEntry: true - type: guideEntry id: DeltaVRule4 name: guide-entry-deltav-rule-4 - text: "/ServerInfo/Guidebook/DeltaV/Rules/GameRules/4_NamingConventions.xml" + text: "/ServerInfo/Guidebook/DeltaV/Rules/GameRules/4_Self-antag.xml" ruleEntry: true - type: guideEntry id: DeltaVRule5 name: guide-entry-deltav-rule-5 - text: "/ServerInfo/Guidebook/DeltaV/Rules/GameRules/5_RoleplayGuidelines.xml" - ruleEntry: true - -- type: guideEntry - id: DeltaVRule6 - name: guide-entry-deltav-rule-6 - text: "/ServerInfo/Guidebook/DeltaV/Rules/GameRules/6_Powergaming.xml" - ruleEntry: true - -- type: guideEntry - id: DeltaVRule7 - name: guide-entry-deltav-rule-7 - text: "/ServerInfo/Guidebook/DeltaV/Rules/GameRules/7_EOR.xml" + text: "/ServerInfo/Guidebook/DeltaV/Rules/GameRules/5_Leaving.xml" ruleEntry: true - type: guideEntry diff --git a/Resources/Prototypes/DeltaV/Loadouts/Jobs/Justice/prosecutor.yml b/Resources/Prototypes/DeltaV/Loadouts/Jobs/Justice/prosecutor.yml index ac016ccbdb1..512edcdd7f9 100644 --- a/Resources/Prototypes/DeltaV/Loadouts/Jobs/Justice/prosecutor.yml +++ b/Resources/Prototypes/DeltaV/Loadouts/Jobs/Justice/prosecutor.yml @@ -14,3 +14,9 @@ id: ProsecutorNeck equipment: neck: ClothingNeckProsecutorbadge + +# OuterClothing +- type: loadout + id: ProsecutorOvercoat + equipment: + outerClothing: ClothingOuterCoatOvercoat diff --git a/Resources/Prototypes/DeltaV/Loadouts/Jobs/Security/brigmedic.yml b/Resources/Prototypes/DeltaV/Loadouts/Jobs/Security/brigmedic.yml index 5b35ab9d1a9..42c7f2c89aa 100644 --- a/Resources/Prototypes/DeltaV/Loadouts/Jobs/Security/brigmedic.yml +++ b/Resources/Prototypes/DeltaV/Loadouts/Jobs/Security/brigmedic.yml @@ -15,6 +15,16 @@ equipment: jumpsuit: ClothingUniformJumpskirtBrigmedic +- type: loadout + id: BrigMedicTurtlesuit + equipment: + jumpsuit: ClothingUniformJumpsuitBrigmedicTurtle + +- type: loadout + id: BrigMedicTurtleskirt + equipment: + jumpsuit: ClothingUniformJumpskirtBrigmedicTurtle + # Back - type: loadout id: BrigMedicBackpack @@ -30,3 +40,10 @@ id: BrigMedicDuffel equipment: back: ClothingBackpackDuffelBrigmedic + +# OuterClothing + +- type: loadout + id: StasecWinterCoatCorpsman + equipment: + outerClothing: ClothingOuterCoatStasecCorpsman diff --git a/Resources/Prototypes/DeltaV/Loadouts/Miscellaneous/glasses.yml b/Resources/Prototypes/DeltaV/Loadouts/Miscellaneous/glasses.yml new file mode 100644 index 00000000000..479b21d3af9 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Loadouts/Miscellaneous/glasses.yml @@ -0,0 +1,17 @@ +- type: loadoutEffectGroup + id: CheapSunglassesTimer + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:RoleTimeRequirement + role: JobMusician + time: 7200 # 2 hours of being a rockstar + +# Cheap Sunglasses +- type: loadout + id: GlassesCheapSunglasses + effects: + - !type:GroupLoadoutEffect + proto: CheapSunglassesTimer + equipment: + eyes: ClothingEyesGlassesCheapSunglasses diff --git a/Resources/Prototypes/DeltaV/Loadouts/Miscellaneous/trinkets.yml b/Resources/Prototypes/DeltaV/Loadouts/Miscellaneous/trinkets.yml index 08d876b2c54..be1f4227763 100644 --- a/Resources/Prototypes/DeltaV/Loadouts/Miscellaneous/trinkets.yml +++ b/Resources/Prototypes/DeltaV/Loadouts/Miscellaneous/trinkets.yml @@ -15,3 +15,15 @@ storage: back: - SilverRing + +- type: loadout + id: Cane + storage: + back: + - Cane + +- type: loadout + id: WhiteCane + storage: + back: + - WhiteCane diff --git a/Resources/Prototypes/DeltaV/Loadouts/loadout_groups.yml b/Resources/Prototypes/DeltaV/Loadouts/loadout_groups.yml index 9d35f9e582a..7fd6c8d0bf1 100644 --- a/Resources/Prototypes/DeltaV/Loadouts/loadout_groups.yml +++ b/Resources/Prototypes/DeltaV/Loadouts/loadout_groups.yml @@ -94,6 +94,16 @@ loadouts: - BrigMedicJumpsuit - BrigMedicJumpskirt + - BrigMedicTurtlesuit + - BrigMedicTurtleskirt + +- type: loadoutGroup + id: BrigMedicOuterClothing + name: loadout-group-brig-medic-outerclothing + loadouts: + - StasecWinterCoatCorpsman + - PlateCarrier + - DuraVest - type: loadoutGroup id: BrigMedicBack @@ -220,7 +230,7 @@ - LawyerJumpskirtRed - LawyerJumpsuitGood - LawyerJumpskirtGood - + - type: loadoutGroup id: ProsecutorNeck name: loadout-group-prosecutor-neck @@ -228,6 +238,13 @@ loadouts: - ProsecutorNeck +- type: loadoutGroup + id: ProsecutorOuterClothing + name: loadout-group-prosecutor-outer-clothing + minLimit: 0 + loadouts: + - ProsecutorOvercoat + # PDAs - type: loadoutGroup id: PassengerPDADelta diff --git a/Resources/Prototypes/DeltaV/Loadouts/role_loadouts.yml b/Resources/Prototypes/DeltaV/Loadouts/role_loadouts.yml index 0757fb27844..d6b9a35b865 100644 --- a/Resources/Prototypes/DeltaV/Loadouts/role_loadouts.yml +++ b/Resources/Prototypes/DeltaV/Loadouts/role_loadouts.yml @@ -23,9 +23,9 @@ - BrigMedicJumpsuit - BrigMedicBack - SecurityShoes - - SecurityOuterClothing + - BrigMedicOuterClothing - MedicalGloves - - SurvivalSecurity # DeltaV - replace SurvivalCorpsman for incongruence + - SurvivalSecurity - Trinkets - GroupSpeciesBreathToolCorpsman @@ -65,6 +65,7 @@ - GroupTankHarness - ProsecutorJumpsuit - ProsecutorNeck + - ProsecutorOuterClothing - CommonBackpack - Glasses - Survival diff --git a/Resources/Prototypes/DeltaV/Objectives/fugitive.yml b/Resources/Prototypes/DeltaV/Objectives/fugitive.yml index 7361e44f56d..d2c1ce56729 100644 --- a/Resources/Prototypes/DeltaV/Objectives/fugitive.yml +++ b/Resources/Prototypes/DeltaV/Objectives/fugitive.yml @@ -8,7 +8,7 @@ difficulty: 1 - type: RoleRequirement roles: - components: + mindRoles: - FugitiveRole - type: entity diff --git a/Resources/Prototypes/DeltaV/Objectives/paradox_anomaly.yml b/Resources/Prototypes/DeltaV/Objectives/paradox_anomaly.yml index da193ea3b58..b929d5cfda0 100644 --- a/Resources/Prototypes/DeltaV/Objectives/paradox_anomaly.yml +++ b/Resources/Prototypes/DeltaV/Objectives/paradox_anomaly.yml @@ -8,7 +8,7 @@ issuer: objective-issuer-self - type: RoleRequirement roles: - components: + mindRoles: - ParadoxAnomalyRole # not using base kill/keep alive objectives since these intentionally conflict with eachother diff --git a/Resources/Prototypes/DeltaV/Objectives/recruiter.yml b/Resources/Prototypes/DeltaV/Objectives/recruiter.yml index d8760388c71..4a41862356a 100644 --- a/Resources/Prototypes/DeltaV/Objectives/recruiter.yml +++ b/Resources/Prototypes/DeltaV/Objectives/recruiter.yml @@ -7,7 +7,7 @@ difficulty: 0 # difficulty is unused - type: RoleRequirement roles: - components: + mindRoles: - RecruiterRole - type: entity diff --git a/Resources/Prototypes/DeltaV/Objectives/synthesis_specialist.yml b/Resources/Prototypes/DeltaV/Objectives/synthesis_specialist.yml index 033d268680a..cd00866e343 100644 --- a/Resources/Prototypes/DeltaV/Objectives/synthesis_specialist.yml +++ b/Resources/Prototypes/DeltaV/Objectives/synthesis_specialist.yml @@ -7,7 +7,7 @@ difficulty: 0 # difficulty is unused - type: RoleRequirement roles: - components: + mindRoles: - SynthesisRole - type: entity diff --git a/Resources/Prototypes/DeltaV/Recipes/Construction/Graphs/clothing/prescription_departamental_glasses.yml b/Resources/Prototypes/DeltaV/Recipes/Construction/Graphs/clothing/prescription_departamental_glasses.yml new file mode 100644 index 00000000000..bc581f430c5 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Recipes/Construction/Graphs/clothing/prescription_departamental_glasses.yml @@ -0,0 +1,63 @@ +- type: constructionGraph + id: PrescriptionSecGlasses + start: start + graph: + - node: start + edges: + - to: prescsecglasses + steps: + - tag: GlassesSecurity + name: security glasses + icon: + sprite: Clothing/Eyes/Glasses/secglasses.rsi + state: icon + doAfter: 5 + - component: VisionCorrection + name: glasses + icon: + sprite: Clothing/Eyes/Glasses/glasses.rsi + state: icon + doAfter: 5 + - material: Cable + amount: 5 + doAfter: 5 + - tag: DrinkSpaceGlue + name: space glue + icon: + sprite: Objects/Consumable/Drinks/glue-tube.rsi + state: icon + doAfter: 5 + - node: prescsecglasses + entity: ClothingEyesPrescriptionSecurityGlasses + +- type: constructionGraph + id: PrescriptionCorpsmanGlasses + start: start + graph: + - node: start + edges: + - to: presccorpsglasses + steps: + - tag: GlassesCorpsman + name: corpsman glasses + icon: + sprite: DeltaV/Clothing/Eyes/Glasses/corpsglasses.rsi + state: icon + doAfter: 5 + - component: VisionCorrection + name: glasses + icon: + sprite: Clothing/Eyes/Glasses/glasses.rsi + state: icon + doAfter: 5 + - material: Cable + amount: 5 + doAfter: 5 + - tag: DrinkSpaceGlue + name: space glue + icon: + sprite: Objects/Consumable/Drinks/glue-tube.rsi + state: icon + doAfter: 5 + - node: presccorpsglasses + entity: ClothingEyesPrescriptionCorpsmanGlasses diff --git a/Resources/Prototypes/DeltaV/Recipes/Construction/Graphs/utilities/borg_modules.yml b/Resources/Prototypes/DeltaV/Recipes/Construction/Graphs/utilities/borg_modules.yml new file mode 100644 index 00000000000..deb3007a9e7 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Recipes/Construction/Graphs/utilities/borg_modules.yml @@ -0,0 +1,23 @@ +- type: constructionGraph + id: BorgModuleMartyr + start: start + graph: + - node: start + entity: BorgModuleMartyrDud + edges: + - to: live + steps: + - tag: ExplosivePayload + name: explosive payload + - tool: Screwing + doAfter: 2 + - node: live + entity: BorgModuleMartyr + edges: + - to: start + completed: + - !type:GivePrototype + prototype: ExplosivePayload + steps: + - tool: Prying + doAfter: 2 diff --git a/Resources/Prototypes/DeltaV/Recipes/Construction/clothing.yml b/Resources/Prototypes/DeltaV/Recipes/Construction/clothing.yml index 5eee1b7c6e2..281067b4114 100644 --- a/Resources/Prototypes/DeltaV/Recipes/Construction/clothing.yml +++ b/Resources/Prototypes/DeltaV/Recipes/Construction/clothing.yml @@ -30,3 +30,25 @@ description: A pair of sunglasses, modified to have a built-in security and medical HUD. icon: { sprite: DeltaV/Clothing/Eyes/Glasses/corpsglasses.rsi, state: icon } objectType: Item + +- type: construction + name: prescription security glasses + id: ClothingEyesPrescriptionSecurityGlasses + graph: PrescriptionSecGlasses + startNode: start + targetNode: prescsecglasses + category: construction-category-clothing + description: A pair of security glasses with a prescription glass glued on top. + icon: { sprite: DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi, state: icon } + objectType: Item + +- type: construction + name: prescription corpsman glasses + id: ClothingEyesPrescriptionCorpsmanGlasses + graph: PrescriptionCorpsmanGlasses + startNode: start + targetNode: presccorpsglasses + category: construction-category-clothing + description: A pair of corpsman glasses with a prescription glass glued on top. + icon: { sprite: DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi, state: icon } + objectType: Item diff --git a/Resources/Prototypes/DeltaV/Recipes/Cooking/meal_recipes.yml b/Resources/Prototypes/DeltaV/Recipes/Cooking/meal_recipes.yml index 01287c1016d..22d19ea2f95 100644 --- a/Resources/Prototypes/DeltaV/Recipes/Cooking/meal_recipes.yml +++ b/Resources/Prototypes/DeltaV/Recipes/Cooking/meal_recipes.yml @@ -20,16 +20,6 @@ FoodEgg: 3 FoodButter: 1 -- type: microwaveMealRecipe - id: RecipePumpkinPie - name: pumpkin pie - result: FoodPiePumpkin - time: 15 - solids: - FoodDoughPie: 1 - FoodPumpkin: 1 - FoodPlateTin: 1 - - type: microwaveMealRecipe id: RecipeBlueTomatoSoup name: blue tomato soup recipe diff --git a/Resources/Prototypes/DeltaV/Recipes/Lathes/powercells.yml b/Resources/Prototypes/DeltaV/Recipes/Lathes/powercells.yml new file mode 100644 index 00000000000..f3c73d66333 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Recipes/Lathes/powercells.yml @@ -0,0 +1,10 @@ +- type: latheRecipe + id: PowerCellHyper + result: PowerCellHyperPrinted + category: Parts + completetime: 8 + materials: + Steel: 600 + Glass: 500 + Silver: 200 + Gold: 100 diff --git a/Resources/Prototypes/DeltaV/Recipes/Lathes/security.yml b/Resources/Prototypes/DeltaV/Recipes/Lathes/security.yml index accf075c967..02b2ef0f5ca 100644 --- a/Resources/Prototypes/DeltaV/Recipes/Lathes/security.yml +++ b/Resources/Prototypes/DeltaV/Recipes/Lathes/security.yml @@ -209,3 +209,18 @@ Gold: 250 Silver: 100 Plasma: 500 + +- type: latheRecipe + parent: ClothingShoesBootsMagSci + id: ClothingShoesBootsSecurityMagboots + result: ClothingShoesBootsSecurityMagboots + +- type: latheRecipe + parent: BaseWeaponRecipe + id: AdvancedTruncheon + result: AdvancedTruncheon + completetime: 5 + materials: + Steel: 1000 + Plastic: 800 + diff --git a/Resources/Prototypes/DeltaV/Research/arsenal.yml b/Resources/Prototypes/DeltaV/Research/arsenal.yml index 17bcc254bc6..d604eb80568 100644 --- a/Resources/Prototypes/DeltaV/Research/arsenal.yml +++ b/Resources/Prototypes/DeltaV/Research/arsenal.yml @@ -32,24 +32,23 @@ id: EnergyGunsAdvanced name: research-technology-energy-gun-advance icon: - sprite: DeltaV/Objects/Weapons/Guns/Battery/energygun_pistol.rsi + sprite: DeltaV/Objects/Weapons/Guns/Battery/energygun_carbine.rsi state: icon discipline: Arsenal tier: 2 - cost: 7500 + cost: 12500 recipeUnlocks: - WeaponEnergyGunPistol + - WeaponGunLaserCarbineAutomatic - type: technology - id: Advanced Laser Manipulation - name: research-technology-advance-laser + id: RobustMelee + name: research-technology-robust-melee icon: - sprite: DeltaV/Objects/Weapons/Guns/Battery/energygun_carbine.rsi + sprite: DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi state: icon discipline: Arsenal - tier: 2 + tier: 3 cost: 12500 recipeUnlocks: - - WeaponGunLaserCarbineAutomatic - - + - AdvancedTruncheon diff --git a/Resources/Prototypes/DeltaV/Roles/Jobs/Fun/misc_startinggear.yml b/Resources/Prototypes/DeltaV/Roles/Jobs/Fun/misc_startinggear.yml index e079559dcc9..58f3b796903 100644 --- a/Resources/Prototypes/DeltaV/Roles/Jobs/Fun/misc_startinggear.yml +++ b/Resources/Prototypes/DeltaV/Roles/Jobs/Fun/misc_startinggear.yml @@ -62,4 +62,6 @@ gloves: ClothingHandsGlovesCombat shoes: ClothingShoesSlippers id: SyndiListeningPostPDA + back: ClothingBackpackSyndicate + pocket1: AgentIDCard # innerClothingSkirt: ClothingUniformJumpsuitPyjamaSyndicatePink # I don't think loadouts work for ghost roles anyways diff --git a/Resources/Prototypes/DeltaV/Roles/MindRoles/mind_roles.yml b/Resources/Prototypes/DeltaV/Roles/MindRoles/mind_roles.yml new file mode 100644 index 00000000000..78a30855d08 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Roles/MindRoles/mind_roles.yml @@ -0,0 +1,55 @@ +- type: entity + parent: BaseMindRoleAntag + id: MindRoleListeningPost + name: Listening Post Role + components: + - type: MindRole + antagPrototype: ListeningPost + exclusiveAntag: true + - type: ListeningPostRole + +- type: entity + parent: BaseMindRoleAntag + id: MindRoleParadoxAnomaly + name: Paradox Anomaly Role + components: + - type: MindRole + antagPrototype: ParadoxAnomaly + exclusiveAntag: true + - type: ParadoxAnomalyRole + - type: RoleBriefing + briefing: paradox-anomaly-role-briefing + +- type: entity + parent: BaseMindRoleAntag + id: MindRoleFugitive + name: Fugitive Role + components: + - type: MindRole + antagPrototype: Fugitive + exclusiveAntag: true + - type: FugitiveRole + +- type: entity + parent: BaseMindRoleAntag + id: MindRoleRecruiter + name: Recruiter Role + components: + - type: MindRole + antagPrototype: Recruiter + exclusiveAntag: true + - type: RecruiterRole + - type: RoleBriefing + briefing: recruiter-role-briefing + +- type: entity + parent: BaseMindRoleAntag + id: MindRoleSynthesis + name: Synthesis Specialist Role + components: + - type: MindRole + antagPrototype: SynthesisSpecialist + exclusiveAntag: true + - type: SynthesisRole + - type: RoleBriefing + briefing: synthesis-role-briefing diff --git a/Resources/Prototypes/DeltaV/Traits/speech.yml b/Resources/Prototypes/DeltaV/Traits/speech.yml new file mode 100644 index 00000000000..4876edd53eb --- /dev/null +++ b/Resources/Prototypes/DeltaV/Traits/speech.yml @@ -0,0 +1,11 @@ +- type: trait + id: Hushed + name: trait-hushed-name + description: trait-hushed-desc + category: SpeechTraits + cost: 0 + blacklist: + components: + - BorgChassis + components: + - type: Hushed diff --git a/Resources/Prototypes/DeltaV/Voice/speech_emotes.yml b/Resources/Prototypes/DeltaV/Voice/speech_emotes.yml index ea80b295a79..be396f03cd4 100644 --- a/Resources/Prototypes/DeltaV/Voice/speech_emotes.yml +++ b/Resources/Prototypes/DeltaV/Voice/speech_emotes.yml @@ -9,7 +9,7 @@ - Vocal blacklist: components: - - BorgChasis + - BorgChassis chatMessages: [honks.] chatTriggers: - honk @@ -27,7 +27,7 @@ - Vocal blacklist: components: - - BorgChasis + - BorgChassis chatMessages: [rings.] chatTriggers: - ring @@ -46,7 +46,7 @@ - Vocal blacklist: components: - - BorgChasis + - BorgChassis chatMessages: [pews.] chatTriggers: - pew @@ -63,7 +63,7 @@ - Vocal blacklist: components: - - BorgChasis + - BorgChassis chatMessages: [bangs.] chatTriggers: - bang @@ -81,7 +81,7 @@ - Vocal blacklist: components: - - BorgChasis + - BorgChassis chatMessages: [beeps.] chatTriggers: - beep @@ -99,7 +99,7 @@ - Vocal blacklist: components: - - BorgChasis + - BorgChassis chatMessages: [revs.] chatTriggers: - rev @@ -117,7 +117,7 @@ - Vocal blacklist: components: - - BorgChasis + - BorgChassis chatMessages: [caws.] chatTriggers: - caw @@ -136,7 +136,7 @@ - Vocal blacklist: components: - - BorgChasis + - BorgChassis chatMessages: [barks.] chatTriggers: - bark @@ -154,7 +154,7 @@ - Vocal blacklist: components: - - BorgChasis + - BorgChassis chatMessages: [snarls.] chatTriggers: - snarl @@ -172,7 +172,7 @@ - Vocal blacklist: components: - - BorgChasis + - BorgChassis chatMessages: [whines.] chatTriggers: - whine @@ -190,7 +190,7 @@ - Vocal blacklist: components: - - BorgChasis + - BorgChassis chatMessages: [howls.] chatTriggers: - howl @@ -208,7 +208,7 @@ - Vocal blacklist: components: - - BorgChasis + - BorgChassis chatMessages: [awoos.] chatTriggers: - awoo diff --git a/Resources/Prototypes/DeltaV/Wires/layouts.yml b/Resources/Prototypes/DeltaV/Wires/layouts.yml new file mode 100644 index 00000000000..fd1e77dc898 --- /dev/null +++ b/Resources/Prototypes/DeltaV/Wires/layouts.yml @@ -0,0 +1,9 @@ +- type: wireLayout + id: FireLock + wires: + - !type:PowerWireAction + pulseTimeout: 20 + - !type:DoorBoltWireAction + - !type:DoorBoltLightWireAction + - !type:LogWireAction + - !type:AiInteractWireAction diff --git a/Resources/Prototypes/DeltaV/ai_factions.yml b/Resources/Prototypes/DeltaV/ai_factions.yml new file mode 100644 index 00000000000..783fc9d9889 --- /dev/null +++ b/Resources/Prototypes/DeltaV/ai_factions.yml @@ -0,0 +1,5 @@ +- type: npcFaction + id: Cat + hostile: + - Mouse + - SimpleHostile diff --git a/Resources/Prototypes/DeltaV/status_effects.yml b/Resources/Prototypes/DeltaV/status_effects.yml index e69de29bb2d..beb09d7addd 100644 --- a/Resources/Prototypes/DeltaV/status_effects.yml +++ b/Resources/Prototypes/DeltaV/status_effects.yml @@ -0,0 +1,2 @@ +- type: statusEffect + id: Addicted diff --git a/Resources/Prototypes/DeltaV/tags.yml b/Resources/Prototypes/DeltaV/tags.yml index 473d5866da4..43ce7308bae 100644 --- a/Resources/Prototypes/DeltaV/tags.yml +++ b/Resources/Prototypes/DeltaV/tags.yml @@ -6,9 +6,6 @@ - type: Tag id: BeltSlotNotBelt #not a 'belt' -- type: Tag - id: BionicSyrinxImplant - - type: Tag id: BorgModuleSecurity @@ -51,6 +48,9 @@ - type: Tag id: DockShipyard +- type: Tag + id: ExplosivePayload + - type: Tag id: ForensicBeltEquip @@ -95,3 +95,9 @@ - type: Tag id: Wakizashi + +- type: Tag + id: GlassesSecurity # Prescription sec glasses. + +- type: Tag + id: GlassesCorpsman # Prescription corpsman glasses. diff --git a/Resources/Prototypes/DeviceLinking/sink_ports.yml b/Resources/Prototypes/DeviceLinking/sink_ports.yml index 339b8141751..a5313fcc4e4 100644 --- a/Resources/Prototypes/DeviceLinking/sink_ports.yml +++ b/Resources/Prototypes/DeviceLinking/sink_ports.yml @@ -48,6 +48,11 @@ name: signal-port-name-trigger description: signal-port-description-trigger +- type: sinkPort + id: Timer + name: signal-port-name-timer + description: signal-port-description-timer + - type: sinkPort id: OrderReceiver name: signal-port-name-order-receiver diff --git a/Resources/Prototypes/DeviceLinking/source_ports.yml b/Resources/Prototypes/DeviceLinking/source_ports.yml index 1988f29e45c..5c327347268 100644 --- a/Resources/Prototypes/DeviceLinking/source_ports.yml +++ b/Resources/Prototypes/DeviceLinking/source_ports.yml @@ -2,13 +2,13 @@ id: Pressed name: signal-port-name-pressed description: signal-port-description-pressed - defaultLinks: [ Toggle, Trigger ] + defaultLinks: [ Toggle, Trigger, Timer ] - type: sourcePort id: On name: signal-port-name-on-transmitter description: signal-port-description-on-transmitter - defaultLinks: [ On, Open, Forward, Trigger ] + defaultLinks: [ On, Open, Forward, Trigger, Timer ] - type: sourcePort id: Off @@ -25,13 +25,13 @@ id: Left name: signal-port-name-left description: signal-port-description-left - defaultLinks: [ On, Open, Forward, Trigger ] + defaultLinks: [ On, Open, Forward, Trigger, Timer ] - type: sourcePort id: Right name: signal-port-name-right description: signal-port-description-right - defaultLinks: [ On, Open, Reverse, Trigger ] + defaultLinks: [ On, Open, Reverse, Trigger, Timer ] - type: sourcePort id: Middle @@ -76,7 +76,7 @@ id: Timer name: signal-port-name-timer-trigger description: signal-port-description-timer-trigger - defaultLinks: [ AutoClose, On, Open, Forward, Trigger ] + defaultLinks: [ AutoClose, On, Open, Forward, Trigger, Timer ] - type: sourcePort id: Start @@ -94,7 +94,7 @@ id: OutputHigh name: signal-port-name-logic-output-high description: signal-port-description-logic-output-high - defaultLinks: [ On, Open, Forward, Trigger ] + defaultLinks: [ On, Open, Forward, Trigger, Timer ] - type: sourcePort id: OutputLow diff --git a/Resources/Prototypes/Entities/Clothing/Back/duffel.yml b/Resources/Prototypes/Entities/Clothing/Back/duffel.yml index b3484d17f64..1db5e9bd7cb 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/duffel.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/duffel.yml @@ -170,6 +170,12 @@ - type: Storage grid: - 0,0,8,4 + - type: ReverseEngineering # DeltaV: can RE any valid bag for BoH + difficulty: 4 + recipes: + - ClothingBackpackHolding + - ClothingBackpackDuffelHolding + - ClothingBackpackSatchelHolding - type: entity parent: ClothingBackpackDuffelSyndicate diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml index c900464076b..22bf43ba21b 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml @@ -179,6 +179,7 @@ node: glassesSec - type: Tag tags: + - GlassesSecurity # DeltaV - Added for prescription glasses. - HamsterWearable - WhitelistChameleon - SecDogWearable # DeltaV - let Laika wear secglasses diff --git a/Resources/Prototypes/Entities/Clothing/Head/hats.yml b/Resources/Prototypes/Entities/Clothing/Head/hats.yml index 0e9911c1b9c..524325df292 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hats.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hats.yml @@ -783,6 +783,21 @@ coefficients: Blunt: 0.95 +- type: entity + parent: ClothingHeadBase + id: ClothingHeadHatHolyWatermelon + name: watermelon halo + description: Holy moly. + components: + - type: Sprite + sprite: Clothing/Head/Hats/holyhatmelon.rsi + - type: Clothing + sprite: Clothing/Head/Hats/holyhatmelon.rsi + - type: Armor + modifiers: + coefficients: + Caustic: 0.95 + - type: entity parent: [ClothingHeadBase, BaseSyndicateContraband] id: ClothingHeadHatSyndie diff --git a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml index e983d0ddaf5..67bf8275792 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/helmets.yml @@ -249,6 +249,7 @@ - type: Tag tags: - WhitelistChameleon + - FireHelmet - type: HideLayerClothing slots: - Hair @@ -281,6 +282,7 @@ - type: Tag tags: - WhitelistChameleon + - FireHelmet - type: HideLayerClothing slots: - Hair diff --git a/Resources/Prototypes/Entities/Clothing/Head/misc.yml b/Resources/Prototypes/Entities/Clothing/Head/misc.yml index 5a3110faf5e..b85f5c26b71 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/misc.yml @@ -312,3 +312,14 @@ - WhitelistChameleon - type: StaticPrice price: 1 + +- type: entity + parent: ClothingHeadBase + id: ClothingHeadHatHairflower + name: hairflower + description: A beautiful hairflower that can be inserted between locks of hair. + components: + - type: Sprite + sprite: Clothing/Head/Misc/hairflower.rsi + - type: Clothing + sprite: Clothing/Head/Misc/hairflower.rsi diff --git a/Resources/Prototypes/Entities/Clothing/Masks/specific.yml b/Resources/Prototypes/Entities/Clothing/Masks/specific.yml index 64a1adcebdf..d8da80611cf 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/specific.yml @@ -29,10 +29,16 @@ id: ClothingMaskGasVoiceChameleon suffix: Voice Mask, Chameleon components: - - type: VoiceMasker + - type: VoiceMask - type: HideLayerClothing slots: - Snout + - type: UserInterface + interfaces: + enum.ChameleonUiKey.Key: + type: ChameleonBoundUserInterface + enum.VoiceMaskUIKey.Key: + type: VoiceMaskBoundUserInterface - type: entity parent: ClothingMaskBase diff --git a/Resources/Prototypes/Entities/Clothing/Multiple/towel.yml b/Resources/Prototypes/Entities/Clothing/Multiple/towel.yml new file mode 100644 index 00000000000..d3f7dc480ca --- /dev/null +++ b/Resources/Prototypes/Entities/Clothing/Multiple/towel.yml @@ -0,0 +1,764 @@ +- type: entity + id: BaseTowel + name: base towel + abstract: true + description: If you want to survive out here, you gotta know where your towel is. + parent: [ UnsensoredClothingUniformBase, ClothingHeadBase, ClothingBeltBase ] + components: + - type: Sprite + sprite: Clothing/Multiple/towel.rsi + - type: Clothing + sprite: Clothing/Multiple/towel.rsi + slots: + - BELT + - INNERCLOTHING + - HEAD + femaleMask: UniformTop + equipSound: + unequipSound: + - type: Spillable + solution: absorbed + - type: Absorbent + pickupAmount: 15 + - type: SolutionContainerManager + solutions: + food: + maxVol: 30 + reagents: + - ReagentId: Fiber + Quantity: 30 + absorbed: + maxVol: 30 + - type: Fiber + fiberColor: fibers-white + - type: DnaSubstanceTrace + - type: Item + size: Small + +- type: entity + id: TowelColorWhite + name: white towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#EAE8E8" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#EAE8E8" + right: + - state: inhand-right + color: "#EAE8E8" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#EAE8E8" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#EAE8E8" + belt: + - state: equipped-BELT + color: "#EAE8E8" + - type: Fiber + fiberColor: fibers-white + +- type: entity + id: TowelColorPurple + name: purple towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#9C0DE1" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#9C0DE1" + right: + - state: inhand-right + color: "#9C0DE1" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#9C0DE1" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#9C0DE1" + belt: + - state: equipped-BELT + color: "#9C0DE1" + - type: Fiber + fiberColor: fibers-purple + +- type: entity + id: TowelColorRed + name: red towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#940000" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#940000" + right: + - state: inhand-right + color: "#940000" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#940000" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#940000" + belt: + - state: equipped-BELT + color: "#940000" + - type: Fiber + fiberColor: fibers-red + +- type: entity + id: TowelColorBlue + name: blue towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#0089EF" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#0089EF" + right: + - state: inhand-right + color: "#0089EF" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#0089EF" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#0089EF" + belt: + - state: equipped-BELT + color: "#0089EF" + - type: Fiber + fiberColor: fibers-blue + +- type: entity + id: TowelColorDarkBlue + name: dark blue towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#3285ba" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#3285ba" + right: + - state: inhand-right + color: "#3285ba" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#3285ba" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#3285ba" + belt: + - state: equipped-BELT + color: "#3285ba" + - type: Fiber + fiberColor: fibers-blue + +- type: entity + id: TowelColorLightBlue + name: light blue towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#58abcc" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#58abcc" + right: + - state: inhand-right + color: "#58abcc" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#58abcc" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#58abcc" + belt: + - state: equipped-BELT + color: "#58abcc" + - type: Fiber + fiberColor: fibers-blue + +- type: entity + id: TowelColorTeal + name: teal towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#3CB57C" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#3CB57C" + right: + - state: inhand-right + color: "#3CB57C" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#3CB57C" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#3CB57C" + belt: + - state: equipped-BELT + color: "#3CB57C" + - type: Fiber + fiberColor: fibers-teal + +- type: entity + id: TowelColorBrown + name: brown towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#723A02" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#723A02" + right: + - state: inhand-right + color: "#723A02" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#723A02" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#723A02" + belt: + - state: equipped-BELT + color: "#723A02" + - type: Fiber + fiberColor: fibers-brown + +- type: entity + id: TowelColorLightBrown + name: light brown towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#c59431" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#c59431" + right: + - state: inhand-right + color: "#c59431" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#c59431" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#c59431" + belt: + - state: equipped-BELT + color: "#c59431" + - type: Fiber + fiberColor: fibers-brown + +- type: entity + id: TowelColorGray + name: gray towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#999999" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#999999" + right: + - state: inhand-right + color: "#999999" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#999999" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#999999" + belt: + - state: equipped-BELT + color: "#999999" + - type: Fiber + fiberColor: fibers-grey + +- type: entity + id: TowelColorGreen + name: green towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#5ABF2F" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#5ABF2F" + right: + - state: inhand-right + color: "#5ABF2F" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#5ABF2F" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#5ABF2F" + belt: + - state: equipped-BELT + color: "#5ABF2F" + - type: Fiber + fiberColor: fibers-green + +- type: entity + id: TowelColorDarkGreen + name: dark green towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#79CC26" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#79CC26" + right: + - state: inhand-right + color: "#79CC26" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#79CC26" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#79CC26" + belt: + - state: equipped-BELT + color: "#79CC26" + - type: Fiber + fiberColor: fibers-green + +- type: entity + id: TowelColorGold + name: gold towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#F7C430" + - state: iconstripe + color: "#535353" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#F7C430" + right: + - state: inhand-right + color: "#F7C430" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#F7C430" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#F7C430" + belt: + - state: equipped-BELT + color: "#F7C430" + - type: Fiber + fiberColor: fibers-gold + +- type: entity + id: TowelColorOrange + name: orange towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#EF8100" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#EF8100" + right: + - state: inhand-right + color: "#EF8100" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#EF8100" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#EF8100" + belt: + - state: equipped-BELT + color: "#EF8100" + - type: Fiber + fiberColor: fibers-orange + +- type: entity + id: TowelColorBlack + name: black towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#535353" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#535353" + right: + - state: inhand-right + color: "#535353" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#535353" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#535353" + belt: + - state: equipped-BELT + color: "#535353" + - type: Fiber + fiberColor: fibers-black + +- type: entity + id: TowelColorPink + name: pink towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#ffa69b" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#ffa69b" + right: + - state: inhand-right + color: "#ffa69b" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#ffa69b" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#ffa69b" + belt: + - state: equipped-BELT + color: "#ffa69b" + - type: Fiber + fiberColor: fibers-pink + +- type: entity + id: TowelColorYellow + name: yellow towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#ffe14d" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#ffe14d" + right: + - state: inhand-right + color: "#ffe14d" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#ffe14d" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#ffe14d" + belt: + - state: equipped-BELT + color: "#ffe14d" + - type: Fiber + fiberColor: fibers-yellow + +- type: entity + id: TowelColorMaroon + name: maroon towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#cc295f" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#cc295f" + right: + - state: inhand-right + color: "#cc295f" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#cc295f" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#cc295f" + belt: + - state: equipped-BELT + color: "#cc295f" + - type: Fiber + fiberColor: fibers-maroon + +- type: entity + id: TowelColorSilver + name: silver towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#d0d0d0" + - state: iconstripe + color: "#F7C430" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#d0d0d0" + right: + - state: inhand-right + color: "#d0d0d0" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#d0d0d0" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#d0d0d0" + belt: + - state: equipped-BELT + color: "#d0d0d0" + - type: Fiber + fiberColor: fibers-silver + +- type: entity + id: TowelColorMime + name: silent towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#EAE8E8" + - state: iconstripe + color: "#535353" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#EAE8E8" + right: + - state: inhand-right + color: "#EAE8E8" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#EAE8E8" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#EAE8E8" + belt: + - state: equipped-BELT + color: "#EAE8E8" + - type: Fiber + fiberColor: fibers-white + +- type: entity + id: TowelColorNT + name: NanoTrasen brand towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#004787" + - state: iconstripe + color: "#EAE8E8" + - state: NTmono + color: "#EAE8E8" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#004787" + right: + - state: inhand-right + color: "#004787" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#004787" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#004787" + belt: + - state: equipped-BELT + color: "#004787" + - type: Fiber + fiberColor: fibers-regal-blue + +- type: entity + id: TowelColorCentcom + name: centcom towel + parent: BaseTowel + components: + - type: Sprite + layers: + - state: icon + color: "#29722e" + - state: iconstripe + color: "#F7C430" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#29722e" + right: + - state: inhand-right + color: "#29722e" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#29722e" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#29722e" + belt: + - state: equipped-BELT + color: "#29722e" + - type: Fiber + fiberColor: fibers-green + +- type: entity + id: TowelColorSyndicate + name: syndicate towel + parent: [ BaseTowel, BaseSyndicateContraband ] + components: + - type: Sprite + layers: + - state: icon + color: "#535353" + - state: iconstripe + color: "#940000" + - type: Item + inhandVisuals: + left: + - state: inhand-left + color: "#535353" + right: + - state: inhand-right + color: "#535353" + - type: Clothing + clothingVisuals: + head: + - state: equipped-HELMET + color: "#535353" + jumpsuit: + - state: equipped-INNERCLOTHING + color: "#535353" + belt: + - state: equipped-BELT + color: "#535353" + - type: Fiber + fiberColor: fibers-black + \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Clothing/Neck/misc.yml b/Resources/Prototypes/Entities/Clothing/Neck/misc.yml index 8dfc709bc4f..af2af7a4208 100644 --- a/Resources/Prototypes/Entities/Clothing/Neck/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/Neck/misc.yml @@ -78,3 +78,19 @@ event: !type:StethoscopeActionEvent checkCanInteract: false priority: -1 + +- type: entity + parent: ClothingNeckBase + id: Dinkystar + name: star sticker + description: A dinky lil star for only the hardest working security officers! It's not even sticky anymore. + components: + - type: Sprite + sprite: Clothing/Neck/Misc/dinkystar.rsi + state: icon + - type: Item + size: Tiny + - type: Tag + tags: + - Trash + - WhitelistChameleon diff --git a/Resources/Prototypes/Entities/Clothing/Neck/pins.yml b/Resources/Prototypes/Entities/Clothing/Neck/pins.yml index eb948d299c1..a7dcf03f28c 100644 --- a/Resources/Prototypes/Entities/Clothing/Neck/pins.yml +++ b/Resources/Prototypes/Entities/Clothing/Neck/pins.yml @@ -7,6 +7,10 @@ components: - type: Item size: Tiny + - type: Sprite + sprite: Clothing/Neck/Misc/pins.rsi + - type: Clothing + sprite: Clothing/Neck/Misc/pins.rsi - type: entity parent: ClothingNeckPinBase @@ -15,14 +19,9 @@ description: Be gay do crime. components: - type: Sprite - sprite: Clothing/Neck/Misc/pins.rsi - layers: - - state: lgbt + state: lgbt - type: Clothing - sprite: Clothing/Neck/Misc/pins.rsi - clothingVisuals: - neck: - - state: lgbt-equipped + equippedPrefix: lgbt - type: entity parent: ClothingNeckPinBase @@ -31,14 +30,9 @@ description: Be aro do crime. components: - type: Sprite - sprite: Clothing/Neck/Misc/pins.rsi - layers: - - state: aro + state: aro - type: Clothing - sprite: Clothing/Neck/Misc/pins.rsi - clothingVisuals: - neck: - - state: aro-equipped + equippedPrefix: aro - type: entity parent: ClothingNeckPinBase @@ -47,14 +41,9 @@ description: Be ace do crime. components: - type: Sprite - sprite: Clothing/Neck/Misc/pins.rsi - layers: - - state: asex + state: asex - type: Clothing - sprite: Clothing/Neck/Misc/pins.rsi - clothingVisuals: - neck: - - state: asex-equipped + equippedPrefix: asex - type: entity parent: ClothingNeckPinBase @@ -63,14 +52,20 @@ description: Be bi do crime. components: - type: Sprite - sprite: Clothing/Neck/Misc/pins.rsi - layers: - - state: bi + state: bi - type: Clothing - sprite: Clothing/Neck/Misc/pins.rsi - clothingVisuals: - neck: - - state: bi-equipped + equippedPrefix: bi + +- type: entity + parent: ClothingNeckPinBase + id: ClothingNeckGayPin + name: gay pin + description: Be gay~ do crime. + components: + - type: Sprite + state: gay + - type: Clothing + equippedPrefix: gay - type: entity parent: ClothingNeckPinBase @@ -79,14 +74,9 @@ description: Be intersex do crime. components: - type: Sprite - sprite: Clothing/Neck/Misc/pins.rsi - layers: - - state: inter + state: inter - type: Clothing - sprite: Clothing/Neck/Misc/pins.rsi - clothingVisuals: - neck: - - state: inter-equipped + equippedPrefix: inter - type: entity parent: ClothingNeckPinBase @@ -95,14 +85,9 @@ description: Be lesbian do crime. components: - type: Sprite - sprite: Clothing/Neck/Misc/pins.rsi - layers: - - state: les + state: les - type: Clothing - sprite: Clothing/Neck/Misc/pins.rsi - clothingVisuals: - neck: - - state: les-equipped + equippedPrefix: les - type: entity parent: ClothingNeckPinBase @@ -111,14 +96,9 @@ description: "01100010 01100101 00100000 01100101 01101110 01100010 01111001 00100000 01100100 01101111 00100000 01100011 01110010 01101001 01101101 01100101" components: - type: Sprite - sprite: Clothing/Neck/Misc/pins.rsi - layers: - - state: non + state: non - type: Clothing - sprite: Clothing/Neck/Misc/pins.rsi - clothingVisuals: - neck: - - state: non-equipped + equippedPrefix: non - type: entity parent: ClothingNeckPinBase @@ -127,14 +107,9 @@ description: Be pan do crime. components: - type: Sprite - sprite: Clothing/Neck/Misc/pins.rsi - layers: - - state: pan + state: pan - type: Clothing - sprite: Clothing/Neck/Misc/pins.rsi - clothingVisuals: - neck: - - state: pan-equipped + equippedPrefix: pan - type: entity parent: ClothingNeckPinBase @@ -143,14 +118,9 @@ description: Be trans do crime. components: - type: Sprite - sprite: Clothing/Neck/Misc/pins.rsi - layers: - - state: trans + state: trans - type: Clothing - sprite: Clothing/Neck/Misc/pins.rsi - clothingVisuals: - neck: - - state: trans-equipped + equippedPrefix: trans - type: entity parent: ClothingNeckPinBase @@ -159,14 +129,9 @@ description: Be autism do crime. components: - type: Sprite - sprite: Clothing/Neck/Misc/autismpin.rsi - layers: - - state: autism + state: autism - type: Clothing - sprite: Clothing/Neck/Misc/autismpin.rsi - clothingVisuals: - neck: - - state: autism-equipped + equippedPrefix: autism - type: entity parent: ClothingNeckPinBase @@ -175,11 +140,6 @@ description: Be autism do warcrime. components: - type: Sprite - sprite: Clothing/Neck/Misc/goldautismpin.rsi - layers: - - state: goldautism + state: goldautism - type: Clothing - sprite: Clothing/Neck/Misc/goldautismpin.rsi - clothingVisuals: - neck: - - state: goldautism-equipped + equippedPrefix: goldautism diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/coats.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/coats.yml index 559e9d36686..7ef4d615abe 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/coats.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/coats.yml @@ -83,7 +83,7 @@ damageCoefficient: 0.9 - type: entity - parent: [ClothingOuterArmorHoS, ClothingOuterStorageBase] + parent: [ClothingOuterArmorHoS, ClothingOuterStorageBase, BaseSecurityCommandContraband] id: ClothingOuterCoatHoSTrench name: head of security's armored trenchcoat description: A greatcoat enhanced with a special alloy for some extra protection and style for those with a commanding presence. @@ -380,7 +380,7 @@ sprite: Clothing/OuterClothing/Coats/windbreaker_paramedic.rsi - type: entity - parent: ClothingOuterStorageBase + parent: [ClothingOuterStorageBase, BaseSyndicateContraband] id: ClothingOuterCoatSyndieCap name: syndicate's coat description: The syndicate's coat is made of durable fabric, with gilded patterns. @@ -391,7 +391,7 @@ sprite: Clothing/OuterClothing/Coats/syndicate/coatsyndiecap.rsi - type: entity - parent: ClothingOuterCoatHoSTrench + parent: [BaseSyndicateContraband, ClothingOuterCoatHoSTrench] # BaseSyndicateContraband as first parent so contraband system takes that as priority, yeah I know id: ClothingOuterCoatSyndieCapArmored name: syndicate's armored coat description: The syndicate's armored coat is made of durable fabric, with gilded patterns. diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml index 2c4d165cbe4..4417fae13d2 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml @@ -197,6 +197,9 @@ name: power-cell-slot-component-slot-name-default startingItem: PowerCellSmall disableEject: true + whitelist: + tags: + - PowerCell - type: entity parent: ClothingOuterBase diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml index 266f3604f28..e9856e6dc66 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml @@ -366,7 +366,7 @@ ########################################################## - type: entity - parent: [ClothingOuterArmorHoS, ClothingOuterWinterCoatToggleable, BaseCommandContraband] + parent: [ClothingOuterArmorHoS, ClothingOuterWinterCoatToggleable, BaseSecurityCommandContraband] id: ClothingOuterWinterHoS name: head of security's armored winter coat description: A sturdy, utilitarian winter coat designed to protect a head of security from any brig-bound threats and hypothermic events. @@ -380,7 +380,7 @@ ########################################################## - type: entity - parent: [ClothingOuterWinterCoatToggleable, BaseCommandContraband] + parent: [ClothingOuterWinterCoatToggleable, BaseSecurityCommandContraband] id: ClothingOuterWinterHoSUnarmored name: head of security's winter coat description: A sturdy coat, a warm coat, but not an armored coat. diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/boots.yml b/Resources/Prototypes/Entities/Clothing/Shoes/boots.yml index cee5b039130..d31b3cba176 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/boots.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/boots.yml @@ -204,6 +204,8 @@ - type: FootstepModifier footstepSoundCollection: collection: FootstepSpurs + params: + variation: 0.09 - type: entity parent: ClothingShoesBootsCowboyBrown diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml index 659a4e08da9..0250671acfc 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml @@ -35,10 +35,6 @@ - type: Tag tags: - WhitelistChameleon - - type: ReverseEngineering # DeltaV - difficulty: 2 - recipes: - - ClothingShoesBootsMagSci - type: entity parent: [ClothingShoesBootsMagBase] diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml b/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml index 9ebeeff4c4a..73f6b45a17b 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/misc.yml @@ -47,7 +47,7 @@ collection: FootstepDuck params: variation: 0.07 - - type: WaddleWhenWorn + - type: WaddleWhenWorn # DeltaV: upstream removed waddling tumbleIntensity: 10 # smaller than clown shoes - type: Construction graph: ClothingShoeSlippersDuck @@ -123,10 +123,10 @@ name: power-cell-slot-component-slot-name-default - type: Tag tags: [] - - type: ReverseEngineering # delta + - type: ReverseEngineering # DeltaV difficulty: 4 recipes: - - ClothingShoesBootsSpeed + - ClothingShoesBootsSpeed - type: entity id: ActionToggleSpeedBoots @@ -154,3 +154,7 @@ price: 75 - type: Tag tags: [ ] + - type: ReverseEngineering # DeltaV: upgrade moonboots T1 to speedboots T3 + difficulty: 5 + recipes: + - ClothingShoesBootsSpeed diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml b/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml index bd37135e98d..c61cab1294f 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml @@ -15,7 +15,7 @@ parent: [ClothingShoesBaseButcherable, ClothingSlotBase] id: ClothingShoesClownBase components: - - type: WaddleWhenWorn + - type: WaddleWhenWorn # DeltaV: upstream removed waddling - type: ItemSlots slots: item: @@ -41,6 +41,8 @@ - type: FootstepModifier footstepSoundCollection: collection: FootstepClown + params: + variation: 0.17 # for H.O.N.K. construction - type: Tag tags: @@ -60,6 +62,8 @@ - type: FootstepModifier footstepSoundCollection: collection: FootstepSlip + params: + variation: 0.10 - type: Construction graph: BananaClownShoes node: shoes @@ -80,6 +84,8 @@ - type: FootstepModifier footstepSoundCollection: collection: FootstepClown + params: + variation: 0.17 - type: PointLight enabled: true radius: 3 @@ -216,6 +222,8 @@ - type: FootstepModifier footstepSoundCollection: collection: FootstepJester + params: + variation: 0.07 - type: entity parent: ClothingShoesClown @@ -275,3 +283,5 @@ - type: FootstepModifier footstepSoundCollection: collection: FootstepSkates + params: + variation: 0.08 diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/crates.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/crates.yml index 90a0842b9b1..a0504c1343d 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/crates.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/crates.yml @@ -75,7 +75,7 @@ - type: RandomSpawner rarePrototypes: - CrateEngineeringSingularityGenerator -# - CrateEngineeringTeslaGenerator # DeltaV - Teslas aren't allowed + - CrateEngineeringTeslaGenerator - CrateEngineeringTeslaGroundingRod - CrateEngineeringParticleAccelerator - CrateRCD diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml index 7176735cb67..2ef16c6ec18 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml @@ -145,6 +145,7 @@ - id: ClothingNeckAromanticPin - id: ClothingNeckAsexualPin - id: ClothingNeckBisexualPin + - id: ClothingNeckGayPin - id: ClothingNeckIntersexPin - id: ClothingNeckLesbianPin - id: ClothingNeckNonBinaryPin @@ -289,6 +290,7 @@ - id: ResearchDisk5000 - id: PetCarrier - id: DrinkMopwataBottleRandom + #- id: SpectralLocator # DeltaV: no ghost locator - id: LidSalami weight: 0.05 diff --git a/Resources/Prototypes/Entities/Markers/Spawners/Random/posters.yml b/Resources/Prototypes/Entities/Markers/Spawners/Random/posters.yml index f6e27c3d18b..a9852a404b5 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/Random/posters.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/Random/posters.yml @@ -154,6 +154,12 @@ - PosterLegitPeriodicTable - PosterLegitRenault - PosterLegitNTTGC + - PosterLegitSafetyMothDelam + - PosterLegitSafetyMothEpi + - PosterLegitSafetyMothPiping + - PosterLegitSafetyMothMeth + - PosterLegitSafetyMothHardhat + - PosterLegitSafetyMothSSD - PosterLegitDejaVu # Nyanotrasen Poster, see Resources/Prototypes/Nyanotrasen/Entities/Structures/Wallmount/Signs/posters.yml - PosterLegitDontPanic # Nyanotrasen Poster, see Resources/Prototypes/Nyanotrasen/Entities/Structures/Wallmount/Signs/posters.yml - PosterLegitBarDrinks # Nyanotrasen Poster, see Resources/Prototypes/Nyanotrasen/Entities/Structures/Wallmount/Signs/posters.yml diff --git a/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml b/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml index 352d275134e..d98cd1fd888 100644 --- a/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml +++ b/Resources/Prototypes/Entities/Markers/Spawners/ghost_roles.yml @@ -153,7 +153,7 @@ - type: GhostRole name: ghost-role-information-space-dragon-name description: ghost-role-information-space-dragon-description - rules: ghost-role-component-space-dragon-rules + rules: ghost-role-information-space-dragon-rules - type: Sprite layers: - state: green diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/human_hair.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/human_hair.yml index bd7bed25f68..578c6837c0e 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/human_hair.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/human_hair.yml @@ -1363,3 +1363,17 @@ sprites: - sprite: Mobs/Customization/human_hair.rsi state: classiclong3 +- type: marking + id: HumanHairShaped + bodyPart: Hair + markingCategory: Hair + sprites: + - sprite: Mobs/Customization/human_hair.rsi + state: shaped +- type: marking + id: HumanHairLongBow + bodyPart: Hair + markingCategory: Hair + sprites: + - sprite: Mobs/Customization/human_hair.rsi + state: longbow diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/scars.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/scars.yml index 13c09f99089..687fe1ca4c3 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/scars.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/scars.yml @@ -45,7 +45,9 @@ bodyPart: Chest markingCategory: Chest speciesRestriction: [Human, Dwarf, Felinid, Oni] #Einstein Engines - Felinid, Oni + sexRestriction: [Male] #DeltaV: Splitting the scars and tattoos followSkinColor: true sprites: - sprite: Mobs/Customization/scars.rsi state: scar_chest + diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml index 345115bf5aa..1e284c813b4 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/tattoos.yml @@ -3,6 +3,7 @@ bodyPart: Chest markingCategory: Chest speciesRestriction: [Human, Dwarf, Felinid, Oni] # Delta V - Felinid, Oni + sexRestriction: [Male] #DeltaV: Splitting the scars and tattoos coloring: default: type: @@ -17,13 +18,14 @@ bodyPart: Chest markingCategory: Chest speciesRestriction: [Human, Dwarf, Felinid, Oni] # Delta V - Felinid, Oni + sexRestriction: [Male] #DeltaV: Splitting the scars and tattoos coloring: default: type: !type:TattooColoring fallbackColor: "#666666" sprites: - - sprite: Mobs/Customization/tattoos.rsi + - sprite: DeltaV/Mobs/Customization/tattoos.rsi #DeltaV: Splitting the scars and tattoos state: tattoo_nightling - type: marking diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml index b85db4600e4..b4cee6b0915 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/base_borg_chassis.yml @@ -85,6 +85,7 @@ - type: Hands showInHands: false disableExplosionRecursion: true + canBeStripped: false - type: ComplexInteraction - type: IntrinsicRadioReceiver - type: IntrinsicRadioTransmitter @@ -121,6 +122,7 @@ cellSlotId: cell_slot fitsInCharger: true - type: ItemToggle + onActivate: false # You should not be able to turn off a borg temporarily. activated: false # gets activated when a mind is added onUse: false # no item-borg toggling sorry - type: ItemTogglePointLight diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index e7d9f6f6364..6808e440419 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -1394,8 +1394,7 @@ components: # make the player a traitor once its taken - type: AutoTraitor - giveUplink: false - giveObjectives: false + profile: TraitorReinforcement - type: entity id: MobMonkeySyndicateAgentNukeops # Reinforcement exclusive to nukeops uplink @@ -1419,11 +1418,14 @@ - type: Speech speechSounds: Lizard speechVerb: Reptilian + allowedEmotes: ['Thump'] - type: Vocal sounds: Male: MaleReptilian Female: FemaleReptilian Unsexed: MaleReptilian + - type: BodyEmotes + soundsId: ReptilianBodyEmotes - type: TypingIndicator proto: lizard - type: InteractionPopup @@ -1553,8 +1555,7 @@ components: # make the player a traitor once its taken - type: AutoTraitor - giveUplink: false - giveObjectives: false + profile: TraitorReinforcement - type: entity id: MobKoboldSyndicateAgentNukeops # Reinforcement exclusive to nukeops uplink @@ -1648,7 +1649,7 @@ 10: Critical 20: Dead - type: MovementSpeedModifier - baseWalkSpeed : 2.5 + baseWalkSpeed : 1.9 # DeltaV - Allows them to sneak over traps baseSprintSpeed : 5 - type: DamageStateVisuals states: @@ -2329,7 +2330,7 @@ - type: Speech speechVerb: Arachnid speechSounds: Arachnid - allowedEmotes: ['Click', 'Chitter'] + allowedEmotes: ['Click', 'Chitter', 'Hiss'] #DeltaV added Hiss - type: Vocal sounds: Male: UnisexArachnid @@ -2867,6 +2868,12 @@ - type: Tag tags: - VimPilot + - type: HTN # DeltaV - make all cats eat mice + rootTask: + task: SimpleHostileCompound + - type: NpcFactionMember # DeltaV - give cats faction so they fight mice + factions: + - Cat - type: entity name: calico cat @@ -3200,7 +3207,7 @@ 40: Critical 60: Dead - type: MovementSpeedModifier - baseWalkSpeed : 2.5 + baseWalkSpeed : 1.9 # DeltaV - Allows them to sneak over traps baseSprintSpeed : 4 - type: Inventory speciesId: hamster @@ -3350,7 +3357,10 @@ - type: NpcFactionMember factions: - Passive - + - type: HTN + rootTask: + task: RuminantCompound + - type: entity name: diona nymph parent: [SimpleMobBase, StripableInventoryBase] diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml b/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml index 877dd40cc38..5d3840185e9 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/asteroid.yml @@ -55,7 +55,7 @@ - type: MobThresholds thresholds: 0: Alive - 300: Dead + 100: Dead - type: MeleeWeapon soundHit: path: "/Audio/Weapons/smash.ogg" @@ -90,6 +90,12 @@ - id: FoodMeatGoliath amount: 3 - id: MaterialGoliathHide1 + - type: Prying # DeltaV: let sentient goliaths pry doors + pryPowered: true + force: true + speedModifier: 1.5 + useSound: + path: /Audio/Items/crowbar.ogg - type: entity id: ActionGoliathTentacle diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml b/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml index 3fe80c75c56..3308baf4d74 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/pets.yml @@ -135,6 +135,7 @@ - type: NpcFactionMember factions: - PetsNT + - Cat # DeltaV - type: HTN rootTask: task: SimpleHostileCompound @@ -158,6 +159,7 @@ - type: NpcFactionMember factions: - PetsNT + - Cat # DeltaV - type: Grammar attributes: proper: true @@ -789,6 +791,7 @@ name: ghost-role-information-smile-name description: ghost-role-information-smile-description rules: ghost-role-information-nonantagonist-rules + raffle: null - type: Grammar attributes: proper: true diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml index f39f2e8df95..54acea2bfe3 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/revenant.yml @@ -8,6 +8,7 @@ components: - type: Input context: "ghost" + - type: Spectral - type: MovementSpeedModifier baseWalkSpeed: 6 baseSprintSpeed: 6 diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml index 857115e10f1..4a534617243 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml @@ -32,12 +32,8 @@ factions: - SimpleNeutral - type: IntrinsicRadioReceiver - - type: IntrinsicRadioTransmitter - channels: - - Binary - type: ActiveRadio channels: - - Binary - Common - type: HealthExaminable examinableTypes: @@ -112,6 +108,53 @@ - type: NoSlip - type: Insulated +- type: entity + parent: MobSiliconBase + id: MobFireBot + name: firebot + description: A little fire extinguishing bot. He looks rather anxious. + components: + - type: Sprite + sprite: Mobs/Silicon/Bots/firebot.rsi + state: firebot + - type: Construction + graph: FireBot + node: bot + - type: HTN + rootTask: + task: FirebotCompound + - type: SolutionContainerManager + solutions: + spray: + maxVol: 10 + reagents: + - ReagentId: Water + Quantity: 10 + - type: SolutionRegeneration + solution: spray + generated: + reagents: + - ReagentId: Water + Quantity: 10 + - type: Spray + transferAmount: 10 + pushbackAmount: 60 + spraySound: + path: /Audio/Effects/extinguish.ogg + sprayedPrototype: ExtinguisherSpray + vaporAmount: 1 + vaporSpread: 90 + sprayVelocity: 3.0 + - type: UseDelay + delay: 2 + - type: InteractionPopup + interactSuccessString: petting-success-firebot + interactFailureString: petting-failure-firebot + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg + - type: Advertise + pack: FirebotAd + - type: entity parent: MobSiliconBase id: MobHonkBot @@ -123,6 +166,8 @@ maxInterval: 12 sound: collection: BikeHorn + params: + variation: 0.125 - type: Sprite sprite: Mobs/Silicon/Bots/honkbot.rsi state: honkbot @@ -167,6 +212,8 @@ interactFailureString: petting-failure-honkbot interactSuccessSound: path: /Audio/Items/bikehorn.ogg + params: + variation: 0.125 - type: entity parent: MobHonkBot @@ -177,6 +224,8 @@ - type: SpamEmitSound sound: collection: CluwneHorn + params: + variation: 0.125 - type: Sprite state: jonkbot - type: Construction @@ -192,6 +241,8 @@ - type: InteractionPopup interactSuccessSound: path: /Audio/Items/brokenbikehorn.ogg + params: + variation: 0.125 - type: Vocal sounds: Unsexed: Cluwne @@ -215,7 +266,7 @@ - type: Construction graph: CleanBot node: bot - - type: SentienceTarget + - type: SentienceTarget # DeltaV: upstream removed it, cleanbot works when player controlled flavorKind: station-event-random-sentience-flavor-mechanical - type: Absorbent pickupAmount: 10 @@ -280,7 +331,7 @@ reagent: SpaceDrugs quantity: 25 - type: Sprite - sprite: Mobs/Silicon/Bots/medibot.rsi + sprite: DeltaV/Mobs/Silicon/Bots/medibot.rsi # DeltaV - Changed for a sprite with a smiley face. state: medibot - type: HTN rootTask: @@ -288,8 +339,6 @@ - type: Construction graph: MediBot node: bot - - type: SentienceTarget - flavorKind: station-event-random-sentience-flavor-mechanical - type: Anchorable - type: InteractionPopup interactSuccessString: petting-success-medibot @@ -396,6 +445,5 @@ - Bot - type: ActiveRadio channels: - - Binary - Common - Supply diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml b/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml index 503089a0c24..dc2011b804b 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml @@ -119,6 +119,7 @@ molsPerSecondPerUnitMass: 0.0005 - type: Speech speechVerb: LargeMob + speechSounds: Xenonid # DeltaV: Use RMC's speech sounds for sentient xenos - type: PotentialPsionic #Nyano - Summary: makes potentially psionic. chance: -2 - type: Psionic #Nyano - Summary: makes psionic by default. diff --git a/Resources/Prototypes/Entities/Mobs/Player/ShuttleRoles/settings.yml b/Resources/Prototypes/Entities/Mobs/Player/ShuttleRoles/settings.yml index a690a230c7e..d2fb821c8fb 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/ShuttleRoles/settings.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/ShuttleRoles/settings.yml @@ -777,7 +777,7 @@ - type: GhostRole name: ghost-role-information-syndie-disaster-victim-name description: ghost-role-information-syndie-disaster-victim-description - rules: ghost-role-information-freeagent-rules + rules: ghost-role-information-syndicate-refugee-rules #DeltaV - Removed free agent mention on the rules for a custom one. Was ghost-role-information-freeagent-rules raffle: settings: short - type: Loadout diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index b3e8fa97c9a..fc4f9efdd52 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -1,5 +1,5 @@ - type: entity - parent: [MobObserver, InventoryBase] + parent: [MobObserverBase, InventoryBase] id: AdminObserver name: admin observer categories: [ HideSpawnMenu ] @@ -18,6 +18,7 @@ - CanPilot - BypassInteractionRangeChecks - BypassDropChecks + - NoConsoleSound - type: Input context: "aghost" - type: Ghost @@ -102,7 +103,7 @@ - type: entity id: ActionAGhostShowSolar name: Solar Control Interface - description: View a solar control interface. + description: View a Solar Control Interface. components: - type: InstantAction icon: { sprite: Structures/Machines/parts.rsi, state: box_0 } @@ -114,7 +115,7 @@ - type: entity id: ActionAGhostShowCommunications name: Communications Interface - description: View a communications interface. + description: View a Communications Interface. components: - type: InstantAction icon: { sprite: Interface/Actions/actions_ai.rsi, state: comms_console } @@ -126,7 +127,7 @@ - type: entity id: ActionAGhostShowRadar name: Mass Scanner Interface - description: View a mass scanner interface. + description: View a Mass Scanner Interface. components: - type: InstantAction icon: { sprite: Interface/Actions/actions_ai.rsi, state: mass_scanner } @@ -138,7 +139,7 @@ - type: entity id: ActionAGhostShowCargo name: Cargo Ordering Interface - description: View a cargo ordering interface. + description: View a Cargo Ordering Interface. components: - type: InstantAction icon: { sprite: Structures/Machines/parts.rsi, state: box_0 } @@ -150,7 +151,7 @@ - type: entity id: ActionAGhostShowCrewMonitoring name: Crew Monitoring Interface - description: View a crew monitoring interface. + description: View a Crew Monitoring Interface. components: - type: InstantAction icon: { sprite: Interface/Actions/actions_ai.rsi, state: crew_monitor } @@ -162,7 +163,7 @@ - type: entity id: ActionAGhostShowStationRecords name: Station Records Interface - description: View a station records Interface. + description: View a Station Records Interface. components: - type: InstantAction icon: { sprite: Interface/Actions/actions_ai.rsi, state: station_records } diff --git a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml index 16e3038fcd2..c750b568b40 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/dragon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/dragon.yml @@ -150,7 +150,9 @@ tags: - CannotSuicide - DoorBumpOpener - + - type: Puller + needsHands: false + - type: entity parent: BaseMobDragon id: MobDragon diff --git a/Resources/Prototypes/Entities/Mobs/Player/human.yml b/Resources/Prototypes/Entities/Mobs/Player/human.yml index 35cb54b0b1b..c29be592687 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/human.yml @@ -31,8 +31,7 @@ components: # make the player a traitor once its taken - type: AutoTraitor - giveUplink: false - giveObjectives: false + profile: TraitorReinforcement - type: entity parent: MobHumanSyndicateAgent diff --git a/Resources/Prototypes/Entities/Mobs/Player/observer.yml b/Resources/Prototypes/Entities/Mobs/Player/observer.yml index 16d4101afc4..9208d4c8a98 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/observer.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/observer.yml @@ -28,11 +28,13 @@ layer: - GhostImpassable +# shared parent between aghosts, replay spectators and normal observers - type: entity parent: - Incorporeal - BaseMob - id: MobObserver + id: MobObserverBase + abstract: true name: observer description: Boo! categories: [ HideSpawnMenu ] @@ -66,6 +68,13 @@ tags: - BypassInteractionRangeChecks +# proto for player ghosts specifically +- type: entity + parent: MobObserverBase + id: MobObserver + components: + - type: Spectral + - type: entity id: ActionGhostBoo name: Boo! diff --git a/Resources/Prototypes/Entities/Mobs/Player/replay_observer.yml b/Resources/Prototypes/Entities/Mobs/Player/replay_observer.yml index ffbc46e94c3..8a01de40809 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/replay_observer.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/replay_observer.yml @@ -1,5 +1,5 @@ - type: entity - parent: MobObserver + parent: MobObserverBase id: ReplayObserver categories: [ HideSpawnMenu ] save: false diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index 15878a4017d..9f7e206c249 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -71,6 +71,26 @@ title: comms-console-announcement-title-station-ai color: "#2ed2fd" +- type: entity + id: AiHeldIntellicard + description: Components added / removed from an entity that gets inserted into an Intellicard. + categories: [ HideSpawnMenu ] + components: + - type: IntrinsicRadioReceiver + - type: IntrinsicRadioTransmitter + channels: + - Binary + - type: ActiveRadio + channels: + - Binary + - Common + - type: ActionGrant + actions: + - ActionAIViewLaws + - type: UserInterface + interfaces: + enum.SiliconLawsUiKey.Key: + type: SiliconLawBoundUserInterface # Ai - type: entity @@ -82,7 +102,8 @@ - type: StationAiHolder slot: name: station-ai-mind-slot - locked: true + locked: false + disableEject: true whitelist: tags: - StationAi @@ -239,6 +260,7 @@ state: std_mod - type: SiliconLawProvider laws: AntimovLawset + lawUploadSound: /Audio/Ambience/Antag/silicon_lawboard_antimov.ogg - type: entity id: NutimovCircuitBoard @@ -255,13 +277,16 @@ # Items - type: entity id: Intellicard - name: Intellicard + name: intellicard description: A storage device for AIs. parent: - BaseItem - AiHolder suffix: Empty components: + - type: ContainerComp + proto: AiHeldIntellicard + container: station_ai_mind_slot - type: Sprite sprite: Objects/Devices/ai_card.rsi layers: @@ -360,7 +385,6 @@ enum.SiliconLawsUiKey.Key: type: SiliconLawBoundUserInterface - type: ComplexInteraction - - type: DoorRemote - type: Actions - type: Access groups: @@ -373,6 +397,7 @@ tags: - HideContextMenu - StationAi + - NoConsoleSound # Hologram projection that the AI's eye tracks. - type: entity diff --git a/Resources/Prototypes/Entities/Mobs/Player/skeleton.yml b/Resources/Prototypes/Entities/Mobs/Player/skeleton.yml index 2c4186d7fa1..9b73d92a9ed 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/skeleton.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/skeleton.yml @@ -50,7 +50,7 @@ - type: GhostRole name: ghost-role-information-closet-skeleton-name description: ghost-role-information-closet-skeleton-description - rules: ghost-role-information-freeagent-rules + rules: ghost-role-information-closet-skeleton-rules # DeltaV - No longer free agent, now a non-antag (Some leeway given). requirements: - !type:OverallPlaytimeRequirement time: 172800 # DeltaV - 48 hours diff --git a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml index b8a057fcd58..2d4248a90bd 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/arachnid.yml @@ -65,7 +65,7 @@ - type: Speech speechVerb: Arachnid speechSounds: Arachnid - allowedEmotes: ['Click', 'Chitter'] + allowedEmotes: ['Click', 'Chitter', 'Hiss'] # DeltaV: Added Hiss - type: Vocal sounds: Male: UnisexArachnid diff --git a/Resources/Prototypes/Entities/Mobs/Species/base.yml b/Resources/Prototypes/Entities/Mobs/Species/base.yml index 98c79f06b3d..7265c6ff737 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/base.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/base.yml @@ -138,6 +138,7 @@ - Adrenaline - PsionicsDisabled #Nyano - Summary: PCs can have psionics disabled. - PsionicallyInsulated #Nyano - Summary: PCs can be made insulated from psionic powers. + - Addicted # DeltaV - Psych med addictions system - type: Body prototype: Human requiredLegs: 2 @@ -185,8 +186,6 @@ - type: Stripping - type: UserInterface interfaces: - enum.VoiceMaskUIKey.Key: - type: VoiceMaskBoundUserInterface enum.HumanoidMarkingModifierKey.Key: type: HumanoidMarkingModifierBoundUserInterface enum.StrippingUiKey.Key: diff --git a/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml b/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml index d406f0bf2e2..0c928aeecf1 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/reptilian.yml @@ -31,6 +31,7 @@ - type: Speech speechSounds: Lizard speechVerb: Reptilian + allowedEmotes: ['Thump'] - type: TypingIndicator proto: lizard - type: Vocal @@ -38,6 +39,8 @@ Male: MaleReptilian Female: FemaleReptilian Unsexed: MaleReptilian + - type: BodyEmotes + soundsId: ReptilianBodyEmotes - type: Damageable damageContainer: Biological damageModifierSet: Scale diff --git a/Resources/Prototypes/Entities/Mobs/Species/slime.yml b/Resources/Prototypes/Entities/Mobs/Species/slime.yml index 6ab239ea881..aa18acb7019 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/slime.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/slime.yml @@ -21,6 +21,9 @@ maxItemSize: Large storageInsertSound: path: /Audio/Voice/Slime/slime_squish.ogg + blacklist: # DeltaV - add blacklist + components: + - NukeDisk - type: ContainerContainer containers: storagebase: !type:Container @@ -29,8 +32,6 @@ interfaces: enum.StorageUiKey.Key: type: StorageBoundUserInterface - enum.VoiceMaskUIKey.Key: - type: VoiceMaskBoundUserInterface enum.HumanoidMarkingModifierKey.Key: type: HumanoidMarkingModifierBoundUserInterface enum.StrippingUiKey.Key: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml index 448ef0868d6..0b574cdd720 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml @@ -135,6 +135,10 @@ Quantity: 5 - ReagentId: Vitamin Quantity: 5 + - type: Tag + tags: + - Cake + - Vegetable - type: entity name: slice of carrot cake @@ -155,6 +159,11 @@ Quantity: 1 - ReagentId: Vitamin Quantity: 1 + - type: Tag + tags: + - Cake + - Vegetable + - Slice # Tastes like sweetness, cake, carrot. @@ -168,7 +177,10 @@ state: brain - type: SliceableFood slice: FoodCakeBrainSlice - + - type: Tag + tags: + - Cake + - Meat - type: entity name: slice of brain cake @@ -178,6 +190,11 @@ components: - type: Sprite state: brain-slice + - type: Tag + tags: + - Cake + - Meat + - Slice # Tastes like sweetness, cake, brains. - type: entity @@ -429,6 +446,10 @@ state: slime - type: SliceableFood slice: FoodCakeSlimeSlice + - type: Tag + tags: + - Cake + - Meat - type: entity name: slice of slime cake @@ -438,6 +459,11 @@ components: - type: Sprite state: slime-slice + - type: Tag + tags: + - Cake + - Meat + - Slice # Tastes like sweetness, cake, slime. - type: entity @@ -498,6 +524,10 @@ state: christmas - type: SliceableFood slice: FoodCakeChristmasSlice + - type: Tag + tags: + - Cake + - Fruit - type: entity name: slice of christmas cake @@ -506,6 +536,11 @@ components: - type: Sprite state: christmas-slice + - type: Tag + tags: + - Cake + - Fruit + - Slice # Tastes like sweetness, cake, christmas. - type: entity @@ -634,7 +669,7 @@ Quantity: 20 - ReagentId: Vitamin Quantity: 5 - - ReagentId: Omnizine #This is a really rare cake with healing stuff and we don't have any of its chems yet + - ReagentId: PolypyryliumOligomers Quantity: 15 - type: entity @@ -654,7 +689,7 @@ Quantity: 4 - ReagentId: Vitamin Quantity: 1 - - ReagentId: Omnizine + - ReagentId: PolypyryliumOligomers Quantity: 3 # Tastes like sweetness, cake, jam. diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pie.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pie.yml index c9ac4833431..b86a4201e8b 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pie.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pie.yml @@ -23,7 +23,7 @@ - ReagentId: Vitamin Quantity: 5 - type: Food #All pies here made with a pie tin; unless you're some kind of savage, you're probably not destroying this when you eat or slice the pie! - trash: + trash: - FoodPlateTin - type: SliceableFood count: 4 @@ -317,6 +317,43 @@ - Slice # Tastes like pie, meat. +- type: entity + name: pumpkin pie + parent: FoodPieBase + id: FoodPiePumpkin + description: Someone should turn this into a latte! + components: + - type: FlavorProfile + flavors: + - sweet + - pumpkin + - type: Sprite + layers: + - state: tin + - state: pumpkin + - type: SliceableFood + slice: FoodPiePumpkinSlice + - type: Tag + tags: + - Pie + +- type: entity + name: slice of pumpkin pie + parent: FoodPieSliceBase + id: FoodPiePumpkinSlice + components: + - type: FlavorProfile + flavors: + - sweet + - pumpkin + - type: Sprite + layers: + - state: pumpkin-slice + - type: Tag + tags: + - Pie + - Slice + - type: entity name: xeno pie parent: FoodPieBase diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml index 000f21db3f4..612f7da0472 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml @@ -525,6 +525,7 @@ - type: Tag tags: - Raw + - Meat - type: Sprite state: snake - type: SolutionContainerManager diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml index 69a7de8963b..e4c9341d120 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml @@ -2088,6 +2088,10 @@ - type: SliceableFood count: 5 slice: FoodHolymelonSlice + - type: Butcherable + butcheringType: Knife + spawned: + - id: ClothingHeadHatHolyWatermelon - type: Tag tags: - Fruit diff --git a/Resources/Prototypes/Entities/Objects/Decoration/flora.yml b/Resources/Prototypes/Entities/Objects/Decoration/flora.yml index 25ff782108a..3bde2042cf1 100644 --- a/Resources/Prototypes/Entities/Objects/Decoration/flora.yml +++ b/Resources/Prototypes/Entities/Objects/Decoration/flora.yml @@ -52,7 +52,7 @@ fix1: shape: !type:PhysShapeAabb - bounds: "-0.35,-0.4,0.35,0.4" + bounds: "-0.15,-0.2,0.15,0.2" # DeltaV: make it smaller density: 1000 layer: - WallLayer @@ -104,7 +104,7 @@ fix1: shape: !type:PhysShapeAabb - bounds: "-0.1,-0.3,0.1,0.3" + bounds: "-0.1,-0.2,0.1,0.2" # DeltaV: make it smaller density: 4000 layer: - WallLayer @@ -122,7 +122,7 @@ fix1: shape: !type:PhysShapeAabb - bounds: "-0.18,-0.35,0.18,0.35" + bounds: "-0.18,-0.2,0.18,0.2" # DeltaV: make it smaller density: 2000 layer: - WallLayer @@ -140,7 +140,7 @@ fix1: shape: !type:PhysShapeAabb - bounds: "-0.1,-0.35,0.1,0.35" + bounds: "-0.1,-0.2,0.1,0.2" # DeltaV: make it smaller density: 3500 layer: - WallLayer diff --git a/Resources/Prototypes/Entities/Objects/Decoration/present.yml b/Resources/Prototypes/Entities/Objects/Decoration/present.yml index 8dfc79c6279..d68b04e0a1e 100644 --- a/Resources/Prototypes/Entities/Objects/Decoration/present.yml +++ b/Resources/Prototypes/Entities/Objects/Decoration/present.yml @@ -64,6 +64,8 @@ orGroup: GiftPool - id: PlushieLizard #Weh! orGroup: GiftPool + - id: PlushieRainbowLizard + orGroup: GiftPool - id: PlushieNar orGroup: GiftPool - id: PlushieCarp diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml index be92082dc21..5b35979f953 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml @@ -10,6 +10,10 @@ MatterBin: 3 Manipulator: 1 Glass: 1 + - type: ReverseEngineering # DeltaV + difficulty: 2 + recipes: + - AutolatheHyperConvectionMachineCircuitboard - type: entity parent: BaseMachineCircuitboard @@ -26,10 +30,6 @@ Igniter: amount: 1 defaultPrototype: Igniter - - type: ReverseEngineering # delta - difficulty: 2 - recipes: - - AutolatheHyperConvectionMachineCircuitboard - type: entity id: ProtolatheMachineCircuitboard @@ -46,6 +46,10 @@ GlassBeaker: amount: 2 defaultPrototype: Beaker + - type: ReverseEngineering # DeltaV + difficulty: 2 + recipes: + - ProtolatheHyperConvectionMachineCircuitboard - type: entity parent: BaseMachineCircuitboard @@ -64,10 +68,6 @@ Igniter: amount: 1 defaultPrototype: Igniter - - type: ReverseEngineering # delta - difficulty: 2 - recipes: - - ProtolatheHyperConvectionMachineCircuitboard - type: entity id: BiofabricatorMachineCircuitboard @@ -80,10 +80,6 @@ stackRequirements: MatterBin: 4 Glass: 1 - - type: ReverseEngineering # delta - difficulty: 2 - recipes: - - BiofabricatorMachineCircuitboard - type: entity id: SecurityTechFabCircuitboard @@ -187,10 +183,6 @@ MatterBin: 1 Manipulator: 3 Glass: 5 - - type: ReverseEngineering # Nyano - difficulty: 2 - recipes: - - ExosuitFabricatorMachineCircuitboard - type: GuideHelp guides: - Robotics @@ -254,10 +246,6 @@ GlassBeaker: amount: 1 defaultPrototype: Beaker - - type: ReverseEngineering # Nyano - difficulty: 2 - recipes: - - VaccinatorMachineCircuitboard - type: entity id: DiagnoserMachineCircuitboard @@ -278,10 +266,6 @@ BotanySwab: amount: 1 defaultPrototype: DiseaseSwab - - type: ReverseEngineering # Nyano - difficulty: 2 - recipes: - - DiagnoserMachineCircuitboard - type: entity id: ArtifactAnalyzerMachineCircuitboard @@ -297,10 +281,6 @@ Manipulator: 3 Capacitor: 1 Glass: 5 - - type: ReverseEngineering # Nyano - difficulty: 2 - recipes: - - ArtifactAnalyzerMachineCircuitboard - type: entity id: ArtifactCrusherMachineCircuitboard @@ -316,10 +296,6 @@ Manipulator: 2 Glass: 1 Steel: 5 - - type: ReverseEngineering # delta - difficulty: 3 - recipes: - - ArtifactCrusherMachineCircuitboard - type: entity parent: BaseMachineCircuitboard @@ -338,7 +314,7 @@ - type: ReverseEngineering # Nyano difficulty: 2 recipes: - - AnomalyVesselCircuitboard + - AnomalyVesselExperimentalCircuitboard - type: entity parent: BaseMachineCircuitboard @@ -355,10 +331,6 @@ Cable: 5 PlasmaGlass: 15 MetalRod: 4 - - type: ReverseEngineering # delta - difficulty: 3 - recipes: - - AnomalyVesselExperimentalCircuitboard - type: entity parent: BaseMachineCircuitboard @@ -375,10 +347,6 @@ Capacitor: 5 PlasmaGlass: 5 Cable: 5 - - type: ReverseEngineering # delta - difficulty: 3 - recipes: - - AnomalySynchronizerCircuitboard - type: entity parent: BaseMachineCircuitboard @@ -394,10 +362,10 @@ Capacitor: 2 Cable: 1 Glass: 1 - - type: ReverseEngineering # Nyano + - type: ReverseEngineering # DeltaV difficulty: 2 recipes: - - APECircuitboard + - WeaponPistolCHIMP - type: entity id: ThermomachineFreezerMachineCircuitBoard @@ -417,14 +385,14 @@ deconstructionTarget: null graph: ThermomachineBoard node: freezer - - type: ReverseEngineering # Nyano + - type: ReverseEngineering # DeltaV difficulty: 2 recipes: - - ThermomachineFreezerMachineCircuitBoard + - HellfireFreezerMachineCircuitBoard - type: entity id: ThermomachineHeaterMachineCircuitBoard - parent: BaseMachineCircuitboard + parent: ThermomachineFreezerMachineCircuitBoard # DeltaV: inherit RE from freezer board name: heater thermomachine machine board description: Looks like you could use a screwdriver to change the board type. components: @@ -459,10 +427,6 @@ deconstructionTarget: null graph: ThermomachineBoard node: hellfirefreezer - - type: ReverseEngineering # delta - difficulty: 3 - recipes: - - HellfireFreezerMachineCircuitBoard - type: entity parent: BaseMachineCircuitboard @@ -550,11 +514,11 @@ - type: ReverseEngineering # Nyano difficulty: 4 recipes: - - CloningPodMachineCircuitboard + - CloningPodMachineCircuitboard - type: entity id: MedicalScannerMachineCircuitboard - parent: BaseMachineCircuitboard + parent: [ BaseMachineCircuitboard, BaseCloningBoard ] # DeltaV name: medical scanner machine board description: A machine printed circuit board for a medical scanner. components: @@ -566,10 +530,6 @@ Capacitor: 1 Glass: 5 Cable: 1 - - type: ReverseEngineering # Nyano - difficulty: 3 - recipes: - - MedicalScannerMachineCircuitboard - type: entity id: CrewMonitoringServerMachineCircuitboard @@ -596,10 +556,6 @@ stackRequirements: Glass: 5 Cable: 1 - - type: ReverseEngineering # Nyano - difficulty: 3 - recipes: - - CryoPodMachineCircuitboard - type: entity id: ChemMasterMachineCircuitboard @@ -656,10 +612,6 @@ amount: 2 defaultPrototype: KitchenKnife examineName: construction-insert-info-examine-name-knife - - type: ReverseEngineering # Nyano - difficulty: 2 - recipes: - - BiomassReclaimerMachineCircuitboard - type: entity id: HydroponicsTrayMachineCircuitboard @@ -679,10 +631,6 @@ GlassBeaker: amount: 2 defaultPrototype: Beaker - - type: ReverseEngineering # Nyano - difficulty: 2 - recipes: - - HydroponicsTrayMachineCircuitboard - type: entity id: SeedExtractorMachineCircuitboard @@ -700,10 +648,6 @@ # replacing the console screen Glass: 1 Cable: 2 - - type: ReverseEngineering # Nyano - difficulty: 2 - recipes: - - SeedExtractorMachineCircuitboard - type: entity id: SMESMachineCircuitboard @@ -766,10 +710,6 @@ Plastic: 30 - type: StaticPrice price: 30 - - type: ReverseEngineering # delta - difficulty: 3 - recipes: - - PowerCageRechargerCircuitboard - type: entity id: BorgChargerCircuitboard @@ -831,10 +771,6 @@ materialComposition: Steel: 30 Plastic: 30 - - type: ReverseEngineering # delta - difficulty: 2 - recipes: - - TurboItemRechargerCircuitboard - type: entity id: SubstationMachineCircuitboard @@ -892,10 +828,6 @@ amount: 1 defaultPrototype: SaxophoneInstrument examineName: construction-insert-info-examine-name-instrument-woodwind - - type: ReverseEngineering # Nyano - difficulty: 2 - recipes: - - DawInstrumentMachineCircuitboard - type: entity id: PortableGeneratorPacmanMachineCircuitboard @@ -909,10 +841,6 @@ stackRequirements: Capacitor: 1 CableHV: 5 - - type: ReverseEngineering # Nyano - difficulty: 2 - recipes: - - PortableGeneratorPacmanMachineCircuitboard - type: PhysicalComposition materialComposition: Glass: 200 @@ -931,10 +859,6 @@ stackRequirements: Capacitor: 4 Steel: 5 - - type: ReverseEngineering # delta - difficulty: 3 - recipes: - - ThrusterMachineCircuitboard - type: entity id: GyroscopeMachineCircuitboard @@ -947,10 +871,6 @@ Manipulator: 2 Capacitor: 1 Glass: 2 - - type: ReverseEngineering # delta - difficulty: 3 - recipes: - - GyroscopeMachineCircuitboard - type: entity id: PortableGeneratorSuperPacmanMachineCircuitboard @@ -969,10 +889,6 @@ Glass: 200 chemicalComposition: Silicon: 20 - - type: ReverseEngineering # delta - difficulty: 2 - recipes: - - PortableGeneratorSuperPacmanMachineCircuitboard - type: StaticPrice price: 40 @@ -995,10 +911,6 @@ Silicon: 20 - type: StaticPrice price: 40 - - type: ReverseEngineering # delta - difficulty: 2 - recipes: - - PortableGeneratorJrPacmanMachineCircuitboard - type: entity id: ReagentGrinderMachineCircuitboard diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml index b93de8ad9d2..bc0fbe136fb 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/computer.yml @@ -37,9 +37,6 @@ state: cpu_engineering - type: ComputerBoard prototype: ComputerPowerMonitoring - - type: ReverseEngineering # Nyano - recipes: - - PowerComputerCircuitboard - type: entity parent: BaseComputerCircuitboard @@ -133,10 +130,6 @@ prototype: ComputerSalvageExpedition - type: StealTarget stealGroup: SalvageExpeditionsComputerCircuitboard - - type: ReverseEngineering # delta - difficulty: 2 - recipes: - - SalvageExpeditionsComputerCircuitboard - type: entity parent: BaseComputerCircuitboard @@ -160,10 +153,6 @@ - type: Tag tags: - SurveillanceCameraMonitorCircuitboard - - type: ReverseEngineering # delta - difficulty: 2 - recipes: - - SurveillanceCameraMonitorCircuitboard - type: entity parent: BaseComputerCircuitboard @@ -173,10 +162,6 @@ components: - type: ComputerBoard prototype: ComputerSurveillanceWirelessCameraMonitor - - type: ReverseEngineering # delta - difficulty: 2 - recipes: - - SurveillanceWirelessCameraMonitorCircuitboard - type: entity parent: BaseComputerCircuitboard @@ -189,10 +174,6 @@ - type: Tag tags: - ComputerTelevisionCircuitboard - - type: ReverseEngineering # delta - difficulty: 2 - recipes: - - ComputerTelevisionCircuitboard - type: entity parent: BaseComputerCircuitboard @@ -215,10 +196,6 @@ state: cpu_science - type: ComputerBoard prototype: ComputerAnalysisConsole - - type: ReverseEngineering # Nyano - difficulty: 2 - recipes: - - AnalysisComputerCircuitboard - type: entity parent: BaseComputerCircuitboard @@ -230,10 +207,6 @@ state: cpu_science - type: ComputerBoard prototype: ComputerTechnologyDiskTerminal - - type: ReverseEngineering # Nyano - difficulty: 2 - recipes: - - TechDiskComputerCircuitboard - type: entity parent: BaseComputerCircuitboard @@ -302,10 +275,9 @@ components: - type: ComputerBoard prototype: ComputerRadar - - type: ReverseEngineering # delta - difficulty: 2 + - type: ReverseEngineering recipes: - - RadarConsoleCircuitboard + - HandHeldMassScanner - type: entity parent: BaseComputerCircuitboard @@ -317,10 +289,6 @@ state: cpu_engineering - type: ComputerBoard prototype: ComputerSolarControl - - type: ReverseEngineering # Nyano - difficulty: 2 - recipes: - - SolarControlComputerCircuitboard - type: entity parent: BaseComputerCircuitboard @@ -359,10 +327,6 @@ components: - type: ComputerBoard prototype: ComputerShuttle - - type: ReverseEngineering # delta - difficulty: 3 - recipes: - - ShuttleConsoleCircuitboard - type: entity parent: BaseComputerCircuitboard @@ -374,7 +338,7 @@ prototype: ComputerShuttleSyndie - type: entity - parent: BaseComputerCircuitboard + parent: [ BaseComputerCircuitboard, BaseCloningBoard ] # DeltaV id: CloningConsoleComputerCircuitboard name: cloning console computer board description: A computer printed circuit board for a cloning console. @@ -383,10 +347,6 @@ state: cpu_medical - type: ComputerBoard prototype: ComputerCloningConsole - - type: ReverseEngineering # Nyano - difficulty: 3 - recipes: - - CloningConsoleComputerCircuitboard - type: entity parent: BaseComputerCircuitboard @@ -420,10 +380,6 @@ price: 150 - type: ComputerBoard prototype: ComputerMassMedia - - type: ReverseEngineering # delta - difficulty: 2 - recipes: - - ComputerMassMediaCircuitboard - type: entity parent: BaseComputerCircuitboard diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/misc.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/misc.yml new file mode 100644 index 00000000000..62a4ee72947 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/misc.yml @@ -0,0 +1,15 @@ +- type: entity + parent: BaseElectronics + id: FreezerElectronics + name: freezer electronics + description: An electronics board used in kitchen freezers. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: door_electronics + - type: Tag + tags: + - FreezerElectronics + - type: DoorElectronics + - type: StaticPrice + price: 55 diff --git a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/camera_bug.yml b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/camera_bug.yml new file mode 100644 index 00000000000..6e10d5274ab --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/camera_bug.yml @@ -0,0 +1,25 @@ +- type: entity + id: CameraBug + parent: [ BaseItem, BaseSyndicateContraband ] + name: camera bug + description: An illegal syndicate device that allows you to hack into the station's camera network. + components: + - type: Sprite + sprite: Objects/Devices/camera_bug.rsi + layers: + - state: camera_bug + - type: Item + - type: ActivatableUI + requireActiveHand: false + inHandsOnly: true + key: enum.SurveillanceCameraMonitorUiKey.Key + - type: UserInterface + interfaces: + enum.SurveillanceCameraMonitorUiKey.Key: + type: SurveillanceCameraMonitorBoundUserInterface + - type: DeviceNetwork + deviceNetId: Wired + receiveFrequencyId: SurveillanceCamera + transmitFrequencyId: SurveillanceCamera + - type: WiredNetworkConnection + - type: SurveillanceCameraMonitor \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Devices/cartridges.yml b/Resources/Prototypes/Entities/Objects/Devices/cartridges.yml index f9581149e21..2172077f2a6 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/cartridges.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/cartridges.yml @@ -93,3 +93,65 @@ - type: GuideHelp guides: - Forensics + +# DeltaV: this is replaced by SecWatch, the commit additing it isn't included +#- type: entity +# parent: BaseItem +# id: WantedListCartridge +# name: Wanted list cartridge +# description: A program to get a list of wanted persons. +# components: +# - type: Sprite +# sprite: Objects/Devices/cartridge.rsi +# state: cart-sec +# - type: Icon +# sprite: Objects/Devices/cartridge.rsi +# state: cart-sec +# - type: UIFragment +# ui: !type:WantedListUi +# - type: Cartridge +# programName: wanted-list-program-name +# icon: +# sprite: Objects/Misc/books.rsi +# state: icon_magnifier +# - type: WantedListCartridge +# - type: StealTarget +# stealGroup: WantedListCartridge + +- type: entity + parent: BaseItem + id: MedTekCartridge + name: MedTek cartridge + description: A program that provides medical diagnostic tools. + components: + - type: Sprite + sprite: Objects/Devices/cartridge.rsi + state: cart-med + - type: Icon + sprite: Objects/Devices/cartridge.rsi + state: cart-med + - type: Cartridge + programName: med-tek-program-name + icon: + sprite: Objects/Specific/Medical/healthanalyzer.rsi + state: icon + - type: MedTekCartridge + +- type: entity + parent: BaseItem + id: AstroNavCartridge + name: AstroNav cartridge + description: A program for navigation that provides GPS coordinates. + components: + - type: Sprite + sprite: Objects/Devices/cartridge.rsi + state: cart-nav + - type: Icon + sprite: Objects/Devices/cartridge.rsi + state: cart-nav + - type: Cartridge + programName: astro-nav-program-name + icon: + sprite: Objects/Devices/gps.rsi + state: icon + - type: AstroNavCartridge diff --git a/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml b/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml index ecf2451be8a..ade8517c59f 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/chameleon_projector.yml @@ -12,6 +12,7 @@ components: - Anchorable - Item + tags: - Bot # for funny bot moments blacklist: components: diff --git a/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml b/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml index c0f27ca2c48..62cc02cb30a 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/encryption_keys.yml @@ -234,7 +234,7 @@ - type: Sprite layers: - state: crypt_silver - - state: borg_label + - state: ai_label - type: entity parent: [ EncryptionKey, BaseSyndicateContraband ] @@ -249,7 +249,7 @@ - type: Sprite layers: - state: crypt_red - - state: borg_label + - state: ai_label - type: entity parent: EncryptionKey diff --git a/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml b/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml index 40e6554cf8d..0c8b539c590 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/holoprojectors.yml @@ -67,10 +67,6 @@ - HolofanProjector - type: StaticPrice price: 80 - - type: ReverseEngineering # Nayno - difficulty: 3 - recipes: - - HolofanProjector - type: entity parent: HolofanProjector @@ -99,10 +95,6 @@ - HolofanProjector - type: StaticPrice price: 130 - - type: ReverseEngineering # delta - difficulty: 3 - recipes: - - HoloprojectorField - type: entity parent: HoloprojectorField @@ -131,10 +123,6 @@ - HolofanProjector - type: StaticPrice price: 50 - - type: ReverseEngineering # delta - difficulty: 2 - recipes: - - HoloprojectorSecurity - type: entity parent: HoloprojectorSecurity diff --git a/Resources/Prototypes/Entities/Objects/Devices/payload.yml b/Resources/Prototypes/Entities/Objects/Devices/payload.yml index 160f0c58e79..44a816a18fa 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/payload.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/payload.yml @@ -48,6 +48,10 @@ behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] + - type: Tag # DeltaV: add ExplosivePayload tag to it + tags: + - ExplosivePayload + - Payload - type: entity name: chemical payload diff --git a/Resources/Prototypes/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Entities/Objects/Devices/pda.yml index b1906b23710..f065fd6faae 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pda.yml @@ -118,17 +118,32 @@ - type: Speech speechVerb: Robotic +- type: entity + parent: BasePDA + id: BaseSecurityPDA + abstract: true + components: + - type: CartridgeLoader + diskSpace: 7 # DeltaV: increase cartridge space by 2 to fit our extra cartridges + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - CrimeAssistCartridge # DeltaV + - SecWatchCartridge # DeltaV: SecWatch replaces WantedList + - type: entity parent: BasePDA id: BaseMedicalPDA abstract: true components: - - type: ItemToggle - onUse: false - - type: HealthAnalyzer - scanDelay: 1 - scanningEndSound: - path: "/Audio/Items/Medical/healthscanner.ogg" + - type: CartridgeLoader + uiKey: enum.PdaUiKey.Key + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - MedTekCartridge - type: entity parent: BasePDA @@ -161,7 +176,7 @@ parent: BaseMedicalPDA id: MedicalInternPDA name: medical intern PDA - description: Why isn't it white? Has a built-in health analyzer. + description: Why isn't it white? components: - type: Pda id: MedicalInternIDCard @@ -176,7 +191,7 @@ - Medical Doctor - type: entity - parent: BasePDA + parent: BaseSecurityPDA id: SecurityCadetPDA name: security cadet PDA description: Why isn't it red? @@ -189,14 +204,6 @@ accentVColor: "#A32D26" - type: Icon state: pda-interncadet - - type: CartridgeLoader # DeltaV - Crime Assist + SecWatch, increased diskSpace by 2 to fit them - diskSpace: 7 - preinstalled: - - CrewManifestCartridge - - NotekeeperCartridge - - NewsReaderCartridge - - CrimeAssistCartridge - - SecWatchCartridge - type: entity parent: BasePDA @@ -385,18 +392,19 @@ accentVColor: "#a23e3e" - type: Icon state: pda-qm - - type: CartridgeLoader # DeltaV - MailMetrics courier tracker + - type: CartridgeLoader # DeltaV preinstalled: - CrewManifestCartridge - NotekeeperCartridge - NewsReaderCartridge - - MailMetricsCartridge + - MailMetricsCartridge # DeltaV - MailMetrics courier tracker + - StockTradingCartridge # DeltaV - StockTrading - type: entity parent: BasePDA id: CargoPDA name: logistics PDA # DeltaV - Logistics Department replacing Cargo - description: PDA for the guys that order the pizzas. # DeltaV - Logistics Department replacing Cargo + description: PDA for the guys that order the pizzas. components: - type: Pda id: CargoIDCard @@ -405,6 +413,12 @@ borderColor: "#e39751" - type: Icon state: pda-cargo + - type: CartridgeLoader # DeltaV + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - StockTradingCartridge # DeltaV - StockTrading - type: entity parent: BasePDA @@ -420,6 +434,13 @@ accentVColor: "#8900c9" - type: Icon state: pda-miner + - type: CartridgeLoader + uiKey: enum.PdaUiKey.Key + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - AstroNavCartridge - type: entity parent: BasePDA @@ -465,7 +486,7 @@ state: pda-library - type: entity - parent: BasePDA + parent: BaseJusticePDA # DeltaV - Added secwatch to justice. Was BaseSecurityPDA. id: LawyerPDA name: lawyer PDA description: For lawyers to poach dubious clients. @@ -473,24 +494,17 @@ - type: Pda id: LawyerIDCard state: pda-lawyer - penSlot: - startingItem: LuxuryPen - priority: -1 - whitelist: - tags: - - Write + # DeltaV - Moved to BaseJusticePDA + # penSlot: + # startingItem: LuxuryPen + # priority: -1 + # whitelist: + # tags: + # - Write - type: PdaBorderColor borderColor: "#6f6192" - type: Icon state: pda-lawyer - - type: CartridgeLoader # DeltaV - Crime Assist + SecWatch, increased diskSpace by 2 to fit them - diskSpace: 7 - preinstalled: - - CrewManifestCartridge - - NotekeeperCartridge - - NewsReaderCartridge - - CrimeAssistCartridge - - SecWatchCartridge - type: entity parent: LawyerPDA @@ -516,7 +530,7 @@ state: pda-janitor - type: entity - parent: BasePDA + parent: BaseSecurityPDA id: CaptainPDA name: captain PDA description: Surprisingly no different from your PDA. @@ -590,7 +604,7 @@ parent: BaseMedicalPDA id: CMOPDA name: chief medical officer PDA - description: Extraordinarily shiny and sterile. Has a built-in health analyzer. + description: Extraordinarily shiny and sterile. components: - type: Pda id: CMOIDCard @@ -606,7 +620,7 @@ parent: BaseMedicalPDA id: MedicalPDA name: medical PDA - description: Shiny and sterile. Has a built-in health analyzer. + description: Shiny and sterile. components: - type: Pda id: MedicalIDCard @@ -633,7 +647,7 @@ parent: BaseMedicalPDA id: ParamedicPDA name: paramedic PDA - description: Shiny and sterile. Has a built-in rapid health analyzer. + description: Shiny and sterile. components: - type: Pda id: ParamedicIDCard @@ -703,7 +717,7 @@ - GlimmerMonitorCartridge - type: entity - parent: BasePDA + parent: BaseSecurityPDA id: HoSPDA name: head of security PDA description: Whosoever bears this PDA is the law. @@ -716,17 +730,9 @@ accentHColor: "#447987" - type: Icon state: pda-hos - - type: CartridgeLoader # DeltaV - Crime Assist + SecWatch, increased diskSpace by 2 to fit them - diskSpace: 7 - preinstalled: - - CrewManifestCartridge - - NotekeeperCartridge - - NewsReaderCartridge - - CrimeAssistCartridge - - SecWatchCartridge - type: entity - parent: BasePDA + parent: BaseSecurityPDA id: WardenPDA name: warden PDA description: The OS appears to have been jailbroken. @@ -739,17 +745,9 @@ accentVColor: "#949137" - type: Icon state: pda-warden - - type: CartridgeLoader # DeltaV - Crime Assist + SecWatch, increased diskSpace by 2 to fit them - diskSpace: 7 - preinstalled: - - CrewManifestCartridge - - NotekeeperCartridge - - NewsReaderCartridge - - CrimeAssistCartridge - - SecWatchCartridge - type: entity - parent: BasePDA + parent: BaseSecurityPDA id: SecurityPDA name: security PDA description: Red to hide the stains of passenger blood. @@ -761,17 +759,9 @@ borderColor: "#A32D26" - type: Icon state: pda-security - - type: CartridgeLoader # DeltaV - Crime Assist + SecWatch, increased diskSpace by 2 to fit them - diskSpace: 7 - preinstalled: - - CrewManifestCartridge - - NotekeeperCartridge - - NewsReaderCartridge - - CrimeAssistCartridge - - SecWatchCartridge - type: entity - parent: BasePDA + parent: BaseSecurityPDA id: CentcomPDA name: CentComm PDA description: Light green sign of walking bureaucracy. @@ -809,6 +799,7 @@ - NotekeeperCartridge - NewsReaderCartridge - LogProbeCartridge + - StockTradingCartridge # Delta-V - type: entity parent: CentcomPDA @@ -912,7 +903,7 @@ - Cartridge - type: entity - parent: BasePDA + parent: BaseSecurityPDA id: ERTLeaderPDA name: ERT Leader PDA suffix: Leader @@ -963,14 +954,18 @@ id: ERTMedicPDA name: ERT Medic PDA suffix: Medic - description: Red for firepower, it's shiny and sterile. Has a built-in rapid health analyzer. + description: Red for firepower, it's shiny and sterile. components: - type: Pda id: ERTMedicIDCard - - type: HealthAnalyzer - scanDelay: 1 - scanningEndSound: - path: "/Audio/Items/Medical/healthscanner.ogg" + - type: CartridgeLoader + uiKey: enum.PdaUiKey.Key + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - MedTekCartridge + - SecWatchCartridge # DeltaV: SecWatch replaces wantedList - type: entity parent: ERTLeaderPDA @@ -1029,6 +1024,12 @@ borderColor: "#3f3f74" - type: Icon state: pda-reporter + - type: CartridgeLoader # DeltaV + preinstalled: + - CrewManifestCartridge + - NotekeeperCartridge + - NewsReaderCartridge + - StockTradingCartridge # DeltaV - StockTrading - type: entity parent: BasePDA @@ -1060,7 +1061,7 @@ state: pda-boxer - type: entity - parent: BasePDA + parent: BaseSecurityPDA id: DetectivePDA name: detective PDA description: Smells like rain... pouring down the rooftops... @@ -1072,20 +1073,12 @@ borderColor: "#774705" - type: Icon state: pda-detective - - type: CartridgeLoader # DeltaV - Crime Assist + SecWatch, increased diskSpace by 2 to fit them - diskSpace: 7 - preinstalled: - - CrewManifestCartridge - - NotekeeperCartridge - - NewsReaderCartridge - - CrimeAssistCartridge - - SecWatchCartridge - type: entity parent: BaseMedicalPDA id: BrigmedicPDA name: brigmedic PDA - description: I wonder whose pulse is on the screen? I hope he doesnt stop... PDA has a built-in health analyzer. + description: I wonder whose pulse is on the screen? I hope it doesn't stop... components: - type: Pda id: BrigmedicIDCard @@ -1163,7 +1156,7 @@ parent: BaseMedicalPDA id: SeniorPhysicianPDA name: senior physician PDA - description: Smells faintly like iron and chemicals. Has a built-in health analyzer. + description: Smells faintly like iron and chemicals. components: - type: Pda id: SeniorPhysicianIDCard @@ -1176,7 +1169,7 @@ state: pda-seniorphysician - type: entity - parent: BasePDA + parent: BaseSecurityPDA id: SeniorOfficerPDA name: senior officer PDA description: Beaten, battered and broken, but just barely useable. @@ -1189,14 +1182,6 @@ accentVColor: "#DFDFDF" - type: Icon state: pda-seniorofficer - - type: CartridgeLoader # DeltaV - Crime Assist + SecWatch, increased diskSpace by 2 to fit them - diskSpace: 7 - preinstalled: - - CrewManifestCartridge - - NotekeeperCartridge - - NewsReaderCartridge - - CrimeAssistCartridge - - SecWatchCartridge - type: entity parent: SyndiPDA @@ -1227,6 +1212,7 @@ uiKey: enum.PdaUiKey.Key preinstalled: - NotekeeperCartridge + - MedTekCartridge cartridgeSlot: priority: -1 name: Cartridge diff --git a/Resources/Prototypes/Entities/Objects/Devices/swapper.yml b/Resources/Prototypes/Entities/Objects/Devices/swapper.yml index 129c6cb63a3..0d46ed42caf 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/swapper.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/swapper.yml @@ -25,7 +25,7 @@ - type: Tag tags: - QuantumSpinInverter - - type: ReverseEngineering # delta + - type: ReverseEngineering # DeltaV difficulty: 4 recipes: - - DeviceQuantumSpinInverter + - DeviceQuantumSpinInverter diff --git a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_percussion.yml b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_percussion.yml index a6eaa128d60..ec0219377c8 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_percussion.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_percussion.yml @@ -54,6 +54,7 @@ instrumentList: "Aah": {52: 0} "Ooh": {53: 0} + # "Kweh": {4: 1} #Delta-V change, this stupid instrument fucks with literally every single midi known to mankind. Uncomment when whoever added this makes this not fuck with every midi. - Solaris - type: Sprite sprite: Objects/Fun/Instruments/microphone.rsi state: icon diff --git a/Resources/Prototypes/Entities/Objects/Fun/figurines.yml b/Resources/Prototypes/Entities/Objects/Fun/figurines.yml index 5de6022c837..907c8323425 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/figurines.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/figurines.yml @@ -17,8 +17,6 @@ - type: Tag tags: - Figurine - - type: StealTarget - stealGroup: Figurines - type: UseDelay delay: 10 - type: Speech diff --git a/Resources/Prototypes/Entities/Objects/Fun/pai.yml b/Resources/Prototypes/Entities/Objects/Fun/pai.yml index 4695f1c125d..b4af7f010e0 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/pai.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/pai.yml @@ -44,12 +44,8 @@ stopSearchVerbPopup: pai-system-stopped-searching - type: Examiner - type: IntrinsicRadioReceiver - - type: IntrinsicRadioTransmitter - channels: - - Binary - type: ActiveRadio channels: - - Binary - Common - type: DoAfter - type: Actions @@ -73,6 +69,10 @@ Searching: { state: pai-searching-overlay } On: { state: pai-on-overlay } - type: StationMap + - type: ChangeVoiceInContainer + whitelist: + components: + - SecretStash - type: entity parent: [ PersonalAI, BaseSyndicateContraband] diff --git a/Resources/Prototypes/Entities/Objects/Fun/spectral_locator.yml b/Resources/Prototypes/Entities/Objects/Fun/spectral_locator.yml new file mode 100644 index 00000000000..930b9c4926d --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Fun/spectral_locator.yml @@ -0,0 +1,58 @@ +- type: entity + id: SpectralLocatorUnpowered + parent: BaseItem + name: spectral locator + description: Appears to be a modified anomaly locator. Seems very old. + suffix: Unpowered + components: + - type: Sprite + sprite: Objects/Fun/spectrallocator.rsi + layers: + - state: icon + - state: screen + shader: unshaded + visible: false + map: ["enum.ToggleVisuals.Layer"] + - type: Appearance + - type: GenericVisualizer + visuals: + enum.ToggleVisuals.Toggled: + enum.ToggleVisuals.Layer: + True: { visible: true } + False: { visible: false } + - type: ItemToggle + - type: ProximityBeeper + - type: ProximityDetector + range: 12 + criteria: + components: + - Spectral # reacts to AI eye, intentional + - type: Beeper + isMuted: true + minBeepInterval: 0.25 + maxBeepInterval: 0.5 + beepSound: + path: "/Audio/Items/locator_beep.ogg" + params: + maxDistance: 1 + volume: -8 + +- type: entity + id: SpectralLocator + parent: [ SpectralLocatorUnpowered, PowerCellSlotSmallItem ] + suffix: Powered + components: + - type: PowerCellDraw + drawRate: 1 + useRate: 0 + - type: ToggleCellDraw + +- type: entity + id: SpectralLocatorEmpty + parent: SpectralLocator + suffix: Empty + components: + - type: ItemSlots + slots: + cell_slot: + name: power-cell-slot-component-slot-name-default diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index 476f3e6cdfa..73678920339 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -52,6 +52,24 @@ reagents: - ReagentId: Fiber Quantity: 10 + - type: ContainerContainer + containers: + stash: !type:ContainerSlot {} + - type: Speech + speechVerb: Default # for pais (In the secret stash) + - type: SecretStash + secretStashName: secret-stash-plushie + blacklist: + components: + - SecretStash # Prevents being able to insert plushies inside each other (infinite plush)! + - NukeDisk # Could confuse the nukies if they don't know that plushies have a stash. + tags: + - QuantumSpinInverter # It will cause issues with the grinder... + - FakeNukeDisk # So you can't tell if the nuke disk is real or fake depending on if it can be inserted or not. + - type: ToolOpenable + openToolQualityNeeded: Slicing + closeToolQualityNeeded: Slicing # Should probably be stitching or something if that gets added + name: secret-stash-plushie - type: entity parent: BasePlushie @@ -323,6 +341,25 @@ equippedPrefix: lizard slots: - HEAD + - type: Speech + speechVerb: Reptilian # for pais (In the secret stash) + +- type: entity + parent: PlushieLizard + id: PlushieRainbowLizard #Weh but gay + description: An adorable stuffed toy that resembles a lizardperson of every color. You just might trip while staring at it... + name: rainbow lizard plushie + components: + - type: PointLight + radius: 1.5 + energy: 2 + - type: RgbLightController + layers: [ 0 ] + - type: Clothing + clothingVisuals: + head: + - state: lizard-equipped-HELMET + shader: unshaded - type: entity parent: PlushieLizard @@ -666,6 +703,17 @@ equippedPrefix: mouse slots: - HEAD + # Begin DeltaV additions: make cats attack mouse toys to play with them + - type: Damageable + damageContainer: StructuralInorganic # not actually destructible, just lets it be attacked + - type: MobState + - type: MobThresholds + thresholds: + 0: Alive # always be considered alive + - type: NpcFactionMember + factions: + - Mouse + # End DeltaV additions - type: entity parent: BasePlushie diff --git a/Resources/Prototypes/Entities/Objects/Misc/books.yml b/Resources/Prototypes/Entities/Objects/Misc/books.yml index 5e05f2d644f..849b7af912b 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/books.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/books.yml @@ -60,6 +60,15 @@ openOnActivation: true guides: - SS14 + - type: MeleeWeapon # Should write it again since BaseGuidebook doesn't inherit BookBase + soundHit: + collection: Punch + damage: + types: + Blunt: 1 + - type: DamageOtherOnHit + damage: + types: - type: entity id: BookSpaceEncyclopedia diff --git a/Resources/Prototypes/Entities/Objects/Misc/business_card.yml b/Resources/Prototypes/Entities/Objects/Misc/business_card.yml new file mode 100644 index 00000000000..a04351693a3 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Misc/business_card.yml @@ -0,0 +1,26 @@ +- type: entity + id: SyndicateBusinessCard + name: syndicate business card + parent: Paper + description: A black card with the syndicate's logo. There's something written on the back. + components: + - type: Sprite + sprite: Objects/Misc/bureaucracy.rsi + layers: + - state: syndicate_card + - state: syndicate_card + map: ["enum.PaperVisualLayers.Writing"] + visible: false + - state: paper_stamp-generic + map: ["enum.PaperVisualLayers.Stamp"] + visible: false + - type: Paper + content: syndicate-business-card-base + - type: PaperVisuals + headerImagePath: "/Textures/Interface/Paper/paper_heading_syndicate_logo.svg.96dpi.png" + headerMargin: 0.0, 0.0, 0.0, 2.0 + backgroundImagePath: "/Textures/Interface/Paper/paper_background_black.svg.96dpi.png" + backgroundPatchMargin: 16.0, 16.0, 16.0, 16.0 + contentMargin: 4.0, 4.0, 4.0, 4.0 + maxWritableArea: 400.0, 256.0 + diff --git a/Resources/Prototypes/Entities/Objects/Misc/dat_fukken_disk.yml b/Resources/Prototypes/Entities/Objects/Misc/dat_fukken_disk.yml index 90e975b93ef..e1fc3fa5b6f 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/dat_fukken_disk.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/dat_fukken_disk.yml @@ -35,3 +35,6 @@ state: icon - type: StaticPrice price: 1 # it's worth even less than normal items. Perfection. + - type: Tag + tags: + - FakeNukeDisk diff --git a/Resources/Prototypes/Entities/Objects/Misc/dinkystar.yml b/Resources/Prototypes/Entities/Objects/Misc/dinkystar.yml deleted file mode 100644 index 7703cf2eea0..00000000000 --- a/Resources/Prototypes/Entities/Objects/Misc/dinkystar.yml +++ /dev/null @@ -1,19 +0,0 @@ -- type: entity - parent: ClothingNeckBase - id: Dinkystar - name: star sticker - description: A dinky lil star for only the hardest working security officers! It's not even sticky anymore. - components: - - type: Sprite - sprite: Clothing/Neck/Misc/dinkystar.rsi - state: icon - - type: Clothing - sprite: Clothing/Neck/Misc/dinkystar.rsi - clothingVisuals: - neck: - - state: star-equipped - - type: Item - size: Tiny - - type: Tag - tags: - - Trash diff --git a/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml b/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml index 0389db27ea0..b0c586fc753 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml @@ -62,6 +62,9 @@ - Rolling speedModifier: 0.5 # its very big, awkward to use - type: Appearance + - type: Tag + tags: + - FireExtinguisher - type: GenericVisualizer visuals: enum.ToggleVisuals.Toggled: @@ -94,7 +97,7 @@ name: pocket fire extinguisher parent: FireExtinguisher id: FireExtinguisherMini - description: A light and compact fibreglass-framed model fire extinguisher. It holds less water then its bigger brother. + description: A light and compact fibreglass-framed model fire extinguisher. It holds less water than its bigger brother. components: - type: Sprite sprite: Objects/Misc/fire_extinguisher_mini.rsi diff --git a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml index 73693a9e068..802b5c79b58 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml @@ -445,7 +445,7 @@ - state: default - state: idvisitor - type: IdCard - jobTitle: Visitor + jobTitle: job-title-visitor jobIcon: JobIconVisitor - type: PresetIdCard job: Visitor @@ -745,7 +745,7 @@ - state: default - state: idcluwne - type: IdCard - jobTitle: Cluwne + jobTitle: job-title-cluwne - type: Unremoveable - type: entity @@ -758,7 +758,7 @@ - state: default - state: idseniorengineer - type: IdCard # DeltaV - Change senior job titles - jobTitle: Senior Engineer + jobTitle: job-alt-title-senior-engineer jobIcon: JobIconSeniorEngineer - type: entity @@ -771,7 +771,7 @@ - state: default - state: idseniorresearcher - type: IdCard # DeltaV - Change senior job titles - jobTitle: Senior Researcher + jobTitle: job-alt-title-senior-researcher jobIcon: JobIconSeniorResearcher - type: entity @@ -784,7 +784,7 @@ - state: default - state: idseniorphysician - type: IdCard # DeltaV - Change senior job titles - jobTitle: Senior Physician + jobTitle: job-alt-title-senior-physician jobIcon: JobIconSeniorPhysician - type: entity @@ -797,7 +797,7 @@ - state: default - state: idseniorofficer - type: IdCard # DeltaV - Change senior job titles - jobTitle: Senior Officer + jobTitle: job-alt-title-senior-officer jobIcon: JobIconSeniorOfficer - type: entity @@ -817,7 +817,7 @@ - type: Item heldPrefix: green - type: IdCard - jobTitle: Universal + jobTitle: job-title-universal jobIcon: JobIconAdmin - type: Access groups: diff --git a/Resources/Prototypes/Entities/Objects/Misc/paper.yml b/Resources/Prototypes/Entities/Objects/Misc/paper.yml index d26bdf25c7c..5c3cd444962 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/paper.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/paper.yml @@ -28,16 +28,13 @@ - type: Tag tags: - Document - - Trash - Paper - type: Appearance - type: FaxableObject - type: PaperVisuals - type: Flammable fireSpread: true - canResistFire: false alwaysCombustible: true - canExtinguish: false # Mwahaha! Let the world burn because of one piece of paper! damage: types: Heat: 1 @@ -81,6 +78,11 @@ id: PaperScrap description: 'A crumpled up piece of white paper.' components: + - type: Tag + tags: + - Document + - Trash + - Paper - type: Sprite layers: - state: scrap @@ -178,6 +180,11 @@ visible: false - type: PaperLabelType paperType: Invoice + - type: Tag + tags: + - Document + - Trash + - Paper - type: PaperVisuals backgroundImagePath: "/Textures/Interface/Paper/paper_background_default.svg.96dpi.png" contentImagePath: "/Textures/Interface/Paper/paper_content_lined.svg.96dpi.png" @@ -207,6 +214,11 @@ visible: false - type: PaperLabelType paperType: Bounty + - type: Tag + tags: + - Document + - Trash + - Paper - type: PaperVisuals backgroundImagePath: "/Textures/Interface/Paper/paper_background_default.svg.96dpi.png" contentImagePath: "/Textures/Interface/Paper/paper_content_lined.svg.96dpi.png" diff --git a/Resources/Prototypes/Entities/Objects/Misc/pen.yml b/Resources/Prototypes/Entities/Objects/Misc/pen.yml index b0a466f8913..55117e63602 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/pen.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/pen.yml @@ -59,6 +59,7 @@ - type: entity id: BaseAdvancedPen parent: PenEmbeddable + abstract: true components: - type: Tag tags: diff --git a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml index 1e5f2573fda..90322689589 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml @@ -1286,6 +1286,22 @@ - type: Stack stackType: FloorTileBCircuit +- type: entity + name: red circuit floor + parent: FloorTileItemBase + id: FloorTileItemRCircuit + components: + - type: Sprite + state: rcircuit + - type: Item + heldPrefix: rcircuit + - type: FloorTile + outputs: + - Plating + - FloorRedCircuit + - type: Stack + stackType: FloorTileRCircuit + # Circuits stacks - type: entity @@ -1304,6 +1320,14 @@ - type: Stack count: 4 +- type: entity + parent: FloorTileItemRCircuit + id: FloorTileItemRCircuit4 + suffix: 4 + components: + - type: Stack + count: 4 + # Terrain - type: entity name: grass tile diff --git a/Resources/Prototypes/Entities/Objects/Power/lights.yml b/Resources/Prototypes/Entities/Objects/Power/lights.yml index 3bd8d3ddf6a..c0cc138cc21 100644 --- a/Resources/Prototypes/Entities/Objects/Power/lights.yml +++ b/Resources/Prototypes/Entities/Objects/Power/lights.yml @@ -129,6 +129,7 @@ - type: Tag tags: - LightBulb + - Trash - type: entity parent: BaseLightbulb @@ -147,6 +148,7 @@ - type: Tag tags: - LightBulb + - Trash - type: entity parent: LightBulb @@ -160,9 +162,6 @@ lightEnergy: 0.3 # old incandescents just arent as bright lightRadius: 6 lightSoftness: 1.1 - - type: Tag - tags: - - LightBulb - type: entity suffix: Broken @@ -190,6 +189,7 @@ - type: Tag tags: - LightBulb + - Trash - type: entity parent: BaseLightTube diff --git a/Resources/Prototypes/Entities/Objects/Power/powercells.yml b/Resources/Prototypes/Entities/Objects/Power/powercells.yml index 90f987fdc69..8156dc977c5 100644 --- a/Resources/Prototypes/Entities/Objects/Power/powercells.yml +++ b/Resources/Prototypes/Entities/Objects/Power/powercells.yml @@ -146,6 +146,10 @@ - type: Battery maxCharge: 1080 startingCharge: 1080 + - type: ReverseEngineering # DeltaV: Upgrade line of high -> hyper -> microreactor + difficulty: 3 + recipes: + - PowerCellHyper - type: entity id: PowerCellHighPrinted @@ -181,6 +185,10 @@ - type: Battery maxCharge: 1800 startingCharge: 1800 + - type: ReverseEngineering # DeltaV + difficulty: 4 + recipes: + - PowerCellMicroreactor - type: entity id: PowerCellHyperPrinted @@ -255,6 +263,10 @@ - type: BatterySelfRecharger autoRecharge: true autoRechargeRate: 40 + - type: ReverseEngineering # DeltaV + difficulty: 4 + recipes: + - PowerCellMicroreactor # Power cage (big heavy power cell for big devices) diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml index 727c75c8794..d678ef3c8fb 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml @@ -139,3 +139,7 @@ - Produce - Seed - type: Dumpable + - type: ReverseEngineering # DeltaV + difficulty: 2 + recipes: + - PlantBagOfHolding diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml index 99d39a82499..4c4e44c28cd 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mechs.yml @@ -167,6 +167,8 @@ - type: FootstepModifier footstepSoundCollection: collection: FootstepClown + params: + variation: 0.17 - type: Mech baseState: honker openState: honker-open @@ -288,6 +290,9 @@ - type: MovementSpeedModifier baseWalkSpeed: 2.25 baseSprintSpeed: 3.6 + - type: Access + tags: + - Maintenance # TOOD: buzz / chime actions # TODO: builtin flashlight diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml index 9b6da25eb7d..5b0c97dc837 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml @@ -68,6 +68,10 @@ components: - type: Sharp butcherDelayModifier: 1.5 # Butchering with a scalpel, regardless of the type, will take 50% longer + - type: Tool + qualities: + - Slicing + speedModifier: 0.66 # pretend the sixes go on forever :) - type: Utensil types: - Knife diff --git a/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml b/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml index ddf841924be..ff53218e222 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml @@ -21,10 +21,6 @@ - ScannersAndVessels - type: Item storedRotation: -90 - - type: ReverseEngineering # Nyano - difficulty: 2 - recipes: - - AnomalyScanner - type: entity id: AnomalyLocatorUnpowered diff --git a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml index 7f34935f40e..2846410943d 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Robotics/borg_modules.yml @@ -10,6 +10,8 @@ - type: Sprite sprite: Objects/Specific/Robotics/borgmodule.rsi - type: BorgModule + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: no-action } - type: StaticPrice price: 100 - type: Tag @@ -35,7 +37,7 @@ description: Select this module, enabling you to use the tools it provides. components: - type: InstantAction - itemIconStyle: BigItem + itemIconStyle: BigAction useDelay: 0.5 event: !type:BorgModuleActionSelectedEvent @@ -119,6 +121,8 @@ - CableHVStackLingering10 - Wirecutter - trayScanner + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: wire-module } - type: entity id: BorgModuleFireExtinguisher @@ -132,6 +136,8 @@ - type: ItemBorgModule items: - FireExtinguisher + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: extinguisher-module } - type: entity id: BorgModuleGPS @@ -147,6 +153,8 @@ - HandheldGPSBasic - HandHeldMassScannerBorg - HandheldStationMapUnpowered + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: gps-module } - type: entity id: BorgModuleRadiationDetection @@ -160,6 +168,8 @@ - type: ItemBorgModule items: - GeigerCounter + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: geiger-module } - type: entity id: BorgModuleTool @@ -178,6 +188,8 @@ - Wirecutter - Multitool - WelderIndustrial + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: tool-module } # cargo modules - type: entity @@ -192,6 +204,8 @@ - type: ItemBorgModule items: - AppraisalTool + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: appraisal-module } - type: entity id: BorgModuleMining @@ -210,6 +224,8 @@ - OreBag - Crowbar - RadioHandheld + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: mining-module } - type: entity id: BorgModuleGrapplingGun @@ -224,6 +240,8 @@ items: - WeaponGrapplingGun - HandheldGPSBasic + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: grappling-module } # engineering modules - type: entity @@ -237,12 +255,15 @@ - state: icon-tools-adv - type: ItemBorgModule items: - - Omnitool + - JawsOfLife + - PowerDrill + - Multitool - WelderExperimental - - NetworkConfigurator - RemoteSignaller - GasAnalyzer - GeigerCounter + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: adv-tools-module } - type: entity id: BorgModuleConstruction @@ -259,6 +280,8 @@ - SheetGlassLingering0 - PartRodMetalLingering0 - FloorTileItemSteelLingering0 + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: construction-module } - type: entity id: BorgModuleRCD @@ -272,6 +295,8 @@ - type: ItemBorgModule items: - RCDRecharging + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: rcd-module } # janitorial modules (this gets its own unique things because janis are epic) - type: entity @@ -288,6 +313,8 @@ - LightReplacer - Crowbar - Screwdriver + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: light-replacer-module } - type: entity id: BorgModuleCleaning @@ -303,6 +330,8 @@ - MopItem - Bucket - TrashBag + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: cleaning-module } - type: entity id: BorgModuleAdvancedCleaning @@ -320,6 +349,8 @@ - SprayBottleSpaceCleaner - Dropper - TrashBag + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: adv-cleaning-module } # medical modules - type: entity @@ -335,6 +366,8 @@ items: - HandheldHealthAnalyzerUnpowered - ClothingNeckStethoscope + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: diagnosis-module } - type: entity id: BorgModuleTreatment @@ -353,6 +386,8 @@ - Gauze10Lingering - Bloodpack10Lingering - Syringe + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: treatment-module } - type: entity id: BorgModuleDefibrillator @@ -366,6 +401,8 @@ - type: ItemBorgModule items: - DefibrillatorOneHandedUnpowered + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: defib-module } - type: entity id: BorgModuleAdvancedTreatment @@ -383,6 +420,8 @@ - Beaker - BorgDropper - BorgHypo + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: adv-diagnosis-module } # science modules # todo: if science ever gets their own custom robot, add more "sci" modules. @@ -398,6 +437,8 @@ - type: ItemBorgModule items: - NodeScanner + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: node-scanner-module } - type: entity id: BorgModuleAnomaly @@ -415,6 +456,8 @@ - AnomalyLocatorWideUnpowered - RemoteSignaller - Multitool + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: anomaly-module } # service modules - type: entity @@ -434,6 +477,8 @@ - Lighter - DrinkShaker - BorgDropper + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: service-module } - type: entity id: BorgModuleMusique @@ -449,6 +494,8 @@ - SynthesizerInstrument - ElectricGuitarInstrument - SaxophoneInstrument + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: musical-module } - type: entity id: BorgModuleGardening @@ -465,6 +512,8 @@ - HydroponicsToolSpade - HydroponicsToolClippers - Bucket + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: gardening-module } - type: entity id: BorgModuleHarvesting @@ -480,6 +529,8 @@ - HydroponicsToolScythe - HydroponicsToolHatchet - PlantBag + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: harvesting-module } - type: entity id: BorgModuleClowning @@ -495,6 +546,8 @@ - BikeHorn - ClownRecorder - BikeHornInstrument + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: clowning-module } #syndicate modules - type: entity @@ -510,6 +563,8 @@ items: - WeaponPistolEchis - EnergyDaggerLoud + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: syndicate-weapon-module } - type: entity id: BorgModuleOperative @@ -527,6 +582,8 @@ - Emag - Doorjack #Delta-V add doorjack, emag no longer opens doors. - PinpointerSyndicateNuclear + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: syndicate-operative-module } - type: entity id: BorgModuleEsword @@ -542,6 +599,8 @@ items: - CyborgEnergySwordDouble - PinpointerSyndicateNuclear + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: syndicate-esword-module } - type: entity id: BorgModuleL6C @@ -557,6 +616,8 @@ items: - WeaponLightMachineGunL6C - PinpointerSyndicateNuclear + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: syndicate-l6c-module } - type: entity id: BorgModuleMartyr @@ -571,3 +632,8 @@ - type: ItemBorgModule items: - SelfDestructSeq + - type: BorgModuleIcon + icon: { sprite: Interface/Actions/actions_borg.rsi, state: syndicate-martyr-module } + - type: Construction # DeltaV: construction for adding explosive payload to the dud version + graph: BorgModuleMartyr + node: live diff --git a/Resources/Prototypes/Entities/Objects/Specific/Robotics/mmi.yml b/Resources/Prototypes/Entities/Objects/Specific/Robotics/mmi.yml index 5155e70cca4..33eabbb60b5 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Robotics/mmi.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Robotics/mmi.yml @@ -49,6 +49,10 @@ guides: - Cyborgs - Robotics + - type: ChangeVoiceInContainer + whitelist: + components: + - SecretStash - type: entity parent: MMI @@ -127,3 +131,7 @@ guides: - Cyborgs - Robotics + - type: ChangeVoiceInContainer + whitelist: + components: + - SecretStash diff --git a/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag.yml b/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag.yml index a36bfaf676b..e73f9d7ba47 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag.yml @@ -26,3 +26,7 @@ - ArtifactFragment - Ore - type: Dumpable + - type: ReverseEngineering # DeltaV + difficulty: 2 + recipes: + - OreBagOfHolding diff --git a/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/node_scanner.yml b/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/node_scanner.yml index 673afc91ba1..7406555fe32 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/node_scanner.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/node_scanner.yml @@ -12,10 +12,6 @@ - type: NodeScanner - type: UseDelay delay: 3 - - type: ReverseEngineering # Nyano - difficulty: 2 - recipes: - - NodeScanner - type: GuideHelp guides: - ArtifactReports diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml index 72b54e286cc..4c31d700905 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml @@ -243,10 +243,6 @@ beaker: maxVol: 60 canReact: false - - type: ReverseEngineering # delta - difficulty: 2 - recipes: - - CryostasisBeaker - type: entity name: bluespace beaker @@ -267,7 +263,7 @@ beaker: maxVol: 1000 canReact: true - - type: ReverseEngineering # delta + - type: ReverseEngineering # DeltaV difficulty: 4 recipes: - BluespaceBeaker @@ -395,6 +391,66 @@ - Syringe - Trash +- type: entity + name: mini syringe + parent: Syringe + description: A regular syringe, reshaped to fit inside of a gun. + id: MiniSyringe + components: + - type: Sprite + sprite: Objects/Specific/Chemistry/syringe.rsi + layers: + - state: minisyringe1 + map: ["enum.SolutionContainerLayers.Fill"] + visible: false + - state: syringeproj + - type: SolutionContainerVisuals + maxFillLevels: 3 + fillBaseName: minisyringe + inHandsMaxFillLevels: 3 + inHandsFillBaseName: -fill- + - type: EmbeddableProjectile + offset: "-0.1,0" + minimumSpeed: 3 + removalTime: 0.25 + embedOnThrow: false + - type: SolutionInjectWhileEmbedded + transferAmount: 1 + solution: injector + updateInterval: 2 + - type: SolutionInjectOnEmbed + transferAmount: 2 + solution: injector + - type: Fixtures + fixtures: + fix1: + shape: !type:PhysShapeCircle + radius: 0.2 + density: 5 + mask: + - ItemMask + restitution: 0.3 + friction: 0.2 + projectile: + shape: + !type:PhysShapeAabb + bounds: "-0.1,-0.3,0.1,0.3" + hard: false + mask: + - Impassable + - BulletImpassable + - type: Projectile + deleteOnCollide: false + onlyCollideWhenShot: true + damage: + types: + Piercing: 5 + - type: Tag + tags: + - Syringe + - Trash + - SyringeGunAmmo + - type: entity parent: BaseSyringe id: PrefilledSyringe @@ -432,7 +488,7 @@ tags: - Syringe - Trash - - type: ReverseEngineering # delta + - type: ReverseEngineering # DeltaV difficulty: 4 recipes: - SyringeBluespace @@ -467,10 +523,6 @@ tags: - Syringe - Trash - - type: ReverseEngineering # delta - difficulty: 2 - recipes: - - SyringeCryostasis - type: entity @@ -536,9 +588,9 @@ tags: - PillCanister - type: Storage - whitelist: # DV - Remove the ability to store anything other than pills in pill canisters - tags: - - Pill + whitelist: # DeltaV - Remove the ability to store anything other than pills in pill canisters + tags: + - Pill grid: - 0,0,4,1 quickInsert: true diff --git a/Resources/Prototypes/Entities/Objects/Tools/access_configurator.yml b/Resources/Prototypes/Entities/Objects/Tools/access_configurator.yml index 7455bc81b7b..8a06868ee03 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/access_configurator.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/access_configurator.yml @@ -55,6 +55,7 @@ - Reporter #Delta V: Add Reporter Access - Research - ResearchDirector + - Robotics # DeltaV: Robotics access - Salvage - Security - Service diff --git a/Resources/Prototypes/Entities/Objects/Tools/handheld_mass_scanner.yml b/Resources/Prototypes/Entities/Objects/Tools/handheld_mass_scanner.yml index 3b2bf48b627..e10c5b84af5 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/handheld_mass_scanner.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/handheld_mass_scanner.yml @@ -37,10 +37,6 @@ type: RadarConsoleBoundUserInterface - type: StaticPrice price: 150 - - type: ReverseEngineering # delta - difficulty: 2 - recipes: - - HandHeldMassScanner - type: entity id: HandHeldMassScannerEmpty diff --git a/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml b/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml index 4daeec014cc..0364011361c 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml @@ -59,10 +59,10 @@ price: 100 # - type: DynamicPrice # price: 100 - - type: ReverseEngineering # Nyano + - type: ReverseEngineering # DeltaV: all jetpacks can RE to void jetpacks, the best kind which can't be bought difficulty: 3 recipes: - - JetpackBlue + - JetpackVoid - type: entity id: ActionToggleJetpack @@ -205,10 +205,6 @@ outputPressure: 42.6 air: volume: 1.5 - - type: ReverseEngineering # Nyano - difficulty: 2 - recipes: - - JetpackMini # Filled mini - type: entity @@ -277,10 +273,6 @@ - Back - suitStorage - Belt - - type: ReverseEngineering # DeltaV - make void jetpack RE'able - difficulty: 4 - recipes: - - JetpackVoid # Filled void - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Tools/tools.yml b/Resources/Prototypes/Entities/Objects/Tools/tools.yml index 9d472a1e1d4..d0f2d2d7084 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/tools.yml @@ -273,10 +273,6 @@ Plastic: 100 # - type: DynamicPrice # price: 100 - - type: ReverseEngineering # Nyano - difficulty: 2 - recipes: - - PowerDrill - type: StaticPrice price: 100 - type: MeleeWeapon @@ -526,3 +522,6 @@ - type: Tag tags: - RollingPin + - type: Construction + graph: WoodenRollingPin + node: rollingpin diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml index 772dd15ab80..cf331c5519d 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml @@ -54,10 +54,10 @@ beepSound: /Audio/Machines/Nuke/general_beep.ogg startOnStick: true canToggleStartOnStick: true - - type: TriggerOnSignal + - type: TriggerOnSignal # DeltaV: use old behaviour instead of TimerStartOnSignal - type: DeviceLinkSink ports: - - Trigger + - Trigger # DeltaV: replace Timer with Trigger for TriggerOnSignal - type: Explosive # Powerful explosion in a very small radius. Doesn't break underplating. explosionType: DemolitionCharge totalIntensity: 60 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/antimateriel.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/antimateriel.yml index 28157ef3450..8fe03f3c6e1 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/antimateriel.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/antimateriel.yml @@ -20,7 +20,7 @@ sprite: Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi - type: MagazineVisuals magState: mag - steps: 2 + steps: 4 zeroVisible: false - type: Appearance @@ -41,7 +41,7 @@ map: ["enum.GunVisualLayers.Mag"] - type: MagazineVisuals magState: magb - steps: 2 + steps: 4 zeroVisible: false - type: Appearance diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.yml index 98ad35b70d2..3af2b7affbb 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.yml @@ -20,7 +20,7 @@ sprite: Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi - type: MagazineVisuals magState: mag - steps: 2 + steps: 4 zeroVisible: false - type: Appearance @@ -41,7 +41,7 @@ map: ["enum.GunVisualLayers.Mag"] - type: MagazineVisuals magState: mag10 - steps: 2 + steps: 4 zeroVisible: false - type: Appearance @@ -61,7 +61,7 @@ map: ["enum.GunVisualLayers.Mag"] - type: MagazineVisuals magState: magb - steps: 2 + steps: 4 zeroVisible: false - type: Appearance diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml index d5fb4360a82..bcd56c1d64a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.yml @@ -20,7 +20,7 @@ sprite: Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi - type: MagazineVisuals magState: mag - steps: 2 + steps: 4 zeroVisible: false - type: Appearance @@ -41,7 +41,7 @@ map: ["enum.GunVisualLayers.Mag"] - type: MagazineVisuals magState: magb - steps: 2 + steps: 4 zeroVisible: false - type: Appearance diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml index 018d812e3f5..6ccf0a1e2a2 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml @@ -19,7 +19,7 @@ sprite: Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi - type: MagazineVisuals magState: mag - steps: 2 + steps: 4 zeroVisible: false - type: Appearance diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml index fbd20446906..e081d574d7a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml @@ -20,7 +20,7 @@ sprite: Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi - type: MagazineVisuals magState: mag - steps: 2 + steps: 3 zeroVisible: false - type: Appearance diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml index 7a5f5d27ca6..98e063e297f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml @@ -19,7 +19,7 @@ sprite: Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi - type: MagazineVisuals magState: mag - steps: 2 + steps: 4 zeroVisible: false - type: Appearance @@ -40,7 +40,7 @@ map: ["enum.GunVisualLayers.Mag"] - type: MagazineVisuals magState: magb - steps: 2 + steps: 4 zeroVisible: false - type: Appearance 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 d58c2f0dd90..d6269efcc0d 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -382,7 +382,7 @@ - type: entity name: x-ray cannon - parent: [BaseWeaponBattery, BaseGunWieldable] + parent: [BaseWeaponBattery, BaseGunWieldable, BaseSecurityContraband] id: WeaponXrayCannon description: An experimental weapon that uses concentrated x-ray energy against its target. components: @@ -652,7 +652,7 @@ - type: Clothing sprite: Objects/Weapons/Guns/Revolvers/chimp.rsi - type: Gun - projectileSpeed: 4 + projectileSpeed: 10 fireRate: 1.5 soundGunshot: path: /Audio/Weapons/Guns/Gunshots/taser2.ogg @@ -725,7 +725,7 @@ - type: entity name: energy shotgun - parent: [BaseWeaponBattery, BaseGunWieldable] + parent: [BaseWeaponBattery, BaseGunWieldable, BaseGrandTheftContraband] id: WeaponEnergyShotgun description: A one-of-a-kind prototype energy weapon that uses various shotgun configurations. It offers the possibility of both lethal and non-lethal shots, making it a versatile weapon. components: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml index 1a1514f48cf..a415927cc56 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml @@ -8,11 +8,14 @@ - type: Sprite - type: Item size: Huge + shape: + - 0,0,4,3 - type: Clothing sprite: Objects/Weapons/Guns/LMGs/l6.rsi quickEquip: false slots: - Back + - suitStorage - type: Wieldable unwieldOnUse: false - type: GunWieldBonus diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml index 1d18c2b0500..5b1675fb196 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml @@ -103,6 +103,44 @@ containers: storagebase: !type:Container ents: [] + - type: PacifismAllowedGun # DeltaV - Allow pacifist to use the pie cannon. + +- type: entity + name: syringe gun + parent: BaseStorageItem + id: LauncherSyringe + description: Load full of poisoned syringes for optimal fun. + components: + - type: Sprite + sprite: Objects/Weapons/Guns/Cannons/syringe_gun.rsi + layers: + - state: syringe_gun + - type: Storage + maxItemSize: Normal + grid: + - 0,0,2,0 + whitelist: + tags: + - SyringeGunAmmo + - type: Gun + fireRate: 1 + selectedMode: SemiAuto + availableModes: + - SemiAuto + - FullAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/syringe_gun.ogg + soundEmpty: + path: /Audio/Weapons/Guns/Empty/empty.ogg + clumsyProof: true + - type: ContainerAmmoProvider + container: storagebase + - type: Item + size: Normal + - type: ContainerContainer + containers: + storagebase: !type:Container + ents: [] # shoots bullets instead of throwing them, no other changes - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/advanced_truncheon.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/advanced_truncheon.yml new file mode 100644 index 00000000000..27402e01864 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/advanced_truncheon.yml @@ -0,0 +1,33 @@ +- type: entity + parent: BaseItem + id: AdvancedTruncheon + name: Advanced Truncheon + description: If all else fails, BONK! + components: + - type: Sprite + sprite: DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi + state: icon + - type: Item + size: Normal + - type: MeleeWeapon + attackRate: 0.75 + range: 1.75 + damage: + types: + Blunt: 16 + soundHit: + path: /Audio/Nyanotrasen/Weapons/club.ogg + bluntStaminaDamageFactor: 1.60 # 25.6 stamina damage +# - type: MeleeStaminaCost +# swing: 10 +# wieldCoefficient: 0.35 #if wielded you will only consume 3.5 stam its a weapon after all + - type: Wieldable + - type: IncreaseDamageOnWield + damage: + types: + Blunt: 14 + - type: Clothing + sprite: DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi + quickEquip: false + slots: + - back diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml index 4f874341fc5..23506610b32 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml @@ -65,7 +65,7 @@ - type: ReverseEngineering # DeltaV difficulty: 2 recipes: - - MiningDrill + - MiningDrillDiamond - type: entity name: diamond tipped mining drill @@ -88,10 +88,6 @@ Brute: 6 types: Structural: 30 - - type: ReverseEngineering # DeltaV - difficulty: 3 - recipes: - - MiningDrillDiamond - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/clusterbang.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/clusterbang.yml index b4f540ae53d..b041349d26e 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/clusterbang.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/clusterbang.yml @@ -116,7 +116,7 @@ cluster-payload: !type:Container - type: entity - parent: [GrenadeBase, BaseSyndicateContraband] + parent: [GrenadeBase, BaseSecurityContraband] id: GrenadeStinger name: stinger grenade description: Nothing to see here, please disperse. diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml index 3de77897c41..a4c70262439 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml @@ -109,6 +109,22 @@ components: - type: Sprite sprite: Objects/Weapons/Grenades/syndgrenade.rsi + - type: ExplosionResistance + damageCoefficient: 0.1 + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 10 + behaviors: + - !type:TimerStartBehavior + - trigger: + !type:DamageTrigger + damage: 45 + behaviors: + - !type:TriggerBehavior + - !type:DoActsBehavior + acts: ["Destruction"] - type: OnUseTimerTrigger delay: 5 - type: ExplodeOnTrigger diff --git a/Resources/Prototypes/Entities/Stations/nanotrasen.yml b/Resources/Prototypes/Entities/Stations/nanotrasen.yml index 1619657cc28..5feeaa1b87f 100644 --- a/Resources/Prototypes/Entities/Stations/nanotrasen.yml +++ b/Resources/Prototypes/Entities/Stations/nanotrasen.yml @@ -26,6 +26,7 @@ - BaseStationAllEventsEligible - BaseStationNanotrasen - BaseStationMail # Nyano component, required for station mail to function + - BaseStationStockMarket # DeltaV categories: [ HideSpawnMenu ] components: - type: Transform diff --git a/Resources/Prototypes/Entities/Structures/Decoration/curtains.yml b/Resources/Prototypes/Entities/Structures/Decoration/curtains.yml index 1d5069c7da8..fc7fe23bb87 100644 --- a/Resources/Prototypes/Entities/Structures/Decoration/curtains.yml +++ b/Resources/Prototypes/Entities/Structures/Decoration/curtains.yml @@ -49,7 +49,7 @@ spawn: MaterialCloth1: min: 1 - max: 2 + max: 1 - type: WallMount arc: 360 diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml index 2a4b0fcf48a..5f9c7bac012 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/access.yml @@ -65,7 +65,7 @@ board: [ DoorElectronicsBar ] - type: entity - parent: AirlockServiceLocked + parent: AirlockHydroponics id: AirlockHydroponicsLocked suffix: Hydroponics, Locked components: @@ -532,7 +532,7 @@ board: [ DoorElectronicsJanitor ] - type: entity - parent: AirlockServiceGlassLocked + parent: AirlockHydroponicsGlass id: AirlockHydroGlassLocked suffix: Hydroponics, Locked components: diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/airlocks.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/airlocks.yml index efacee38bd7..168720eaef3 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/airlocks.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/airlocks.yml @@ -40,6 +40,16 @@ - type: Wires layoutId: AirlockCargo +- type: entity + parent: Airlock + id: AirlockHydroponics + suffix: Hydroponics + components: + - type: Sprite + sprite: DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi # DeltaV - Resprite Doors + - type: Wires + layoutId: AirlockService + - type: entity parent: Airlock id: AirlockMedical @@ -64,6 +74,9 @@ parent: AirlockMedical id: AirlockChemistry suffix: Chemistry + components: + - type: Sprite + sprite: DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi # DeltaV - Reprite Doors - type: entity parent: Airlock @@ -194,6 +207,16 @@ - type: Wires layoutId: AirlockCargo +- type: entity + parent: AirlockGlass + id: AirlockHydroponicsGlass + suffix: Hydroponics + components: + - type: Sprite + sprite: DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi # DeltaV - Resprite Doors + - type: Wires + layoutId: AirlockService + - type: entity parent: AirlockGlass id: AirlockMedicalGlass @@ -210,6 +233,10 @@ parent: AirlockMedicalGlass id: AirlockChemistryGlass suffix: Chemistry + components: + - type: Sprite + sprite: DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi # DeltaV - Resprite Doors + - type: entity parent: AirlockMedicalGlass diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/assembly.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/assembly.yml index 775b6182dd8..4a9c4472efa 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/assembly.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/assembly.yml @@ -138,6 +138,25 @@ sprite: DeltaV/Structures/Doors/Airlocks/Standard/freezer.rsi #Delta V - Resprite Doors state: "assembly" +#Hydroponics +- type: entity + parent: AirlockAssembly + id: AirlockAssemblyHydroponics + suffix: Hydroponics + components: + - type: Sprite + sprite: DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi #Delta V - Resprite Doors + state: "assembly" + +- type: entity + parent: AirlockAssembly + id: AirlockAssemblyHydroponicsGlass + suffix: Hydroponics, Glass + components: + - type: Sprite + sprite: DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi #Delta V - Resprite Doors + state: "assembly" + #Maintenance - type: entity parent: AirlockAssembly diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml index bee1882cec2..dd888e2878d 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/base_structureairlocks.yml @@ -144,7 +144,7 @@ key: walls mode: NoSprite - type: PaintableAirlock - group: Standard + group: StandardDeltaV # DeltaV department: Civilian - type: StaticPrice price: 150 @@ -201,7 +201,7 @@ graph: Airlock node: glassAirlock - type: PaintableAirlock - group: Glass + group: GlassDeltaV # DeltaV - type: RadiationBlocker resistance: 2 - type: Tag diff --git a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml index bbff3cb43ec..19a7894471a 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml @@ -88,6 +88,12 @@ - type: Appearance - type: WiresVisuals - type: WiresPanel + # DeltaV modifications - Revert fire-fighting door remote removal. + - type: Wires + boardName: wires-board-name-firelock + layoutId: FireLock + alwaysRandomize: true + # DeltaV - End of modifications. - type: UserInterface interfaces: enum.WiresUiKey.Key: @@ -105,6 +111,7 @@ arc: 360 - type: StaticPrice price: 150 + - type: DoorBolt # DeltaV - Revert fire-fighting door remote removal. - type: AccessReader access: [ [ "Engineering" ] ] - type: PryUnpowered @@ -115,6 +122,7 @@ color: Red enabled: false castShadows: false + - type: NavMapDoor - type: entity id: Firelock diff --git a/Resources/Prototypes/Entities/Structures/Doors/airlock_groups.yml b/Resources/Prototypes/Entities/Structures/Doors/airlock_groups.yml index 4520d6f28f4..cd9adfdf8a0 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/airlock_groups.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/airlock_groups.yml @@ -2,35 +2,37 @@ id: Standard iconPriority: 100 stylePaths: - atmospherics: DeltaV/Structures/Doors/Airlocks/Standard/atmospherics.rsi # Delta V - Door resprite - basic: DeltaV/Structures/Doors/Airlocks/Standard/basic.rsi # Delta V - Door resprite - cargo: DeltaV/Structures/Doors/Airlocks/Standard/cargo.rsi # Delta V - Door resprite - command: DeltaV/Structures/Doors/Airlocks/Standard/command.rsi # Delta V - Door resprite - engineering: DeltaV/Structures/Doors/Airlocks/Standard/engineering.rsi # Delta V - Door resprite - freezer: DeltaV/Structures/Doors/Airlocks/Standard/freezer.rsi # Delta V - Door resprite - maintenance: DeltaV/Structures/Doors/Airlocks/Standard/maint.rsi # Delta V - Door resprite - medical: DeltaV/Structures/Doors/Airlocks/Standard/medical.rsi # Delta V - Door resprite - science: DeltaV/Structures/Doors/Airlocks/Standard/science.rsi # Delta V - Door resprite - security: DeltaV/Structures/Doors/Airlocks/Standard/security.rsi # Delta V - Door resprite - virology: DeltaV/Structures/Doors/Airlocks/Standard/virology.rsi # Delta V - Door resprite - justice: DeltaV/Structures/Doors/Airlocks/Standard/justice.rsi # Delta V - Add Justice Dept + atmospherics: Structures/Doors/Airlocks/Standard/atmospherics.rsi + basic: Structures/Doors/Airlocks/Standard/basic.rsi + cargo: Structures/Doors/Airlocks/Standard/cargo.rsi + chemistry: Structures/Doors/Airlocks/Standard/chemistry.rsi + command: Structures/Doors/Airlocks/Standard/command.rsi + engineering: Structures/Doors/Airlocks/Standard/engineering.rsi + freezer: Structures/Doors/Airlocks/Standard/freezer.rsi + hydroponics: Structures/Doors/Airlocks/Standard/hydroponics.rsi + maintenance: Structures/Doors/Airlocks/Standard/maint.rsi + medical: Structures/Doors/Airlocks/Standard/medical.rsi + science: Structures/Doors/Airlocks/Standard/science.rsi + security: Structures/Doors/Airlocks/Standard/security.rsi + virology: Structures/Doors/Airlocks/Standard/virology.rsi - type: AirlockGroup id: Glass iconPriority: 90 stylePaths: - atmospherics: DeltaV/Structures/Doors/Airlocks/Glass/atmospherics.rsi # Delta V - Door resprite - basic: DeltaV/Structures/Doors/Airlocks/Glass/basic.rsi # Delta V - Door resprite - command: DeltaV/Structures/Doors/Airlocks/Glass/command.rsi # Delta V - Door resprite - science: DeltaV/Structures/Doors/Airlocks/Glass/science.rsi # Delta V - Door resprite - cargo: DeltaV/Structures/Doors/Airlocks/Glass/cargo.rsi # Delta V - Door resprite - engineering: DeltaV/Structures/Doors/Airlocks/Glass/engineering.rsi # Delta V - Door resprite - glass: DeltaV/Structures/Doors/Airlocks/Glass/glass.rsi # Delta V - Door resprite - maintenance: DeltaV/Structures/Doors/Airlocks/Glass/maint.rsi # Delta V - Door resprite - medical: DeltaV/Structures/Doors/Airlocks/Glass/medical.rsi # Delta V - Door resprite - security: DeltaV/Structures/Doors/Airlocks/Glass/security.rsi # Delta V - Door resprite - virology: DeltaV/Structures/Doors/Airlocks/Glass/virology.rsi # Delta V - Door resprite - justice: DeltaV/Structures/Doors/Airlocks/Glass/justice.rsi # Delta V - Add Justice Dept + atmospherics: Structures/Doors/Airlocks/Glass/atmospherics.rsi + basic: Structures/Doors/Airlocks/Glass/basic.rsi + cargo: Structures/Doors/Airlocks/Glass/cargo.rsi + command: Structures/Doors/Airlocks/Glass/command.rsi + chemistry: Structures/Doors/Airlocks/Glass/chemistry.rsi + science: Structures/Doors/Airlocks/Glass/science.rsi + engineering: Structures/Doors/Airlocks/Glass/engineering.rsi + glass: Structures/Doors/Airlocks/Glass/glass.rsi + hydroponics: Structures/Doors/Airlocks/Glass/hydroponics.rsi + maintenance: Structures/Doors/Airlocks/Glass/maint.rsi + medical: Structures/Doors/Airlocks/Glass/medical.rsi + security: Structures/Doors/Airlocks/Glass/security.rsi + virology: Structures/Doors/Airlocks/Glass/virology.rsi - type: AirlockGroup id: Windoor @@ -68,11 +70,14 @@ departments: atmospherics: Engineering basic: Civilian - cargo: Logistics + cargo: Logistics # DeltaV: Logistics department + chemistry: Medical command: Command engineering: Engineering freezer: Civilian glass: Civilian + hydroponics: Civilian + justice: Justice # DeltaV: Justice department maintenance: Civilian medical: Medical science: Epistemics diff --git a/Resources/Prototypes/Entities/Structures/Furniture/altar.yml b/Resources/Prototypes/Entities/Structures/Furniture/altar.yml index c22f72d37de..7f21707670d 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/altar.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/altar.yml @@ -25,8 +25,17 @@ - TableLayer - type: Sprite snapCardinals: true - - type: Climbable + #- type: Climbable # DeltaV: remove climbable since it conflicts with strap - type: Clickable + # Begin DeltaV additions: Sacrificing psionics + - type: SacrificialAltar + - type: Strap + position: Down + rotation: -90 + - type: GuideHelp + guides: + - AltarsGolemancy + # End DeltaV additions - type: entity id: AltarNanotrasen diff --git a/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml b/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml index 61edb22d220..e47a63ab730 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/potted_plants.yml @@ -25,6 +25,8 @@ offset: "0.0,0.3" sprite: Structures/Furniture/potted_plants.rsi noRot: true + - type: Speech + speechVerb: Plant # for pais (In the secret stash) - type: SecretStash tryInsertItemSound: /Audio/Effects/plant_rustle.ogg tryRemoveItemSound: /Audio/Effects/plant_rustle.ogg diff --git a/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml b/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml index 965c8261cce..9f3fbd7c455 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml @@ -54,7 +54,6 @@ position: Down rotation: -90 buckleOffset: "0,0.15" - unbuckleOffset: "0,0.15" buckleOnInteractHand: False - type: Appearance - type: GenericVisualizer diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml index 7c22e70ef95..dda0b40fff7 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml @@ -72,6 +72,59 @@ rewardMinAmount: 0 rewardMaxAmount: 0 possibleRewards: + - Basketball + - BalloonNT + - BalloonCorgi + - BoxDonkSoftBox + - BoxCartridgeCap + - BeachBall + - CandyBucket + - CrayonBox + - ClothingHeadHatCowboyRed + - FoamCrossbow + - FoamBlade + - FoamCutlass + - Football + - GlowstickBase #green + - GlowstickBlue + - GlowstickYellow + - GlowstickPurple + - GlowstickRed + - HarmonicaInstrument + - OcarinaInstrument + - RecorderInstrument + - GunpetInstrument + - BirdToyInstrument + - MysteryFigureBox + - PlushieHampter + - PlushieLizard + - PlushieRainbowLizard + - PlushieAtmosian + - PlushieSpaceLizard + - PlushieNuke + - PlushieCarp + - PlushieMagicarp + - PlushieHolocarp + - PlushieRainbowCarp + - PlushieRatvar + - PlushieNar + - PlushieSnake + - PlushieArachind + - PlushieMoth + - PlushieHampter + - PlushiePenguin + - PlushieHuman + - PlushieRouny + - PlushieBee + - PlushieSlime + - PlushieGhost + - PlushieDiona + - PlushieSharkBlue + - PlushieVox + - PlushieXeno + - PlasticBanana + - RevolverCapGun + - SnapPopBox - ToyMouse - ToyAi - ToyNuke @@ -91,46 +144,14 @@ - ToySeraph - ToyDurand - ToySkeleton - - FoamCrossbow - - RevolverCapGun - - PlushieHampter - - PlushieLizard - - PlushieAtmosian - - PlushieSpaceLizard - - PlushieNuke - - PlushieCarp - - PlushieMagicarp - - PlushieHolocarp - - PlushieRainbowCarp - - PlushieRatvar - - PlushieNar - - PlushieSnake - - PlushieArachind - - Basketball - - Football - - PlushieRouny - - PlushieBee - - PlushieSlime - - BalloonNT - - BalloonCorgi - ToySword - - CrayonBox - - BoxDonkSoftBox - - BoxCartridgeCap - - HarmonicaInstrument - - OcarinaInstrument - - RecorderInstrument - - GunpetInstrument - - BirdToyInstrument - - PlushieXeno - - BeachBall - - PlushieMoth - - PlushieHampter + - ToyAmongPequeno + - ToyRubberDuck + - ToyHammer - ToyRenault # DeltaV Toy, see Resources/Prototypes/DeltaV/Entities/Objects/Fun/toys.yml - ToySiobhan # DeltaV Toy, see Resources/Prototypes/DeltaV/Entities/Objects/Fun/toys.yml - - PlushiePenguin - - PlushieHuman - - ClothingHeadHatCowboyRed + - WeaponWaterPistol + - WhoopieCushion - Whistle - type: WiresPanel - type: Wires diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml index 204e06c8600..d79348bfa61 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml @@ -30,6 +30,8 @@ state: generic - map: ["computerLayerKeys"] state: generic_keys + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: Appearance - type: GenericVisualizer visuals: @@ -40,6 +42,10 @@ computerLayerKeys: True: { visible: true, shader: unshaded } False: { visible: true, shader: shaded } + enum.WiresVisuals.MaintenancePanelState: + enum.WiresVisualLayers.MaintenancePanel: + True: { visible: false } + False: { visible: true } - type: LitOnPowered - type: PointLight radius: 1.5 @@ -54,6 +60,11 @@ collection: Keyboard params: volume: -1 + variation: 0.10 + pitch: 1.10 # low pitch keyboard sounds feel kinda weird + blacklist: + tags: + - NoConsoleSound - type: ContainerContainer containers: board: !type:Container @@ -61,3 +72,26 @@ - type: LightningTarget priority: 1 - type: RequireProjectileTarget + - type: Electrified + enabled: false + usesApcPower: true + - type: WiresPanel + - type: WiresVisuals + - type: Wires + boardName: wires-board-name-computer + layoutId: Computer +# +# This is overwritten by children, so needs to be defined there +# - type: UserInterface +# interfaces: +# enum.WiresUiKey.Key: +# type: WiresBoundUserInterface + +- type: entity + parent: BaseComputer + id: BaseComputerAiAccess + components: + - type: StationAiWhitelist + - type: Wires + boardName: wires-board-name-computer + layoutId: ComputerAi diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml index a3c154ae062..f918eb6c304 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml @@ -1,10 +1,9 @@ - type: entity - parent: BaseComputer + parent: BaseComputerAiAccess id: ComputerAlert name: atmospheric alerts computer description: Used to access the station's atmospheric automated alert system. components: - - type: StationAiWhitelist - type: Computer board: AlertsComputerCircuitboard - type: Sprite @@ -17,6 +16,8 @@ state: alert-0 - map: ["computerLayerKeys"] state: atmos_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: GenericVisualizer visuals: enum.ComputerVisuals.Powered: @@ -25,7 +26,7 @@ False: { visible: false } computerLayerKeys: True: { visible: true, shader: unshaded } - False: { visible: true, shader: shaded } + False: { visible: true, shader: shaded } enum.AtmosAlertsComputerVisuals.ComputerLayerScreen: computerLayerScreen: 0: { state: alert-0 } @@ -33,6 +34,10 @@ 2: { state: alert-1 } 3: { state: alert-2 } 4: { state: alert-2 } + enum.WiresVisuals.MaintenancePanelState: + enum.WiresVisualLayers.MaintenancePanel: + True: { visible: false } + False: { visible: true } - type: AtmosAlertsComputer - type: ActivatableUI singleUser: true @@ -41,6 +46,8 @@ interfaces: enum.AtmosAlertsComputerUiKey.Key: type: AtmosAlertsComputerBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: entity parent: BaseComputer @@ -58,6 +65,8 @@ interfaces: enum.EmergencyConsoleUiKey.Key: type: EmergencyConsoleBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: PointLight radius: 1.5 energy: 1.6 @@ -79,6 +88,8 @@ interfaces: enum.ShuttleConsoleUiKey.Key: type: ShuttleConsoleBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: RadarConsole - type: WorldLoader radius: 256 @@ -121,6 +132,8 @@ state: shuttle - map: ["computerLayerKeys"] state: generic_keys + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: Computer board: ShuttleConsoleCircuitboard @@ -140,6 +153,8 @@ state: syndishuttle - map: ["computerLayerKeys"] state: syndie_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: Tag tags: - Syndicate @@ -170,6 +185,8 @@ state: shuttle - map: ["computerLayerKeys"] state: generic_keys + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: DroneConsole components: - type: CargoShuttle @@ -185,12 +202,11 @@ stealGroup: CargoShuttleConsoleCircuitboard - type: entity - parent: BaseComputer + parent: BaseComputerAiAccess id: ComputerIFF name: IFF computer description: Allows you to control the IFF characteristics of this vessel. components: - - type: StationAiWhitelist - type: IFFConsole - type: Sprite layers: @@ -203,12 +219,16 @@ state: helm - map: ["computerLayerKeys"] state: generic_keys + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: ActivatableUI key: enum.IFFConsoleUiKey.Key - type: UserInterface interfaces: enum.IFFConsoleUiKey.Key: type: IFFConsoleBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: Computer board: ComputerIFFCircuitboard @@ -229,16 +249,17 @@ interfaces: enum.IFFConsoleUiKey.Key: type: IFFConsoleBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: Computer board: ComputerIFFSyndicateCircuitboard - type: entity - parent: BaseComputer + parent: BaseComputerAiAccess id: ComputerPowerMonitoring name: power monitoring computer description: It monitors power levels across the station. components: - - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -249,6 +270,8 @@ state: power_monitor - map: ["computerLayerKeys"] state: power_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: PointLight radius: 1.5 energy: 1.6 @@ -270,14 +293,15 @@ interfaces: enum.PowerMonitoringConsoleUiKey.Key: type: PowerMonitoringConsoleBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: entity - parent: BaseComputer + parent: BaseComputerAiAccess id: ComputerMedicalRecords name: medical records computer description: This can be used to check medical records. components: - - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -288,6 +312,8 @@ state: medcomp - map: ["computerLayerKeys"] state: med_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: PointLight radius: 1.5 energy: 1.6 @@ -296,17 +322,18 @@ board: MedicalRecordsComputerCircuitboard - type: entity - parent: BaseComputer + parent: BaseComputerAiAccess id: ComputerCriminalRecords name: criminal records computer - description: This can be used to check criminal records. Only security can modify them. + description: This can be used to check criminal records. Only security and justice can modify them. #DeltaV Justice can access too components: - - type: StationAiWhitelist - type: CriminalRecordsConsole - type: UserInterface interfaces: enum.CriminalRecordsConsoleKey.Key: type: CriminalRecordsConsoleBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: ActivatableUI key: enum.CriminalRecordsConsoleKey.Key - type: Sprite @@ -319,6 +346,8 @@ state: explosive - map: ["computerLayerKeys"] state: security_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: PointLight radius: 1.5 energy: 1.6 @@ -326,23 +355,24 @@ - type: Computer board: CriminalRecordsComputerCircuitboard - type: AccessReader - access: [["Security"]] + access: [["Security"], ["Justice"]] #DeltaV Justice can access too - type: GuideHelp guides: - CriminalRecords - type: entity - parent: BaseComputer + parent: BaseComputerAiAccess id: ComputerStationRecords name: station records computer description: This can be used to check station records. components: - - type: StationAiWhitelist - type: GeneralStationRecordConsole - type: UserInterface interfaces: enum.GeneralStationRecordConsoleKey.Key: type: GeneralStationRecordConsoleBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: ActivatableUI key: enum.GeneralStationRecordConsoleKey.Key - type: PointLight @@ -356,12 +386,11 @@ - Forensics - type: entity - parent: BaseComputer + parent: BaseComputerAiAccess id: ComputerCrewMonitoring name: crew monitoring console description: Used to monitor active health sensors built into most of the crew's uniforms. components: - - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -372,6 +401,8 @@ state: crew - map: ["computerLayerKeys"] state: med_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: PointLight radius: 1.5 energy: 1.6 @@ -384,6 +415,8 @@ interfaces: enum.CrewMonitoringUIKey.Key: type: CrewMonitoringBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: CrewMonitoringConsole - type: DeviceNetwork deviceNetId: Wireless @@ -392,12 +425,11 @@ range: 1200 - type: entity - parent: BaseComputer + parent: BaseComputerAiAccess id: ComputerResearchAndDevelopment name: R&D computer description: A computer used to interface with R&D tools. components: - - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -408,6 +440,8 @@ state: rdcomp - map: ["computerLayerKeys"] state: rd_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: ResearchClient - type: ResearchConsole - type: ActiveRadio @@ -422,6 +456,8 @@ type: ResearchConsoleBoundUserInterface enum.ResearchClientUiKey.Key: type: ResearchClientBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: ApcPowerReceiver powerLoad: 1000 - type: Computer @@ -437,12 +473,11 @@ - Science - type: entity - parent: BaseComputer + parent: BaseComputerAiAccess id: ComputerAnalysisConsole name: analysis console description: A computer used to interface with the artifact analyzer. components: - - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -453,6 +488,8 @@ state: artifact - map: ["computerLayerKeys"] state: tech_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: ResearchClient - type: AnalysisConsole reportEntityId: PaperArtifactAnalyzer @@ -471,6 +508,8 @@ type: AnalysisConsoleBoundUserInterface enum.ResearchClientUiKey.Key: type: ResearchClientBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: ApcPowerReceiver powerLoad: 1000 - type: Computer @@ -484,12 +523,11 @@ - Xenoarchaeology - type: entity - parent: BaseComputer + parent: BaseComputerAiAccess id: ComputerId name: ID card computer description: Terminal for programming Nanotrasen employee ID cards to access parts of the station. components: - - type: StationAiWhitelist - type: IdCardConsole privilegedIdSlot: name: id-card-console-privileged-id @@ -515,6 +553,8 @@ interfaces: enum.IdCardConsoleUiKey.Key: type: IdCardConsoleBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: CrewManifestViewer ownerKey: enum.IdCardConsoleUiKey.Key - type: Sprite @@ -527,6 +567,8 @@ state: id - map: ["computerLayerKeys"] state: id_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: Computer board: IDComputerCircuitboard - type: PointLight @@ -544,12 +586,11 @@ IdCardConsole-targetId: !type:ContainerSlot - type: entity - parent: BaseComputer + parent: BaseComputerAiAccess id: computerBodyScanner name: body scanner computer description: A body scanner. components: - - type: StationAiWhitelist - type: ApcPowerReceiver powerLoad: 500 - type: Computer @@ -560,12 +601,11 @@ color: "#1f8c28" - type: entity - parent: BaseComputer + parent: BaseComputerAiAccess id: ComputerComms name: communications computer description: A computer used to make station wide announcements via keyboard, set the appropriate alert level, and call the emergency shuttle. components: - - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -576,6 +616,8 @@ state: comm - map: ["computerLayerKeys"] state: generic_keys + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: AccessReader access: [[ "Command" ]] - type: CommunicationsConsole @@ -588,6 +630,8 @@ interfaces: enum.CommunicationsConsoleUiKey.Key: type: CommunicationsConsoleBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: Computer board: CommsComputerCircuitboard - type: PointLight @@ -617,6 +661,8 @@ state: comm_syndie - map: ["computerLayerKeys"] state: syndie_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: AccessReader access: [[ "NuclearOperative" ]] - type: CommunicationsConsole @@ -633,12 +679,11 @@ color: "#f71713" - type: entity - parent: BaseComputer + parent: BaseComputerAiAccess id: ComputerSolarControl name: solar control computer description: A controller for solar panel arrays. components: - - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -649,6 +694,8 @@ state: solar_screen - map: ["computerLayerKeys"] state: generic_keys + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: SolarControlConsole - type: ActivatableUI key: enum.SolarControlConsoleUiKey.Key @@ -656,6 +703,8 @@ interfaces: enum.SolarControlConsoleUiKey.Key: type: SolarControlConsoleBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: Computer board: SolarControlComputerCircuitboard - type: PointLight @@ -664,12 +713,11 @@ color: "#e6e227" - type: entity - parent: BaseComputer + parent: BaseComputerAiAccess id: ComputerRadar name: mass scanner computer description: A computer for detecting nearby bodies, displaying them by position and mass. components: - - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -680,6 +728,8 @@ state: solar_screen - map: ["computerLayerKeys"] state: generic_keys + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: RadarConsole - type: ActivatableUI key: enum.RadarConsoleUiKey.Key @@ -687,6 +737,8 @@ interfaces: enum.RadarConsoleUiKey.Key: type: RadarConsoleBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: Computer board: RadarConsoleCircuitboard - type: PointLight @@ -696,11 +748,10 @@ - type: entity id: ComputerCargoShuttle - parent: BaseComputer + parent: BaseComputerAiAccess name: cargo shuttle computer description: Used to order the shuttle. components: - - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -711,6 +762,8 @@ state: supply - map: ["computerLayerKeys"] state: tech_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: CargoShuttleConsole - type: ActivatableUI key: enum.CargoConsoleUiKey.Shuttle @@ -718,6 +771,8 @@ interfaces: enum.CargoConsoleUiKey.Shuttle: type: CargoShuttleConsoleBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: Computer board: CargoShuttleComputerCircuitboard - type: PointLight @@ -732,11 +787,10 @@ - type: entity id: ComputerCargoOrders - parent: BaseComputer + parent: BaseComputerAiAccess name: cargo request computer description: Used to order supplies and approve requests. components: - - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -747,6 +801,8 @@ state: request - map: ["computerLayerKeys"] state: tech_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: CargoOrderConsole - type: BankClient - type: ActiveRadio @@ -758,6 +814,8 @@ interfaces: enum.CargoConsoleUiKey.Orders: type: CargoOrderConsoleBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: Computer board: CargoRequestComputerCircuitboard - type: PointLight @@ -781,11 +839,10 @@ - type: entity id: ComputerCargoBounty - parent: BaseComputer + parent: BaseComputerAiAccess name: cargo bounty computer description: Used to manage currently active bounties. components: - - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -796,6 +853,8 @@ state: bounty - map: ["computerLayerKeys"] state: tech_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: CargoBountyConsole - type: ActivatableUI key: enum.CargoConsoleUiKey.Bounty @@ -803,6 +862,8 @@ interfaces: enum.CargoConsoleUiKey.Bounty: type: CargoBountyConsoleBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: Computer board: CargoBountyComputerCircuitboard - type: PointLight @@ -817,12 +878,11 @@ - Cargo - type: entity - parent: BaseComputer + parent: BaseComputerAiAccess id: ComputerCloningConsole name: cloning console computer description: The centerpiece of the cloning system, medicine's greatest accomplishment. It has lots of ports and wires. components: - - type: StationAiWhitelist - type: CloningConsole - type: DeviceList - type: DeviceNetwork @@ -837,6 +897,8 @@ state: dna - map: ["computerLayerKeys"] state: generic_keys + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: ApcPowerReceiver powerLoad: 3100 #We want this to fail first so I transferred most of the scanner and pod's power here. (3500 in total) - type: Computer @@ -856,6 +918,8 @@ interfaces: enum.CloningConsoleUiKey.Key: type: CloningConsoleBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: Speech speechVerb: Robotic speechSounds: Pai @@ -868,11 +932,10 @@ - type: entity id: ComputerSalvageExpedition - parent: BaseComputer + parent: BaseComputerAiAccess name: salvage expeditions computer description: Used to accept salvage missions, if you're tough enough. components: - - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -883,6 +946,8 @@ state: mining - map: ["computerLayerKeys"] state: tech_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: Appearance - type: GenericVisualizer visuals: @@ -893,6 +958,10 @@ computerLayerKeys: True: { visible: true, shader: unshaded } False: { visible: true } + enum.WiresVisuals.MaintenancePanelState: + enum.WiresVisualLayers.MaintenancePanel: + True: { visible: false } + False: { visible: true } - type: SalvageExpeditionConsole - type: ActivatableUI key: enum.SalvageConsoleUiKey.Expedition @@ -901,6 +970,8 @@ interfaces: enum.SalvageConsoleUiKey.Expedition: type: SalvageExpeditionConsoleBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: Computer board: SalvageExpeditionsComputerCircuitboard - type: PointLight @@ -928,6 +999,8 @@ state: cameras - map: ["computerLayerKeys"] state: tech_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: Computer board: SurveillanceCameraMonitorCircuitboard - type: DeviceNetwork @@ -946,6 +1019,8 @@ interfaces: enum.SurveillanceCameraMonitorUiKey.Key: type: SurveillanceCameraMonitorBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: entity parent: BaseComputer @@ -963,6 +1038,8 @@ state: cameras - map: ["computerLayerKeys"] state: tech_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: Computer board: SurveillanceWirelessCameraMonitorCircuitboard - type: DeviceNetwork @@ -983,14 +1060,15 @@ interfaces: enum.SurveillanceCameraMonitorUiKey.Key: type: SurveillanceCameraMonitorBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: entity id: ComputerPalletConsole - parent: BaseComputer + parent: BaseComputerAiAccess name: cargo sale computer description: Used to sell goods loaded onto cargo pallets. components: - - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -1001,6 +1079,8 @@ state: request - map: ["computerLayerKeys"] state: tech_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: Anchorable flags: - Anchorable @@ -1011,6 +1091,8 @@ interfaces: enum.CargoPalletConsoleUiKey.Sale: type: CargoPalletConsoleBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: Computer board: CargoSaleComputerCircuitboard - type: PointLight @@ -1022,12 +1104,11 @@ - Cargo - type: entity - parent: BaseComputer + parent: BaseComputerAiAccess id: ComputerMassMedia name: news manager console description: Write your message to the world! components: - - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -1038,6 +1119,8 @@ state: service - map: ["computerLayerKeys"] state: service_keys + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: Computer board: ComputerMassMediaCircuitboard - type: DeviceNetworkRequiresPower @@ -1053,6 +1136,8 @@ interfaces: enum.NewsWriterUiKey.Key: type: NewsWriterBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: entity parent: BaseComputer @@ -1073,6 +1158,8 @@ state: sensors - map: ["computerLayerKeys"] state: atmos_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: PointLight radius: 1.5 energy: 1.6 @@ -1086,6 +1173,8 @@ interfaces: enum.SensorMonitoringConsoleUiKey.Key: type: SensorMonitoringConsoleBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: DeviceNetwork deviceNetId: AtmosDevices receiveFrequencyId: AtmosMonitor @@ -1098,12 +1187,11 @@ - type: AtmosDevice - type: entity - parent: BaseComputer + parent: BaseComputerAiAccess id: ComputerRoboticsControl name: robotics control console description: Used to remotely monitor, disable and destroy the station's cyborgs. components: - - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -1114,6 +1202,8 @@ state: robot - map: ["computerLayerKeys"] state: rd_key + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: RoboticsConsole - type: ActiveRadio channels: @@ -1124,6 +1214,8 @@ interfaces: enum.RoboticsConsoleUiKey.Key: type: RoboticsConsoleBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: ApcPowerReceiver powerLoad: 1000 - type: DeviceNetwork @@ -1153,6 +1245,8 @@ state: aiupload - map: [ "computerLayerKeys" ] state: generic_keys + - map: [ "enum.WiresVisualLayers.MaintenancePanel" ] + state: generic_panel_open - type: ApcPowerReceiver powerLoad: 1000 - type: Computer diff --git a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml index 4d4eff1f702..1761f176da7 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml @@ -184,7 +184,7 @@ guides: - APE - type: Gun - projectileSpeed: 4 + projectileSpeed: 10 fireRate: 10 #just has to be fast enough to keep up with upgrades showExamineText: false selectedMode: SemiAuto diff --git a/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml b/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml index 9bbf278e72d..db1ca9e7d5e 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/fax_machine.yml @@ -34,6 +34,7 @@ interfaces: enum.FaxUiKey.Key: type: FaxBoundUi + - type: StationAiWhitelist - type: ApcPowerReceiver powerLoad: 250 - type: Faxecute diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 6162cd46f0d..30967c955fd 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -198,7 +198,7 @@ - ClothingHeadHatWelding - WetFloorSign - ClothingHeadHatCone - - Flare + - FreezerElectronics # Begin Delta-V additions - GoldRing - SilverRing @@ -208,7 +208,6 @@ - type: EmagLatheRecipes emagStaticRecipes: - BoxLethalshot - - BoxShotgunFlare - BoxShotgunSlug - CombatKnife - MagazineBoxLightRifle @@ -236,6 +235,7 @@ - SpeedLoaderSpecialEmpty - SpeedLoaderSpecialPractice - MagazineBoxSpecial + - MagazinePistolSpecial # End of modified code - type: BlueprintReceiver whitelist: @@ -370,6 +370,7 @@ - RCDAmmo - Fulton - FultonBeacon + - PowerCellHyper # End DeltaV additions - type: EmagLatheRecipes emagDynamicRecipes: @@ -433,6 +434,7 @@ - MagazineBoxSpecialUranium - MagazineBoxSpecialHoly - MagazineBoxSpecialMindbreaker + - AdvancedTruncheon # End DeltaV additions - type: entity @@ -484,6 +486,7 @@ - UniformPrinterMachineCircuitboard - FloorGreenCircuit - FloorBlueCircuit + - FloorRedCircuit - MicrowaveMachineCircuitboard - ReagentGrinderMachineCircuitboard - ElectricGrillMachineCircuitboard @@ -713,8 +716,6 @@ - HamtrRLeg - VimHarness # Begin Nyano additions - - ClothingOuterHardsuitJuggernautReverseEngineered - - ClothingOuterHardsuitSyndieReverseEngineered - JetpackBlue - JetpackMini # End Nyano additions @@ -723,6 +724,10 @@ - BorgModuleSecurityChase - BorgModuleSecurityEscalate - JetpackVoid + - type: EmagLatheRecipes + emagDynamicRecipes: + - ClothingOuterHardsuitJuggernautReverseEngineered + - ClothingOuterHardsuitSyndieReverseEngineered # DeltaV End - type: MaterialStorage whitelist: @@ -807,7 +812,6 @@ runningState: icon staticRecipes: - BoxLethalshot - - BoxShotgunFlare - BoxShotgunPractice - BoxShotgunSlug - ClothingEyesHudSecurity @@ -932,6 +936,10 @@ - MagazineBoxSpecialUranium - MagazineBoxSpecialHoly - MagazineBoxSpecialMindbreaker + - ClothingOuterHardsuitJuggernautReverseEngineered + - ClothingOuterHardsuitSyndieReverseEngineered + - ClothingShoesBootsSecurityMagboots + - AdvancedTruncheon # End DeltaV additions - type: MaterialStorage whitelist: @@ -970,7 +978,6 @@ - MagazineBoxSpecial # End of modified code - BoxLethalshot - - BoxShotgunFlare - BoxShotgunSlug - BoxShellTranquilizer - MagazineBoxLightRifle @@ -1317,8 +1324,6 @@ - type: Machine board: BiogeneratorMachineCircuitboard - type: MaterialStorage - insertOnInteract: false - canEjectStoredMaterials: false - type: ProduceMaterialExtractor - type: ItemSlots slots: diff --git a/Resources/Prototypes/Entities/Structures/Machines/reagent_grinder.yml b/Resources/Prototypes/Entities/Structures/Machines/reagent_grinder.yml index 39ab6a3276b..72d6b28efa0 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/reagent_grinder.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/reagent_grinder.yml @@ -86,7 +86,7 @@ - type: GenericVisualizer visuals: enum.ConveyorVisuals.State: - enum.RecyclerVisualLayers.Main: + enum.ConveyorState.Off: Forward: { state: grinder-b1 } Reverse: { state: grinder-b1 } Off: { state: grinder-b0 } diff --git a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml index 9e0d13745e9..90a7d711959 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml @@ -5,6 +5,9 @@ description: Just add capitalism! abstract: true components: + - type: ActionGrant + actions: + - ActionVendingThrow - type: StationAiWhitelist - type: AmbientOnPowered - type: AmbientSound @@ -76,12 +79,8 @@ speechVerb: Robotic speechSounds: Vending - type: IntrinsicRadioReceiver - - type: IntrinsicRadioTransmitter - channels: - - Binary - type: ActiveRadio channels: - - Binary - Common - type: DoAfter - type: Electrified diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml index ba86ca65a06..9f21e45a963 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml @@ -1,4 +1,4 @@ -- type: entity +- type: entity parent: GasPipeBase abstract: true id: GasBinaryBase @@ -24,13 +24,16 @@ pipeDirection: South - type: entity - parent: [BaseMachinePowered, GasBinaryBase] + parent: GasBinaryBase id: GasPressurePump name: gas pump description: A pump that moves gas by pressure. placement: mode: SnapgridCenter components: + - type: ExtensionCableReceiver + - type: LightningTarget + priority: 1 - type: ApcPowerReceiver powerLoad: 200 - type: Rotatable @@ -69,13 +72,16 @@ path: /Audio/Ambience/Objects/gas_pump.ogg - type: entity - parent: [BaseMachinePowered, GasBinaryBase] + parent: GasBinaryBase id: GasVolumePump name: volumetric gas pump description: A pump that moves gas by volume. placement: mode: SnapgridCenter components: + - type: ExtensionCableReceiver + - type: LightningTarget + priority: 1 - type: ApcPowerReceiver powerLoad: 200 - type: Rotatable diff --git a/Resources/Prototypes/Entities/Structures/Power/Generation/Tesla/energyball.yml b/Resources/Prototypes/Entities/Structures/Power/Generation/Tesla/energyball.yml index 558504d5797..dd949cb170e 100644 --- a/Resources/Prototypes/Entities/Structures/Power/Generation/Tesla/energyball.yml +++ b/Resources/Prototypes/Entities/Structures/Power/Generation/Tesla/energyball.yml @@ -8,11 +8,11 @@ bodyStatus: InAir sleepingAllowed: false - type: CanMoveInAir - - type: ChasingWalk - minSpeed: 1 - maxSpeed: 3 - chasingComponent: - - type: LightningTarget + # - type: ChasingWalk # DeltaV - Replaced with random pathfinding + # minSpeed: 1 + # maxSpeed: 3 + # chasingComponent: + # - type: LightningTarget - type: AmbientSound volume: 3 range: 15 @@ -83,9 +83,9 @@ shootMaxInterval: 5 shootRange: 7 lightningPrototype: Lightning #To do: change to HyperchargedLightning, after fix beam system - - type: ChasingWalk - minSpeed: 1 - maxSpeed: 3 + # - type: ChasingWalk # DeltaV - Replaced with random pathfinding + # minSpeed: 1 + # maxSpeed: 3 - type: ChaoticJump jumpMinInterval: 8 jumpMaxInterval: 15 @@ -108,6 +108,9 @@ interactSuccessString: petting-success-tesla interactFailureString: petting-failure-tesla interactSuccessSpawn: EffectHearts + - type: RandomWalk # DeltaV - The tesla here has random pathfinding and dies out as it goes on + maxSpeed: 2 + minSpeed: 1 - type: entity id: TeslaMiniEnergyBall diff --git a/Resources/Prototypes/Entities/Structures/Power/apc.yml b/Resources/Prototypes/Entities/Structures/Power/apc.yml index 0c646cb812c..0ab427ef11a 100644 --- a/Resources/Prototypes/Entities/Structures/Power/apc.yml +++ b/Resources/Prototypes/Entities/Structures/Power/apc.yml @@ -27,7 +27,7 @@ anchored: true - type: Sprite drawdepth: WallMountedItems - sprite: Structures/Power/apc.rsi + sprite: DeltaV/Structures/Power/apc.rsi # DeltaV - Add sprite rotations layers: - state: base - state: panel @@ -91,7 +91,6 @@ type: ApcBoundUserInterface - type: ActivatableUI inHandsOnly: false - singleUser: true key: enum.ApcUiKey.Key - type: Construction graph: APC @@ -160,7 +159,7 @@ anchored: true - type: Sprite drawdepth: WallMountedItems - sprite: Structures/Power/apc.rsi + sprite: DeltaV/Structures/Power/apc.rsi # DeltaV - Add sprite rotations state: frame - type: Construction graph: APC diff --git a/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomaly_injections.yml b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomaly_injections.yml index f1e535f15b4..44a3861a5e1 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomaly_injections.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/anomaly_injections.yml @@ -9,6 +9,9 @@ - type: ActionGrant actions: - ActionAnomalyPulse + - type: Psionic #Nyano - Summary: makes psionic on creation. + - type: GlimmerSource #Nyano - Summary: makes this a potential source of Glimmer. Note, I hope this works like I think it does. + active: false - type: entity parent: AnomalyInjectionBase diff --git a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml index 46364f3d1df..53c2c4f4141 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Closets/Lockers/lockers.yml @@ -170,6 +170,11 @@ - type: ExplosionResistance damageCoefficient: 0.50 - type: AntiRottingContainer + - type: Construction + graph: ClosetFreezer + node: done + containers: + - entity_storage - type: entity id: LockerFreezer @@ -379,7 +384,7 @@ description: To store bags of bullet casings and detainee belongings. components: - type: AccessReader - access: [["Security"], ["Prosecutor"]] # DeltaV - allow Pros access to Evidence + access: [["Security"], ["Prosecutor"], ["Clerk"]] # DeltaV - allow Pros and Clerk access to Evidence # Syndicate - type: entity diff --git a/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml b/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml index d00557c0736..107e8f94d50 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/Crates/crates.yml @@ -42,6 +42,11 @@ - type: AntiRottingContainer - type: ExplosionResistance damageCoefficient: 0.50 + - type: Construction + graph: CrateFreezer + node: done + containers: + - entity_storage - type: entity parent: CratePlastic @@ -451,7 +456,7 @@ parent: CratePirate id: CrateToyBox name: toy box - suffix: Empty + #suffix: Empty # Delta V - Commented out simply for clarity at spawn menu on other uses besides the filled toy box. description: A box overflowing with fun. components: - type: Sprite diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml index 95ee429cdce..31d5a9d6c18 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/posters.yml @@ -1060,6 +1060,16 @@ - type: Sprite state: poster51_legit +- type: entity + parent: PosterBase + id: PosterLegitSafetyMothSSD + name: "Safety Moth - Space Sleep Disorder" + description: "This informational poster uses Safety Moth™ to tell the viewer about Space Sleep Disorder (SSD), a condition where the person stops reacting to things. \"Treat SSD crew with care! They might wake up at any time!\"" + components: + - type: Sprite + state: poster52_legit + + #maps - type: entity diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/signs.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/signs.yml index 26d1fcf3f80..2eda24a90be 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/signs.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/Signs/signs.yml @@ -421,6 +421,7 @@ description: A sign indicating the chapel. components: - type: Sprite + sprite: DeltaV/Structures/Wallmounts/signs.rsi # DeltaV: Epi-themed chapel sprite state: chapel - type: entity diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/fire_alarm.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/fire_alarm.yml index 917a94ddc99..03bc3e4a8d0 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/fire_alarm.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/fire_alarm.yml @@ -104,6 +104,7 @@ collection: MetalGlassBreak params: volume: -4 + - type: StationAiWhitelist placement: mode: SnapgridCenter snap: diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/intercom.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/intercom.yml index ae510a55750..94190eda50e 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/intercom.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/intercom.yml @@ -24,6 +24,9 @@ - type: Intercom - type: Speech speechVerb: Robotic + - type: VoiceOverride # This is for the wire that makes an electricity zapping noise. + speechVerbOverride: Electricity + enabled: false - type: ExtensionCableReceiver - type: Clickable - type: InteractionOutline diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml index dabd93a339b..cd81687ec1e 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/timer.yml @@ -89,7 +89,7 @@ description: It's a timer for brig cells. components: - type: AccessReader - access: [["Security"], ["Prosecutor"]] # DeltaV - Added justice dept + access: [["Security"], ["Prosecutor"], ["Clerk"]] # DeltaV - Added justice dept - type: Construction graph: Timer node: brig diff --git a/Resources/Prototypes/Entities/Structures/Walls/railing.yml b/Resources/Prototypes/Entities/Structures/Walls/railing.yml index afa44d70e2c..db456c512fe 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/railing.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/railing.yml @@ -7,9 +7,9 @@ components: - type: Sprite drawdepth: SmallObjects - sprite: DeltaV/Structures/Walls/railing.rsi # Delta V - Resprite railings + sprite: Structures/Walls/railing.rsi - type: Icon - sprite: DeltaV/Structures/Walls/railing.rsi # Delta V - Resprite railings + sprite: Structures/Walls/railing.rsi - type: Physics bodyType: Static - type: InteractionOutline diff --git a/Resources/Prototypes/Entities/Structures/Walls/walls.yml b/Resources/Prototypes/Entities/Structures/Walls/walls.yml index 2c4f0f4ce73..3f8ada3bd8a 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/walls.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/walls.yml @@ -659,7 +659,7 @@ base: reinf_over - type: entity - parent: BaseWallDiagonal #DeltaV: Frontier Diagonal Walls port + parent: WallShuttleDiagonal id: WallReinforcedDiagonal name: reinforced wall suffix: diagonal @@ -670,14 +670,14 @@ components: - type: Sprite drawdepth: Walls - sprite: _NF/Structures/Walls/solid_reinforced_diagonal.rsi #DeltaV: Using Frontier sprites to go with the artstyle + sprite: Structures/Walls/reinforced_diagonal.rsi state: state0 - type: IconSmooth mode: Diagonal key: walls base: state - type: Icon - sprite: _NF/Structures/Walls/solid_reinforced_diagonal.rsi #DeltaV: Using Frontier sprites to go with the artstyle + sprite: Structures/Walls/reinforced_diagonal.rsi state: state0 # Riveting @@ -1027,7 +1027,7 @@ base: solid - type: entity - parent: BaseWallDiagonal #DeltaV: Frontier Diagonal Walls port + parent: WallShuttleDiagonal id: WallSolidDiagonal name: solid wall suffix: diagonal diff --git a/Resources/Prototypes/Entities/Structures/hydro_tray.yml b/Resources/Prototypes/Entities/Structures/hydro_tray.yml index 7224c154f9a..b1cbcc8b863 100644 --- a/Resources/Prototypes/Entities/Structures/hydro_tray.yml +++ b/Resources/Prototypes/Entities/Structures/hydro_tray.yml @@ -67,6 +67,11 @@ False: { visible: false } - type: PlantHolder drawWarnings: true + wateringSound: + path: /Audio/Effects/Fluids/slosh.ogg + params: + volume: -6 + variation: 0.20 - type: Destructible thresholds: - trigger: diff --git a/Resources/Prototypes/Entities/categories.yml b/Resources/Prototypes/Entities/categories.yml index 0815c693eb6..dffc6b6aaf9 100644 --- a/Resources/Prototypes/Entities/categories.yml +++ b/Resources/Prototypes/Entities/categories.yml @@ -3,12 +3,22 @@ name: entity-category-name-actions hideSpawnMenu: true +- type: entityCategory + id: GameRules + name: entity-category-name-game-rules + hideSpawnMenu: true + - type: entityCategory id: Objectives name: entity-category-name-objectives hideSpawnMenu: true - type: entityCategory - id: GameRules - name: entity-category-name-game-rules + id: Roles + name: entity-category-name-roles hideSpawnMenu: true + +# markers, atmos fixing, etc +- type: entityCategory + id: Mapping + name: entity-category-name-mapping diff --git a/Resources/Prototypes/GameRules/events.yml b/Resources/Prototypes/GameRules/events.yml index 7b4094cd91a..cd60ecd70e0 100644 --- a/Resources/Prototypes/GameRules/events.yml +++ b/Resources/Prototypes/GameRules/events.yml @@ -180,9 +180,8 @@ min: 1 max: 1 pickPlayer: false - mindComponents: - - type: DragonRole - prototype: Dragon + mindRoles: + - MindRoleDragon - type: entity parent: BaseGameRule @@ -230,9 +229,8 @@ nameSegments: - names_ninja_title - names_ninja - mindComponents: - - type: NinjaRole - prototype: SpaceNinja + mindRoles: + - MindRoleNinja - type: entity parent: BaseGameRule @@ -444,9 +442,8 @@ - type: ZombifyOnDeath - type: IncurableZombie - type: InitialInfected - mindComponents: - - type: InitialInfectedRole - prototype: InitialInfected + mindRoles: + - MindRoleInitialInfected - type: entity parent: BaseNukeopsRule @@ -472,7 +469,6 @@ startingGear: SyndicateLoneOperativeGearFull roleLoadout: - RoleSurvivalNukie - components: - type: NukeOperative - type: RandomMetadata @@ -482,9 +478,8 @@ - type: NpcFactionMember factions: - Syndicate - mindComponents: - - type: NukeopsRole - prototype: Nukeops + mindRoles: + - MindRoleNukeops - type: entity parent: BaseTraitorRule @@ -511,9 +506,8 @@ blacklist: components: - AntagImmune - mindComponents: - - type: TraitorRole - prototype: TraitorSleeper + mindRoles: + - MindRoleTraitorSleeper - type: entity id: MassHallucinations diff --git a/Resources/Prototypes/GameRules/midround.yml b/Resources/Prototypes/GameRules/midround.yml index 7446995f262..6cc53a3d100 100644 --- a/Resources/Prototypes/GameRules/midround.yml +++ b/Resources/Prototypes/GameRules/midround.yml @@ -26,8 +26,7 @@ startingGear: ThiefGear components: - type: Pacified - mindComponents: - - type: ThiefRole - prototype: Thief + mindRoles: + - MindRoleThief briefing: sound: "/Audio/Misc/thief_greeting.ogg" diff --git a/Resources/Prototypes/GameRules/roundstart.yml b/Resources/Prototypes/GameRules/roundstart.yml index aa484de19f1..8b72770b647 100644 --- a/Resources/Prototypes/GameRules/roundstart.yml +++ b/Resources/Prototypes/GameRules/roundstart.yml @@ -114,9 +114,8 @@ - type: NpcFactionMember factions: - Syndicate - mindComponents: - - type: NukeopsRole - prototype: NukeopsCommander + mindRoles: + - MindRoleNukeopsCommander - prefRoles: [ NukeopsMedic ] fallbackRoles: [ Nukeops, NukeopsCommander ] spawnerPrototype: SpawnPointNukeopsMedic @@ -132,9 +131,8 @@ - type: NpcFactionMember factions: - Syndicate - mindComponents: - - type: NukeopsRole - prototype: NukeopsMedic + mindRoles: + - MindRoleNukeopsMedic - prefRoles: [ Nukeops ] fallbackRoles: [ NukeopsCommander, NukeopsMedic ] spawnerPrototype: SpawnPointNukeopsOperative @@ -152,9 +150,8 @@ - type: NpcFactionMember factions: - Syndicate - mindComponents: - - type: NukeopsRole - prototype: Nukeops + mindRoles: + - MindRoleNukeops - type: entity abstract: true @@ -189,9 +186,17 @@ components: - AntagImmune lateJoinAdditional: true - mindComponents: - - type: TraitorRole - prototype: Traitor + mindRoles: + - MindRoleTraitor + +- type: entity + id: TraitorReinforcement + parent: Traitor + components: + - type: TraitorRule + giveUplink: false + giveCodewords: false # It would actually give them a different set of codewords than the regular traitors, anyway + giveBriefing: false - type: entity id: Revolutionary @@ -213,9 +218,8 @@ components: - type: Revolutionary - type: HeadRevolutionary - mindComponents: - - type: RevolutionaryRole - prototype: HeadRev + mindRoles: + - MindRoleHeadRevolutionary - type: entity id: Sandbox @@ -257,9 +261,8 @@ - type: ZombifyOnDeath - type: IncurableZombie - type: InitialInfected - mindComponents: - - type: InitialInfectedRole - prototype: InitialInfected + mindRoles: + - MindRoleInitialInfected # event schedulers diff --git a/Resources/Prototypes/GameRules/unknown_shuttles.yml b/Resources/Prototypes/GameRules/unknown_shuttles.yml index 7f86f14f11b..cde980debf5 100644 --- a/Resources/Prototypes/GameRules/unknown_shuttles.yml +++ b/Resources/Prototypes/GameRules/unknown_shuttles.yml @@ -7,7 +7,7 @@ - id: UnknownShuttleCargoLost - id: UnknownShuttleTravelingCuisine - id: UnknownShuttleDisasterEvacPod - # - id: UnknownShuttleHonki #DeltaV - Removes the Clown Shuttle + #- id: UnknownShuttleHonki #DeltaV - Removes the Clown Shuttle #- id: UnknownShuttleNTQuark # DeltaV - removed until theyre individually looked at #- id: UnknownShuttleCruiser #- id: UnknownShuttleCryptid @@ -20,6 +20,7 @@ #- id: UnknownShuttleMeatZone #- id: UnknownShuttleMicroshuttle #- id: UnknownShuttleSpacebus + #- id: UnknownShuttleInstigator # DeltaV - remove random ops - type: entityTable id: UnknownShuttlesFreelanceTable @@ -172,6 +173,17 @@ - type: LoadMapRule preloadedGrid: NTIncorporation +- type: entity + id: UnknownShuttleInstigator + parent: BaseUnknownShuttleRule + components: + - type: StationEvent + startAnnouncement: null #dont nark on antags + weight: 1 # lower because antags. + earliestStart: 50 # late to hopefully have enough ghosts to fill all roles quickly (3) and because antags + - type: LoadMapRule + preloadedGrid: Instigator + - type: entity id: UnknownShuttleJoe parent: BaseUnknownShuttleRule diff --git a/Resources/Prototypes/Guidebook/science.yml b/Resources/Prototypes/Guidebook/science.yml index 2832da6c41b..a1bd65c5d27 100644 --- a/Resources/Prototypes/Guidebook/science.yml +++ b/Resources/Prototypes/Guidebook/science.yml @@ -8,7 +8,7 @@ - Xenoarchaeology - Robotics - Psionics # Nyanotrasen - Psionics guidebook - # - AltarsGolemancy # When it's added # Nyanotrasen - Golemancy guidebook + - AltarsGolemancy # Nyanotrasen - Golemancy guidebook - ReverseEngineering # Nyanotrasen - Reverse Engineering guidebook - GlimmerCreatures # DeltaV diff --git a/Resources/Prototypes/Hydroponics/randomMutations.yml b/Resources/Prototypes/Hydroponics/randomMutations.yml index 8f409a5eaf9..77ae2288f3a 100644 --- a/Resources/Prototypes/Hydroponics/randomMutations.yml +++ b/Resources/Prototypes/Hydroponics/randomMutations.yml @@ -1,9 +1,11 @@ - type: RandomPlantMutationList id: RandomPlantMutations - mutations: - - name: Bioluminescent - baseOdds: 0.036 - effect: !type:Glow + mutations: + # disabled until 50 morbillion point lights don't cause the renderer to die + #- name: Bioluminescent + # baseOdds: 0.036 + # appliesToPlant: false + # effect: !type:Glow - name: Sentient baseOdds: 0.0072 appliesToProduce: false @@ -11,6 +13,7 @@ effect: !type:MakeSentient # existing effect. - name: Slippery baseOdds: 0.036 + appliesToPlant: false effect: !type:Slipify - name: ChangeSpecies baseOdds: 0.036 @@ -176,4 +179,4 @@ - name: ChangeHarvest baseOdds: 0.036 persists: false - effect: !type:PlantMutateHarvest \ No newline at end of file + effect: !type:PlantMutateHarvest diff --git a/Resources/Prototypes/Hydroponics/seeds.yml b/Resources/Prototypes/Hydroponics/seeds.yml index 67cf804f2c2..e09074ec52e 100644 --- a/Resources/Prototypes/Hydroponics/seeds.yml +++ b/Resources/Prototypes/Hydroponics/seeds.yml @@ -210,6 +210,8 @@ - FoodLemon mutationPrototypes: - lemoon + - lime + - orange harvestRepeat: Repeat lifespan: 55 maturation: 6 @@ -262,6 +264,9 @@ packetPrototype: LimeSeeds productPrototypes: - FoodLime + mutationPrototypes: + - orange + - lemon harvestRepeat: Repeat lifespan: 55 maturation: 6 @@ -290,6 +295,8 @@ - FoodOrange mutationPrototypes: - extradimensionalOrange + - lemon + - lime harvestRepeat: Repeat lifespan: 55 maturation: 6 diff --git a/Resources/Prototypes/Loadouts/Jobs/Security/detective.yml b/Resources/Prototypes/Loadouts/Jobs/Security/detective.yml index d2cca17d281..cfda9849b83 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Security/detective.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Security/detective.yml @@ -9,6 +9,11 @@ equipment: head: ClothingHeadHatFedoraGrey +- type: loadout # DeltaV + id: DetBeret + equipment: + head: ClothingHeadHatBeretDet + # Neck - type: loadout id: DetectiveTie @@ -46,6 +51,16 @@ equipment: jumpsuit: ClothingUniformJumpskirtForensicSpec +- type: loadout # DeltaV + id: ForensicSpecTurtlesuit + equipment: + jumpsuit: ClothingUniformJumpsuitDetTurtle + +- type: loadout # DeltaV + id: ForensicSpecTurtleskirt + equipment: + jumpsuit: ClothingUniformJumpskirtDetTurtle + # OuterClothing - type: loadout id: DetectiveArmorVest @@ -56,3 +71,8 @@ id: DetectiveCoat equipment: outerClothing: ClothingOuterCoatDetectiveLoadout + +- type: loadout # DeltaV + id: StasecWinterCoatDet + equipment: + outerClothing: ClothingOuterCoatStasecDet diff --git a/Resources/Prototypes/Loadouts/Jobs/Security/head_of_security.yml b/Resources/Prototypes/Loadouts/Jobs/Security/head_of_security.yml index 6e35e8ca032..9b762ffd3f5 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Security/head_of_security.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Security/head_of_security.yml @@ -32,12 +32,12 @@ - type: loadout id: HeadofSecurityTurtleneck equipment: - jumpsuit: ClothingUniformJumpsuitHoSAlt + jumpsuit: ClothingUniformJumpsuitHoSTurtle # DeltaV - replace ClothingUniformJumpsuitHoSAlt - type: loadout id: HeadofSecurityTurtleneckSkirt equipment: - jumpsuit: ClothingUniformJumpskirtHoSAlt + jumpsuit: ClothingUniformJumpskirtHoSTurtle # DeltaV - replace ClothingUniformJumpsuitHoSAlt - type: loadout id: HeadofSecurityFormalSuit @@ -97,11 +97,6 @@ equipment: outerClothing: ClothingOuterCoatStasecHoS -- type: loadout # DeltaV - security greatcoat - id: StasecGreatcoatHoS - equipment: - outerClothing: ClothingOuterGreatcoatStasecHoS - # Shoes - DeltaV - type: loadout # DeltaV id: HeadOfSecurityWinterBoots diff --git a/Resources/Prototypes/Loadouts/Jobs/Security/security_officer.yml b/Resources/Prototypes/Loadouts/Jobs/Security/security_officer.yml index f55a23e17d6..d2f105fdb13 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Security/security_officer.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Security/security_officer.yml @@ -165,11 +165,6 @@ equipment: outerClothing: ClothingOuterCoatStasec -- type: loadout # DeltaV - security greatcoat - id: StasecGreatcoat - equipment: - outerClothing: ClothingOuterGreatcoatStasec - # Shoes - type: loadout id: CombatBoots diff --git a/Resources/Prototypes/Loadouts/Jobs/Security/warden.yml b/Resources/Prototypes/Loadouts/Jobs/Security/warden.yml index 06cb118ec5d..54f1bb0c210 100644 --- a/Resources/Prototypes/Loadouts/Jobs/Security/warden.yml +++ b/Resources/Prototypes/Loadouts/Jobs/Security/warden.yml @@ -40,6 +40,16 @@ equipment: jumpsuit: ClothingUniformJumpskirtWardenBlue +- type: loadout + id: WardenTurtlesuit + equipment: + jumpsuit: ClothingUniformJumpsuitWardenTurtle # DeltaV + +- type: loadout + id: WardenTurtleskirt + equipment: + jumpsuit: ClothingUniformJumpskirtWardenTurtle # DeltaV + # OuterClothing - type: loadout id: WardenCoat @@ -55,8 +65,3 @@ id: StasecWinterCoatWarden equipment: outerClothing: ClothingOuterCoatStasecWarden - -- type: loadout # DeltaV - security greatcoat - id: StasecGreatcoatWarden - equipment: - outerClothing: ClothingOuterGreatcoatStasecWarden diff --git a/Resources/Prototypes/Loadouts/Miscellaneous/glasses.yml b/Resources/Prototypes/Loadouts/Miscellaneous/glasses.yml index 41cad93a21f..06283d91816 100644 --- a/Resources/Prototypes/Loadouts/Miscellaneous/glasses.yml +++ b/Resources/Prototypes/Loadouts/Miscellaneous/glasses.yml @@ -8,15 +8,6 @@ role: JobLibrarian time: 3600 # 1 hour of being the biggest nerd on the station -- type: loadoutEffectGroup # DeltaV - id: CheapSunglassesTimer - effects: - - !type:JobRequirementLoadoutEffect - requirement: - !type:RoleTimeRequirement - role: JobMusician - time: 7200 # 2 hours of being a rockstar - - type: loadoutEffectGroup id: JensenTimer effects: @@ -51,12 +42,3 @@ proto: JensenTimer equipment: eyes: ClothingEyesGlassesJensen - -# Cheap Sunglasses - DeltaV -- type: loadout # DeltaV - id: GlassesCheapSunglasses - effects: - - !type:GroupLoadoutEffect - proto: CheapSunglassesTimer - equipment: - eyes: ClothingEyesGlassesCheapSunglasses diff --git a/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml b/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml index c91108124f9..fc4e689084f 100644 --- a/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml +++ b/Resources/Prototypes/Loadouts/Miscellaneous/trinkets.yml @@ -8,6 +8,19 @@ department: Command time: 3600 # 1 hour +# Flowers +- type: loadout + id: FlowerWreath + storage: + back: + - ClothingHeadHatFlowerWreath + +- type: loadout + id: Hairflower + storage: + back: + - ClothingHeadHatHairflower + # Plushies - type: loadout id: PlushieLizard @@ -95,6 +108,12 @@ back: - ClothingNeckBisexualPin +- type: loadout + id: ClothingNeckGayPin + storage: + back: + - ClothingNeckGayPin + - type: loadout id: ClothingNeckIntersexPin storage: @@ -136,3 +155,193 @@ storage: back: - ClothingNeckGoldAutismPin + +# Towels +- type: loadout + id: TowelColorWhite + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:OverallPlaytimeRequirement + time: 36000 # 10hr + storage: + back: + - TowelColorWhite + +- type: loadout + id: TowelColorSilver + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:OverallPlaytimeRequirement + time: 1800000 # 500hr + storage: + back: + - TowelColorSilver + +- type: loadout + id: TowelColorGold + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:OverallPlaytimeRequirement + time: 3600000 # 1000hr + storage: + back: + - TowelColorGold + +- type: loadout + id: TowelColorLightBrown + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:DepartmentTimeRequirement + department: Logistics # DeltaV: Logistics replaces Cargo + time: 360000 # 100hr + storage: + back: + - TowelColorLightBrown + +- type: loadout + id: TowelColorGreen + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:DepartmentTimeRequirement + department: Civilian + time: 360000 # 100hr + storage: + back: + - TowelColorGreen + +- type: loadout + id: TowelColorDarkBlue + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:DepartmentTimeRequirement + department: Command + time: 360000 # 100hr + storage: + back: + - TowelColorDarkBlue + +- type: loadout + id: TowelColorOrange + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:DepartmentTimeRequirement + department: Engineering + time: 360000 # 100hr + storage: + back: + - TowelColorOrange + +- type: loadout + id: TowelColorLightBlue + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:DepartmentTimeRequirement + department: Medical + time: 360000 # 100hr + storage: + back: + - TowelColorLightBlue + +- type: loadout + id: TowelColorPurple + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:DepartmentTimeRequirement + department: Epistemics # DeltaV: Epistemics replaces Science + time: 360000 # 100hr + storage: + back: + - TowelColorPurple + +- type: loadout + id: TowelColorRed + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:DepartmentTimeRequirement + department: Security + time: 360000 # 100hr + storage: + back: + - TowelColorRed + +- type: loadout + id: TowelColorGray + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:RoleTimeRequirement + role: JobPassenger + time: 360000 # 100hr + storage: + back: + - TowelColorGray + +- type: loadout + id: TowelColorBlack + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:RoleTimeRequirement + role: JobChaplain + time: 360000 # 100hr + storage: + back: + - TowelColorBlack + +- type: loadout + id: TowelColorDarkGreen + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:RoleTimeRequirement + role: JobLibrarian + time: 360000 # 100hr + storage: + back: + - TowelColorDarkGreen + +- type: loadout + id: TowelColorMaroon + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:RoleTimeRequirement + role: JobLawyer + time: 360000 # 100hr + storage: + back: + - TowelColorMaroon + +- type: loadout + id: TowelColorYellow + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:RoleTimeRequirement + role: JobClown + time: 360000 # 100hr + storage: + back: + - TowelColorYellow + +- type: loadout + id: TowelColorMime + effects: + - !type:JobRequirementLoadoutEffect + requirement: + !type:RoleTimeRequirement + role: JobMime + time: 360000 # 100hr + storage: + back: + - TowelColorMime diff --git a/Resources/Prototypes/Loadouts/loadout_groups.yml b/Resources/Prototypes/Loadouts/loadout_groups.yml index c0d2d2153cd..afd513e4e8c 100644 --- a/Resources/Prototypes/Loadouts/loadout_groups.yml +++ b/Resources/Prototypes/Loadouts/loadout_groups.yml @@ -5,6 +5,8 @@ minLimit: 0 maxLimit: 3 loadouts: + - FlowerWreath + - Hairflower - PlushieLizard - PlushieSpaceLizard - Lighter @@ -18,6 +20,7 @@ - ClothingNeckAromanticPin - ClothingNeckAsexualPin - ClothingNeckBisexualPin + - ClothingNeckGayPin - ClothingNeckIntersexPin - ClothingNeckLesbianPin - ClothingNeckNonBinaryPin @@ -25,9 +28,28 @@ - ClothingNeckTransPin - ClothingNeckAutismPin - ClothingNeckGoldAutismPin + - TowelColorBlack + - TowelColorDarkBlue + - TowelColorDarkGreen + - TowelColorGold + - TowelColorGray + - TowelColorGreen + - TowelColorLightBlue + - TowelColorLightBrown + - TowelColorMaroon + - TowelColorMime + - TowelColorOrange + - TowelColorPurple + - TowelColorRed + - TowelColorSilver + - TowelColorLightBlue + - TowelColorWhite + - TowelColorYellow - AACTablet # DeltaV - GoldRing # DeltaV - SilverRing # DeltaV + - Cane # DeltaV + - WhiteCane #DeltaV - type: loadoutGroup id: Glasses @@ -1088,8 +1110,8 @@ - HeadofSecurityJumpskirtGrey # DeltaV - HeadofSecurityJumpsuitBlue # DeltaV - HeadofSecurityJumpskirtBlue # DeltaV - - HeadofSecurityTurtleneck # DeltaV - - HeadofSecurityTurtleneckSkirt # DeltaV + - HeadofSecurityTurtleneck + - HeadofSecurityTurtleneckSkirt - HeadofSecurityFormalSuit - HeadofSecurityFormalSkirt # - HeadofSecurityParadeSuit # DeltaV - removed for incongruence @@ -1113,7 +1135,6 @@ - PlateCarrier # DeltaV - DuraVest # DeltaV - StasecWinterCoatHoS # DeltaV - - StasecGreatcoatHoS # DeltaV - type: loadoutGroup # DeltaV id: HeadofSecurityShoes @@ -1142,6 +1163,8 @@ - WardenJumpskirtGrey # DeltaV - WardenJumpsuitBlue # DeltaV - WardenJumpskirtBlue # DeltaV + - WardenTurtlesuit # DeltaV + - WardenTurtleskirt # DeltaV - type: loadoutGroup id: WardenOuterClothing @@ -1152,7 +1175,6 @@ - PlateCarrier # DeltaV - DuraVest # DeltaV - StasecWinterCoatWarden # DeltaV - - StasecGreatcoatWarden # DeltaV - type: loadoutGroup id: SecurityHead @@ -1205,7 +1227,6 @@ # - SecurityOfficerWintercoat - removed for incongruence - StasecSweater # DeltaV - StasecWinterCoat # DeltaV - - StasecGreatcoat # DeltaV - type: loadoutGroup id: SecurityShoes @@ -1233,8 +1254,9 @@ name: loadout-group-detective-head minLimit: 0 loadouts: - - DetectiveFedora - - DetectiveFedoraGrey +# - DetectiveFedora # DeltaV - removed for incongruence +# - DetectiveFedoraGrey # DeltaV - removed for incongruence + - DetBeret # DeltaV - type: loadoutGroup id: DetectiveNeck @@ -1254,14 +1276,19 @@ # - NoirJumpskirt # DeltaV - removed for incongruence - ForensicSpecJumpsuit # DeltaV - ForensicSpecJumpskirt # DeltaV + - ForensicSpecTurtlesuit # DeltaV + - ForensicSpecTurtleskirt # DeltaV - type: loadoutGroup id: DetectiveOuterClothing name: loadout-group-detective-outerclothing minLimit: 0 loadouts: - - DetectiveArmorVest - - DetectiveCoat +# - DetectiveArmorVest # DeltaV - removed for incongruence +# - DetectiveCoat # DeltaV - removed for incongruence + - StasecWinterCoatDet # DeltaV + - PlateCarrier # DeltaV + - DuraVest # DeltaV - type: loadoutGroup id: SecurityCadetJumpsuit @@ -1280,12 +1307,12 @@ - EmergencyOxygenSecurity - LoadoutSpeciesVoxNitrogen -#- type: loadoutGroup # DeltaV - removed for incongruence -# id: SecurityStar -# name: loadout-group-security-star -# minLimit: 0 -# loadouts: -# - SecStar +- type: loadoutGroup + id: SecurityStar + name: loadout-group-security-star + minLimit: 0 + loadouts: + - SecStar # Medical - type: loadoutGroup diff --git a/Resources/Prototypes/Loadouts/role_loadouts.yml b/Resources/Prototypes/Loadouts/role_loadouts.yml index 8181b634335..e23906e6ccd 100644 --- a/Resources/Prototypes/Loadouts/role_loadouts.yml +++ b/Resources/Prototypes/Loadouts/role_loadouts.yml @@ -368,7 +368,7 @@ - HeadofSecurityShoes # DeltaV - winter boots - SurvivalSecurity - Trinkets -# - SecurityStar # DeltaV - removed for incongruence + - SecurityStar - GroupSpeciesBreathToolSecurity - type: roleLoadout @@ -383,7 +383,7 @@ - SecurityShoes - SurvivalSecurity - Trinkets -# - SecurityStar # DeltaV - removed for incongruence + - SecurityStar - GroupSpeciesBreathToolSecurity - type: roleLoadout @@ -399,22 +399,22 @@ - SecurityBelt - SurvivalSecurity - Trinkets -# - SecurityStar # DeltaV - removed for incongruence + - SecurityStar - GroupSpeciesBreathToolSecurity - type: roleLoadout id: JobDetective groups: - GroupTankHarness - - SecurityHead # DeltaV - replace DetectiveHead for incongruence + - DetectiveHead - SecurityNeck # DeltaV - replace DetectiveNeck for incongruence - DetectiveJumpsuit - SecurityBackpack - - SecurityOuterClothing # DeltaV - replace DetectiveOuterClothing for incongruence + - DetectiveOuterClothing - SecurityShoes - SurvivalSecurity - Trinkets -# - SecurityStar # DeltaV - removed for incongruence + - SecurityStar - GroupSpeciesBreathToolSecurity - type: roleLoadout diff --git a/Resources/Prototypes/Maps/glacier.yml b/Resources/Prototypes/Maps/glacier.yml index 9edeffc230c..59dd9f381dd 100644 --- a/Resources/Prototypes/Maps/glacier.yml +++ b/Resources/Prototypes/Maps/glacier.yml @@ -3,7 +3,7 @@ mapName: Glacier mapPath: /Maps/glacier.yml minPlayers: 15 - maxPlayers: 70 + maxPlayers: 60 stations: Glacier: stationProto: StandardNanotrasenStation diff --git a/Resources/Prototypes/Maps/lighthouse.yml b/Resources/Prototypes/Maps/lighthouse.yml index 11b320df116..d153890b004 100644 --- a/Resources/Prototypes/Maps/lighthouse.yml +++ b/Resources/Prototypes/Maps/lighthouse.yml @@ -2,8 +2,8 @@ id: Lighthouse mapName: Lighthouse mapPath: /Maps/lighthouse.yml - minPlayers: 15 - maxPlayers: 80 + minPlayers: 20 + maxPlayers: 65 stations: Lighthouse: stationProto: StandardNanotrasenStation diff --git a/Resources/Prototypes/Maps/shoukou.yml b/Resources/Prototypes/Maps/shoukou.yml index 0ccbd10d658..37ab1eb328a 100644 --- a/Resources/Prototypes/Maps/shoukou.yml +++ b/Resources/Prototypes/Maps/shoukou.yml @@ -3,7 +3,7 @@ mapName: 'Shōkō' mapPath: /Maps/shoukou.yml minPlayers: 5 - maxPlayers: 60 + maxPlayers: 50 stations: Shoukou: stationProto: StandardNanotrasenStation diff --git a/Resources/Prototypes/NPCs/firebot.yml b/Resources/Prototypes/NPCs/firebot.yml new file mode 100644 index 00000000000..2da9da50d25 --- /dev/null +++ b/Resources/Prototypes/NPCs/firebot.yml @@ -0,0 +1,56 @@ +- type: htnCompound + id: FirebotCompound + branches: + - tasks: + - !type:HTNCompoundTask + task: DouseFireTargetCompound + - tasks: + - !type:HTNCompoundTask + task: IdleCompound + +- type: htnCompound + id: DouseFireTargetCompound + branches: + - tasks: + - !type:HTNPrimitiveTask + operator: !type:UtilityOperator + proto: NearbyOnFire + + - !type:HTNPrimitiveTask + operator: !type:SpeakOperator + speech: firebot-fire-detected + hidden: true + + - !type:HTNPrimitiveTask + operator: !type:MoveToOperator + pathfindInPlanning: true + removeKeyOnFinish: false + targetKey: TargetCoordinates + pathfindKey: TargetPathfind + rangeKey: InteractRange + + - !type:HTNPrimitiveTask + operator: !type:SetFloatOperator + targetKey: WaitTime + amount: 1 + + - !type:HTNPrimitiveTask + operator: !type:WaitOperator + key: WaitTime + preconditions: + - !type:KeyExistsPrecondition + key: WaitTime + + - !type:HTNPrimitiveTask + preconditions: + - !type:TargetInRangePrecondition + targetKey: Target + rangeKey: InteractRange + operator: !type:InteractWithOperator + targetKey: Target + services: + - !type:UtilityService + id: FireService + proto: NearbyOnFire + key: Target + diff --git a/Resources/Prototypes/NPCs/utility_queries.yml b/Resources/Prototypes/NPCs/utility_queries.yml index 06bc0a9a9eb..e10a0ed30cd 100644 --- a/Resources/Prototypes/NPCs/utility_queries.yml +++ b/Resources/Prototypes/NPCs/utility_queries.yml @@ -144,6 +144,27 @@ - !type:TargetAccessibleCon curve: !type:BoolCurve +- type: utilityQuery + id: NearbyOnFire + query: + - !type:ComponentQuery + components: + - type: Flammable + # why does Flammable even have a required damage + damage: + types: + burn: 0 + considerations: + - !type:TargetDistanceCon + curve: !type:PresetCurve + preset: TargetDistance + - !type:TargetAccessibleCon + curve: !type:BoolCurve + - !type:TargetInLOSOrCurrentCon + curve: !type:BoolCurve + - !type:TargetOnFireCon + curve: !type:BoolCurve + - type: utilityQuery id: NearbyPuddles query: diff --git a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/backpack.yml b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/backpack.yml deleted file mode 100644 index 66b1854dafb..00000000000 --- a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/backpack.yml +++ /dev/null @@ -1,13 +0,0 @@ -- type: entity - categories: [ HideSpawnMenu ] - parent: ClothingBackpackScience - id: ClothingBackpackMantisFilled - components: - - type: StorageFill - contents: - - id: BoxSurvival - # - id: BoxForensicPad # DeltaV - Mantis is no longer a Detective - - id: HandLabeler - - id: PillMindbreakerToxin - - id: BoxFolderGrey - - id: RubberStampMantis diff --git a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml deleted file mode 100644 index 49ca0460aa5..00000000000 --- a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml +++ /dev/null @@ -1,13 +0,0 @@ -- type: entity - categories: [ HideSpawnMenu ] - parent: ClothingBackpackDuffelScience - id: ClothingBackpackDuffelMantisFilled - components: - - type: StorageFill - contents: - - id: BoxSurvival - # - id: BoxForensicPad # DeltaV - Mantis is no longer a Detective - - id: HandLabeler - - id: PillMindbreakerToxin - - id: BoxFolderGrey - - id: RubberStampMantis diff --git a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/satchel.yml b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/satchel.yml deleted file mode 100644 index 9a33ad34685..00000000000 --- a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Backpacks/StarterGear/satchel.yml +++ /dev/null @@ -1,13 +0,0 @@ -- type: entity - categories: [ HideSpawnMenu ] - parent: ClothingBackpackSatchelScience - id: ClothingBackpackSatchelMantisFilled - components: - - type: StorageFill - contents: - - id: BoxSurvival - # - id: BoxForensicPad # DeltaV - Mantis is no longer a Detective - - id: HandLabeler - - id: PillMindbreakerToxin - - id: BoxFolderGrey - - id: RubberStampMantis diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Head/hats.yml b/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Head/hats.yml index 8278114d267..8e09936d689 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Head/hats.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Head/hats.yml @@ -93,13 +93,16 @@ parent: ClothingHeadTinfoil id: ClothingHeadCage name: insulative headcage + suffix: SelfUnremovable description: Psionically insulates whoevers head is inside it. It takes time to resist out of. components: - type: Sprite sprite: Nyanotrasen/Clothing/Head/Hats/cage.rsi - type: Clothing + stripDelay: 10 + equipDelay: 5 sprite: Nyanotrasen/Clothing/Head/Hats/cage.rsi - - type: HeadCage + - type: SelfUnremovableClothing - type: entity parent: ClothingHeadTinfoil diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/Random/mobs.yml b/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/Random/mobs.yml index 4f22019c200..29efba1cbab 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/Random/mobs.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/Random/mobs.yml @@ -181,6 +181,7 @@ - WatcherAISpawner - ArgocyteAISpawner - SpawnMobOreCrab + - MobGoliath rarePrototypes: - MobLaserRaptor rareChance: 0.10 diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Player/special.yml b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Player/special.yml index d057423f1ba..01ae63659b6 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Player/special.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Player/special.yml @@ -1,13 +1,11 @@ - type: entity + parent: [ Incorporeal, BaseMob ] id: MobObserverTelegnostic name: telegnostic projection description: Ominous. categories: [ HideSpawnMenu ] components: - type: Sprite - overrideContainerOcclusion: true # Ghosts always show up regardless of where they're contained. - noRot: true - drawdepth: Ghosts sprite: Objects/Consumable/Food/bowl.rsi state: eyeball color: "#90EE90" @@ -15,28 +13,12 @@ - state: eyeball shader: unshaded - type: Psionic - - type: MindContainer - - type: Clickable - - type: InteractionOutline - type: Physics - bodyType: KinematicController fixedRotation: true - - type: Fixtures - fixtures: - fix1: - shape: - !type:PhysShapeCircle - radius: 0.35 - density: 13 - mask: - - GhostImpassable - type: MovementSpeedModifier baseSprintSpeed: 8 baseWalkSpeed: 5 - - type: MovementIgnoreGravity #- type: PsionicallyInvisible - - type: InputMover - - type: Appearance - type: Eye drawFov: false visMask: @@ -44,7 +26,6 @@ - TelegnosticProjection - type: Input context: "ghost" - - type: Examiner - type: TelegnosticProjection - type: Stealth lastVisibility: 0.66 diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/CircuitBoards/production.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/CircuitBoards/production.yml index bf59941a52d..83b7c8d07b6 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/CircuitBoards/production.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/CircuitBoards/production.yml @@ -1,22 +1,30 @@ +# you can RE any cloning board you find to unlock all 3 +- type: entity + abstract: true + id: BaseCloningBoard + components: + - type: ReverseEngineering + difficulty: 3 + recipes: + - CloningConsoleComputerCircuitboard + - MetempsychoticMachineCircuitboard + - MedicalScannerMachineCircuitboard + - type: entity id: MetempsychoticMachineCircuitboard - parent: BaseMachineCircuitboard + parent: [ BaseMachineCircuitboard, BaseCloningBoard ] name: metempsychotic machine machine board description: A machine printed circuit board for a cloning pod components: - - type: Sprite - state: medical - - type: MachineBoard - prototype: MetempsychoticMachine - stackRequirements: - Glass: 1 - Cable: 1 - Capacitor: 2 - Manipulator: 2 - - type: ReverseEngineering - difficulty: 3 - recipes: - - MetempsychoticMachineCircuitboard + - type: Sprite + state: medical + - type: MachineBoard + prototype: MetempsychoticMachine + stackRequirements: + Glass: 1 + Cable: 1 + Capacitor: 2 + Manipulator: 2 - type: entity id: ReverseEngineeringMachineCircuitboard @@ -24,51 +32,48 @@ name: reverse engineering machine machine board description: A machine printed circuit board for a reverse engineering machine components: - - type: Sprite - state: engineering - - type: MachineBoard - prototype: ReverseEngineeringMachine - stackRequirements: - Cable: 1 - PlasmaGlass: 5 - MatterBin: 1 - Manipulator: 1 - tagRequirements: - BorgArm: - amount: 3 - defaultPrototype: LeftArmBorg - - type: ReverseEngineering - difficulty: 2 - recipes: - - ReverseEngineeringMachineCircuitboard + - type: Sprite + state: engineering + - type: MachineBoard + prototype: ReverseEngineeringMachine + stackRequirements: + Cable: 1 + PlasmaGlass: 5 + MatterBin: 1 + Manipulator: 1 + tagRequirements: + BorgArm: + amount: 3 + defaultPrototype: LeftArmBorg + # TODO: make this reverse engineerable to the upgraded one - type: entity id: DeepFryerMachineCircuitboard parent: BaseMachineCircuitboard name: deep fryer machine board components: - - type: Sprite - state: service - - type: MachineBoard - prototype: KitchenDeepFryer - stackRequirements: - Steel: 4 - Glass: 2 - Cable: 4 - Capacitor: 1 - MatterBin: 1 + - type: Sprite + state: service + - type: MachineBoard + prototype: KitchenDeepFryer + stackRequirements: + Steel: 4 + Glass: 2 + Cable: 4 + Capacitor: 1 + MatterBin: 1 - type: entity id: MailTeleporterMachineCircuitboard parent: BaseMachineCircuitboard name: mail teleporter machine board components: - - type: Sprite - state: supply - - type: MachineBoard - prototype: MailTeleporter - stackRequirements: - Steel: 4 - Cable: 4 - Capacitor: 1 - MatterBin: 1 + - type: Sprite + state: supply + - type: MachineBoard + prototype: MailTeleporter + stackRequirements: + Steel: 4 + Cable: 4 + Capacitor: 1 + MatterBin: 1 diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/Misc/identification_cards.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/Misc/identification_cards.yml index d44f7c12083..39dcca3b7ac 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/Misc/identification_cards.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/Misc/identification_cards.yml @@ -48,7 +48,7 @@ - sprite: DeltaV/Objects/Misc/id_cards.rsi state: nyanomailcarrier - type: IdCard - jobTitle: Mail Carrier + jobTitle: job-alt-title-mail-carrier - type: entity parent: IDCardStandard diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/cartridges.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/cartridges.yml index df61f1a3829..e23995a4e0e 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/cartridges.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/cartridges.yml @@ -5,10 +5,10 @@ description: A cartridge that keeps track of glimmer. components: - type: Sprite - sprite: Nyanotrasen/Objects/Devices/cartridge.rsi + sprite: DeltaV/Objects/Devices/cartridge.rsi state: cart-psi - type: Icon - sprite: Nyanotrasen/Objects/Devices/cartridge.rsi + sprite: DeltaV/Objects/Devices/cartridge.rsi state: cart-psi - type: UIFragment ui: !type:GlimmerMonitorUi diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/pda.yml index d6c0cb8c75d..bbc83269c72 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Devices/pda.yml @@ -42,7 +42,7 @@ - SecWatchCartridge - type: entity - parent: BasePDA + parent: CourierPDA # DeltaV - Gives them the MailMetrics cartbridge id: MailCarrierPDA name: mail carrier PDA description: Smells like unopened letters. diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Machines/deep_fryer.yml b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Machines/deep_fryer.yml index 9749a4295d2..6b22117afae 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Machines/deep_fryer.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Machines/deep_fryer.yml @@ -145,11 +145,8 @@ collection: MetalBreak - !type:SpillBehavior solution: vat_oil - - !type:SpawnEntitiesBehavior - spawn: - MachineFrameDestroyed: - min: 1 - max: 1 + - !type:ChangeConstructionNodeBehavior + node: machineFrame - type: ApcPowerReceiver powerLoad: 300 - type: Machine diff --git a/Resources/Prototypes/Nyanotrasen/Guidebook/epistemics.yml b/Resources/Prototypes/Nyanotrasen/Guidebook/epistemics.yml index 77b180d6ea1..ed4d983d02a 100644 --- a/Resources/Prototypes/Nyanotrasen/Guidebook/epistemics.yml +++ b/Resources/Prototypes/Nyanotrasen/Guidebook/epistemics.yml @@ -3,10 +3,10 @@ name: guide-entry-psionics text: "/ServerInfo/Nyanotrasen/Guidebook/Epistemics/Psionics.xml" -# - type: guideEntry # When it's added -# id: AltarsGolemancy -# name: guide-entry-altars-golemancy -# text: "/ServerInfo/Nyanotrasen/Guidebook/Epistemics/Altar.xml" +- type: guideEntry + id: AltarsGolemancy + name: guide-entry-altars-golemancy + text: "/ServerInfo/Nyanotrasen/Guidebook/Epistemics/Altar.xml" - type: guideEntry id: ReverseEngineering diff --git a/Resources/Prototypes/Nyanotrasen/Loadouts/Jobs/Epistemics/forensicmantis.yml b/Resources/Prototypes/Nyanotrasen/Loadouts/Jobs/Epistemics/forensicmantis.yml index c6df3e71ca3..33224a158a2 100644 --- a/Resources/Prototypes/Nyanotrasen/Loadouts/Jobs/Epistemics/forensicmantis.yml +++ b/Resources/Prototypes/Nyanotrasen/Loadouts/Jobs/Epistemics/forensicmantis.yml @@ -15,22 +15,6 @@ equipment: jumpsuit: ClothingUniformSkirtMantis -# Back -- type: loadout - id: MantisBackpack - equipment: - back: ClothingBackpackMantisFilled - -- type: loadout - id: MantisSatchel - equipment: - back: ClothingBackpackSatchelMantisFilled - -- type: loadout - id: MantisDuffel - equipment: - back: ClothingBackpackDuffelMantisFilled - # OuterClothing - type: loadout id: MantisCoat diff --git a/Resources/Prototypes/Nyanotrasen/Loadouts/loadout_groups.yml b/Resources/Prototypes/Nyanotrasen/Loadouts/loadout_groups.yml index 2ffcbd25368..740d034967f 100644 --- a/Resources/Prototypes/Nyanotrasen/Loadouts/loadout_groups.yml +++ b/Resources/Prototypes/Nyanotrasen/Loadouts/loadout_groups.yml @@ -37,14 +37,6 @@ - MantisJumpsuit - MantisJumpskirt -- type: loadoutGroup - id: MantisBackpack - name: loadout-group-mantis-backpack - loadouts: - - MantisBackpack - - MantisSatchel - - MantisDuffel - - type: loadoutGroup id: MantisOuterClothing name: loadout-group-mantis-outerclothing diff --git a/Resources/Prototypes/Nyanotrasen/Loadouts/role_loadouts.yml b/Resources/Prototypes/Nyanotrasen/Loadouts/role_loadouts.yml index 0ef279f75cc..5a7f6576a80 100644 --- a/Resources/Prototypes/Nyanotrasen/Loadouts/role_loadouts.yml +++ b/Resources/Prototypes/Nyanotrasen/Loadouts/role_loadouts.yml @@ -18,7 +18,7 @@ - GroupTankHarness - MantisHead - MantisJumpsuit - - MantisBackpack + - ScientistBackpack - MantisOuterClothing - MantisShoes - MantisGloves diff --git a/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Epistemics/forensicmantis.yml b/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Epistemics/forensicmantis.yml index f4d511f6a87..b31b6ec1b0b 100644 --- a/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Epistemics/forensicmantis.yml +++ b/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Epistemics/forensicmantis.yml @@ -32,3 +32,9 @@ eyes: ClothingEyesGlassesSunglasses ears: ClothingHeadsetScience # DeltaV - Mantis is part of Epistemics belt: ClothingBeltMantis + storage: + back: + - HandLabeler + - PillMindbreakerToxin + - BoxFolderGrey + - RubberStampMantis diff --git a/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/prisoner.yml b/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/prisoner.yml index 6e90a942b5a..137aeb02ae0 100644 --- a/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/prisoner.yml +++ b/Resources/Prototypes/Nyanotrasen/Roles/Jobs/Wildcards/prisoner.yml @@ -13,6 +13,9 @@ - !type:DepartmentTimeRequirement department: Security time: 21600 + special: + - !type:AddImplantSpecial + implants: [ TrackingImplant ] - type: startingGear id: PrisonerGear diff --git a/Resources/Prototypes/Nyanotrasen/Voice/speech_emotes.yml b/Resources/Prototypes/Nyanotrasen/Voice/speech_emotes.yml index a4f50896b7e..2a028cccac8 100644 --- a/Resources/Prototypes/Nyanotrasen/Voice/speech_emotes.yml +++ b/Resources/Prototypes/Nyanotrasen/Voice/speech_emotes.yml @@ -10,7 +10,7 @@ - Vocal blacklist: components: - - BorgChasis + - BorgChassis chatMessages: [hisses.] chatTriggers: - hiss @@ -29,7 +29,7 @@ - Vocal blacklist: components: - - BorgChasis + - BorgChassis chatMessages: [meows.] chatTriggers: - meow @@ -54,7 +54,7 @@ - Vocal blacklist: components: - - BorgChasis + - BorgChassis chatMessages: [mews.] chatTriggers: - mew @@ -73,7 +73,7 @@ - Vocal blacklist: components: - - BorgChasis + - BorgChassis chatMessages: [growls.] chatTriggers: - growl @@ -92,7 +92,7 @@ - Vocal blacklist: components: - - BorgChasis + - BorgChassis chatMessages: [purrs.] chatTriggers: - purr diff --git a/Resources/Prototypes/Nyanotrasen/psionicArtifacts.yml b/Resources/Prototypes/Nyanotrasen/psionicArtifacts.yml index 8f952b39057..96cfa0fcdf6 100644 --- a/Resources/Prototypes/Nyanotrasen/psionicArtifacts.yml +++ b/Resources/Prototypes/Nyanotrasen/psionicArtifacts.yml @@ -1,21 +1,23 @@ -- type: weightedRandom - id: PsionicArtifactPool - weights: - ClothingHandsDispelGloves: 1 - ClothingEyesTelegnosisSpectacles: 1 - ClothingHandsGlovesColorYellowUnsulated: 1 - PonderingOrbTelepathic: 1 - ClothingShoesBootsMagBlinding: 0.5 - LidOSaws: 0.25 - BedsheetInvisibilityCloak: 0.15 - # WeaponWandPolymorphCarp: 0.05 - # WeaponWandPolymorphMonkey: 0.05 - # WeaponWandFireball: 0.025 - # WeaponWandDeath: 0.001 - # WeaponWandPolymorphDoor: 0.05 - SpawnSpellbook: 0.025 - ForceWallSpellbook: 0.025 - BlinkBook: 0.025 - SmiteBook: 0.00025 - KnockSpellbook: 0.025 - FireballSpellbook: 0.01 +# Items to spawn when sacrificing a psionic +- type: entityTable + id: PsionicSacrificeRewards + table: !type:AllSelector + children: + - id: MaterialBluespace1 + amount: !type:RangeNumberSelector + range: 1, 4 + - !type:NestedSelector + tableId: PsionicArtifacts + prob: 0.5 + +- type: entityTable + id: PsionicArtifacts + table: !type:GroupSelector + children: + - !type:AllSelector # fake wizard outfit + children: + - id: ClothingHeadHatWizardFake # the hat is fake so you can't sacrifice for gamer eva suit + - id: ClothingOuterWizard + - id: ClothingShoesWizard + - id: CrystalNormality + weight: 0.5 diff --git a/Resources/Prototypes/Objectives/dragon.yml b/Resources/Prototypes/Objectives/dragon.yml index bbdac8faa1a..9d81c62ab3f 100644 --- a/Resources/Prototypes/Objectives/dragon.yml +++ b/Resources/Prototypes/Objectives/dragon.yml @@ -9,7 +9,7 @@ issuer: objective-issuer-dragon - type: RoleRequirement roles: - components: + mindRoles: - DragonRole - type: entity diff --git a/Resources/Prototypes/Objectives/ninja.yml b/Resources/Prototypes/Objectives/ninja.yml index 00bf9d705b8..5118e89e26f 100644 --- a/Resources/Prototypes/Objectives/ninja.yml +++ b/Resources/Prototypes/Objectives/ninja.yml @@ -9,7 +9,7 @@ issuer: objective-issuer-spiderclan - type: RoleRequirement roles: - components: + mindRoles: - NinjaRole - type: entity diff --git a/Resources/Prototypes/Objectives/objectiveGroups.yml b/Resources/Prototypes/Objectives/objectiveGroups.yml index f1341c1bc30..05f563c2972 100644 --- a/Resources/Prototypes/Objectives/objectiveGroups.yml +++ b/Resources/Prototypes/Objectives/objectiveGroups.yml @@ -73,7 +73,6 @@ StampStealCollectionObjective: 1 DoorRemoteStealCollectionObjective: 1 TechnologyDiskStealCollectionObjective: 1 #rnd - FigurineStealCollectionObjective: 0.3 #service IDCardsStealCollectionObjective: 1 LAMPStealCollectionObjective: 2 #only for moth diff --git a/Resources/Prototypes/Objectives/stealTargetGroups.yml b/Resources/Prototypes/Objectives/stealTargetGroups.yml index a3f990dcc2d..dd01afea0e4 100644 --- a/Resources/Prototypes/Objectives/stealTargetGroups.yml +++ b/Resources/Prototypes/Objectives/stealTargetGroups.yml @@ -93,13 +93,6 @@ # Thief Collection -- type: stealTargetGroup - id: Figurines - name: steal-target-groups-figurines - sprite: - sprite: Objects/Fun/figurines.rsi - state: figurine_spawner - - type: stealTargetGroup id: HeadCloak name: steal-target-groups-heads-cloaks diff --git a/Resources/Prototypes/Objectives/thief.yml b/Resources/Prototypes/Objectives/thief.yml index 7a397d9ab6f..7d0ebbaef0c 100644 --- a/Resources/Prototypes/Objectives/thief.yml +++ b/Resources/Prototypes/Objectives/thief.yml @@ -7,7 +7,7 @@ issuer: objective-issuer-thief - type: RoleRequirement roles: - components: + mindRoles: - ThiefRole - type: entity @@ -53,17 +53,6 @@ # Collections -- type: entity - parent: BaseThiefStealCollectionObjective - id: FigurineStealCollectionObjective - components: - - type: StealCondition - stealGroup: Figurines - minCollectionSize: 10 - maxCollectionSize: 18 #will be limited to the number of figures on the station anyway. - - type: Objective - difficulty: 0.25 - - type: entity parent: BaseThiefStealCollectionObjective id: HeadCloakStealCollectionObjective @@ -129,7 +118,7 @@ - type: StealCondition stealGroup: IDCard minCollectionSize: 5 - maxCollectionSize: 15 + maxCollectionSize: 10 verifyMapExistence: false - type: Objective difficulty: 0.7 diff --git a/Resources/Prototypes/Objectives/traitor.yml b/Resources/Prototypes/Objectives/traitor.yml index fc97e1797c7..3acfb04d244 100644 --- a/Resources/Prototypes/Objectives/traitor.yml +++ b/Resources/Prototypes/Objectives/traitor.yml @@ -7,7 +7,7 @@ issuer: objective-issuer-syndicate - type: RoleRequirement roles: - components: + mindRoles: - TraitorRole - type: entity diff --git a/Resources/Prototypes/Procedural/Magnet/asteroid_ore_gens.yml b/Resources/Prototypes/Procedural/Magnet/asteroid_ore_gens.yml index 661350f6de6..de70e2d5ecd 100644 --- a/Resources/Prototypes/Procedural/Magnet/asteroid_ore_gens.yml +++ b/Resources/Prototypes/Procedural/Magnet/asteroid_ore_gens.yml @@ -3,8 +3,8 @@ weights: OreIron: 1.0 OreQuartz: 1.0 - OreCoal: 0.33 - OreSalt: 0.25 + OreCoal: 0.58 # DeltaV: was 0.33, added 0.25 from salt + #OreSalt: 0.25 # DeltaV: removed salt, added weight to coal OreGold: 0.25 OreSilver: 0.25 OrePlasma: 0.20 diff --git a/Resources/Prototypes/Procedural/salvage_loot.yml b/Resources/Prototypes/Procedural/salvage_loot.yml index 68bfcd89573..c29cc2ef158 100644 --- a/Resources/Prototypes/Procedural/salvage_loot.yml +++ b/Resources/Prototypes/Procedural/salvage_loot.yml @@ -139,7 +139,7 @@ guaranteed: true loots: - !type:BiomeMarkerLoot - proto: OreSalt + proto: OreCoal # DeltaV: replace salt with coal # - Medium value - type: salvageLoot diff --git a/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml b/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml index fac699baebe..6617791a633 100644 --- a/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml +++ b/Resources/Prototypes/Reagents/Consumable/Drink/alcohol.yml @@ -876,8 +876,6 @@ - !type:AdjustReagent reagent: Ethanol amount: 0.05 - Medicine: - effects: - !type:HealthChange damage: groups: diff --git a/Resources/Prototypes/Reagents/Consumable/Food/ingredients.yml b/Resources/Prototypes/Reagents/Consumable/Food/ingredients.yml index 34cafe50983..76362684037 100644 --- a/Resources/Prototypes/Reagents/Consumable/Food/ingredients.yml +++ b/Resources/Prototypes/Reagents/Consumable/Food/ingredients.yml @@ -234,6 +234,9 @@ reagent: Nutriment min: 0.1 factor: 1 + - !type:AdjustReagent # DeltaV - Make cocoa powder actually toxic to animal organs + reagent: Theobromine + amount: 0.2 plantMetabolism: - !type:PlantAdjustNutrition amount: 0.1 diff --git a/Resources/Prototypes/Reagents/narcotics.yml b/Resources/Prototypes/Reagents/narcotics.yml index ca4c613dae4..beeefcb8797 100644 --- a/Resources/Prototypes/Reagents/narcotics.yml +++ b/Resources/Prototypes/Reagents/narcotics.yml @@ -366,6 +366,9 @@ - !type:GenericStatusEffect key: Muted component: Muted + type: Add + time: 10 + refresh: false - type: reagent id: NorepinephricAcid diff --git a/Resources/Prototypes/Reagents/toxins.yml b/Resources/Prototypes/Reagents/toxins.yml index 12b05f9b232..24bdf7b6596 100644 --- a/Resources/Prototypes/Reagents/toxins.yml +++ b/Resources/Prototypes/Reagents/toxins.yml @@ -403,7 +403,7 @@ boilingPoint: 554 # I'm not a chemist, but it boils at 295, lower than melting point, idk how it works so I gave it higher value metabolisms: Poison: - metabolismRate: 0.05 + metabolismRate: 0.04 # DeltaV - Slowed to allow coffee/etc to build up theobromine effects: - !type:HealthChange conditions: @@ -411,12 +411,15 @@ type: Animal # Applying damage to the mobs with lower metabolism capabilities damage: types: - Poison: 0.4 + Poison: 0.3 # DeltaV - slightly reduced to account for slowed metabolism rate - !type:ChemVomit - probability: 0.04 #Scaled for time, not metabolismrate. + probability: 0.1 #Scaled for time, not metabolismrate. # DeltaV - Increased from .04 Vomit more when there is a lot of it conditions: - !type:OrganType type: Animal + - !type:ReagentThreshold #DeltaV - Readded this. No longer causes vomitting at the lightest whiff of coffee + reagent: Theobromine + min: 0.5 - type: reagent id: Amatoxin diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/machines/computer.yml b/Resources/Prototypes/Recipes/Construction/Graphs/machines/computer.yml index 4792bb216f3..b3c9cac9262 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/machines/computer.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/machines/computer.yml @@ -117,15 +117,15 @@ amount: 2 steps: - tool: Prying + doAfter: 1 - node: computer entity: !type:BoardNodeEntity { container: board } edges: - to: monitorUnsecured - conditions: - - !type:AllWiresCut {} steps: - - tool: Screwing + - tool: Prying + doAfter: 1 - node: monitorBroken entity: ComputerBroken diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/firelock.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/firelock.yml index 6b6d5c4895a..37b70b90285 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/firelock.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/firelock.yml @@ -135,6 +135,12 @@ conditions: - !type:DoorWelded welded: true + # DeltaV modifications - Revert fire-fighting door remote removal, added wires to hack it. + - !type:DoorBolted + value: false + - !type:WirePanel + - !type:AllWiresCut + # DeltaV end of modifications. steps: - tool: Anchoring doAfter: 0.25 @@ -168,6 +174,12 @@ conditions: - !type:EntityAnchored anchored: true + # DeltaV modifications - Revert fire-fighting door remote removal, added wires to hack it. + - !type:DoorBolted + value: false + - !type:WirePanel + - !type:AllWiresCut + # DeltaV end of modifications. steps: - tool: Anchoring doAfter: 1 @@ -182,6 +194,12 @@ conditions: - !type:DoorWelded welded: true + # DeltaV modifications - Revert fire-fighting door remote removal, added wires to hack it. + - !type:DoorBolted + value: false + - !type:WirePanel + - !type:AllWiresCut + # DeltaV end of modifications. steps: - tool: Anchoring doAfter: 0.25 diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/window.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/window.yml index b9e6eae0815..1782c5924bf 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/window.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/window.yml @@ -223,11 +223,6 @@ - material: Uranium amount: 2 doAfter: 1 - - to: shuttleWindow - steps: - - material: Plasteel - amount: 2 - doAfter: 3 - node: reinforcedPlasmaWindow entity: ReinforcedPlasmaWindow diff --git a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml index 8dc25c1c725..fa2b6573915 100644 --- a/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml +++ b/Resources/Prototypes/Recipes/Cooking/meal_recipes.yml @@ -1062,6 +1062,16 @@ FoodMeat: 3 FoodPlateTin: 1 +- type: microwaveMealRecipe + id: RecipePumpkinPie + name: pumpkin pie recipe + result: FoodPiePumpkin + time: 15 + solids: + FoodDoughPie: 1 + FoodPumpkin: 1 + FoodPlateTin: 1 + #- type: microwaveMealRecipe # id: RecipePlumpPie # name: plump pie recipe @@ -1978,4 +1988,4 @@ solids: FoodCroissantRaw: 1 FoodButterSlice: 1 - ShardGlass: 1 \ No newline at end of file + ShardGlass: 1 diff --git a/Resources/Prototypes/Recipes/Cooking/medical_recipes.yml b/Resources/Prototypes/Recipes/Cooking/medical_recipes.yml index 9d1947f03eb..c59659a949f 100644 --- a/Resources/Prototypes/Recipes/Cooking/medical_recipes.yml +++ b/Resources/Prototypes/Recipes/Cooking/medical_recipes.yml @@ -2,7 +2,7 @@ id: RecipeAloeCream name: aloe cream recipe result: AloeCream - time: 10 + time: 5 # DeltaV - Changed from 10 to 5 solids: FoodAloe: 1 @@ -10,7 +10,7 @@ id: RecipeMedicatedSuture name: medicated suture recipe result: MedicatedSuture - time: 10 + time: 5 # DeltaV - Changed from 10 to 5 solids: FoodPoppy: 1 Brutepack: 1 @@ -23,7 +23,7 @@ id: RecipeRegenerativeMesh name: regenerative mesh recipe result: RegenerativeMesh - time: 10 + time: 5 # DeltaV - Changed from 10 to 5 solids: FoodAloe: 1 Ointment: 1 diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/bots/firebot.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/bots/firebot.yml new file mode 100644 index 00000000000..977ffd40933 --- /dev/null +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/bots/firebot.yml @@ -0,0 +1,33 @@ +- type: constructionGraph + id: FireBot + start: start + graph: + - node: start + edges: + - to: bot + steps: + - tag: FireExtinguisher + icon: + sprite: Objects/Misc/fire_extinguisher.rsi + state: fire_extinguisher_open + name: fire extinguisher + - tag: FireHelmet + icon: + sprite: Clothing/Head/Helmets/firehelmet.rsi + state: icon + name: fire helmet + doAfter: 2 + - tag: ProximitySensor + icon: + sprite: Objects/Misc/proximity_sensor.rsi + state: icon + name: proximity sensor + doAfter: 2 + - tag: BorgArm + icon: + sprite: Mobs/Silicon/drone.rsi + state: l_hand + name: borg arm + doAfter: 2 + - node: bot + entity: MobFireBot diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/rolling_pin.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/rolling_pin.yml new file mode 100644 index 00000000000..caa9ebbea91 --- /dev/null +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/improvised/rolling_pin.yml @@ -0,0 +1,15 @@ +- type: constructionGraph + id: WoodenRollingPin + start: start + graph: + - node: start + edges: + - to: rollingpin + steps: + - material: WoodPlank + amount: 2 + - material: MetalRod + amount: 1 + doAfter: 2 + - node: rollingpin + entity: RollingPin diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/storage/cratefreezer.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/storage/cratefreezer.yml new file mode 100644 index 00000000000..a43d84e1734 --- /dev/null +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/storage/cratefreezer.yml @@ -0,0 +1,42 @@ +- type: constructionGraph + id: CrateFreezer + start: start + graph: + - node: start + edges: + - to: done + steps: + - material: Steel + amount: 5 + - material: Cable + amount: 2 + doAfter: 5 + - tag: FreezerElectronics + name: freezer electronics + icon: + sprite: Objects/Misc/module.rsi + state: door_electronics + - node: done + entity: CrateFreezer + edges: + - to: start + steps: + - tool: Screwing + doAfter: 5 + conditions: + - !type:StorageWelded + welded: false + - !type:Locked + locked: false + completed: + - !type:SpawnPrototype + prototype: SheetSteel1 + amount: 5 + - !type:SpawnPrototype + prototype: CableApcStack1 + amount: 2 + - !type:SpawnPrototype + prototype: FreezerElectronics + amount: 1 + - !type:EmptyAllContainers + - !type:DeleteEntity diff --git a/Resources/Prototypes/Recipes/Crafting/Graphs/storage/tallbox.yml b/Resources/Prototypes/Recipes/Crafting/Graphs/storage/tallbox.yml index e72c56ff44c..17696eaaff8 100644 --- a/Resources/Prototypes/Recipes/Crafting/Graphs/storage/tallbox.yml +++ b/Resources/Prototypes/Recipes/Crafting/Graphs/storage/tallbox.yml @@ -61,6 +61,49 @@ - !type:EmptyAllContainers - !type:DeleteEntity +- type: constructionGraph + id: ClosetFreezer + start: start + graph: + - node: start + edges: + - to: done + steps: + - material: Steel + amount: 4 + - material: Cable + amount: 2 + doAfter: 5 + - tag: FreezerElectronics + name: freezer electronics + icon: + sprite: Objects/Misc/module.rsi + state: door_electronics + - node: done + entity: LockerFreezerBase + edges: + - to: start + steps: + - tool: Screwing + doAfter: 5 + conditions: + - !type:StorageWelded + welded: false + - !type:Locked + locked: false + completed: + - !type:SpawnPrototype + prototype: SheetSteel1 + amount: 4 + - !type:SpawnPrototype + prototype: CableApcStack1 + amount: 2 + - !type:SpawnPrototype + prototype: FreezerElectronics + amount: 1 + - !type:EmptyAllContainers + - !type:DeleteEntity + - type: constructionGraph id: ClosetWall start: start diff --git a/Resources/Prototypes/Recipes/Crafting/bots.yml b/Resources/Prototypes/Recipes/Crafting/bots.yml index 3031f4a7803..21b524a0609 100644 --- a/Resources/Prototypes/Recipes/Crafting/bots.yml +++ b/Resources/Prototypes/Recipes/Crafting/bots.yml @@ -11,6 +11,19 @@ sprite: Mobs/Silicon/Bots/cleanbot.rsi state: cleanbot +- type: construction + name: firebot + id: firebot + graph: FireBot + startNode: start + targetNode: bot + category: construction-category-utilities + objectType: Item + description: This bot puts out fires wherever it goes. + icon: + sprite: Mobs/Silicon/Bots/firebot.rsi + state: firebot + - type: construction name: honkbot id: honkbot diff --git a/Resources/Prototypes/Recipes/Crafting/crates.yml b/Resources/Prototypes/Recipes/Crafting/crates.yml index 72fabc2221b..25450b7d982 100644 --- a/Resources/Prototypes/Recipes/Crafting/crates.yml +++ b/Resources/Prototypes/Recipes/Crafting/crates.yml @@ -31,6 +31,17 @@ icon: { sprite: Structures/Storage/Crates/secure.rsi, state: icon } objectType: Structure +- type: construction + name: freezer + id: CrateFreezer + graph: CrateFreezer + startNode: start + targetNode: done + category: construction-category-storage + description: A metal freezing crate for storing things. + icon: { sprite: Structures/Storage/Crates/freezer.rsi, state: icon } + objectType: Structure + - type: construction name: plastic crate id: CratePlastic diff --git a/Resources/Prototypes/Recipes/Crafting/improvised.yml b/Resources/Prototypes/Recipes/Crafting/improvised.yml index 38d254c1416..c87f4eb3d20 100644 --- a/Resources/Prototypes/Recipes/Crafting/improvised.yml +++ b/Resources/Prototypes/Recipes/Crafting/improvised.yml @@ -145,7 +145,7 @@ targetNode: shell category: construction-category-weapons objectType: Item - description: A homemade shotgun shell that shoots painful glass shrapnel. The spread is so wide that it couldn't hit the broad side of a Barn + description: A homemade shotgun shell that shoots painful glass shrapnel. The spread is so wide that it couldn't hit the broad side of a barn. icon: sprite: Objects/Weapons/Guns/Ammunition/Casings/shotgun_shell.rsi state: improvised @@ -214,3 +214,16 @@ icon: sprite: Objects/Weapons/Bombs/pipebomb.rsi state: icon + +- type: construction + name: rolling pin + id: rollingpin + graph: WoodenRollingPin + startNode: start + targetNode: rollingpin + category: construction-category-tools + objectType: Item + description: A rolling pin, used for cooking and defending the kitchen. + icon: + sprite: Objects/Tools/rolling_pin.rsi + state: icon diff --git a/Resources/Prototypes/Recipes/Crafting/tallbox.yml b/Resources/Prototypes/Recipes/Crafting/tallbox.yml index 21a7ec8225d..c90142de445 100644 --- a/Resources/Prototypes/Recipes/Crafting/tallbox.yml +++ b/Resources/Prototypes/Recipes/Crafting/tallbox.yml @@ -20,6 +20,17 @@ icon: { sprite: Structures/Storage/closet.rsi, state: secure_icon } objectType: Structure +- type: construction + id: ClosetFreezer + name: freezer + graph: ClosetFreezer + startNode: start + targetNode: done + category: construction-category-storage + description: A tall steel box with freezing abilities. + icon: { sprite: Structures/Storage/closet.rsi, state: freezer_icon } + objectType: Structure + - type: construction id: ClosetWall name: wall closet @@ -34,4 +45,4 @@ canRotate: true canBuildInImpassable: true conditions: - - !type:WallmountCondition \ No newline at end of file + - !type:WallmountCondition diff --git a/Resources/Prototypes/Recipes/Lathes/cargo.yml b/Resources/Prototypes/Recipes/Lathes/cargo.yml index 630dc1d062d..82050985b8e 100644 --- a/Resources/Prototypes/Recipes/Lathes/cargo.yml +++ b/Resources/Prototypes/Recipes/Lathes/cargo.yml @@ -3,7 +3,7 @@ result: ConveyorBeltAssembly completetime: 4 materials: - Steel: 500 + Steel: 250 Plastic: 50 - type: latheRecipe diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml index 818ba0fe374..99ff9f25eef 100644 --- a/Resources/Prototypes/Recipes/Lathes/electronics.yml +++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml @@ -98,6 +98,11 @@ id: DoorElectronics result: DoorElectronics +- type: latheRecipe + parent: BaseCheapElectronicsRecipe + id: FreezerElectronics + result: FreezerElectronics + - type: latheRecipe parent: BaseElectronicsRecipe id: AirAlarmElectronics diff --git a/Resources/Prototypes/Recipes/Lathes/misc.yml b/Resources/Prototypes/Recipes/Lathes/misc.yml index b0f94f3abf5..ee90bfb91eb 100644 --- a/Resources/Prototypes/Recipes/Lathes/misc.yml +++ b/Resources/Prototypes/Recipes/Lathes/misc.yml @@ -199,6 +199,13 @@ materials: Steel: 100 +- type: latheRecipe + id: FloorRedCircuit + result: FloorTileItemRCircuit4 + completetime: 2 + materials: + Steel: 100 + - type: latheRecipe id: HandheldStationMap result: HandheldStationMapEmpty diff --git a/Resources/Prototypes/Recipes/Reactions/drinks.yml b/Resources/Prototypes/Recipes/Reactions/drinks.yml index 9bbd07848a8..2353099df56 100644 --- a/Resources/Prototypes/Recipes/Reactions/drinks.yml +++ b/Resources/Prototypes/Recipes/Reactions/drinks.yml @@ -768,6 +768,20 @@ products: NuclearCola: 5 +- type: reaction + id: NuclearColaBreakdown + source: true + requiredMixerCategories: + - Centrifuge + reactants: + NuclearCola: + amount: 10 # assuming we loose all o2 released as gas in the centrifugal process + products: + Ipecac: 2 + Water: 2 + Sugar: 2 + Uranium: 1 + - type: reaction id: Patron requiredMixerCategories: diff --git a/Resources/Prototypes/Research/arsenal.yml b/Resources/Prototypes/Research/arsenal.yml index 864ccf928f3..1cd05a9c80e 100644 --- a/Resources/Prototypes/Research/arsenal.yml +++ b/Resources/Prototypes/Research/arsenal.yml @@ -21,7 +21,7 @@ sprite: Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi state: incendiarydisplay discipline: Arsenal - tier: 1 + tier: 2 # DeltaV moved to t2 from t1 cost: 10000 recipeUnlocks: - BoxShotgunIncendiary @@ -82,7 +82,7 @@ sprite: Objects/Materials/Sheets/other.rsi state: uranium discipline: Arsenal - tier: 1 + tier: 2 # DeltaV moved to t2 from t1 cost: 7500 recipeUnlocks: - MagazineRifleUranium @@ -107,7 +107,7 @@ state: icon discipline: Arsenal tier: 1 - cost: 8000 + cost: 5000 # DeltaV - Lowered from 8000 recipeUnlocks: - Truncheon - TelescopicShield @@ -115,6 +115,7 @@ - WeaponDisablerSMG - BorgModuleSecurityDeescalate # Delta-V : SecBorg Research - BorgModuleSecurityEscalate # Delta-V : SecBorg Research + - type: technology id: ExplosiveTechnology @@ -156,22 +157,24 @@ state: icon discipline: Arsenal tier: 2 - cost: 10000 + cost: 12500 # DeltaV: increased from 10000 recipeUnlocks: - WeaponLaserCannon - -- type: technology - id: WaveParticleHarnessing - name: research-technology-wave-particle-harnessing - icon: - sprite: Objects/Weapons/Guns/Battery/xray.rsi - state: icon - discipline: Arsenal - tier: 2 - cost: 10000 - recipeUnlocks: - WeaponXrayCannon +# DeltaV: merged with concentrated laser weaponry +#- type: technology +# id: WaveParticleHarnessing +# name: research-technology-wave-particle-harnessing +# icon: +# sprite: Objects/Weapons/Guns/Battery/xray.rsi +# state: icon +# discipline: Arsenal +# tier: 2 +# cost: 10000 +# recipeUnlocks: +# - WeaponXrayCannon + - type: technology id: BasicShuttleArmament name: research-technology-basic-shuttle-armament @@ -179,7 +182,7 @@ sprite: Structures/Power/cage_recharger.rsi state: full discipline: Arsenal - tier: 2 + tier: 1 # DeltaV: moved to T1 from t2 cost: 10500 recipeUnlocks: - PowerCageRechargerCircuitboard @@ -187,12 +190,13 @@ - PowerCageMedium - MagazineGrenadeEmpty - GrenadeFlash - #- GrenadeBlast # DeltaV - no + - GrenadeBlast - ShuttleGunSvalinnMachineGunCircuitboard - ShuttleGunPerforatorCircuitboard - ShuttleGunFriendshipCircuitboard technologyPrerequisites: - SalvageWeapons + - ExplosiveTechnology # Tier 3 @@ -215,7 +219,7 @@ sprite: Objects/Weapons/Guns/Battery/svalinn.rsi state: icon discipline: Arsenal - tier: 3 + tier: 2 # DeltaV: moved to t2 from t3 cost: 15000 recipeUnlocks: - WeaponLaserSvalinn @@ -227,7 +231,7 @@ sprite: Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi state: icon discipline: Arsenal - tier: 3 + tier: 2 # DeltaV: moved to t2 from t3 cost: 15000 recipeUnlocks: - GrenadeEMP diff --git a/Resources/Prototypes/Research/experimental.yml b/Resources/Prototypes/Research/experimental.yml index 59dd1f12bbc..729f4d44443 100644 --- a/Resources/Prototypes/Research/experimental.yml +++ b/Resources/Prototypes/Research/experimental.yml @@ -56,8 +56,8 @@ cost: 5000 recipeUnlocks: - TechDiskComputerCircuitboard - - ReverseEngineeringMachineCircuitboard #delta change - + - ReverseEngineeringMachineCircuitboard # DeltaV + - type: technology id: MagnetsTech name: research-technology-magnets-tech @@ -70,6 +70,7 @@ recipeUnlocks: - ClothingShoesBootsMagSci - ClothingShoesBootsMoon + - ClothingShoesBootsSecurityMagboots # DeltaV - Added security magboots. - type: technology id: AnomalyCoreHarnessing diff --git a/Resources/Prototypes/Roles/Antags/nukeops.yml b/Resources/Prototypes/Roles/Antags/nukeops.yml index ab3f901171b..911f92f0de0 100644 --- a/Resources/Prototypes/Roles/Antags/nukeops.yml +++ b/Resources/Prototypes/Roles/Antags/nukeops.yml @@ -28,9 +28,9 @@ requirements: - !type:OverallPlaytimeRequirement time: 108000 # DeltaV - 30 hours - - !type:DepartmentTimeRequirement # DeltaV - Medical dept time requirement - department: Medical - time: 36000 # DeltaV - 10 hours + - !type:RoleTimeRequirement #Delta V - they should be able to make basic chems + role: JobChemist + time: 14400 # DeltaV- 4 hours - type: antag id: NukeopsCommander diff --git a/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml b/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml index cb34b7352dc..02682ed863b 100644 --- a/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml +++ b/Resources/Prototypes/Roles/Jobs/Cargo/quartermaster.yml @@ -19,11 +19,10 @@ time: 43200 #DeltaV 12 hours - !type:OverallPlaytimeRequirement time: 144000 #40 hrs -# - !type:AgeRequirement - DeltaV - PR #1611 for context -# requiredAge: 20 weight: 10 startingGear: QuartermasterGear icon: "JobIconQuarterMaster" + requireAdminNotify: true supervisors: job-supervisors-captain canBeAntag: false access: @@ -32,9 +31,9 @@ - Mail # Nyanotrasen - MailCarrier, see Resources/Prototypes/Nyanotrasen/Roles/Jobs/Cargo/mail-carrier.yml - Quartermaster - Maintenance + - External - Command - Orders # DeltaV - Orders, see Resources/Prototypes/DeltaV/Access/cargo.yml - - External # DeltaV - for promoting salvage specialists - Cryogenics special: - !type:AddImplantSpecial diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/librarian.yml b/Resources/Prototypes/Roles/Jobs/Civilian/librarian.yml index a0d73320faf..4d6d8e019e6 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/librarian.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/librarian.yml @@ -20,7 +20,7 @@ shoes: ClothingShoesBootsLaceup id: LibrarianPDA ears: ClothingHeadsetService - pocket1: d10Dice + pocket1: d20Dice pocket2: HandLabeler # for making named bestsellers storage: back: diff --git a/Resources/Prototypes/Roles/Jobs/Command/captain.yml b/Resources/Prototypes/Roles/Jobs/Command/captain.yml index 3dad2356391..2872da92d5f 100644 --- a/Resources/Prototypes/Roles/Jobs/Command/captain.yml +++ b/Resources/Prototypes/Roles/Jobs/Command/captain.yml @@ -24,9 +24,6 @@ time: 108000 # DeltaV - 30 hours, was 15 - !type:OverallPlaytimeRequirement # DeltaV - Playtime requirement time: 108000 # 30 hours - - !type:WhitelistRequirement # DeltaV - Whitelist requirement -# - !type:AgeRequirement - DeltaV - PR #1611 for context -# requiredAge: 20 weight: 20 startingGear: CaptainGear icon: "JobIconCaptain" diff --git a/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml b/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml index f1b23c20ebb..33e5d9d0cae 100644 --- a/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml +++ b/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml @@ -19,8 +19,6 @@ time: 72000 # 20 hours - !type:OverallPlaytimeRequirement # DeltaV - Playtime requirement time: 90000 # 25 hours -# - !type:AgeRequirement - DeltaV - PR #1611 for context -# requiredAge: 20 weight: 10 # DeltaV - Changed HoP weight from 20 to 10 due to them not being more important than other Heads startingGear: HoPGear icon: "JobIconHeadOfPersonnel" diff --git a/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml b/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml index 18435d5775a..e57aa7fc84e 100644 --- a/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml +++ b/Resources/Prototypes/Roles/Jobs/Engineering/chief_engineer.yml @@ -15,8 +15,6 @@ time: 90000 # DeltaV - 25 hours, was 10 # - !type:OverallPlaytimeRequirement # time: 144000 # DeltaV - was 40 hours upstream -# - !type:AgeRequirement - DeltaV - PR #1611 for context -# requiredAge: 20 weight: 10 startingGear: ChiefEngineerGear icon: "JobIconChiefEngineer" diff --git a/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml b/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml index 4d3fd5f9e30..bd10b26dca9 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml @@ -18,8 +18,6 @@ time: 43200 # DeltaV - 12 hours - !type:OverallPlaytimeRequirement time: 72000 # DeltaV - 20 hours, was 40 -# - !type:AgeRequirement - DeltaV - PR #1611 for context -# requiredAge: 20 weight: 10 startingGear: CMOGear icon: "JobIconChiefMedicalOfficer" diff --git a/Resources/Prototypes/Roles/Jobs/Science/borg.yml b/Resources/Prototypes/Roles/Jobs/Science/borg.yml index a06731e2409..441583c0ca4 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/borg.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/borg.yml @@ -7,7 +7,7 @@ requirements: - !type:RoleTimeRequirement role: JobBorg - time: 18000 # 5 hrs + time: 54000 # 15 hrs canBeAntag: false setPreference: false # DeltaV - disable AI until its fleshed out whitelisted: true # DeltaV - ai must be whitelisted @@ -23,7 +23,7 @@ playTimeTracker: JobBorg requirements: - !type:OverallPlaytimeRequirement - time: 216000 # 60 hrs + time: 144000 # 40 hrs canBeAntag: false icon: JobIconBorg supervisors: job-supervisors-rd diff --git a/Resources/Prototypes/Roles/Jobs/Science/research_director.yml b/Resources/Prototypes/Roles/Jobs/Science/research_director.yml index af262e43b0e..691778e65bf 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/research_director.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/research_director.yml @@ -10,8 +10,6 @@ time: 54000 # DeltaV - 15 hours - !type:OverallPlaytimeRequirement time: 72000 # DeltaV - 20 hours, was 40 -# - !type:AgeRequirement - DeltaV - PR #1611 for context -# requiredAge: 20 weight: 10 startingGear: ResearchDirectorGear icon: "JobIconResearchDirector" @@ -25,6 +23,7 @@ - ResearchDirector - Mantis # DeltaV - Psionic Mantis, see Resources/Prototypes/DeltaV/Access/epistemics.yml - Chapel # DeltaV - Chaplain is in Epistemics + - Robotics # DeltaV - Robotics access - External # DeltaV - AI satellite access - Cryogenics special: # Nyanotrasen - Mystagogue can use the Bible diff --git a/Resources/Prototypes/Roles/Jobs/Science/scientist.yml b/Resources/Prototypes/Roles/Jobs/Science/scientist.yml index 0f1ec0ec7a3..193f59bd571 100644 --- a/Resources/Prototypes/Roles/Jobs/Science/scientist.yml +++ b/Resources/Prototypes/Roles/Jobs/Science/scientist.yml @@ -14,6 +14,8 @@ access: - Research - Maintenance + extendedAccess: # DeltaV: Scientists get robotics access on lowpop + - Robotics - type: startingGear id: ScientistGear diff --git a/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml b/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml index f3dc8872ba9..7c95ec3c948 100644 --- a/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml +++ b/Resources/Prototypes/Roles/Jobs/Security/head_of_security.yml @@ -15,8 +15,6 @@ time: 36000 # 10 hours - !type:OverallPlaytimeRequirement time: 90000 # DeltaV - 25 hours, was 40 - - !type:AgeRequirement - requiredAge: 21 weight: 10 startingGear: HoSGear icon: "JobIconHeadOfSecurity" diff --git a/Resources/Prototypes/Roles/Jobs/departments.yml b/Resources/Prototypes/Roles/Jobs/departments.yml index 64d811004c5..64e9d7b6792 100644 --- a/Resources/Prototypes/Roles/Jobs/departments.yml +++ b/Resources/Prototypes/Roles/Jobs/departments.yml @@ -143,6 +143,7 @@ roles: - Borg - MedicalBorg # DeltaV - roundstart mediborg job + - SecurityBorg # Delta-V : Security Borg - StationAi primary: false # DeltaV - removed from primary dept diff --git a/Resources/Prototypes/Roles/MindRoles/mind_roles.yml b/Resources/Prototypes/Roles/MindRoles/mind_roles.yml new file mode 100644 index 00000000000..926ce512b41 --- /dev/null +++ b/Resources/Prototypes/Roles/MindRoles/mind_roles.yml @@ -0,0 +1,182 @@ +- type: entity + id: BaseMindRole + name: Mind Role + description: Mind Role entity + abstract: true + components: + - type: MindRole + +- type: entity + parent: BaseMindRole + id: BaseMindRoleAntag + abstract: true + components: + - type: MindRole + antag: true + +#Observer +- type: entity + parent: BaseMindRole + id: MindRoleObserver + name: Observer Role + components: + - type: ObserverRole + +#Ghostrole Marker +- type: entity + parent: BaseMindRole + id: MindRoleGhostMarker + name: Ghost Role + components: + - type: GhostRoleMarkerRole + +# The Job MindRole holds the mob's Job prototype +- type: entity + parent: BaseMindRole + id: MindRoleJob + name: Job Role +# description: + # MindRoleComponent.JobPrototype is filled by SharedJobSystem + +# Subverted Silicon +- type: entity + parent: BaseMindRoleAntag + id: MindRoleSubvertedSilicon + name: Subverted Silicon Role + description: + components: + - type: SubvertedSiliconRole + - type: MindRole + antagPrototype: SubvertedSilicon + +# Dragon +- type: entity + parent: BaseMindRoleAntag + id: MindRoleDragon + name: Dragon Role +# description: + components: + - type: MindRole + antagPrototype: Dragon + exclusiveAntag: true + - type: DragonRole + - type: RoleBriefing + briefing: dragon-role-briefing + +# Ninja +- type: entity + parent: BaseMindRoleAntag + id: MindRoleNinja + name: Space Ninja Role +# description: mind-role-ninja-description + components: + - type: MindRole + antagPrototype: SpaceNinja + exclusiveAntag: true + - type: NinjaRole + +# Nukies +- type: entity + parent: BaseMindRoleAntag + id: MindRoleNukeops + name: Nukeops Operative Role +# description: mind-role-nukeops-description + components: + - type: MindRole + exclusiveAntag: true + antagPrototype: Nukeops + - type: NukeopsRole + +- type: entity + parent: MindRoleNukeops + id: MindRoleNukeopsMedic + name: Nukeops Medic Role +# description: mind-role-nukeops-medic-description + components: + - type: MindRole + antagPrototype: NukeopsMedic + +- type: entity + parent: MindRoleNukeops + id: MindRoleNukeopsCommander + name: Nukeops Commander Role +# description: mind-role-nukeops-commander-description + components: + - type: MindRole + antagPrototype: NukeopsCommander + +# Revolutionaries +- type: entity + parent: BaseMindRoleAntag + id: MindRoleHeadRevolutionary + name: Head Revolutionary Role +# description: mind-role-head-revolutionary-description + components: + - type: MindRole + antagPrototype: HeadRev + exclusiveAntag: true + - type: RevolutionaryRole + +- type: entity + parent: MindRoleHeadRevolutionary + id: MindRoleRevolutionary + name: Revolutionary Role +# description: mind-role-revolutionary-description + components: + - type: MindRole + antagPrototype: Rev + +# Thief +- type: entity + parent: BaseMindRoleAntag + id: MindRoleThief + name: Thief Role +# description: mind-role-thief-description + components: + - type: MindRole + antagPrototype: Thief + - type: ThiefRole + +# Traitors +- type: entity + parent: BaseMindRoleAntag + id: MindRoleTraitor + name: Traitor Role +# description: mind-role-traitor-description + components: + - type: MindRole + antagPrototype: Traitor + exclusiveAntag: true + - type: TraitorRole + +- type: entity + parent: MindRoleTraitor + id: MindRoleTraitorSleeper + name: Sleeper Agent Role +# description: mind-role-traitor-sleeper-description + components: + - type: MindRole + antagPrototype: TraitorSleeper + +# Zombie Squad +- type: entity + parent: BaseMindRoleAntag + id: MindRoleInitialInfected + name: Initial Infected Role +# description: mind-role-initial-infected-description + components: + - type: MindRole + antagPrototype: InitialInfected + exclusiveAntag: true + - type: InitialInfectedRole + +- type: entity + parent: BaseMindRoleAntag + id: MindRoleZombie + name: Zombie Role +# description: mind-role-zombie-description + components: + - type: MindRole + antagPrototype: Zombie + exclusiveAntag: true + - type: ZombieRole diff --git a/Resources/Prototypes/Shuttles/shuttle_incoming_event.yml b/Resources/Prototypes/Shuttles/shuttle_incoming_event.yml index 5e1f11eef9b..a5269a73dae 100644 --- a/Resources/Prototypes/Shuttles/shuttle_incoming_event.yml +++ b/Resources/Prototypes/Shuttles/shuttle_incoming_event.yml @@ -69,6 +69,11 @@ path: /Maps/Shuttles/ShuttleEvent/incorporation.yml copies: 1 +- type: preloadedGrid + id: Instigator + path: /Maps/Shuttles/ShuttleEvent/instigator.yml + copies: 1 + - type: preloadedGrid id: Joe path: /Maps/Shuttles/ShuttleEvent/joe.yml diff --git a/Resources/Prototypes/Stacks/floor_tile_stacks.yml b/Resources/Prototypes/Stacks/floor_tile_stacks.yml index de03fcba196..65fd672e1aa 100644 --- a/Resources/Prototypes/Stacks/floor_tile_stacks.yml +++ b/Resources/Prototypes/Stacks/floor_tile_stacks.yml @@ -538,6 +538,12 @@ spawn: FloorTileItemBCircuit maxCount: 30 +- type: stack + id: FloorTileRCircuit + name: red-circuit floor + spawn: FloorTileItemRCircuit + maxCount: 30 + - type: stack id: FloorTileGrass name: grass floor tile diff --git a/Resources/Prototypes/Tiles/floors.yml b/Resources/Prototypes/Tiles/floors.yml index dd6dd2511b2..9e5c49b6c85 100644 --- a/Resources/Prototypes/Tiles/floors.yml +++ b/Resources/Prototypes/Tiles/floors.yml @@ -1422,6 +1422,18 @@ itemDrop: FloorTileItemBCircuit heatCapacity: 10000 +- type: tile + id: FloorRedCircuit + name: tiles-red-circuit-floor + sprite: /Textures/Tiles/red_circuit.png + baseTurf: Plating + isSubfloor: false + deconstructTools: [ Prying ] + footstepSounds: + collection: FootstepHull + itemDrop: FloorTileItemRCircuit + heatCapacity: 10000 + # Terrain - type: tile id: FloorAsphalt diff --git a/Resources/Prototypes/Voice/speech_emote_sounds.yml b/Resources/Prototypes/Voice/speech_emote_sounds.yml index 8e1f50df395..1e54699fb83 100644 --- a/Resources/Prototypes/Voice/speech_emote_sounds.yml +++ b/Resources/Prototypes/Voice/speech_emote_sounds.yml @@ -249,6 +249,8 @@ path: /Audio/Voice/Arachnid/arachnid_chitter.ogg Click: path: /Audio/Voice/Arachnid/arachnid_click.ogg + Hiss: + path: /Audio/Animals/snake_hiss.ogg #DeltaV Weh: collection: Weh Gasp: @@ -424,6 +426,22 @@ path: /Audio/Voice/Diona/diona_salute.ogg params: volume: -5 + +- type: emoteSounds + id: ReptilianBodyEmotes + sounds: + Thump: + path: /Audio/Voice/Reptilian/reptilian_tailthump.ogg + params: + variation: 0.125 + Clap: + collection: Claps + Snap: + collection: Snaps + params: + volume: -6 + Salute: + collection: Salutes # mobs - type: emoteSounds diff --git a/Resources/Prototypes/Voice/speech_emotes.yml b/Resources/Prototypes/Voice/speech_emotes.yml index 580357d4769..ea1ee281199 100644 --- a/Resources/Prototypes/Voice/speech_emotes.yml +++ b/Resources/Prototypes/Voice/speech_emotes.yml @@ -242,6 +242,31 @@ - snapping fingers - snapped fingers +- type: emote + id: Thump + name: chat-emote-name-thump + category: Hands + available: false + icon: Interface/Emotes/tailslap.png + whitelist: + components: + - Hands + blacklist: + components: + - BorgChassis + chatMessages: ["chat-emote-msg-thump"] + chatTriggers: + - thump + - thumps + - thumping + - thumped + - thump tail + - thumps tail + - thumps their tail + - thumps her tail + - thumps his tail + - thumps its tail + - type: emote id: Salute name: chat-emote-name-salute diff --git a/Resources/Prototypes/Wires/layouts.yml b/Resources/Prototypes/Wires/layouts.yml index 7b42ef8b753..cb211cf8431 100644 --- a/Resources/Prototypes/Wires/layouts.yml +++ b/Resources/Prototypes/Wires/layouts.yml @@ -90,6 +90,7 @@ - type: wireLayout id: FireAlarm wires: + - !type:AiInteractWireAction - !type:PowerWireAction - !type:AtmosMonitorDeviceNetWire alarmOnPulse: true @@ -156,22 +157,35 @@ id: TrainingDefusable dummyWires: 0 wires: - - !type:ActivateWireAction - - !type:BoltWireAction - - !type:DelayWireAction - - !type:ProceedWireAction - - !type:BoomWireAction - + - !type:ActivateWireAction + - !type:BoltWireAction + - !type:DelayWireAction + - !type:ProceedWireAction + - !type:BoomWireAction + - type: wireLayout id: Jukebox dummyWires: 2 wires: - - !type:PowerWireAction - - !type:AiInteractWireAction - + - !type:PowerWireAction + - !type:AiInteractWireAction + - type: wireLayout id: AnomalyGenerator dummyWires: 2 wires: - - !type:PowerWireAction - - !type:AiInteractWireAction + - !type:PowerWireAction + - !type:AiInteractWireAction + +- type: wireLayout + id: Computer + dummyWires: 3 + wires: + - !type:PowerWireAction + +- type: wireLayout + id: ComputerAi + dummyWires: 2 + wires: + - !type:PowerWireAction + - !type:AiInteractWireAction diff --git a/Resources/Prototypes/_NF/Entities/Objects/Misc/mail_capsule.yml b/Resources/Prototypes/_NF/Entities/Objects/Misc/mail_capsule.yml index 29e0df57869..960c575ec8e 100644 --- a/Resources/Prototypes/_NF/Entities/Objects/Misc/mail_capsule.yml +++ b/Resources/Prototypes/_NF/Entities/Objects/Misc/mail_capsule.yml @@ -32,7 +32,6 @@ components: - Mail - Paper - - HyperlinkBook insertOnInteract: true priority: 3 food_slot: @@ -43,6 +42,10 @@ whitelist: components: - Food + blacklist: + components: + - Storage + - ItemSlots insertOnInteract: true priority: 2 cash_slot: @@ -93,7 +96,6 @@ components: - Mail - Paper - - HyperlinkBook sprite: _NF/Objects/Misc/mail_capsule.rsi - type: Dumpable - type: Damageable diff --git a/Resources/Prototypes/_NF/Entities/Structures/Doors/secret_door.yml b/Resources/Prototypes/_NF/Entities/Structures/Doors/secret_door.yml deleted file mode 100644 index e6f0fae88cb..00000000000 --- a/Resources/Prototypes/_NF/Entities/Structures/Doors/secret_door.yml +++ /dev/null @@ -1,81 +0,0 @@ -#reinforced secret door -- type: entity - id: ReinforcedSecretDoorAssembly - name: secret reinforced door assembly - parent: BaseSecretDoorAssembly - components: - - type: Sprite - sprite: _NF/Structures/Doors/secret_door_reinforced.rsi - state: assembly - - type: Construction - graph: ReinforcedSecretDoorGraph - node: assembly - -- type: entity - id: SolidReinforcedSecretDoor - name: reinforced wall - parent: BaseSecretDoor - components: - - type: Construction - graph: ReinforcedSecretDoorGraph - node: ReinforcedSecretDoorNode - containers: - - battery-container - - type: Sprite - sprite: _NF/Structures/Doors/secret_door_reinforced.rsi - -#wood secret door -- type: entity - id: WoodSecretDoorAssembly - name: secret wood door assembly - parent: BaseSecretDoorAssembly - components: - - type: Sprite - sprite: _NF/Structures/Doors/secret_door_wood.rsi - state: assembly - - type: Construction - graph: WoodSecretDoorGraph - node: assembly - placement: - mode: SnapgridCenter - -- type: entity - id: WoodSecretDoor - name: wood wall - parent: BaseSecretDoor - components: - - type: Sprite - sprite: _NF/Structures/Doors/secret_door_wood.rsi - - type: Construction - graph: WoodSecretDoorGraph - node: WoodSecretDoorNode - containers: - - battery-container - -#uranium secret door -- type: entity - id: UraniumSecretDoorAssembly - name: secret uranium door assembly - parent: BaseSecretDoorAssembly - components: - - type: Sprite - sprite: _NF/Structures/Doors/secret_door_uranium.rsi - state: assembly - - type: Construction - graph: UraniumSecretDoorGraph - node: assembly - placement: - mode: SnapgridCenter - -- type: entity - id: UraniumSecretDoor - name: uranium wall - parent: BaseSecretDoor - components: - - type: Sprite - sprite: _NF/Structures/Doors/secret_door_uranium.rsi - - type: Construction - graph: UraniumSecretDoorGraph - node: UraniumSecretDoorNode - containers: - - battery-container diff --git a/Resources/Prototypes/_NF/Entities/Structures/Walls/diagonal_walls.yml b/Resources/Prototypes/_NF/Entities/Structures/Walls/diagonal_walls.yml deleted file mode 100644 index 83528566b4f..00000000000 --- a/Resources/Prototypes/_NF/Entities/Structures/Walls/diagonal_walls.yml +++ /dev/null @@ -1,118 +0,0 @@ -# Base Diagonal Wall -- type: entity - abstract: true - parent: BaseStructure - id: BaseWallDiagonal - name: basewall - suffix: diagonal - placement: - mode: SnapgridCenter - snap: - - Wall - components: - - type: Transform - anchored: true - - type: Clickable - - type: Tag - tags: - - Wall - - type: Sprite - drawdepth: Walls - state: state0 - - type: IconSmooth - mode: Diagonal - key: walls - base: state - - type: Icon - state: state0 - - type: Airtight - noAirWhenFullyAirBlocked: false - airBlockedDirection: - - South - - East - - type: Fixtures - fixtures: - fix1: - shape: - !type:PolygonShape - vertices: - - "-0.5,-0.5" - - "0.5,0.5" - - "0.5,-0.5" - mask: - - FullTileMask - layer: - - WallLayer - -# Wall variations -- type: entity - parent: [ WallWood, BaseWallDiagonal ] - id: WallWoodDiagonal - name: wood wall - placement: - mode: SnapgridCenter - snap: - - Wall - components: - - type: Sprite - drawdepth: Walls - sprite: _NF/Structures/Walls/wood_diagonal.rsi - state: state0 - - type: IconSmooth - mode: Diagonal - key: walls - base: state - - type: Icon - sprite: _NF/Structures/Walls/wood_diagonal.rsi - state: state0 - - type: Fixtures - fixtures: - fix1: - shape: - !type:PolygonShape - vertices: - - "-0.5,-0.5" - - "0.5,0.5" - - "0.5,-0.5" - mask: - - FullTileMask - layer: - - WallLayer - - type: Occluder - enabled: false - -- type: entity - parent: [ WallUranium, BaseWallDiagonal ] - id: WallUraniumDiagonal - name: uranium wall - placement: - mode: SnapgridCenter - snap: - - Wall - components: - - type: Sprite - drawdepth: Walls - sprite: _NF/Structures/Walls/uranium_diagonal.rsi - state: state0 - - type: IconSmooth - mode: Diagonal - key: walls - base: state - - type: Icon - sprite: _NF/Structures/Walls/uranium_diagonal.rsi - state: state0 - - type: Fixtures - fixtures: - fix1: - shape: - !type:PolygonShape - vertices: - - "-0.5,-0.5" - - "0.5,0.5" - - "0.5,-0.5" - mask: - - FullTileMask - layer: - - WallLayer - - type: Occluder - enabled: false diff --git a/Resources/Prototypes/_NF/Recipes/Construction/Graphs/structures/secretdoor.yml b/Resources/Prototypes/_NF/Recipes/Construction/Graphs/structures/secretdoor.yml deleted file mode 100644 index b54c267ec00..00000000000 --- a/Resources/Prototypes/_NF/Recipes/Construction/Graphs/structures/secretdoor.yml +++ /dev/null @@ -1,251 +0,0 @@ -- type: constructionGraph - id: ReinforcedSecretDoorGraph - start: start - graph: - - node: start - edges: - - to: assembly - completed: - - !type:SetAnchor - value: false - steps: - - material: Steel - amount: 4 - doAfter: 4 - - material: Plasteel - amount: 4 - doAfter: 4 - - material: MetalRod - amount: 4 - doAfter: 4 - - node: assembly - entity: ReinforcedSecretDoorAssembly - actions: - - !type:SnapToGrid {} - - !type:SetAnchor {} - edges: - - to: wired - conditions: - - !type:EntityAnchored {} - steps: - - material: Cable - amount: 4 - doAfter: 2.5 - - to: start - conditions: - - !type:EntityAnchored - anchored: false - completed: - - !type:SpawnPrototype - prototype: SheetSteel1 - amount: 2 - - !type:SpawnPrototype - prototype: SheetPlasteel1 - amount: 2 - - !type:DeleteEntity {} - steps: - - tool: Welding - doAfter: 3 - - node: wired - entity: ReinforcedSecretDoorAssembly - edges: - - to: electronics - steps: - - component: PowerCell - name: power cell - store: battery-container - icon: - sprite: Objects/Power/power_cells.rsi - state: small - doAfter: 1 - - to: assembly - completed: - - !type:GivePrototype - prototype: CableApcStack1 - amount: 4 - steps: - - tool: Cutting - doAfter: 2 - - node: electronics - entity: ReinforcedSecretDoorAssembly - edges: - - to: ReinforcedSecretDoorNode - steps: - - tool: Screwing - doAfter: 2 - - node: ReinforcedSecretDoorNode - entity: SolidReinforcedSecretDoor - edges: - - to: wired - conditions: - - !type:EntityAnchored {} - - !type:DoorWelded {} - completed: - - !type:EmptyAllContainers {} - steps: - - tool: Prying - doAfter: 5 - -- type: constructionGraph - id: WoodSecretDoorGraph - start: start - graph: - - node: start - edges: - - to: assembly - completed: - - !type:SetAnchor - value: false - steps: - - material: WoodPlank - amount: 4 - doAfter: 4 - - material: MetalRod - amount: 4 - doAfter: 4 - - node: assembly - entity: WoodSecretDoorAssembly - actions: - - !type:SnapToGrid {} - - !type:SetAnchor {} - edges: - - to: wired - conditions: - - !type:EntityAnchored {} - steps: - - material: Cable - amount: 4 - doAfter: 2.5 - - to: start - conditions: - - !type:EntityAnchored - anchored: false - completed: - - !type:SpawnPrototype - prototype: MaterialWoodPlank1 - amount: 4 - - !type:DeleteEntity {} - steps: - - tool: Welding - doAfter: 3 - - node: wired - entity: WoodSecretDoorAssembly - edges: - - to: electronics - steps: - - component: PowerCell - name: power cell - store: battery-container - icon: - sprite: Objects/Power/power_cells.rsi - state: small - doAfter: 1 - - to: assembly - completed: - - !type:GivePrototype - prototype: CableApcStack1 - amount: 4 - steps: - - tool: Cutting - doAfter: 2 - - node: electronics - entity: WoodSecretDoorAssembly - edges: - - to: WoodSecretDoorNode - steps: - - tool: Screwing - doAfter: 2 - - node: WoodSecretDoorNode - entity: WoodSecretDoor - edges: - - to: wired - conditions: - - !type:EntityAnchored {} - - !type:DoorWelded {} - completed: - - !type:EmptyAllContainers {} - steps: - - tool: Prying - doAfter: 5 - -- type: constructionGraph - id: UraniumSecretDoorGraph - start: start - graph: - - node: start - edges: - - to: assembly - completed: - - !type:SetAnchor - value: false - steps: - - material: Uranium - amount: 4 - doAfter: 4 - - material: MetalRod - amount: 4 - doAfter: 4 - - node: assembly - entity: UraniumSecretDoorAssembly - actions: - - !type:SnapToGrid {} - - !type:SetAnchor {} - edges: - - to: wired - conditions: - - !type:EntityAnchored {} - steps: - - material: Cable - amount: 4 - doAfter: 2.5 - - to: start - conditions: - - !type:EntityAnchored - anchored: false - completed: - - !type:SpawnPrototype - prototype: SheetUranium1 - amount: 4 - - !type:DeleteEntity {} - steps: - - tool: Welding - doAfter: 3 - - node: wired - entity: UraniumSecretDoorAssembly - edges: - - to: electronics - steps: - - component: PowerCell - name: power cell - store: battery-container - icon: - sprite: Objects/Power/power_cells.rsi - state: small - doAfter: 1 - - to: assembly - completed: - - !type:GivePrototype - prototype: CableApcStack1 - amount: 4 - steps: - - tool: Cutting - doAfter: 2 - - node: electronics - entity: UraniumSecretDoorAssembly - edges: - - to: UraniumSecretDoorNode - steps: - - tool: Screwing - doAfter: 2 - - node: UraniumSecretDoorNode - entity: UraniumSecretDoor - edges: - - to: wired - conditions: - - !type:EntityAnchored {} - - !type:DoorWelded {} - completed: - - !type:EmptyAllContainers {} - steps: - - tool: Prying - doAfter: 5 diff --git a/Resources/Prototypes/_NF/Recipes/Construction/structures.yml b/Resources/Prototypes/_NF/Recipes/Construction/structures.yml deleted file mode 100644 index dd5fd22c6e7..00000000000 --- a/Resources/Prototypes/_NF/Recipes/Construction/structures.yml +++ /dev/null @@ -1,50 +0,0 @@ -- type: construction - name: reinforced secret door - id: SolidReinforcedSecretDoorConstruction - graph: ReinforcedSecretDoorGraph - startNode: start - targetNode: ReinforcedSecretDoorNode - category: construction-category-structures - description: A secret door for the wall. - objectType: Structure - placementMode: SnapgridCenter - canBuildInImpassable: false - icon: - sprite: _NF/Structures/Doors/secret_door_reinforced.rsi - state: closed - conditions: - - !type:TileNotBlocked - -- type: construction - name: wood secret door - id: WoodSecretDoorConstruction - graph: WoodSecretDoorGraph - startNode: start - targetNode: WoodSecretDoorNode - category: construction-category-structures - description: A secret door for the wall. - objectType: Structure - placementMode: SnapgridCenter - canBuildInImpassable: false - icon: - sprite: _NF/Structures/Doors/secret_door_wood.rsi - state: closed - conditions: - - !type:TileNotBlocked - -- type: construction - name: uranium secret door - id: UraniumSecretDoorConstruction - graph: UraniumSecretDoorGraph - startNode: start - targetNode: UraniumSecretDoorNode - category: construction-category-structures - description: A secret door for the wall. - objectType: Structure - placementMode: SnapgridCenter - canBuildInImpassable: false - icon: - sprite: _NF/Structures/Doors/secret_door_uranium.rsi - state: closed - conditions: - - !type:TileNotBlocked \ No newline at end of file diff --git a/Resources/Prototypes/_RMC14/SoundCollections/xeno_speech.yml b/Resources/Prototypes/_RMC14/SoundCollections/xeno_speech.yml new file mode 100644 index 00000000000..82e03453ce8 --- /dev/null +++ b/Resources/Prototypes/_RMC14/SoundCollections/xeno_speech.yml @@ -0,0 +1,6 @@ +- type: soundCollection + id: XenonidSpeech + files: + - /Audio/_RMC14/Voice/Xeno/alien_talk1.ogg + - /Audio/_RMC14/Voice/Xeno/alien_talk2.ogg + - /Audio/_RMC14/Voice/Xeno/alien_talk3.ogg diff --git a/Resources/Prototypes/_RMC14/Voice/speech_sounds.yml b/Resources/Prototypes/_RMC14/Voice/speech_sounds.yml new file mode 100644 index 00000000000..98c4f643e8c --- /dev/null +++ b/Resources/Prototypes/_RMC14/Voice/speech_sounds.yml @@ -0,0 +1,8 @@ +- type: speechSounds + id: Xenonid + saySound: + collection: XenonidSpeech + askSound: + collection: XenonidSpeech + exclaimSound: + collection: XenonidSpeech diff --git a/Resources/Prototypes/ore.yml b/Resources/Prototypes/ore.yml index 5beda7a2098..3fa2507392c 100644 --- a/Resources/Prototypes/ore.yml +++ b/Resources/Prototypes/ore.yml @@ -90,7 +90,7 @@ id: RandomOreDistributionStandard weights: OreSteel: 10 - OreCoal: 10 + OreCoal: 12 # DeltaV: increased slightly from 10 so there is a surplus to give to chem OreSpaceQuartz: 8 OreGold: 2 OrePlasma: 4 @@ -98,7 +98,6 @@ OreUranium: 1 OreBananium: 0.5 OreArtifactFragment: 0.5 - OreSalt: 5 #Delta V - Adds so our rocks can spawn salt - type: weightedRandomOre id: OreCrab diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 63148e39c96..1c02d7f3d03 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -617,6 +617,12 @@ - type: Tag id: FirelockElectronics +- type: Tag + id: FireExtinguisher + +- type: Tag + id: FireHelmet + - type: Tag id: Flare @@ -647,6 +653,9 @@ - type: Tag id: ForceNoFixRotations # fixrotations command WON'T target this +- type: Tag + id: FreezerElectronics + - type: Tag id: Fruit @@ -978,12 +987,18 @@ - type: Tag id: NoBlockAnchoring +- type: Tag + id: NoConsoleSound + - type: Tag id: NozzleBackTank - type: Tag id: Nugget # for chicken nuggets +- type: Tag + id: FakeNukeDisk + - type: Tag id: NukeOpsUplink @@ -1171,7 +1186,7 @@ - type: Tag id: SecureWindoor -- type: Tag +- type: Tag id: SecurityHelmet - type: Tag @@ -1288,6 +1303,9 @@ - type: Tag id: Syringe +- type: Tag + id: SyringeGunAmmo + - type: Tag id: Spellbook diff --git a/Resources/ServerInfo/Guidebook/Antagonist/Traitors.xml b/Resources/ServerInfo/Guidebook/Antagonist/Traitors.xml index eadef874031..34484fe0463 100644 --- a/Resources/ServerInfo/Guidebook/Antagonist/Traitors.xml +++ b/Resources/ServerInfo/Guidebook/Antagonist/Traitors.xml @@ -18,12 +18,17 @@ By pressing [color=yellow][bold][keybind="OpenCharacterMenu"][/bold][/color], you'll see your personal uplink code. [bold]Setting your PDA's ringtone as this code will open the uplink.[/bold] Pressing [color=yellow][bold][keybind="OpenCharacterMenu"][/bold][/color] also lets you view your objectives and the codewords. + If you do not have a PDA when you are activated, an [color=cyan]uplink implant[/color] is provided [bold]for the full [color=red]TC[/color] price of the implant.[/bold] + It can be accessed from your hotbar. + - [bold]Make sure to close your uplink to prevent anyone else from seeing it.[/bold] You don't want [color=#cb0000]Security[/color] to get their hands on this premium selection of contraband! + [bold]Make sure to close your PDA uplink to prevent anyone else from seeing it.[/bold] You don't want [color=#cb0000]Security[/color] to get their hands on this premium selection of contraband! + + Implanted uplinks are not normally accessible to other people, so they do not have any security measures. They can, however, be removed from you with an empty implanter. diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/0_Admin.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/0_Admin.xml index be0660d1066..917ada7b348 100644 --- a/Resources/ServerInfo/Guidebook/DeltaV/Rules/0_Admin.xml +++ b/Resources/ServerInfo/Guidebook/DeltaV/Rules/0_Admin.xml @@ -1,8 +1,10 @@ # Rule 0: Admin Discretion - - Admins can disregard any and all of these rules if they deem it in the best interest of the current round, server, and/or community at large. - - Administrators will be held fully accountable for their actions if they exercise this privilege. - - All of these rules apply as they are intended. Every example of a rule break cannot be defined as written, therefore, enforcement of the rules is subject to staff interpretation of the rule's intention. - - Any extended discussion regarding interpretation of the rules should be avoided in the AHelp menu and can be instead pursued within the Delta-V Discord in the #help channel, or on the forum at https://forum.delta-v.org in the Rule Clarifications section. + - Admins can disregard and override any and all of these rules if they deem it in the best interest of the current round, server, and/or community at large. + - Administrators will be held fully accountable for their actions if they exercise this privilege. Report any perceived abuses by making a post in the "Staff Reports" channel at [color=#808080]https://discord.gg/deltav. [/color] + - The rules are not perfect. They intend to clearly communicate what the administration team intends to be allowed and not allowed. That being said, All of these rules, in theory, should apply as they are intended. Every example of a rule break cannot be defined as written, therefore, enforcement of the rules is subject to staff interpretation of the rule's intention. + - If you are unsure if something breaks a rule, go with the more restrictive ruling until you are able to get an answer from an admin on the matter. [color=#ff0000]Lack of response does not constitute administrator approval.[/color] + - Do not attempt to “rules-lawyer” the flaws in the rules to get away with your own personal goals / to degrade the round for others. + - Any extended discussion regarding interpretation of the rules should be avoided in the AHelp menu and can be instead pursued within the Delta-V Discord in the #help channel, or in the rule clarifications forum on the discord. - \ No newline at end of file + diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/A1_ERP.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/A1_ERP.xml new file mode 100644 index 00000000000..771f0b69418 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/A1_ERP.xml @@ -0,0 +1,20 @@ + + # Rule A1: No sexual content/themes +Do not say or do sexually explicit or erotic things. + - No sexual content/themes including erotic roleplay (ERP) and no shock content is allowed on this server. + - Erotic Roleplay (ERP), erotic content, or 18+ sexual content is not allowed under any circumstance. + - This includes comments not explicitly sexual in nature that contain words, phrases, or ideations that are deemed inappropriate by staff or members. Leeway is given to insults, but otherwise this rule is strictly enforced. + - [color=#ff0000]If roleplay reaches a point where it has become sexual and/or uncomfortable, immediately stop and contact an administrator or moderator.[/color] + +## Examples: +Allowed: + - Calling someone a dickhead. + - Being affectionate in a mutually consensual way. + +Prohibited: + - Emoting sexual acts. + - Erotic or sexual memes. + - Erotica content. + - Memes which contain sexual content. + - Emoting defecation or related acts. + diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/E2_Community.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/A2_Community.xml similarity index 81% rename from Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/E2_Community.xml rename to Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/A2_Community.xml index ec2808acc6e..4813ff1f62b 100644 --- a/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/E2_Community.xml +++ b/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/A2_Community.xml @@ -1,11 +1,10 @@ - # Rule E2: Use English and be respectful + # Rule A2: Use English and be respectful Delta-V is an English-based Community; - Use English as your primary method of communication within the game and Delta-V servers. - Do not spam or advertise on our server. - Be respectful towards other members and avoid making others uncomfortable. - We have a zero tolerance policy for racism, sexism, homophobia, violence, threats, hate speech, slurs, and other forms of bigotry, discrimination, and harassment. - Slurs and terms that use real or implied mental or physical disability to mock or denigrate members or their in-game characters are also strictly prohibited. Failure to comply with this rule will result in community removal. + Slurs and terms that use real or implied mental or physical disability to mock or denigrate members or their in-game characters are also strictly prohibited. [color=#ff0000]Failure to comply with this rule will result in community removal.[/color] - The denigration of other player characters through reference to their species, status as a cyborg, or discriminatory comparison to a nonsophont species is strictly forbidden. - diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/E3_Streaming.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/A3_Streaming.xml similarity index 90% rename from Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/E3_Streaming.xml rename to Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/A3_Streaming.xml index bfe55abb4a0..53736bc7bcf 100644 --- a/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/E3_Streaming.xml +++ b/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/A3_Streaming.xml @@ -1,9 +1,8 @@ - # Rule E3: Rules regarding livestreaming + # Rule A3: Rules regarding livestreaming Delta-V welcomes content creators and streamers to our community, but we have a few rules regarding livestreaming game servers. - While a stream delay is not necessary, it is highly recommended to have at least a 10 second delay. - Please let admins know you are streaming via the AHelp prior to doing so. - If your chat or viewers are in-game with you while also watching your stream, they are breaking our server rules. - Please do not coordinate with them and discourage this behavior if it is seen. - - \ No newline at end of file + diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/D1_AdminRespect.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/A4_Ahelp.xml similarity index 64% rename from Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/D1_AdminRespect.xml rename to Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/A4_Ahelp.xml index 37d22e7c317..b2b40429013 100644 --- a/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/D1_AdminRespect.xml +++ b/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/A4_Ahelp.xml @@ -1,8 +1,7 @@ - # Disclaimer D1. Proper AHelp Ettiquette + # Rule A4: Engage in proper AHelp etiquette. Do not use the AHelp for conversations of little substance. - Intentionally disconnecting, responding with hostility, or refusing to respond when an admin privately messages you in-game will be met with an appeal-only ban. - Additionally, abusing the AHelp relay by flooding it with garbage, checking for admins before stating a problem (ex: "hello?", "any admins?"), using it as a chatroom, or sending messages of no substance will result in your removal. - - All AHelp messages are relayed to the Delta-V Discord. - - \ No newline at end of file + - All AHelp messages are relayed to the Delta-V Discord. Just because your AHelp was not answered does not mean we cannot see it. If you would like to submit an offline Ahelp, you may do so in our Discord. + diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/A5_Exploits.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/A5_Exploits.xml new file mode 100644 index 00000000000..fb6ae6cbd07 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/A5_Exploits.xml @@ -0,0 +1,10 @@ + + # Rule A5: Do not exploit the game. + Do not exploit the game, use cheats or macros. + The usage of: + - any third party applications/scripts/client modifications, + - any other applicable software to gain an advantage, avoid intended game/server mechanics, or to harm server infrastructure is strictly prohibited. + - the abuse of known glitches, exploits and bugs. + +Any and all instances of the above will be met with an appeal-only ban; please report bugs in the issues section of the GitHub (DeltaV-Station/Delta-V) to report any issues you find in-game. + diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/D2_Exploits.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/D2_Exploits.xml deleted file mode 100644 index 09878cd7750..00000000000 --- a/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/D2_Exploits.xml +++ /dev/null @@ -1,7 +0,0 @@ - - # Disclaimer D2. Do not exploit. - Do not exploit the game, use cheats or macros. - - The usage of any third-party applications/scripts/client modifications or any other applicable software to gain an advantage, avoid intended game/server mechanics, or to harm server infrastructure is strictly prohibited, as is the abuse of glitches, exploits and bugs. - - Any and all instances of this will be met with an appeal-only ban; please use the #bug-reports channel on the Discord, or the issues section of the GitHub (DeltaV-Station/Delta-V) to report any issues you find in-game. - - \ No newline at end of file diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/E1_ERP.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/E1_ERP.xml deleted file mode 100644 index 3fe6b3baa80..00000000000 --- a/Resources/ServerInfo/Guidebook/DeltaV/Rules/CommunityRules/E1_ERP.xml +++ /dev/null @@ -1,7 +0,0 @@ - - # Rule E1: No sexual content/themes - No sexual content/themes including erotic roleplay (ERP) and no shock content. - - Erotic Roleplay (ERP), erotic content, or 18+ sexual content is not allowed under any circumstance. - - This includes comments not explicitly sexual in nature that contain words, phrases, or ideations that are deemed inappropriate by staff or members. - - [color=#ff0000]If roleplay reaches a point where it has become sexual and/or uncomfortable, immediately stop and contact an administrator or moderator.[/color] - \ No newline at end of file diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/DeltaVRuleset.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/DeltaVRuleset.xml index e7ee24fbadb..ccca29d01fd 100644 --- a/Resources/ServerInfo/Guidebook/DeltaV/Rules/DeltaVRuleset.xml +++ b/Resources/ServerInfo/Guidebook/DeltaV/Rules/DeltaVRuleset.xml @@ -1,42 +1,32 @@ - # Server Rules - This is a Delta-V server. If you are banned on this server, you will be banned on all Delta-v Servers. +# Server Rules + This is a Delta-V server. If you are banned on this server, you will be banned on all Delta-v Servers. You must be at least 17 years of age to play on this server. By connecting to this server, you agree to our privacy policy found at [color=#808080]https://discord.gg/deltav[/color] - This is a roleplay server, meaning that roleplay rules apply. + [color=#ffDD00]This is a roleplaying (RP) server. Try to immerse yourself into your character. This includes interacting with your fellow crewmates, and using roleplay as the primary vessel to play the game alongside things like your job on the station. Roleplaying places less emphasis on "winning" and more on just telling a story.[/color] - [color=#ffDD00]This is also an MRP server. Try to immerse yourself into your character. This includes interacting with your fellow crewmates, and using roleplay as the primary vessel to play the game alongside things like your job on the station. MRP places less emphasis on "winning" and more on just telling a story.[/color] - - Space Station 14 is not like most games. Many rules are designed to require roleplay, and not all rules are intuitive. Please take the time to read and understand the rules before you play so that you aren't surprised. Our community rules specifically are zero-tolerance rules, meaning that a violation will result in an appeal-only ban. Game admins will treat you as if you have read the rules, even if you have not. - - ## Server Disclaimers - [color=#ff0000]You must be at least 17 years of age to play on Delta-V's servers. Any users suspected of being under the age of 17 will be removed. - By connecting to this server, you agree to our privacy policy found at [color=#808080]https://go.delta-v.org/privacy. [/color] - - [textlink="D1. Proper AHelp Ettiquette." link="DeltaVDisclaimer1"] - - [textlink="D2. Do not exploit the game." link="DeltaVDisclaimer2"] - - If you have any questions about these rules, please use the admin help menu by hitting F1 in-game or clicking the "AHelp" button in the lobby, or by making a post in the "Rules Clarification" section of our forum at [color=#808080]https://forum.delta-v.org. [/color] + Space Station 14 is not like most games. Many rules are designed to require roleplay, and not all rules are intuitive. Please take the time to read and understand the rules before you play so that you aren't surprised. Our community rules specifically are zero-tolerance rules, meaning that a violation will result in an appeal-only ban. Game admins will treat you as if you have read the rules, even if you have not. If you have any questions about these rules, please use the admin help menu by hitting F1 in-game or clicking the "AHelp" button in the lobby, or by making a post in the "Rules Clarification" forum at [color=#808080]https://discord.gg/deltav[/color] ## Community Rules These rules apply at all times, including between rounds. - - [textlink="0. Admin Discretion." link="DeltaVRule0"] - - [textlink="E1. No Sexual Content/Themes" link="DeltaVRuleE1"] - - [textlink="E2. Use English" link="DeltaVRuleE2"] - - [textlink="E3. Rules regarding livestreaming" link="DeltaVRuleE3"] + - [textlink="0. Admins can exercise discretion in the enforcement of rules." link="DeltaVRule0"] + - [textlink="A1. Do not say or do sexually explicit or erotic things." link="DeltaVRuleA1"] + - [textlink="A2. Use English and be respectful." link="DeltaVRuleA2"] + - [textlink="A3. Follow the rules regarding livestreaming current rounds." link="DeltaVRuleA3"] + - [textlink="A4. Engage in proper AHelp etiquette." link="DeltaVRuleA4"] + - [textlink="A5. Do not exploit the game." link="DeltaVRuleA5"] ## Game Server Rules These rules apply within the context of rounds. - - [textlink="1. Server Expectations" link="DeltaVRule1"] - - [textlink="2. Metagaming Guidelines" link="DeltaVRule2"] - - [textlink="3. New Life Rules" link="DeltaVRule3"] - - [textlink="4. Naming Convention Rules" link="DeltaVRule4"] - - [textlink="5. Roleplay Guidelines" link="DeltaVRule5"] - - [textlink="6. Powergaming Guidelines" link="DeltaVRule6"] - - [textlink="7. End-Of-Round (EOR) Rules" link="DeltaVRule7"] + - [textlink="B1. Behave like a normal person." link="DeltaVRule1"] + - [textlink="B2. Follow the Metashield." link="DeltaVRule2"] + - [textlink="B3. Do not prioritize winning over roleplay." link="DeltaVRule3"] + - [textlink="B4. Do not behave like an antagonist as a non-antagonist." link="DeltaVRule4"] + - [textlink="B5. Leave the game using cryosleep." link="DeltaVRule5"] ## Command, Security, Justice and Antagonist Guidelines These rules apply within rounds for specific roles. - [textlink="C1. Command, Security and Justice Guidelines" link="DeltaVRuleC1"] - [textlink="C2. Prisoner Guidelines." link="DeltaVRuleC2"] - [textlink="C3. Follow Antagonist Guidelines" link="DeltaVRuleC3"] - \ No newline at end of file + diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/1_Behave.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/1_Behave.xml new file mode 100644 index 00000000000..66c51439daa --- /dev/null +++ b/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/1_Behave.xml @@ -0,0 +1,32 @@ + +# Rule B1: Behave like a normal person. +You must roleplay. Your character's actions, feelings, and knowledge in-game should be based solely on the character's experiences rather than your own as the player. + - Act in character throughout the round, and focus on collaborating with other players to advance the narrative of the round. Whether or not you do something should be based on whether or not it makes sense for your character to do it. + - Let people do their own jobs. Engage with other departments rather than doing everything for yourself. Ask for assistance, and negotiate as needed. + - Actions that have no regard for your character or setting are not acceptable. Roleplaying insanity or any other mental illness as an excuse to bypass this is not allowed. Nanotrasen would not have authorized you to be present on the station. + - Being an antagonist does not allow you to stop playing a character. Determine how your character would react to being given these objectives, and work through it appropriately. + - Do not annoy other players without any roleplay or IC reason. + - As a non-sentient or partially-sentient character, you are expected to have only a limited understanding of space stations and their mechanics. + +## Rule B1.1: Follow the naming convention rules. + - In-character names must not make obvious references nor be a play on words, and must not be obscene. + - Theatrical roles such as the clown, boxer, and mime are allowed stage names with more freedom. + - If you seek to have a name that could trespass onto these rules, talk to an Administrator regarding why this name is important to your character. Administrators reserve the right to approve or deny character names at their discretion. + +## Rule B1.2: Communicate in character + - Do not use the Emote channel to bypass an inability to speak. Use the Emote channel for things that could reasonably be displayed by your character’s physical motions. + - Do not use Netspeak in character. (lol, brb, wtf, etc) + - Do not discuss Out Of Character (OOC) matters In Character (IC). This can include mentioning admins, the fact that one is playing a game, or anything that breaks the immersion of other players. + - Do not use In-Character channels to bypass a lack of ability to use LOOC or OOC chats (e.g. "Huh, wonder where the captain went? OOC He probably left to get dinner lol"). + - Do not engage in meta-communications (i.e. using external channels to communicate with other players in the same game). + +## Rule B1.3: If you die and return to life, follow the new life rules. +If a player dies, they forget the specific details of their death. [color=#ff0000]Please report players who break this rule.[/color] A borg being removed from its chassis is not a death, and there is no memory loss. + - If they are revived by using a defibrillator, they can only recall vague information such as “Someone shot me” or “I was set ablaze”. + - If they are revived by any other method, they forget the last five minutes leading up to their death, and cannot describe their death in any capacity. + +## Rule B1.4: Escalate appropriately +Have an In Character reason for attacking other players, whether they are in a ghost role or not. The required reason depends on the situation. For instance, killing a mouse as a chef can simply be “it was vermin in my kitchen”. + - Escalate the situation appropriately as your character would, keeping in mind that they are a sane individual who wishes to keep their employment. + - If a fight results in someone being critically injured, seek medical help for them - and if they die, do not destroy or otherwise hide their body. This falls under self-antagonistic behavior if you do not. + diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/1_ServerExpectations.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/1_ServerExpectations.xml deleted file mode 100644 index e701b2f4f71..00000000000 --- a/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/1_ServerExpectations.xml +++ /dev/null @@ -1,11 +0,0 @@ - - # Rule 1: Server Expectations - - Do not cause too much trouble for the crew as a non-antagonist (i.e. do not "self-antag"). NON-ANTAGONIST Players who cause great structural damage, unnecessarily harm/remove players from the round, or are otherwise causing problems without a good-faith attempt at roleplaying can face administrative punishment. - - Clowns, Mimes, and other "prankster" roles do not get an exemption from the above, and should not use their job as an excuse to be a major disturbance. - - If you are banned from a role or department, you may not play that role. This includes seeking or accepting promotions into roles you are banned from. - - Department strikes (e.g. cargonia and any variation thereof), riots, cults, and any other type of similar largely disruptive behavior are strictly forbidden without both excellent roleplay justification and explicit administrator pre-approval. - - AFK (a.k.a. SSD) and catatonic players are considered to have the same rights as any other crewmate. - - If a player is dead and catatonic (not SSD), they are not required to be revived and should be stored in the morgue. You should not biomass grind dead and catatonic crew unless in an emergency. - - If a player is alive and catatonic, they may be brought to their relevant department or cryostorage as necessary. - - \ No newline at end of file diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/2_Metagaming.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/2_Metagaming.xml index bf633dae288..bc7d7d93f70 100644 --- a/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/2_Metagaming.xml +++ b/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/2_Metagaming.xml @@ -1,14 +1,130 @@ - # Rule 2: Metagaming Guidelines - - Do not use the Emote channel to bypass an inability to speak. This includes examples like "I'm friendly," "oh weird I can't speak," or "mimes a flashlight". - - Additionally, use of the emote channel to simulate character death rattles or other game mechanics is prohibited. - - Use the local-out-of-character (LOOC) and global out-of-character (OOC) channels properly. Don't speak of in-character matters in those channels unless you're asking questions related to in-game concepts. - - Do not use in-character channels to bypass a lack of ability to use OOC/LOOC chats (e.g. "Huh, wonder where the captain went? OOC He probably left to get dinner lol"). - - Do not engage in meta-communications (i.e. using external channels to communicate with other players in the same game). - - Do not stream, discuss, or share information about the current round to the Delta-V Discord. - - You are allowed to have knowledge of past experiences and prior shifts, and players are allowed to have in-character relationships (friends, enemies, or otherwise). However, this cannot be used as a sole reason to grant or deny items/accesses/favors based exclusively on having a relationship with one another (i.e. meta-friending/meta-grudging). - - Antagonists in previous rounds must not be treated differently due to their prior antagonist status. Notwithstanding, confession of crimes committed in a prior shift are still admissible in court. - - Additionally, and for the sake of continuity, your character will never have permanently died in previous rounds. - - Do not "antag roll." This is the act of joining rounds for the purpose of seeing if you have received an antagonist role, and leaving soon after if not. - - \ No newline at end of file + # Rule B2: Follow the Metashield. + - Something that is "shielded" cannot be known by your character during a round until the "revealing condition" happens. This also means that your character cannot do things based on "shielded" information. Knowing or acting on something that is shielded before the revealing condition is met is referred to as metagaming. + + - Revealing conditions reveal the shielded information for the round, not for a specific instance. This means that once a revealing condition is met in a round, the shield no longer applies in any case for the remainder of the round. + + ## Never Revealed IC + Some shields are never revealed IC. This means that your character can never act as if they know about that shielded thing. + + The following are shielded: + - Current game mode and possible antags during the current game mode. + - Events you experienced as a different character. + - All information related to the player of a character rather than the character itself. (See "Metafriending and Metagrudging" below.) + - All information gained while dead or a ghost. + - Anything related to Code Epsilon or Deathsquads + + This does not prevent knowing that a shift will end, but does prohibit things like preparing to kill people at central command when roleplay rules stop being enforced on LRP. + + ## Previous Rounds + + Events from previous rounds are not shielded, but they should not hold any bearing on the current round. (i.e. you cannot be arrested for crimes in a past round) + + ## Understanding of Station and Sabotage + + For entities lacking crew-level intellect (e.g. a tarantula), the understanding of station functions and how they may be sabotaged is shielded. + + The revealing condition for this shield is any of the following: + - being a Mouse Operative, Syndicat, or Ancestor Reinforcement + - being uplifted by the power of Cognizine (i.e. “awakened”) + + ## High-Risk Items + + The idea that certain High-Risk Items are desired specifically by the Syndicate is shielded. Crew should protect High-Risk items due to their status as valuable items, not because they are potential steal objectives. + + The revealing condition for this shield is any of the following: + - being a traitor + - being told of an item’s status by a traitor + + ## Nuclear Operatives + + The existence of Nuclear Operatives beyond a myth that no one would act on is shielded. + + The fact that the nuke disk must be protected and could be used by a bad actor to try to destroy the station is not shielded. + + The revealing condition for this shield is any of the following: + - discovering a blood red hardsuit + - discovering a nuclear operative's shuttle + - an operative name + - a War Ops announcement + - being a nuclear operative + + ## Implants + + The existence of implants used by the Syndicate is shielded. Implant checks cannot be performed unless there is adequate evidence or an authorized warrant, as outlined within Standard Operating Procedures. + + The revealing condition for this shield is any of the following: + - discovering a non-NT implanter, used or unused + - discovering a non-NT implant box + - discovering use of a non-NT implant by anyone + - experiencing a situation where absolutely no other explanation is possible + - discovering an unlocked uplink + + ## Chameleon Items + + Chameleon items are shielded. + + Being suspicious of an item being fake or stolen is not shielded, but testing items or calling them chameleon is covered by this shield. Testing clothing for chameleon status is always prohibited; items that are clearly chameleon can, however, be confiscated by Security. + + The revealing condition for this shield is any of the following: + - seeing someone else cause any chameleon item to change + - finding holographic nanomachine fibers + - experiencing a situation where absolutely no other explanation is possible + - discovering an unlocked uplink + + ## Stealth Items + + The fact that an item can be something other than what its visual appearance and examine description indicate is shielded. + + This shield protects stealth items, including protecting them from being tested. + + The revealing condition for this shield is any of the following: + - seeing the item behave differently than the expected behavior for the item + - seeing the item used for its hidden purpose + - experiencing a situation where absolutely no other explanation is possible + - discovering an unlocked uplink + + ## Bad Actor Objectives + + The idea that Syndicate agents, or other bad actors, have certain goals they have been tasked with accomplishing on the station, ranging from sabotage, to theft, to murder is shielded. + + The revealing condition for this shield is any of the following: + - being a Traitor, Space Ninja, Nuclear Operative, or another bad actor with goals. + - being told of an antagonist’s goals. Note that this only applies to the goals that have been revealed to you. + + ## Uplinks + + The fact that Syndicate agents may possess a program, referred to as an Uplink, used to receive equipment from the Syndicate is shielded. You have no way of confirming an Uplink exists within a PDA unless you see it yourself. + + The revealing condition for this shield is any of the following: + - being a Security role + - being a Command role + - being a traitor + + ## Explicitly Not Shielded + The following is a list of things that are explicitly not shielded. If something is not on this list, it doesn't mean that it is shielded, but if something is on it then it definitely is not shielded. + - The fact that the shift will end. For example, acting upon the knowledge that a crew transfer shuttle is typically sent around the two hour mark of a shift. + - The fact that the nuke disk must be protected and could be used by a bad actor to try to destroy the station. + - The fact that the Syndicate are enemies of Nanotrasen, and that they regularly attempt to send covert agents to spy on, sabotage, or attack Nanotrasen. + - A character's typical appearance. Though you should keep in mind that multiple characters can share the same name. + + ## Metafriending and Metagrudging + This section provides additional information on a concept that is prohibited by multiple metashield items that are never revealed IC. Giving a person or character preferential treatment based on something that your character should not know is considered metafriending. Treating a person or character negatively based on something that your character should not know is considered metagrudging. + + ## Metafriending Examples + These are all examples of things that are prohibited by at least one metashield item that is never revealed IC. + - Giving a character additional access or a job because you are friends with the player who is playing that character. + - Trusting a character because you are friends with the player who is playing that character. + - Not fighting a character because you are friends with the player who is playing that character. + - Ignoring your objective to kill a character because your character and theirs became friends in a previous round. + + ## Metagrudging Examples + These are all examples of things that are prohibited by at least one metashield item that is never revealed IC. + - Not giving a character additional access or a job because you are mad at or don't like the player who is playing that character. + - Not trusting a character because you are mad at or don't like the player who is playing that character. + - Starting a fight with a character because of something that they did last round. + - Starting a fight with a character because they killed you while you were playing a different character. + - Targeting or harassing a character based on anything which that character did outside the current round. + - Targeting or harassing a character based on anything which the character's player did while not playing the character. + + diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/3_NewLife.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/3_NewLife.xml deleted file mode 100644 index 22fffdfcc04..00000000000 --- a/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/3_NewLife.xml +++ /dev/null @@ -1,7 +0,0 @@ - - # Rule 3: New Life Guidelines - - If a player dies and is brought back by way of cloning, borging or having their brain put into an MMI, they forget the last five minutes leading up to their death and cannot describe who or what killed them. - - Players that are revived by using a defibrillator can only recall vague details about their death, such as "Someone shot me" or "I was set ablaze" but they cannot recall details beyond that. [color=#ff0000]Please report players who break this rule.[/color] - - In either case, characters do not have any knowledge of what happened while they were dead (i.e. ghosted/observing). - - diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/3_Powergaming.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/3_Powergaming.xml new file mode 100644 index 00000000000..52a17883cc1 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/3_Powergaming.xml @@ -0,0 +1,11 @@ + + # Rule B3: Powergaming Guidelines +"Powergaming" is considered to be the act of prioritizing "winning" rather than sensible roleplaying. We are here to tell a story. Being vulnerable and accepting the loss of your character in the advancement of the narrative of the round is important. + - Engage with players if they are attempting to roleplay an antagonistic scene. Example: if nuclear operatives are attempting to negotiate, do not immediately shoot them mid sentence. + - Leeway is given if the scene is coming to a close, but we expect all players to engage in good faith; even if it puts your character at a disadvantage. + - Do not seek/acquire items that have no relevance to your character in the round. + - Do not, [color=#ff0000]under any circumstances[/color], hide the nuclear fission explosive, or other sensitive items in an impossible to see/access location. This is excessively lame. + - [color=#ff0000]Non-security personnel should not seek to kill or detain threats.[/color] You should generally attempt to flee from combat or dangerous situations. Remember that your character likely fears injury or death. + - Certain severe emergencies may make it reasonable for normal crew to defend themselves and their station, such as nuclear operatives, a zombie outbreak, space dragon attack, or other critical situations. + - [color=#ff0000]If there is sufficient roleplay, reason, and rationale, you may be exempt from this rule. Always ask an administrator in round before conducting such an action.[/color] + diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/4_NamingConventions.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/4_NamingConventions.xml deleted file mode 100644 index 8f78690dc3f..00000000000 --- a/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/4_NamingConventions.xml +++ /dev/null @@ -1,11 +0,0 @@ - - # Rule 4: Naming Conventions - In-character names must fit the server standards of: - - Doesn't make obvious references, - - Isn't an obvious pun or play on words, - - Isn't obscene, - OR - - Is a result of random name generation. - The only exception to the above is theatrical roles such as the clown, boxer, and mime; these roles are allowed stage names with some freedom, as long as it is not obscene. Administrators reserve the right to approve or deny character names at their discretion. - - \ No newline at end of file diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/4_Self-antag.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/4_Self-antag.xml new file mode 100644 index 00000000000..d585de5e8d8 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/4_Self-antag.xml @@ -0,0 +1,10 @@ + + # Rule B4: Do not behave like an antagonist as a non-antagonist. + - As a crew member on the space station, you are allied with Nanotrasen and the station as a whole from the start of the round. + - Do not act like an antagonist if you are not an antagonist. + - Willfully assisting known antagonists is self-antagonism. + - Leeway is given in the case of bribes, coercion, or other forms of duress. + - Actively seeking conversion or transformation into an antagonist is considered self-antag. + - Clowns, Mimes, and theater roles are expected to "entertain" the crew, and should not be committing regular felonies to do so. + - Significant end-of-round grief (EORG) is not allowed. This includes attacking, destroying, polluting, and severely injuring without reason both at and on the way to Central Command. Remember that you are playing a character throughout the round. + diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/5_Leaving.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/5_Leaving.xml new file mode 100644 index 00000000000..c9a21804384 --- /dev/null +++ b/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/5_Leaving.xml @@ -0,0 +1,7 @@ + + # Rule B5: Leaving the Game + - If you wish to leave the game, please use the cryosleep chambers located in/near the dorms when possible. This will free up your character's job to be filled by a new player. + - AFK (a.k.a. SSD) and catatonic players are considered to have the same rights as any other crewmate. + - If a player is dead and catatonic (not SSD), they are not required to be revived and should be stored in the morgue. You should not biomass and/or grind dead and catatonic crew unless in an emergency. + - If a player is alive and catatonic, they may be brought to cryostorage as necessary, after confirming they have not been present for 20 minutes. + diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/5_RoleplayGuidelines.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/5_RoleplayGuidelines.xml deleted file mode 100644 index 17646de8c45..00000000000 --- a/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/5_RoleplayGuidelines.xml +++ /dev/null @@ -1,13 +0,0 @@ - - # Rule 5: Roleplay Guidelines - - Your character is a separate entity from you, the player. Your character's actions, feelings, and knowledge in-game should be based solely on the character's experiences rather than your own as the player. - - Low roleplay actions that have no regard for your character or little bearing on setting (such as memes, silly copy paste spam IC) are not acceptable. Your character is a worker aboard a space station and will be held accountable. - - Do not fax memes, copypasta, or spam to Central Command. - - Do not escalate situations needlessly as a crew-aligned role. Very few things are deserving of a fight to the death. - - If a fight results in someone being critically injured, seek medical help for them - and if they die, do not destroy or otherwise hide their body. This falls under self-antagonistic behavior. - - Pest ghost roles such as mice are always fair game for attacking. Do not grief crew-aligned ghost roles such as familiars, drones, or pets without provocation. - - Some awakened pest roles (e.g. sentient mothroach) may be considered crew pets and fall under this rule. - - [color=#ff0000]Non-security personnel should not seek to kill or detain unrelated threats.[/color] Crew may neutralize threats when they present themselves or if they are relevant to the crew member in question. - - Certain severe emergencies may make it reasonable for normal crew to defend themselves and their station, such as nuclear operatives, a zombie outbreak, space dragon attack, or other critical situation. - - \ No newline at end of file diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/6_Powergaming.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/6_Powergaming.xml deleted file mode 100644 index 6a92a0d5010..00000000000 --- a/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/6_Powergaming.xml +++ /dev/null @@ -1,8 +0,0 @@ - - # Rule 6: Powergaming Guidelines - If you, in your given role, require an item that does not fall within your job's usual parameters, you should have a valid reason to obtain and keep it. Finding something laying around without a clear owner is a valid reason. - - Manufacturing weapons, bombs, or deadly poisons before you know of any reason you would need them is not allowed. - - Hiding Traitor objective items or preemptively securing them with higher security than usually required or than would make logical sense violates our powergaming and roleplay guidelines. - - Do not, [color=#ff0000]under any circumstances[/color], hide the nuclear fission explosive, authentication disk, or other sensitive items in an impossible to see/access location. - - \ No newline at end of file diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/7_EOR.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/7_EOR.xml deleted file mode 100644 index 65bfbddd4af..00000000000 --- a/Resources/ServerInfo/Guidebook/DeltaV/Rules/GameRules/7_EOR.xml +++ /dev/null @@ -1,6 +0,0 @@ - - # Rule 7: End-Of-Round (EOR) Rules - - Significant end-of-round grief (EORG) is not allowed. This includes attacking, destroying, polluting, and severely injuring without reason both at and on the way to Central Command. - - Explosives and strategies with capacity for high collateral damage should not be used on or around the evacuation shuttle after it arrives at the station. - - \ No newline at end of file diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/RoleRules/C1_CommandSecurityJustice.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/RoleRules/C1_CommandSecurityJustice.xml index 5899996df15..73cad376351 100644 --- a/Resources/ServerInfo/Guidebook/DeltaV/Rules/RoleRules/C1_CommandSecurityJustice.xml +++ b/Resources/ServerInfo/Guidebook/DeltaV/Rules/RoleRules/C1_CommandSecurityJustice.xml @@ -1,13 +1,16 @@ # Rule C1: Command, Security and Justice Guidelines - - Security, Justice, and Command roles are held to a higher standard of roleplay, and are expected to know and perform their jobs to the best of their ability. These roles often heavily impact the round and require more careful and conscientious roleplay; if you cannot meet these requirements do not take these roles. - - The three departments are required to read and follow Delta-V Space Law, Standard Operating Procedure, Alert Procedure, and Company Policy to the best of their ability. - - Abandoning your role to go do whatever you want instead of managing your department or maintaining security, abusing your position or using it to make arbitrary or malicious choices to the detriment of the station, and being negligent to the point of harm is prohibited. - - If you need to leave the round, notify your fellow crew via departmental radio and put your equipment in its proper places prior to going to cryo. If you need to leave IMMEDIATELY, please at least send an ahelp saying that you're leaving. - - Do not give up or trade away Traitor objective items, departmental/Command tools and remotes, and sensitive equipment without excellent reason. - - Some leeway is given to making deals with criminals [italic]if and only if[/italic] the deal benefits the safety or situation of the station or circumstances rather than just yourself (e.g. hostage situations). - - Some leeway can be given in [color=#ff0000]extreme circumstances[/color] of extreme shortstaffing and/or emergency/crisis. - - Command, Justice, and Security are expected to uphold the law and maintain order aboard the station. Do not engage in lawbreaking activity or troublemaker behavior, and ensure that company policy and standard operating procedure - not just space law - is being observed. Security is expected to intervene into criminal activity where possible and safe to do so. Heads of departments are at minimum expected to report criminal activity to Security and should cooperate with law enforcement where possible. +Security, Justice, and Command roles are held to a higher standard of roleplay, and are subject to these additional rules. These roles shape the roleplay experience of the server. + - Your character must act in a manner that NanoTrasen would reasonably hire them to this position. + - Your character is presumed to be sane, competent in their duties, and able to make decisions to the benefit of the station. + - Giving away Traitor objective items and sensitive equipment should be avoided in these roles. Your character should value them deeply. + - Leeway is given to making deals with criminals if the deal benefits the safety or situation of the crew and station. + - Leeway can be given in [color=#ff0000]extreme circumstances[/color] of emergency/crisis. + - The three departments are required to read and follow Delta-V Space Law, Standard Operating Procedure, Alert Procedure, and Company Policy to the best of their ability. + - [color=#ff0000]Circumstances and context may permit you to break these laws. However, the fact that this rule is malleable is not an excuse to ignore it entirely.[/color] + - Your character is expected to uphold the law and maintain order aboard the station. Do not engage in lawbreaking activity or troublemaker behavior, and ensure all laws are followed. + - Security is expected to intervene in criminal activity where possible and safe to do so. + - Heads of departments are at minimum expected to report criminal activity to Security and should cooperate with law enforcement where possible. - Do not hire random crew to be your bodyguard(s) or promote random crewmembers to Command positions at random. If you require bodyguards or security details, talk to your Security department. If you need new Command staff, talk to the personnel in that related department. - - \ No newline at end of file + - If you need to leave the round, notify your fellow crew via departmental radio and put your equipment in its proper places prior to going to cryo. If you need to leave IMMEDIATELY, please at least send an ahelp saying that you're leaving. + diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/RoleRules/C2_PrisonerRule.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/RoleRules/C2_PrisonerRule.xml index 0b6ce7d0a50..51f361f0da8 100644 --- a/Resources/ServerInfo/Guidebook/DeltaV/Rules/RoleRules/C2_PrisonerRule.xml +++ b/Resources/ServerInfo/Guidebook/DeltaV/Rules/RoleRules/C2_PrisonerRule.xml @@ -1,8 +1,6 @@ # Rule C2: Prisoner Guidelines - By picking the prisoner role, you have chosen to roleplay as a prisoner. - You are still subject to the same rules regarding escalation, and should only seek to escape from the brig with excellent reasoning (e.g. abusive security personnel or badly damaged permanent brig). - Escaping for no reason is considered a self-antagonistic activity. - If you are unsure whether your escape reason is valid, feel free to AHelp it first. [color=#ff0000]Lack of administrator response does not constitute approval.[/color] - - \ No newline at end of file +By picking the prisoner role, you have chosen to roleplay as a prisoner. You are still subject to the same rules regarding escalation, and should only seek to escape from the brig with excellent reasoning (e.g. abusive security personnel or badly damaged brig). + - Escaping for no reason is considered a self-antagonistic activity. + - If you are unsure whether your escape reason is valid, feel free to AHelp it first. [color=#ff0000]Lack of administrator response does not constitute approval.[/color] + diff --git a/Resources/ServerInfo/Guidebook/DeltaV/Rules/RoleRules/C3_Antags.xml b/Resources/ServerInfo/Guidebook/DeltaV/Rules/RoleRules/C3_Antags.xml index bf60ad96d48..7da8c255176 100644 --- a/Resources/ServerInfo/Guidebook/DeltaV/Rules/RoleRules/C3_Antags.xml +++ b/Resources/ServerInfo/Guidebook/DeltaV/Rules/RoleRules/C3_Antags.xml @@ -1,11 +1,14 @@ # Rule C3: Antagonist Guidelines - - The damage that antagonists can cause should be roughly proportional to their objectives, and contribute towards achieving them in some way. - If you are concerned as to whether or not what you're about to do is allowed, feel free to AHelp and ask an admin for clarification. [color=#ff0000]Lack of administrator response does not constitute approval.[/color] - - Antagonists exist not only as a role for your character but also as a game mechanic. Seek to push forward the round through your antagonistic actions, rather than grind it to halt in pursuit of your objectives. - - Other antagonists are not necessarily your friends. Other agents, mercenaries, and possibly even space dragons are free agents that you may negotiate with at your own risk, but no one should be working together with xenomorphs or zombies. - - Heavily damaging/spacing or camping arrivals/cryo, unnecessarily extending the round, and behavior that calls the round to an end prematurely - as well as other lame behaviors - are strictly forbidden for all antags except for station-destroying antags, such as nuclear operatives or space dragons. - - As a non-sentient or partially-sentient antagonist, you are expected to have only a limited understanding of space stations and their mechanics. - Slimes, zombies, and spiders should [color=#ff0000]not[/color] be targeting the gravity generator or the AME, nor should they be unnecessarily spacing the station. - - \ No newline at end of file +Through engaging in antagonistic activity, you should seek to make the round more engaging and fun as the primary driver of the narrative of a round. Succeeding as an antagonist should not be your goal, but rather telling the most interesting story for everyone involved. + - [color=#ff0000]Antagonists are free to complete their objectives through committing proportional damage. Through roleplay, damage becomes more proportional.[/color] Example: Holding the singulo hostage for a theft objective is acceptable, while simply singuloosing and using that chaos is unacceptable. + - Killing players unrelated to your immediate objective in a manner that results in their round removal should be avoided. Crew that do not make an attempt at self preservation, or engage in valid-hunting, are exempt from this. + - If you are concerned as to whether or not what you're about to do is allowed, feel free to AHelp and ask an admin for clarification. [color=#ff0000]Lack of administrator response does not constitute approval.[/color] + - Other antagonists are not necessarily your friends. Other antagonists are often free agents that you may negotiate with at your own risk. + - If you are a team antagonist, you must work with your partners to complete any shared objectives. + - Excessively lame tactics are strictly forbidden for all antags except for station-destroying antags, such as nuclear operatives or space dragons. Examples include: + - [color=#ff0000]Explosives and strategies with capacity for high collateral damage used on or around the evacuation shuttle[/color] + - Heavily damaging/spacing or camping arrivals/cryo + - Unnecessarily extending the round + - Behavior that calls the round to an end prematurely + diff --git a/Resources/ServerInfo/Guidebook/Mobs/Diona.xml b/Resources/ServerInfo/Guidebook/Mobs/Diona.xml index eedf23b14f2..890efb356d3 100644 --- a/Resources/ServerInfo/Guidebook/Mobs/Diona.xml +++ b/Resources/ServerInfo/Guidebook/Mobs/Diona.xml @@ -6,7 +6,7 @@ They can't wear shoes, but are not slowed by Kudzu. - They get hungry and thirsty slower. + They get hungry slower and thirsty faster. Their "blood" is tree sap and can't be metabolised from Iron. Being plants, Weed Killer poisons them, while Robust Harvest heals them (but not without risk when overused!) diff --git a/Resources/ServerInfo/Nyanotrasen/Guidebook/Epistemics/Altar.xml b/Resources/ServerInfo/Nyanotrasen/Guidebook/Epistemics/Altar.xml index c3b211d2964..540e15a7245 100644 --- a/Resources/ServerInfo/Nyanotrasen/Guidebook/Epistemics/Altar.xml +++ b/Resources/ServerInfo/Nyanotrasen/Guidebook/Epistemics/Altar.xml @@ -5,18 +5,11 @@ The chapel has a [color=#a4885c]sacrificial altar[/color]. To use it, a psionic humanoid must be placed on it, and someone with either psionics or clerical training must initiate the sacrifice. It appears in the context menu on the altar, which can be opened with the right mouse button by default. - -Once sacrificed, the psionic humanoid's soul is trapped inside a [color=#a4885c]soul crystal[/color]. This is not the end for them; they can still talk both vocally and telepathically, and this form is much harder to destroy. - - -10% of the time, the altar will spawn a powerful psionic item along with the soul crystal. This chance increases to 50% if the sacrifice was performed by someone with clerical training, such as the [color=#a4885c]chaplain[/color] or [color=#a4885c]mystagogue[/color]. + + +As a reward for sacrificing a psionic, glimmer will be lowered substantially and you will be given some loot. +Usually this is a few bluespace crystals, but you can also get a powerful psionic item. ## Golemancy - - - - -Soul crystals can be installed into [color=#a4885c]golems[/color] to give the soul a new body. Golems are bound to serve their master. As constructs, they do not need to eat, drink, or breathe. -Note that for wood golems, if plants are planted on top of their head, the plants will still need those things. - +[color=red]Note: Golemancy is not implemented yet. Once you sacrifice a psionic you can borg them with an MMI.[/color] diff --git a/Resources/Textures/Clothing/Head/Bandanas/blue.rsi/equipped-HELMET-vox.png b/Resources/Textures/Clothing/Head/Bandanas/blue.rsi/equipped-HELMET-vox.png index 72664323727..6bc5266367f 100644 Binary files a/Resources/Textures/Clothing/Head/Bandanas/blue.rsi/equipped-HELMET-vox.png and b/Resources/Textures/Clothing/Head/Bandanas/blue.rsi/equipped-HELMET-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Bandanas/blue.rsi/equipped-MASK-vox.png b/Resources/Textures/Clothing/Head/Bandanas/blue.rsi/equipped-MASK-vox.png index 6bc5266367f..72664323727 100644 Binary files a/Resources/Textures/Clothing/Head/Bandanas/blue.rsi/equipped-MASK-vox.png and b/Resources/Textures/Clothing/Head/Bandanas/blue.rsi/equipped-MASK-vox.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/holyhatmelon.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Hats/holyhatmelon.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..bfd047d7cf6 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/holyhatmelon.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/holyhatmelon.rsi/icon.png b/Resources/Textures/Clothing/Head/Hats/holyhatmelon.rsi/icon.png new file mode 100644 index 00000000000..6161c05f120 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/holyhatmelon.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/holyhatmelon.rsi/inhand-left.png b/Resources/Textures/Clothing/Head/Hats/holyhatmelon.rsi/inhand-left.png new file mode 100644 index 00000000000..6f8c72da91e Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/holyhatmelon.rsi/inhand-left.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/holyhatmelon.rsi/inhand-right.png b/Resources/Textures/Clothing/Head/Hats/holyhatmelon.rsi/inhand-right.png new file mode 100644 index 00000000000..6a4eb8bbe3a Binary files /dev/null and b/Resources/Textures/Clothing/Head/Hats/holyhatmelon.rsi/inhand-right.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/holyhatmelon.rsi/meta.json b/Resources/Textures/Clothing/Head/Hats/holyhatmelon.rsi/meta.json new file mode 100644 index 00000000000..302f4371e8c --- /dev/null +++ b/Resources/Textures/Clothing/Head/Hats/holyhatmelon.rsi/meta.json @@ -0,0 +1,52 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/commit/b459ea3fdee965bdc3e93e7983ad7fa610d05c12 and https://github.com/tgstation/tgstation/commit/ead6d8d59753ef033efdfad17f337df268038ff3 and modified by ravage", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4, + "delays": [ + [ + 0.5, + 0.5, + 0.5, + 0.5 + ], + [ + 0.5, + 0.5, + 0.5, + 0.5 + ], + [ + 0.5, + 0.5, + 0.5, + 0.5 + ], + [ + 0.5, + 0.5, + 0.5, + 0.5 + ] + ] + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Head/Hats/warden.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Hats/warden.rsi/equipped-HELMET.png index 10dab5101f7..70d2f5adc40 100644 Binary files a/Resources/Textures/Clothing/Head/Hats/warden.rsi/equipped-HELMET.png and b/Resources/Textures/Clothing/Head/Hats/warden.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/Clothing/Head/Hats/warden.rsi/meta.json b/Resources/Textures/Clothing/Head/Hats/warden.rsi/meta.json index 7bd2e3e22a7..e953fa53d57 100644 --- a/Resources/Textures/Clothing/Head/Hats/warden.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hats/warden.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, texture edited by TeaMaki (On github TeaMakiNL)", "size": { "x": 32, "y": 32 diff --git a/Resources/Textures/Clothing/Head/Helmets/bone_helmet.rsi/meta.json b/Resources/Textures/Clothing/Head/Helmets/bone_helmet.rsi/meta.json index bbb0aac6648..a470e009443 100644 --- a/Resources/Textures/Clothing/Head/Helmets/bone_helmet.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Helmets/bone_helmet.rsi/meta.json @@ -20,7 +20,7 @@ }, { "name": "inhand-right", - "direction": 4 + "directions": 4 } ] } diff --git a/Resources/Textures/Clothing/Head/Misc/hairflower.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Head/Misc/hairflower.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..d1a436b8379 Binary files /dev/null and b/Resources/Textures/Clothing/Head/Misc/hairflower.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/Clothing/Head/Misc/hairflower.rsi/icon.png b/Resources/Textures/Clothing/Head/Misc/hairflower.rsi/icon.png new file mode 100644 index 00000000000..cd68c5efcba Binary files /dev/null and b/Resources/Textures/Clothing/Head/Misc/hairflower.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Head/Misc/hairflower.rsi/meta.json b/Resources/Textures/Clothing/Head/Misc/hairflower.rsi/meta.json new file mode 100644 index 00000000000..a3ec217bca5 --- /dev/null +++ b/Resources/Textures/Clothing/Head/Misc/hairflower.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "icon sprited by Just_Art, equipped-HELMET sprite taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Clothing/Multiple/towel.rsi/NTmono.png b/Resources/Textures/Clothing/Multiple/towel.rsi/NTmono.png new file mode 100644 index 00000000000..e293a0e7e9e Binary files /dev/null and b/Resources/Textures/Clothing/Multiple/towel.rsi/NTmono.png differ diff --git a/Resources/Textures/Clothing/Multiple/towel.rsi/equipped-BELT.png b/Resources/Textures/Clothing/Multiple/towel.rsi/equipped-BELT.png new file mode 100644 index 00000000000..6ccb1f26ae0 Binary files /dev/null and b/Resources/Textures/Clothing/Multiple/towel.rsi/equipped-BELT.png differ diff --git a/Resources/Textures/Clothing/Multiple/towel.rsi/equipped-HELMET.png b/Resources/Textures/Clothing/Multiple/towel.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..769f67b9a0c Binary files /dev/null and b/Resources/Textures/Clothing/Multiple/towel.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/Clothing/Multiple/towel.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/Clothing/Multiple/towel.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..6105c8aba12 Binary files /dev/null and b/Resources/Textures/Clothing/Multiple/towel.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/Clothing/Multiple/towel.rsi/icon.png b/Resources/Textures/Clothing/Multiple/towel.rsi/icon.png new file mode 100644 index 00000000000..c5c73e1060d Binary files /dev/null and b/Resources/Textures/Clothing/Multiple/towel.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Multiple/towel.rsi/iconstripe.png b/Resources/Textures/Clothing/Multiple/towel.rsi/iconstripe.png new file mode 100644 index 00000000000..334d3f3531e Binary files /dev/null and b/Resources/Textures/Clothing/Multiple/towel.rsi/iconstripe.png differ diff --git a/Resources/Textures/Clothing/Multiple/towel.rsi/inhand-left.png b/Resources/Textures/Clothing/Multiple/towel.rsi/inhand-left.png new file mode 100644 index 00000000000..4c8b4428ae6 Binary files /dev/null and b/Resources/Textures/Clothing/Multiple/towel.rsi/inhand-left.png differ diff --git a/Resources/Textures/Clothing/Multiple/towel.rsi/inhand-right.png b/Resources/Textures/Clothing/Multiple/towel.rsi/inhand-right.png new file mode 100644 index 00000000000..7ef955ba5f8 Binary files /dev/null and b/Resources/Textures/Clothing/Multiple/towel.rsi/inhand-right.png differ diff --git a/Resources/Textures/Clothing/Multiple/towel.rsi/meta.json b/Resources/Textures/Clothing/Multiple/towel.rsi/meta.json new file mode 100644 index 00000000000..95acda0af39 --- /dev/null +++ b/Resources/Textures/Clothing/Multiple/towel.rsi/meta.json @@ -0,0 +1,40 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Baystation12 at commit https://github.com/Baystation12/Baystation12/commit/c5dc6953e6e1fde87c2ded60038144f1d21fbd48", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "iconstripe" + }, + { + "name": "NTmono" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-BELT", + "directions": 4 + }, + { + "name": "equipped-HELMET", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Clothing/Neck/Misc/autismpin.rsi/meta.json b/Resources/Textures/Clothing/Neck/Misc/autismpin.rsi/meta.json deleted file mode 100644 index e82672f071c..00000000000 --- a/Resources/Textures/Clothing/Neck/Misc/autismpin.rsi/meta.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-NC-4.0", - "copyright": "Terraspark's work", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "autism" - }, - { - "name": "autism-equipped", - "directions": 4 - } - ] -} diff --git a/Resources/Textures/Clothing/Neck/Misc/dinkystar.rsi/star-equipped.png b/Resources/Textures/Clothing/Neck/Misc/dinkystar.rsi/equipped-NECK.png similarity index 100% rename from Resources/Textures/Clothing/Neck/Misc/dinkystar.rsi/star-equipped.png rename to Resources/Textures/Clothing/Neck/Misc/dinkystar.rsi/equipped-NECK.png diff --git a/Resources/Textures/Clothing/Neck/Misc/dinkystar.rsi/meta.json b/Resources/Textures/Clothing/Neck/Misc/dinkystar.rsi/meta.json index ae8a2141dbd..0ed35562ca4 100644 --- a/Resources/Textures/Clothing/Neck/Misc/dinkystar.rsi/meta.json +++ b/Resources/Textures/Clothing/Neck/Misc/dinkystar.rsi/meta.json @@ -11,7 +11,7 @@ "name": "icon" }, { - "name": "star-equipped", + "name": "equipped-NECK", "directions": 4 } ] diff --git a/Resources/Textures/Clothing/Neck/Misc/goldautismpin.rsi/meta.json b/Resources/Textures/Clothing/Neck/Misc/goldautismpin.rsi/meta.json deleted file mode 100644 index 6848744ab8a..00000000000 --- a/Resources/Textures/Clothing/Neck/Misc/goldautismpin.rsi/meta.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-NC-4.0", - "copyright": "Terraspark's work", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "goldautism" - }, - { - "name": "goldautism-equipped", - "directions": 4 - } - ] -} diff --git a/Resources/Textures/Clothing/Neck/Misc/pins.rsi/aro-equipped.png b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/aro-equipped-NECK.png similarity index 100% rename from Resources/Textures/Clothing/Neck/Misc/pins.rsi/aro-equipped.png rename to Resources/Textures/Clothing/Neck/Misc/pins.rsi/aro-equipped-NECK.png diff --git a/Resources/Textures/Clothing/Neck/Misc/pins.rsi/asex-equipped.png b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/asex-equipped-NECK.png similarity index 100% rename from Resources/Textures/Clothing/Neck/Misc/pins.rsi/asex-equipped.png rename to Resources/Textures/Clothing/Neck/Misc/pins.rsi/asex-equipped-NECK.png diff --git a/Resources/Textures/Clothing/Neck/Misc/autismpin.rsi/autism-equipped.png b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/autism-equipped-NECK.png similarity index 100% rename from Resources/Textures/Clothing/Neck/Misc/autismpin.rsi/autism-equipped.png rename to Resources/Textures/Clothing/Neck/Misc/pins.rsi/autism-equipped-NECK.png diff --git a/Resources/Textures/Clothing/Neck/Misc/autismpin.rsi/autism.png b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/autism.png similarity index 100% rename from Resources/Textures/Clothing/Neck/Misc/autismpin.rsi/autism.png rename to Resources/Textures/Clothing/Neck/Misc/pins.rsi/autism.png diff --git a/Resources/Textures/Clothing/Neck/Misc/pins.rsi/bi-equipped.png b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/bi-equipped-NECK.png similarity index 100% rename from Resources/Textures/Clothing/Neck/Misc/pins.rsi/bi-equipped.png rename to Resources/Textures/Clothing/Neck/Misc/pins.rsi/bi-equipped-NECK.png diff --git a/Resources/Textures/Clothing/Neck/Misc/pins.rsi/gay-equipped-NECK.png b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/gay-equipped-NECK.png new file mode 100644 index 00000000000..d5127a02186 Binary files /dev/null and b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/gay-equipped-NECK.png differ diff --git a/Resources/Textures/Clothing/Neck/Misc/pins.rsi/gay.png b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/gay.png new file mode 100644 index 00000000000..580d390fce9 Binary files /dev/null and b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/gay.png differ diff --git a/Resources/Textures/Clothing/Neck/Misc/goldautismpin.rsi/goldautism-equipped.png b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/goldautism-equipped-NECK.png similarity index 100% rename from Resources/Textures/Clothing/Neck/Misc/goldautismpin.rsi/goldautism-equipped.png rename to Resources/Textures/Clothing/Neck/Misc/pins.rsi/goldautism-equipped-NECK.png diff --git a/Resources/Textures/Clothing/Neck/Misc/goldautismpin.rsi/goldautism.png b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/goldautism.png similarity index 100% rename from Resources/Textures/Clothing/Neck/Misc/goldautismpin.rsi/goldautism.png rename to Resources/Textures/Clothing/Neck/Misc/pins.rsi/goldautism.png diff --git a/Resources/Textures/Clothing/Neck/Misc/pins.rsi/inter-equipped.png b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/inter-equipped-NECK.png similarity index 100% rename from Resources/Textures/Clothing/Neck/Misc/pins.rsi/inter-equipped.png rename to Resources/Textures/Clothing/Neck/Misc/pins.rsi/inter-equipped-NECK.png diff --git a/Resources/Textures/Clothing/Neck/Misc/pins.rsi/les-equipped.png b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/les-equipped-NECK.png similarity index 100% rename from Resources/Textures/Clothing/Neck/Misc/pins.rsi/les-equipped.png rename to Resources/Textures/Clothing/Neck/Misc/pins.rsi/les-equipped-NECK.png diff --git a/Resources/Textures/Clothing/Neck/Misc/pins.rsi/lgbt-equipped.png b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/lgbt-equipped-NECK.png similarity index 100% rename from Resources/Textures/Clothing/Neck/Misc/pins.rsi/lgbt-equipped.png rename to Resources/Textures/Clothing/Neck/Misc/pins.rsi/lgbt-equipped-NECK.png diff --git a/Resources/Textures/Clothing/Neck/Misc/pins.rsi/meta.json b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/meta.json index 46b04963997..0619f962df3 100644 --- a/Resources/Textures/Clothing/Neck/Misc/pins.rsi/meta.json +++ b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "PixelTK leaves his mark on upstream", + "copyright": "PixelTK leaves his mark on upstream, BackeTako made the gay, autism pins by Terraspark", "size": { "x": 32, "y": 32 @@ -11,63 +11,84 @@ "name": "aro" }, { - "name": "aro-equipped", + "name": "aro-equipped-NECK", "directions": 4 }, { "name": "asex" }, { - "name": "asex-equipped", + "name": "asex-equipped-NECK", + "directions": 4 + }, + { + "name": "autism" + }, + { + "name": "autism-equipped-NECK", "directions": 4 }, { "name": "bi" }, { - "name": "bi-equipped", + "name": "bi-equipped-NECK", + "directions": 4 + }, + { + "name": "gay" + }, + { + "name": "gay-equipped-NECK", + "directions": 4 + }, + { + "name": "goldautism" + }, + { + "name": "goldautism-equipped-NECK", "directions": 4 }, { "name": "inter" }, { - "name": "inter-equipped", + "name": "inter-equipped-NECK", "directions": 4 }, { "name": "les" }, { - "name": "les-equipped", + "name": "les-equipped-NECK", "directions": 4 }, { "name": "lgbt" }, { - "name": "lgbt-equipped", + "name": "lgbt-equipped-NECK", "directions": 4 }, { "name": "non" }, { - "name": "non-equipped", + "name": "non-equipped-NECK", "directions": 4 }, { "name": "pan" }, { - "name": "pan-equipped", + "name": "pan-equipped-NECK", "directions": 4 }, { "name": "trans" }, { - "name": "trans-equipped", + "name": "trans-equipped-NECK", "directions": 4 } ] diff --git a/Resources/Textures/Clothing/Neck/Misc/pins.rsi/non-equipped.png b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/non-equipped-NECK.png similarity index 100% rename from Resources/Textures/Clothing/Neck/Misc/pins.rsi/non-equipped.png rename to Resources/Textures/Clothing/Neck/Misc/pins.rsi/non-equipped-NECK.png diff --git a/Resources/Textures/Clothing/Neck/Misc/pins.rsi/pan-equipped.png b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/pan-equipped-NECK.png similarity index 100% rename from Resources/Textures/Clothing/Neck/Misc/pins.rsi/pan-equipped.png rename to Resources/Textures/Clothing/Neck/Misc/pins.rsi/pan-equipped-NECK.png diff --git a/Resources/Textures/Clothing/Neck/Misc/pins.rsi/trans-equipped.png b/Resources/Textures/Clothing/Neck/Misc/pins.rsi/trans-equipped-NECK.png similarity index 100% rename from Resources/Textures/Clothing/Neck/Misc/pins.rsi/trans-equipped.png rename to Resources/Textures/Clothing/Neck/Misc/pins.rsi/trans-equipped-NECK.png diff --git a/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/equipped-EYES-hamster.png b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/equipped-EYES-hamster.png new file mode 100644 index 00000000000..78d6ddca86e Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/equipped-EYES-hamster.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/equipped-EYES-secdog.png b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/equipped-EYES-secdog.png new file mode 100644 index 00000000000..7cf03bf0a56 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/equipped-EYES-secdog.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/equipped-EYES.png b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/equipped-EYES.png new file mode 100644 index 00000000000..a3348c1a3c5 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/equipped-EYES.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/icon.png b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/icon.png new file mode 100644 index 00000000000..c75360124fe Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/inhand-left.png b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/inhand-left.png new file mode 100644 index 00000000000..9654e9aac85 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/inhand-left.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/inhand-right.png b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/inhand-right.png new file mode 100644 index 00000000000..0d56eda11b7 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/inhand-right.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/meta.json b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/meta.json new file mode 100644 index 00000000000..e0110675313 --- /dev/null +++ b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/presccorpsglasses.rsi/meta.json @@ -0,0 +1,34 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Remodeled design of the Security Glasses done by Unkn0wn_Gh0st on github, modified for prescription corpsman glasses by Radezolid", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-EYES", + "directions": 4 + }, + { + "name": "equipped-EYES-hamster", + "directions": 4 + }, + { + "name": "equipped-EYES-secdog", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/equipped-EYES-hamster.png b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/equipped-EYES-hamster.png new file mode 100644 index 00000000000..8e95ab776a3 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/equipped-EYES-hamster.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/equipped-EYES-secdog.png b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/equipped-EYES-secdog.png new file mode 100644 index 00000000000..d645f5911d3 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/equipped-EYES-secdog.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/equipped-EYES.png b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/equipped-EYES.png new file mode 100644 index 00000000000..71ed81a36ac Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/equipped-EYES.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/icon.png b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/icon.png new file mode 100644 index 00000000000..88b59a69c58 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/inhand-left.png b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/inhand-left.png new file mode 100644 index 00000000000..e3a7b1eaf1e Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/inhand-left.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/inhand-right.png b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/inhand-right.png new file mode 100644 index 00000000000..a66bc5d9caf Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/inhand-right.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/meta.json b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/meta.json new file mode 100644 index 00000000000..b83d5eea491 --- /dev/null +++ b/Resources/Textures/DeltaV/Clothing/Eyes/Glasses/prescsecglasses.rsi/meta.json @@ -0,0 +1,34 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/5a73e8f825ff279e82949b9329783a9e3070e2da. equipped-EYES-secdog modified from equipped-EYES-hamster by TJohnson. modified for prescription security glasses by Radezolid", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-EYES", + "directions": 4 + }, + { + "name": "equipped-EYES-hamster", + "directions": 4 + }, + { + "name": "equipped-EYES-secdog", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/DeltaV/Clothing/Head/Hats/beret_det.rsi/equipped-HELMET.png b/Resources/Textures/DeltaV/Clothing/Head/Hats/beret_det.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..48c56cd6750 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Head/Hats/beret_det.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Head/Hats/beret_det.rsi/icon.png b/Resources/Textures/DeltaV/Clothing/Head/Hats/beret_det.rsi/icon.png new file mode 100644 index 00000000000..6bf993c708f Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Head/Hats/beret_det.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Head/Hats/beret_det.rsi/inhand-left.png b/Resources/Textures/DeltaV/Clothing/Head/Hats/beret_det.rsi/inhand-left.png new file mode 100644 index 00000000000..f170e5e2c4e Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Head/Hats/beret_det.rsi/inhand-left.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Head/Hats/beret_det.rsi/inhand-right.png b/Resources/Textures/DeltaV/Clothing/Head/Hats/beret_det.rsi/inhand-right.png new file mode 100644 index 00000000000..921befb3ff6 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Head/Hats/beret_det.rsi/inhand-right.png differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/meta.json b/Resources/Textures/DeltaV/Clothing/Head/Hats/beret_det.rsi/meta.json similarity index 52% rename from Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/meta.json rename to Resources/Textures/DeltaV/Clothing/Head/Hats/beret_det.rsi/meta.json index 0bcf8b915a5..0b2e116c645 100644 --- a/Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/meta.json +++ b/Resources/Textures/DeltaV/Clothing/Head/Hats/beret_det.rsi/meta.json @@ -1,24 +1,25 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "pumpkin-slice taken from https://github.com/fulpstation/fulpstation/commit/64d85bf269fd4e5f3be314bcedc3463cf1d57676 | pumpkin made by rosysyntax", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e. Modified by TJohnson.", "size": { "x": 32, "y": 32 }, "states": [ { - "name": "pumpkin" + "name": "icon" }, { - "name": "pumpkin-slice" + "name": "equipped-HELMET", + "directions": 4 }, { - "name": "inhand-right", + "name": "inhand-left", "directions": 4 }, { - "name": "inhand-left", + "name": "inhand-right", "directions": 4 } ] diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/armourercoat.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/armourercoat.rsi/equipped-OUTERCLOTHING.png index 020cba2a873..4353e774c00 100644 Binary files a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/armourercoat.rsi/equipped-OUTERCLOTHING.png and b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/armourercoat.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/armourercoat.rsi/icon.png b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/armourercoat.rsi/icon.png index 55731fcae25..bd9f40050b7 100644 Binary files a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/armourercoat.rsi/icon.png and b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/armourercoat.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/corpsmancoat.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/corpsmancoat.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..1d8343408d3 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/corpsmancoat.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/corpsmancoat.rsi/icon.png b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/corpsmancoat.rsi/icon.png new file mode 100644 index 00000000000..3c6baa9826f Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/corpsmancoat.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/corpsmancoat.rsi/inhand-left.png b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/corpsmancoat.rsi/inhand-left.png new file mode 100644 index 00000000000..40b2530a17f Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/corpsmancoat.rsi/inhand-left.png differ diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/corpsmancoat.rsi/inhand-right.png b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/corpsmancoat.rsi/inhand-right.png new file mode 100644 index 00000000000..1c7979dd1a1 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/corpsmancoat.rsi/inhand-right.png differ diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/corpsmancoat.rsi/meta.json b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/corpsmancoat.rsi/meta.json new file mode 100644 index 00000000000..5c6ea2d1ef5 --- /dev/null +++ b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/corpsmancoat.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62, modified by TJohnson.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/detcoat.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/detcoat.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..e3140e56391 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/detcoat.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/detcoat.rsi/icon.png b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/detcoat.rsi/icon.png new file mode 100644 index 00000000000..8346b09e7e0 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/detcoat.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/detcoat.rsi/inhand-left.png b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/detcoat.rsi/inhand-left.png new file mode 100644 index 00000000000..40b2530a17f Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/detcoat.rsi/inhand-left.png differ diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/detcoat.rsi/inhand-right.png b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/detcoat.rsi/inhand-right.png new file mode 100644 index 00000000000..1c7979dd1a1 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/detcoat.rsi/inhand-right.png differ diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/detcoat.rsi/meta.json b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/detcoat.rsi/meta.json new file mode 100644 index 00000000000..5c6ea2d1ef5 --- /dev/null +++ b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/detcoat.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/77cff42b6c514e73881a885036be4b4dd2949f62, modified by TJohnson.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/hoscoat.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/hoscoat.rsi/equipped-OUTERCLOTHING.png index f901627c4be..3e4a60ba6f3 100644 Binary files a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/hoscoat.rsi/equipped-OUTERCLOTHING.png and b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/hoscoat.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/hoscoat.rsi/icon.png b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/hoscoat.rsi/icon.png index f280cbb3bfc..109b15f31bf 100644 Binary files a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/hoscoat.rsi/icon.png and b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/hoscoat.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/staseccoat.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/staseccoat.rsi/equipped-OUTERCLOTHING.png index 9932b889343..8f98501808c 100644 Binary files a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/staseccoat.rsi/equipped-OUTERCLOTHING.png and b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/staseccoat.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/staseccoat.rsi/icon.png b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/staseccoat.rsi/icon.png index f504fd0c7c9..d1746a61db6 100644 Binary files a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/staseccoat.rsi/icon.png and b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/staseccoat.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/stasecsweater.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/stasecsweater.rsi/equipped-OUTERCLOTHING.png index a776184398a..2a0b09fc075 100644 Binary files a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/stasecsweater.rsi/equipped-OUTERCLOTHING.png and b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/stasecsweater.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/stasecsweater.rsi/icon.png b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/stasecsweater.rsi/icon.png index ccec2493f64..de10ebafd2d 100644 Binary files a/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/stasecsweater.rsi/icon.png and b/Resources/Textures/DeltaV/Clothing/OuterClothing/WinterCoats/stasecsweater.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/equipped-FEET.png b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/equipped-FEET.png new file mode 100644 index 00000000000..fbac1cafca7 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/equipped-FEET.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/icon-on.png b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/icon-on.png new file mode 100644 index 00000000000..b3c113328d3 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/icon-on.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/icon.png b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/icon.png new file mode 100644 index 00000000000..e880b14e5f4 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/inhand-left.png b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/inhand-left.png new file mode 100644 index 00000000000..65062eb1961 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/inhand-left.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/inhand-right.png b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/inhand-right.png new file mode 100644 index 00000000000..51e74bb2af3 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/inhand-right.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/meta.json b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/meta.json new file mode 100644 index 00000000000..d115962bb96 --- /dev/null +++ b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/meta.json @@ -0,0 +1,41 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Engineering Magboots from tgstation at commit https://github.com/tgstation/tgstation/commit/7e4e9d432d88981fb9bb463970c5b98ce85c0abe , edited by ProphetCrow (Github)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "equipped-FEET", + "directions": 4 + }, + { + "name": "on-equipped-FEET", + "directions": 4 + }, + { + "name": "icon" + }, + { + "name": "icon-on" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "on-inhand-left", + "directions": 4 + }, + { + "name": "on-inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/on-equipped-FEET.png b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/on-equipped-FEET.png new file mode 100644 index 00000000000..323b1a5fa43 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/on-equipped-FEET.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/on-inhand-left.png b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/on-inhand-left.png new file mode 100644 index 00000000000..2167a4ea553 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/on-inhand-left.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/on-inhand-right.png b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/on-inhand-right.png new file mode 100644 index 00000000000..aa018c3f4b1 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Shoes/Boots/magboots-security.rsi/on-inhand-right.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/armourer_alt.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/armourer_alt.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..3025c109020 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/armourer_alt.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/armourer_alt.rsi/icon.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/armourer_alt.rsi/icon.png new file mode 100644 index 00000000000..a8db587aab3 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/armourer_alt.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/armourer_alt.rsi/inhand-left.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/armourer_alt.rsi/inhand-left.png new file mode 100644 index 00000000000..e435949e0da Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/armourer_alt.rsi/inhand-left.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/armourer_alt.rsi/inhand-right.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/armourer_alt.rsi/inhand-right.png new file mode 100644 index 00000000000..039cc1fd356 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/armourer_alt.rsi/inhand-right.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/armourer_alt.rsi/meta.json b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/armourer_alt.rsi/meta.json new file mode 100644 index 00000000000..655b3db4c03 --- /dev/null +++ b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/armourer_alt.rsi/meta.json @@ -0,0 +1,30 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "Original work by TJohnson.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "rolled-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/armourer_alt.rsi/rolled-equipped-INNERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/armourer_alt.rsi/rolled-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..32a79d8054b Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/armourer_alt.rsi/rolled-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/brigmedic_alt.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/brigmedic_alt.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..2d6b1f2739e Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/brigmedic_alt.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/brigmedic_alt.rsi/icon.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/brigmedic_alt.rsi/icon.png new file mode 100644 index 00000000000..258401dc4ca Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/brigmedic_alt.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/brigmedic_alt.rsi/inhand-left.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/brigmedic_alt.rsi/inhand-left.png new file mode 100644 index 00000000000..1f07a4271bc Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/brigmedic_alt.rsi/inhand-left.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/brigmedic_alt.rsi/inhand-right.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/brigmedic_alt.rsi/inhand-right.png new file mode 100644 index 00000000000..aca67e73835 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/brigmedic_alt.rsi/inhand-right.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/brigmedic_alt.rsi/meta.json b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/brigmedic_alt.rsi/meta.json new file mode 100644 index 00000000000..655b3db4c03 --- /dev/null +++ b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/brigmedic_alt.rsi/meta.json @@ -0,0 +1,30 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "Original work by TJohnson.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "rolled-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/brigmedic_alt.rsi/rolled-equipped-INNERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/brigmedic_alt.rsi/rolled-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..6a803250e61 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/brigmedic_alt.rsi/rolled-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/detective_alt.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/detective_alt.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..901251c5891 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/detective_alt.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/detective_alt.rsi/icon.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/detective_alt.rsi/icon.png new file mode 100644 index 00000000000..ad4965b1970 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/detective_alt.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/detective_alt.rsi/inhand-left.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/detective_alt.rsi/inhand-left.png new file mode 100644 index 00000000000..603ac15e811 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/detective_alt.rsi/inhand-left.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/detective_alt.rsi/inhand-right.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/detective_alt.rsi/inhand-right.png new file mode 100644 index 00000000000..aabe0f3a79d Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/detective_alt.rsi/inhand-right.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/detective_alt.rsi/meta.json b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/detective_alt.rsi/meta.json new file mode 100644 index 00000000000..655b3db4c03 --- /dev/null +++ b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/detective_alt.rsi/meta.json @@ -0,0 +1,30 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "Original work by TJohnson.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "rolled-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/detective_alt.rsi/rolled-equipped-INNERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/detective_alt.rsi/rolled-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..e7c2600368e Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/detective_alt.rsi/rolled-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/hos_alt.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/hos_alt.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..81930232ff3 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/hos_alt.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/hos_alt.rsi/icon.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/hos_alt.rsi/icon.png new file mode 100644 index 00000000000..635eb5e1322 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/hos_alt.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/hos_alt.rsi/inhand-left.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/hos_alt.rsi/inhand-left.png new file mode 100644 index 00000000000..d73e872ccff Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/hos_alt.rsi/inhand-left.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/hos_alt.rsi/inhand-right.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/hos_alt.rsi/inhand-right.png new file mode 100644 index 00000000000..b7b752f01e3 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/hos_alt.rsi/inhand-right.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/hos_alt.rsi/meta.json b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/hos_alt.rsi/meta.json new file mode 100644 index 00000000000..655b3db4c03 --- /dev/null +++ b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/hos_alt.rsi/meta.json @@ -0,0 +1,30 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "Original work by TJohnson.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "rolled-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/hos_alt.rsi/rolled-equipped-INNERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/hos_alt.rsi/rolled-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..7af7311a7ae Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpskirt/hos_alt.rsi/rolled-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/armourer_alt.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/armourer_alt.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..65eb5e5fb80 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/armourer_alt.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/armourer_alt.rsi/icon.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/armourer_alt.rsi/icon.png new file mode 100644 index 00000000000..66118f2fdc3 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/armourer_alt.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/armourer_alt.rsi/inhand-left.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/armourer_alt.rsi/inhand-left.png new file mode 100644 index 00000000000..e435949e0da Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/armourer_alt.rsi/inhand-left.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/armourer_alt.rsi/inhand-right.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/armourer_alt.rsi/inhand-right.png new file mode 100644 index 00000000000..039cc1fd356 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/armourer_alt.rsi/inhand-right.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/armourer_alt.rsi/meta.json b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/armourer_alt.rsi/meta.json new file mode 100644 index 00000000000..655b3db4c03 --- /dev/null +++ b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/armourer_alt.rsi/meta.json @@ -0,0 +1,30 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "Original work by TJohnson.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "rolled-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/armourer_alt.rsi/rolled-equipped-INNERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/armourer_alt.rsi/rolled-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..1dd9575b96e Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/armourer_alt.rsi/rolled-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/brigmedic_alt.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/brigmedic_alt.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..9e46ed7b330 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/brigmedic_alt.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/brigmedic_alt.rsi/icon.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/brigmedic_alt.rsi/icon.png new file mode 100644 index 00000000000..e266077fb89 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/brigmedic_alt.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/brigmedic_alt.rsi/inhand-left.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/brigmedic_alt.rsi/inhand-left.png new file mode 100644 index 00000000000..1f07a4271bc Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/brigmedic_alt.rsi/inhand-left.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/brigmedic_alt.rsi/inhand-right.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/brigmedic_alt.rsi/inhand-right.png new file mode 100644 index 00000000000..aca67e73835 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/brigmedic_alt.rsi/inhand-right.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/brigmedic_alt.rsi/meta.json b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/brigmedic_alt.rsi/meta.json new file mode 100644 index 00000000000..655b3db4c03 --- /dev/null +++ b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/brigmedic_alt.rsi/meta.json @@ -0,0 +1,30 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "Original work by TJohnson.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "rolled-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/brigmedic_alt.rsi/rolled-equipped-INNERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/brigmedic_alt.rsi/rolled-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..6dfd0af7c38 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/brigmedic_alt.rsi/rolled-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/detective_alt.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/detective_alt.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..7907e0e543c Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/detective_alt.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/detective_alt.rsi/icon.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/detective_alt.rsi/icon.png new file mode 100644 index 00000000000..feecd435a3e Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/detective_alt.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/detective_alt.rsi/inhand-left.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/detective_alt.rsi/inhand-left.png new file mode 100644 index 00000000000..603ac15e811 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/detective_alt.rsi/inhand-left.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/detective_alt.rsi/inhand-right.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/detective_alt.rsi/inhand-right.png new file mode 100644 index 00000000000..aabe0f3a79d Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/detective_alt.rsi/inhand-right.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/detective_alt.rsi/meta.json b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/detective_alt.rsi/meta.json new file mode 100644 index 00000000000..655b3db4c03 --- /dev/null +++ b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/detective_alt.rsi/meta.json @@ -0,0 +1,30 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "Original work by TJohnson.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "rolled-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/detective_alt.rsi/rolled-equipped-INNERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/detective_alt.rsi/rolled-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..a591968dd37 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/detective_alt.rsi/rolled-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/hos_alt.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/hos_alt.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..9468844dc02 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/hos_alt.rsi/equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/hos_alt.rsi/icon.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/hos_alt.rsi/icon.png new file mode 100644 index 00000000000..f0a6bc8f174 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/hos_alt.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/hos_alt.rsi/inhand-left.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/hos_alt.rsi/inhand-left.png new file mode 100644 index 00000000000..d73e872ccff Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/hos_alt.rsi/inhand-left.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/hos_alt.rsi/inhand-right.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/hos_alt.rsi/inhand-right.png new file mode 100644 index 00000000000..b7b752f01e3 Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/hos_alt.rsi/inhand-right.png differ diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/hos_alt.rsi/meta.json b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/hos_alt.rsi/meta.json new file mode 100644 index 00000000000..655b3db4c03 --- /dev/null +++ b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/hos_alt.rsi/meta.json @@ -0,0 +1,30 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "Original work by TJohnson.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "rolled-equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/hos_alt.rsi/rolled-equipped-INNERCLOTHING.png b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/hos_alt.rsi/rolled-equipped-INNERCLOTHING.png new file mode 100644 index 00000000000..2ebe09f87fd Binary files /dev/null and b/Resources/Textures/DeltaV/Clothing/Uniforms/Jumpsuit/hos_alt.rsi/rolled-equipped-INNERCLOTHING.png differ diff --git a/Resources/Textures/DeltaV/Markers/jobs.rsi/meta.json b/Resources/Textures/DeltaV/Markers/jobs.rsi/meta.json index a7534b9ee5b..73c7764df0a 100644 --- a/Resources/Textures/DeltaV/Markers/jobs.rsi/meta.json +++ b/Resources/Textures/DeltaV/Markers/jobs.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "made by Floofers", + "copyright": "made by Floofers. roboticist.png created by deltanedas (github) for DeltaV.", "size": { "x": 32, "y": 32 @@ -45,6 +45,9 @@ }, { "name": "mobster" + }, + { + "name": "roboticist" } ] } diff --git a/Resources/Textures/DeltaV/Markers/jobs.rsi/roboticist.png b/Resources/Textures/DeltaV/Markers/jobs.rsi/roboticist.png new file mode 100644 index 00000000000..4199496274f Binary files /dev/null and b/Resources/Textures/DeltaV/Markers/jobs.rsi/roboticist.png differ diff --git a/Resources/Textures/DeltaV/Misc/program_icons.rsi/meta.json b/Resources/Textures/DeltaV/Misc/program_icons.rsi/meta.json new file mode 100644 index 00000000000..1a7d2a16194 --- /dev/null +++ b/Resources/Textures/DeltaV/Misc/program_icons.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "stock_trading made by Malice", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "stock_trading" + } + ] +} diff --git a/Resources/Textures/DeltaV/Misc/program_icons.rsi/stock_trading.png b/Resources/Textures/DeltaV/Misc/program_icons.rsi/stock_trading.png new file mode 100644 index 00000000000..251b46a3f83 Binary files /dev/null and b/Resources/Textures/DeltaV/Misc/program_icons.rsi/stock_trading.png differ diff --git a/Resources/Textures/DeltaV/Mobs/Customization/scars.rsi/meta.json b/Resources/Textures/DeltaV/Mobs/Customization/scars.rsi/meta.json new file mode 100644 index 00000000000..bcdb3ffbf2e --- /dev/null +++ b/Resources/Textures/DeltaV/Mobs/Customization/scars.rsi/meta.json @@ -0,0 +1,16 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Drawn by Ubaser, modified by Aikakakah", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "scar_chest_female", + "directions": 4 + } + ] + } + \ No newline at end of file diff --git a/Resources/Textures/DeltaV/Mobs/Customization/scars.rsi/scar_chest_female.png b/Resources/Textures/DeltaV/Mobs/Customization/scars.rsi/scar_chest_female.png new file mode 100644 index 00000000000..b6009e3b662 Binary files /dev/null and b/Resources/Textures/DeltaV/Mobs/Customization/scars.rsi/scar_chest_female.png differ diff --git a/Resources/Textures/DeltaV/Mobs/Customization/tattoos.rsi/meta.json b/Resources/Textures/DeltaV/Mobs/Customization/tattoos.rsi/meta.json new file mode 100644 index 00000000000..5693064c0f5 --- /dev/null +++ b/Resources/Textures/DeltaV/Mobs/Customization/tattoos.rsi/meta.json @@ -0,0 +1,23 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "https://github.com/Skyrat-SS13/Skyrat-tg/tree/40e3cdbb15b8bc0d5ef2fb46133adf805bda5297/modular_skyrat/master_files/icons/mob/body_markings/tattoo_markings.dmi, modified by Aikakakah", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "tattoo_hive_chest_female", + "directions": 4 + }, + { + "name": "tattoo_nightling", + "directions": 4 + }, + { + "name": "tattoo_nightling_female", + "directions": 4 + } + ] + } diff --git a/Resources/Textures/DeltaV/Mobs/Customization/tattoos.rsi/tattoo_hive_chest_female.png b/Resources/Textures/DeltaV/Mobs/Customization/tattoos.rsi/tattoo_hive_chest_female.png new file mode 100644 index 00000000000..835ae506555 Binary files /dev/null and b/Resources/Textures/DeltaV/Mobs/Customization/tattoos.rsi/tattoo_hive_chest_female.png differ diff --git a/Resources/Textures/DeltaV/Mobs/Customization/tattoos.rsi/tattoo_nightling.png b/Resources/Textures/DeltaV/Mobs/Customization/tattoos.rsi/tattoo_nightling.png new file mode 100644 index 00000000000..ab92c759219 Binary files /dev/null and b/Resources/Textures/DeltaV/Mobs/Customization/tattoos.rsi/tattoo_nightling.png differ diff --git a/Resources/Textures/DeltaV/Mobs/Customization/tattoos.rsi/tattoo_nightling_female.png b/Resources/Textures/DeltaV/Mobs/Customization/tattoos.rsi/tattoo_nightling_female.png new file mode 100644 index 00000000000..06b4f37ae7d Binary files /dev/null and b/Resources/Textures/DeltaV/Mobs/Customization/tattoos.rsi/tattoo_nightling_female.png differ diff --git a/Resources/Textures/DeltaV/Mobs/Silicon/Bots/medibot.rsi/medibot.png b/Resources/Textures/DeltaV/Mobs/Silicon/Bots/medibot.rsi/medibot.png new file mode 100644 index 00000000000..f3211187e01 Binary files /dev/null and b/Resources/Textures/DeltaV/Mobs/Silicon/Bots/medibot.rsi/medibot.png differ diff --git a/Resources/Textures/DeltaV/Mobs/Silicon/Bots/medibot.rsi/meta.json b/Resources/Textures/DeltaV/Mobs/Silicon/Bots/medibot.rsi/meta.json new file mode 100644 index 00000000000..fc4e7e872ca --- /dev/null +++ b/Resources/Textures/DeltaV/Mobs/Silicon/Bots/medibot.rsi/meta.json @@ -0,0 +1,15 @@ +{ + "copyright" : "Taken from https://github.com/tgstation/tgstation. modified by Radezolid", + "license" : "CC-BY-SA-3.0", + "size" : { + "x" : 32, + "y" : 32 + }, + "states" : [ + { + "directions" : 1, + "name" : "medibot" + } + ], + "version" : 1 +} diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/inhand-left.png b/Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/inhand-left.png deleted file mode 100644 index fa40fb33491..00000000000 Binary files a/Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/inhand-left.png and /dev/null differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/inhand-right.png b/Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/inhand-right.png deleted file mode 100644 index e08270f864a..00000000000 Binary files a/Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/inhand-right.png and /dev/null differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/pumpkin-slice.png b/Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/pumpkin-slice.png deleted file mode 100644 index a07ece057b8..00000000000 Binary files a/Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/pumpkin-slice.png and /dev/null differ diff --git a/Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/pumpkin.png b/Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/pumpkin.png deleted file mode 100644 index ebad31e29d8..00000000000 Binary files a/Resources/Textures/DeltaV/Objects/Consumable/Food/Baked/pie.rsi/pumpkin.png and /dev/null differ diff --git a/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/cart-cri.png b/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/cart-cri.png index 4da4343e584..e0d2124ea50 100644 Binary files a/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/cart-cri.png and b/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/cart-cri.png differ diff --git a/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/cart-mail.png b/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/cart-mail.png index 5734abb6fd1..329e95d5f31 100644 Binary files a/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/cart-mail.png and b/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/cart-mail.png differ diff --git a/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/cart-psi.png b/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/cart-psi.png new file mode 100644 index 00000000000..3723901052e Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/cart-psi.png differ diff --git a/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/cart-stonk.png b/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/cart-stonk.png new file mode 100644 index 00000000000..ddfed6e915c Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/cart-stonk.png differ diff --git a/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/meta.json b/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/meta.json index 4a4ba3352f8..7dacb238424 100644 --- a/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/meta.json +++ b/Resources/Textures/DeltaV/Objects/Devices/cartridge.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Timfa, plus edits by portfiend", + "copyright": "Monotheonist (github), edited from cart-log, cart-nav & cart-med cartridges; cart-log made by Skarletto (github), cart-nav, cart-med made by ArchRBX (github)", "size": { "x": 32, "y": 32 @@ -12,6 +12,12 @@ }, { "name": "cart-mail" + }, + { + "name": "cart-psi" + }, + { + "name": "cart-stonk" } ] } diff --git a/Resources/Textures/DeltaV/Objects/Storage/lunchbox.rsi/justice-inhand-left.png b/Resources/Textures/DeltaV/Objects/Storage/lunchbox.rsi/justice-inhand-left.png new file mode 100644 index 00000000000..7965e4e2bc3 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Storage/lunchbox.rsi/justice-inhand-left.png differ diff --git a/Resources/Textures/DeltaV/Objects/Storage/lunchbox.rsi/justice-inhand-right.png b/Resources/Textures/DeltaV/Objects/Storage/lunchbox.rsi/justice-inhand-right.png new file mode 100644 index 00000000000..3c8a5af87ef Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Storage/lunchbox.rsi/justice-inhand-right.png differ diff --git a/Resources/Textures/DeltaV/Objects/Storage/lunchbox.rsi/justice-open.png b/Resources/Textures/DeltaV/Objects/Storage/lunchbox.rsi/justice-open.png new file mode 100644 index 00000000000..6c5ee610a0a Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Storage/lunchbox.rsi/justice-open.png differ diff --git a/Resources/Textures/DeltaV/Objects/Storage/lunchbox.rsi/justice.png b/Resources/Textures/DeltaV/Objects/Storage/lunchbox.rsi/justice.png new file mode 100644 index 00000000000..9a2075e9c38 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Storage/lunchbox.rsi/justice.png differ diff --git a/Resources/Textures/DeltaV/Objects/Storage/lunchbox.rsi/meta.json b/Resources/Textures/DeltaV/Objects/Storage/lunchbox.rsi/meta.json index 3a1567e3edd..1ebf21c76df 100644 --- a/Resources/Textures/DeltaV/Objects/Storage/lunchbox.rsi/meta.json +++ b/Resources/Textures/DeltaV/Objects/Storage/lunchbox.rsi/meta.json @@ -1,7 +1,7 @@ { "version":1, "license":"CC-BY-SA-3.0", - "copyright":"made by noctyrnal (github) from the honkbox sprite made by brainfood1183 (github)", + "copyright":"made by noctyrnal (github) from the honkbox sprite made by brainfood1183 (github), justice lunchboxes edited from the generic lunchbox by Monotheonist", "size":{ "x":32, "y":32 @@ -132,6 +132,20 @@ { "name":"syndicate-inhand-right", "directions":4 + }, + { + "name":"justice" + }, + { + "name":"justice-open" + }, + { + "name":"justice-inhand-left", + "directions":4 + }, + { + "name":"justice-inhand-right", + "directions":4 } ] } diff --git a/Resources/Textures/DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi/equipped-BACKPACK.png b/Resources/Textures/DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi/equipped-BACKPACK.png new file mode 100644 index 00000000000..26536db36fb Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi/equipped-BACKPACK.png differ diff --git a/Resources/Textures/DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi/icon.png b/Resources/Textures/DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi/icon.png new file mode 100644 index 00000000000..d665a4503ad Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi/icon.png differ diff --git a/Resources/Textures/DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi/inhand-left.png b/Resources/Textures/DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi/inhand-left.png new file mode 100644 index 00000000000..ec907b0f945 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi/inhand-left.png differ diff --git a/Resources/Textures/DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi/inhand-right.png b/Resources/Textures/DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi/inhand-right.png new file mode 100644 index 00000000000..77258a43094 Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi/inhand-right.png differ diff --git a/Resources/Textures/DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi/meta.json b/Resources/Textures/DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi/meta.json new file mode 100644 index 00000000000..f8637ed691f --- /dev/null +++ b/Resources/Textures/DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi/meta.json @@ -0,0 +1,34 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by Findorsal", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "wielded-inhand-left", + "directions": 4 + }, + { + "name": "wielded-inhand-right", + "directions": 4 + }, + { + "name": "equipped-BACKPACK", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi/wielded-inhand-left.png b/Resources/Textures/DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi/wielded-inhand-left.png new file mode 100644 index 00000000000..700a5349f5f Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi/wielded-inhand-left.png differ diff --git a/Resources/Textures/DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi/wielded-inhand-right.png b/Resources/Textures/DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi/wielded-inhand-right.png new file mode 100644 index 00000000000..e40b87bff7b Binary files /dev/null and b/Resources/Textures/DeltaV/Objects/Weapons/Melee/advanced_truncheon.rsi/wielded-inhand-right.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/assembly.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/assembly.png new file mode 100644 index 00000000000..f2ddfc23c9b Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/assembly.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/bolted_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/bolted_unlit.png new file mode 100644 index 00000000000..653846c3022 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/bolted_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/closed.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/closed.png new file mode 100644 index 00000000000..6de0c21baca Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/closed.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/closed_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/closed_unlit.png new file mode 100644 index 00000000000..cc185dfdb5a Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/closed_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/closing.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/closing.png new file mode 100644 index 00000000000..dfed7d80548 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/closing.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/closing_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/closing_unlit.png new file mode 100644 index 00000000000..7498990a390 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/closing_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/deny_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/deny_unlit.png new file mode 100644 index 00000000000..8c381d4c61e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/deny_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/emergency_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/emergency_unlit.png new file mode 100644 index 00000000000..f210ecf123e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/emergency_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/meta.json b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/meta.json new file mode 100644 index 00000000000..9229d5ffd0a --- /dev/null +++ b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/meta.json @@ -0,0 +1,195 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Redrawn assets https://github.com/ParadiseSS13/Paradise/, redrawing done by Unkn0wn_Gh0st333 on github", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "assembly" + }, + { + "name": "bolted_unlit" + }, + { + "name": "closed" + }, + { + "name": "closed_unlit" + }, + { + "name": "closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "closing_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "deny_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "opening_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "panel_opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "sparks", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_broken", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_damaged", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 1.7 + ] + ] + }, + { + "name": "sparks_open", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "welded" + }, + { + "name": "emergency_unlit", + "delays": [ + [ + 0.4, + 0.4 + ] + ] + } + ] +} diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/open.png new file mode 100644 index 00000000000..d8485a48e74 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/open.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/opening.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/opening.png new file mode 100644 index 00000000000..3ea40202f1c Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/opening.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/opening_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/opening_unlit.png new file mode 100644 index 00000000000..2e109950a4e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/opening_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/panel_closing.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/panel_closing.png new file mode 100644 index 00000000000..4a0d28b65b4 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/panel_closing.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/panel_open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/panel_open.png new file mode 100644 index 00000000000..2e348983fef Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/panel_open.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/panel_opening.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/panel_opening.png new file mode 100644 index 00000000000..899651c3044 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/panel_opening.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks.png new file mode 100644 index 00000000000..dd67e88a315 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks_broken.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks_broken.png new file mode 100644 index 00000000000..fb5d774588a Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks_broken.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks_damaged.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks_damaged.png new file mode 100644 index 00000000000..f16a028dee5 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks_damaged.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks_open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks_open.png new file mode 100644 index 00000000000..630eabb976e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks_open.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/welded.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/welded.png new file mode 100644 index 00000000000..cd44689455c Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/chemistry.rsi/welded.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/assembly.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/assembly.png new file mode 100644 index 00000000000..7ee614586b6 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/assembly.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/bolted_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/bolted_unlit.png new file mode 100644 index 00000000000..653846c3022 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/bolted_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closed.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closed.png new file mode 100644 index 00000000000..b3800c1537a Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closed.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closed_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closed_unlit.png new file mode 100644 index 00000000000..cc185dfdb5a Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closed_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closing.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closing.png new file mode 100644 index 00000000000..023dc733285 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closing.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closing_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closing_unlit.png new file mode 100644 index 00000000000..7498990a390 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closing_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/deny_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/deny_unlit.png new file mode 100644 index 00000000000..8c381d4c61e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/deny_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/emergency_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/emergency_unlit.png new file mode 100644 index 00000000000..f210ecf123e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/emergency_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/meta.json b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/meta.json new file mode 100644 index 00000000000..9229d5ffd0a --- /dev/null +++ b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/meta.json @@ -0,0 +1,195 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Redrawn assets https://github.com/ParadiseSS13/Paradise/, redrawing done by Unkn0wn_Gh0st333 on github", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "assembly" + }, + { + "name": "bolted_unlit" + }, + { + "name": "closed" + }, + { + "name": "closed_unlit" + }, + { + "name": "closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "closing_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "deny_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "opening_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "panel_opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "sparks", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_broken", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_damaged", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 1.7 + ] + ] + }, + { + "name": "sparks_open", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "welded" + }, + { + "name": "emergency_unlit", + "delays": [ + [ + 0.4, + 0.4 + ] + ] + } + ] +} diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/open.png new file mode 100644 index 00000000000..caec4c3ed67 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/open.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/opening.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/opening.png new file mode 100644 index 00000000000..a8bb2a8171c Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/opening.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/opening_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/opening_unlit.png new file mode 100644 index 00000000000..2e109950a4e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/opening_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/panel_closing.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/panel_closing.png new file mode 100644 index 00000000000..4a0d28b65b4 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/panel_closing.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/panel_open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/panel_open.png new file mode 100644 index 00000000000..2e348983fef Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/panel_open.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/panel_opening.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/panel_opening.png new file mode 100644 index 00000000000..899651c3044 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/panel_opening.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks.png new file mode 100644 index 00000000000..dd67e88a315 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks_broken.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks_broken.png new file mode 100644 index 00000000000..fb5d774588a Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks_broken.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks_damaged.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks_damaged.png new file mode 100644 index 00000000000..f16a028dee5 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks_damaged.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks_open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks_open.png new file mode 100644 index 00000000000..630eabb976e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks_open.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/welded.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/welded.png new file mode 100644 index 00000000000..cd44689455c Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/hydroponics.rsi/welded.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/assembly.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/assembly.png new file mode 100644 index 00000000000..4b087e14f67 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/assembly.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/bolted_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/bolted_unlit.png new file mode 100644 index 00000000000..653846c3022 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/bolted_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closed.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closed.png new file mode 100644 index 00000000000..1108755279e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closed.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closed_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closed_unlit.png new file mode 100644 index 00000000000..cc185dfdb5a Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closed_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closing.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closing.png new file mode 100644 index 00000000000..589dca596e2 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closing.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closing_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closing_unlit.png new file mode 100644 index 00000000000..7498990a390 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/closing_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/deny_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/deny_unlit.png new file mode 100644 index 00000000000..8c381d4c61e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/deny_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/emergency_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/emergency_unlit.png new file mode 100644 index 00000000000..f210ecf123e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/emergency_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/meta.json b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/meta.json new file mode 100644 index 00000000000..0e560a01f74 --- /dev/null +++ b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/meta.json @@ -0,0 +1,195 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Original Science Airlock taken from https://github.com/ParadiseSS13/Paradise/, Roboticist Resprite done by Unkn0wn_Gh0st333 on github", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "assembly" + }, + { + "name": "bolted_unlit" + }, + { + "name": "closed" + }, + { + "name": "closed_unlit" + }, + { + "name": "closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "closing_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "deny_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "opening_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "panel_opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "sparks", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_broken", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_damaged", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 1.7 + ] + ] + }, + { + "name": "sparks_open", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "welded" + }, + { + "name": "emergency_unlit", + "delays": [ + [ + 0.4, + 0.4 + ] + ] + } + ] +} diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/open.png new file mode 100644 index 00000000000..77ba7ca3c62 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/open.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/opening.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/opening.png new file mode 100644 index 00000000000..25f33c23534 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/opening.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/opening_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/opening_unlit.png new file mode 100644 index 00000000000..2e109950a4e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/opening_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_closing.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_closing.png new file mode 100644 index 00000000000..4a0d28b65b4 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_closing.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_open.png new file mode 100644 index 00000000000..2e348983fef Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_open.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_opening.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_opening.png new file mode 100644 index 00000000000..899651c3044 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/panel_opening.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks.png new file mode 100644 index 00000000000..dd67e88a315 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_broken.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_broken.png new file mode 100644 index 00000000000..fb5d774588a Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_broken.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_damaged.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_damaged.png new file mode 100644 index 00000000000..f16a028dee5 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_damaged.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_open.png new file mode 100644 index 00000000000..630eabb976e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/sparks_open.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/welded.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/welded.png new file mode 100644 index 00000000000..cd44689455c Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Glass/roboticist.rsi/welded.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/assembly.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/assembly.png new file mode 100644 index 00000000000..7ca79b67e9f Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/assembly.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/bolted_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/bolted_unlit.png new file mode 100644 index 00000000000..653846c3022 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/bolted_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/closed.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/closed.png new file mode 100644 index 00000000000..49741d65a86 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/closed.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/closed_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/closed_unlit.png new file mode 100644 index 00000000000..cc185dfdb5a Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/closed_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/closing.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/closing.png new file mode 100644 index 00000000000..798f613e9ff Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/closing.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/closing_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/closing_unlit.png new file mode 100644 index 00000000000..7498990a390 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/closing_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/deny_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/deny_unlit.png new file mode 100644 index 00000000000..8c381d4c61e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/deny_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/emergency_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/emergency_unlit.png new file mode 100644 index 00000000000..f210ecf123e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/emergency_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/meta.json b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/meta.json new file mode 100644 index 00000000000..9229d5ffd0a --- /dev/null +++ b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/meta.json @@ -0,0 +1,195 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Redrawn assets https://github.com/ParadiseSS13/Paradise/, redrawing done by Unkn0wn_Gh0st333 on github", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "assembly" + }, + { + "name": "bolted_unlit" + }, + { + "name": "closed" + }, + { + "name": "closed_unlit" + }, + { + "name": "closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "closing_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "deny_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "opening_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "panel_opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "sparks", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_broken", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_damaged", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 1.7 + ] + ] + }, + { + "name": "sparks_open", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "welded" + }, + { + "name": "emergency_unlit", + "delays": [ + [ + 0.4, + 0.4 + ] + ] + } + ] +} diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/open.png new file mode 100644 index 00000000000..bb1e22de6b8 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/open.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/opening.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/opening.png new file mode 100644 index 00000000000..ae85cf6e2f8 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/opening.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/opening_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/opening_unlit.png new file mode 100644 index 00000000000..2e109950a4e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/opening_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/panel_closing.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/panel_closing.png new file mode 100644 index 00000000000..4a0d28b65b4 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/panel_closing.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/panel_open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/panel_open.png new file mode 100644 index 00000000000..2e348983fef Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/panel_open.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/panel_opening.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/panel_opening.png new file mode 100644 index 00000000000..899651c3044 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/panel_opening.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks.png new file mode 100644 index 00000000000..dd67e88a315 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks_broken.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks_broken.png new file mode 100644 index 00000000000..fb5d774588a Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks_broken.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks_damaged.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks_damaged.png new file mode 100644 index 00000000000..f16a028dee5 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks_damaged.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks_open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks_open.png new file mode 100644 index 00000000000..630eabb976e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks_open.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/welded.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/welded.png new file mode 100644 index 00000000000..cd44689455c Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/chemistry.rsi/welded.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/assembly.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/assembly.png new file mode 100644 index 00000000000..5cf053a10fc Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/assembly.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/bolted_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/bolted_unlit.png new file mode 100644 index 00000000000..653846c3022 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/bolted_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closed.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closed.png new file mode 100644 index 00000000000..85f8f12a3b7 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closed.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closed_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closed_unlit.png new file mode 100644 index 00000000000..cc185dfdb5a Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closed_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closing.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closing.png new file mode 100644 index 00000000000..15ed52a8498 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closing.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closing_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closing_unlit.png new file mode 100644 index 00000000000..7498990a390 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closing_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/deny_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/deny_unlit.png new file mode 100644 index 00000000000..8c381d4c61e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/deny_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/emergency_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/emergency_unlit.png new file mode 100644 index 00000000000..f210ecf123e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/emergency_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/meta.json b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/meta.json new file mode 100644 index 00000000000..9229d5ffd0a --- /dev/null +++ b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/meta.json @@ -0,0 +1,195 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Redrawn assets https://github.com/ParadiseSS13/Paradise/, redrawing done by Unkn0wn_Gh0st333 on github", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "assembly" + }, + { + "name": "bolted_unlit" + }, + { + "name": "closed" + }, + { + "name": "closed_unlit" + }, + { + "name": "closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "closing_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "deny_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "opening_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "panel_opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "sparks", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_broken", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_damaged", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 1.7 + ] + ] + }, + { + "name": "sparks_open", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "welded" + }, + { + "name": "emergency_unlit", + "delays": [ + [ + 0.4, + 0.4 + ] + ] + } + ] +} diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/open.png new file mode 100644 index 00000000000..9b0c28b3f9b Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/open.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/opening.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/opening.png new file mode 100644 index 00000000000..9cbd551c278 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/opening.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/opening_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/opening_unlit.png new file mode 100644 index 00000000000..2e109950a4e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/opening_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/panel_closing.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/panel_closing.png new file mode 100644 index 00000000000..4a0d28b65b4 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/panel_closing.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/panel_open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/panel_open.png new file mode 100644 index 00000000000..2e348983fef Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/panel_open.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/panel_opening.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/panel_opening.png new file mode 100644 index 00000000000..899651c3044 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/panel_opening.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks.png new file mode 100644 index 00000000000..dd67e88a315 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks_broken.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks_broken.png new file mode 100644 index 00000000000..fb5d774588a Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks_broken.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks_damaged.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks_damaged.png new file mode 100644 index 00000000000..f16a028dee5 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks_damaged.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks_open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks_open.png new file mode 100644 index 00000000000..630eabb976e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks_open.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/welded.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/welded.png new file mode 100644 index 00000000000..cd44689455c Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/hydroponics.rsi/welded.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/assembly.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/assembly.png new file mode 100644 index 00000000000..58bde1ae528 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/assembly.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/bolted_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/bolted_unlit.png new file mode 100644 index 00000000000..653846c3022 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/bolted_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closed.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closed.png new file mode 100644 index 00000000000..0cbcf9e6efb Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closed.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closed_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closed_unlit.png new file mode 100644 index 00000000000..cc185dfdb5a Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closed_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closing.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closing.png new file mode 100644 index 00000000000..f435c3fd447 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closing.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closing_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closing_unlit.png new file mode 100644 index 00000000000..7498990a390 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/closing_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/deny_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/deny_unlit.png new file mode 100644 index 00000000000..8c381d4c61e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/deny_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/emergency_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/emergency_unlit.png new file mode 100644 index 00000000000..f210ecf123e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/emergency_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/meta.json b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/meta.json new file mode 100644 index 00000000000..0e560a01f74 --- /dev/null +++ b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/meta.json @@ -0,0 +1,195 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Original Science Airlock taken from https://github.com/ParadiseSS13/Paradise/, Roboticist Resprite done by Unkn0wn_Gh0st333 on github", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "assembly" + }, + { + "name": "bolted_unlit" + }, + { + "name": "closed" + }, + { + "name": "closed_unlit" + }, + { + "name": "closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "closing_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "deny_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "opening_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "panel_opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "sparks", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_broken", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_damaged", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 1.7 + ] + ] + }, + { + "name": "sparks_open", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "welded" + }, + { + "name": "emergency_unlit", + "delays": [ + [ + 0.4, + 0.4 + ] + ] + } + ] +} diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/open.png new file mode 100644 index 00000000000..1ec26cadcca Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/open.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/opening.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/opening.png new file mode 100644 index 00000000000..cbe0e327c62 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/opening.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/opening_unlit.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/opening_unlit.png new file mode 100644 index 00000000000..2e109950a4e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/opening_unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_closing.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_closing.png new file mode 100644 index 00000000000..4a0d28b65b4 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_closing.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_open.png new file mode 100644 index 00000000000..2e348983fef Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_open.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_opening.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_opening.png new file mode 100644 index 00000000000..899651c3044 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/panel_opening.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks.png new file mode 100644 index 00000000000..dd67e88a315 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_broken.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_broken.png new file mode 100644 index 00000000000..fb5d774588a Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_broken.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_damaged.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_damaged.png new file mode 100644 index 00000000000..f16a028dee5 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_damaged.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_open.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_open.png new file mode 100644 index 00000000000..630eabb976e Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/sparks_open.png differ diff --git a/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/welded.png b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/welded.png new file mode 100644 index 00000000000..cd44689455c Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Doors/Airlocks/Standard/roboticist.rsi/welded.png differ diff --git a/Resources/Textures/DeltaV/Structures/Power/apc.rsi/base.png b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/base.png new file mode 100644 index 00000000000..9e37351469f Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/base.png differ diff --git a/Resources/Textures/DeltaV/Structures/Power/apc.rsi/broken.png b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/broken.png new file mode 100644 index 00000000000..0a3915f6647 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/broken.png differ diff --git a/Resources/Textures/DeltaV/Structures/Power/apc.rsi/display-charging.png b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/display-charging.png new file mode 100644 index 00000000000..13c8d660b59 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/display-charging.png differ diff --git a/Resources/Textures/DeltaV/Structures/Power/apc.rsi/display-full.png b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/display-full.png new file mode 100644 index 00000000000..0d8ee081fc0 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/display-full.png differ diff --git a/Resources/Textures/DeltaV/Structures/Power/apc.rsi/display-lack.png b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/display-lack.png new file mode 100644 index 00000000000..36fdc132e43 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/display-lack.png differ diff --git a/Resources/Textures/DeltaV/Structures/Power/apc.rsi/display-remote.png b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/display-remote.png new file mode 100644 index 00000000000..f9b58ee9ac9 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/display-remote.png differ diff --git a/Resources/Textures/DeltaV/Structures/Power/apc.rsi/emag-unlit.png b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/emag-unlit.png new file mode 100644 index 00000000000..7da9b63b059 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/emag-unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Power/apc.rsi/frame.png b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/frame.png new file mode 100644 index 00000000000..e746c58cb61 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/frame.png differ diff --git a/Resources/Textures/DeltaV/Structures/Power/apc.rsi/lock0-locked.png b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/lock0-locked.png new file mode 100644 index 00000000000..d2d0b1611c1 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/lock0-locked.png differ diff --git a/Resources/Textures/DeltaV/Structures/Power/apc.rsi/lock1-locked.png b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/lock1-locked.png new file mode 100644 index 00000000000..987c2ce16a0 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/lock1-locked.png differ diff --git a/Resources/Textures/DeltaV/Structures/Power/apc.rsi/meta.json b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/meta.json new file mode 100644 index 00000000000..58cede9a0df --- /dev/null +++ b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/meta.json @@ -0,0 +1,230 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/9c7d509354ee030300f63c701da63c17928c3b3b and heavily modified by EmoGarbage404 (github)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "base", + "directions": 4 + }, + { + "name": "static" + }, + { + "name": "broken", + "directions": 4 + }, + { + "name": "frame", + "directions": 4 + }, + { + "name": "panel", + "directions": 4 + }, + { + "name": "lock0-locked", + "directions": 4 + }, + { + "name": "lock1-locked", + "directions": 4 + }, + { + "name": "display-lack", + "directions": 4, + "delays": [ + [ + 0.25, + 0.25, + 1, + 3 + ], + [ + 0.25, + 0.25, + 1, + 3 + ], + [ + 0.25, + 0.25, + 1, + 3 + ], + [ + 0.25, + 0.25, + 1, + 3 + ] + ] + }, + { + "name": "display-charging", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.2 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.2 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.2 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.2 + ] + ] + }, + { + "name": "display-full", + "directions": 4, + "delays": [ + [ + 1, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 1 + ] + ] + }, + { + "name": "display-remote", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "emag-unlit", + "directions": 4, + "delays": [ + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ], + [ + 0.5, + 0.5 + ] + ] + }, + { + "name": "sparks-unlit", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} diff --git a/Resources/Textures/DeltaV/Structures/Power/apc.rsi/panel.png b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/panel.png new file mode 100644 index 00000000000..b5b0be77190 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/panel.png differ diff --git a/Resources/Textures/DeltaV/Structures/Power/apc.rsi/sparks-unlit.png b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/sparks-unlit.png new file mode 100644 index 00000000000..506375f4dea Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/sparks-unlit.png differ diff --git a/Resources/Textures/DeltaV/Structures/Power/apc.rsi/static.png b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/static.png new file mode 100644 index 00000000000..d224dc7ff88 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Power/apc.rsi/static.png differ diff --git a/Resources/Textures/DeltaV/Structures/Wallmounts/signs.rsi/chapel.png b/Resources/Textures/DeltaV/Structures/Wallmounts/signs.rsi/chapel.png new file mode 100644 index 00000000000..587fa467233 Binary files /dev/null and b/Resources/Textures/DeltaV/Structures/Wallmounts/signs.rsi/chapel.png differ diff --git a/Resources/Textures/DeltaV/Structures/Wallmounts/signs.rsi/meta.json b/Resources/Textures/DeltaV/Structures/Wallmounts/signs.rsi/meta.json index ab3feb6715c..13aab65cbce 100644 --- a/Resources/Textures/DeltaV/Structures/Wallmounts/signs.rsi/meta.json +++ b/Resources/Textures/DeltaV/Structures/Wallmounts/signs.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "directional sprites taken from https://github.com/space-wizards/space-station-14/commit/c1556214de46d66fe4057500e269b17438dc96ca | direction_mail modified by Hyenh, direction_logi modified by Floofers | direction_court, direction_justice by leonardo_dabepis (Discord)", + "copyright": "directional sprites taken from https://github.com/space-wizards/space-station-14/commit/c1556214de46d66fe4057500e269b17438dc96ca | direction_mail modified by Hyenh, direction_logi modified by Floofers | direction_court, direction_justice by leonardo_dabepis (Discord) | chapel modified from upstream sprite by Lyndomen (github)", "size": { "x": 32, "y": 32 @@ -22,6 +22,9 @@ { "name": "direction_justice", "directions": 4 + }, + { + "name": "chapel" } ] -} \ No newline at end of file +} diff --git a/Resources/Textures/Interface/Actions/actions_ai.rsi/bolt_door.png b/Resources/Textures/Interface/Actions/actions_ai.rsi/bolt_door.png new file mode 100644 index 00000000000..f7942489802 Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_ai.rsi/bolt_door.png differ diff --git a/Resources/Textures/Interface/Actions/actions_ai.rsi/door_overcharge_off.png b/Resources/Textures/Interface/Actions/actions_ai.rsi/door_overcharge_off.png new file mode 100644 index 00000000000..d5301ccba0b Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_ai.rsi/door_overcharge_off.png differ diff --git a/Resources/Textures/Interface/Actions/actions_ai.rsi/door_overcharge_on.png b/Resources/Textures/Interface/Actions/actions_ai.rsi/door_overcharge_on.png new file mode 100644 index 00000000000..ea654d8634b Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_ai.rsi/door_overcharge_on.png differ diff --git a/Resources/Textures/Interface/Actions/actions_ai.rsi/emergency_off.png b/Resources/Textures/Interface/Actions/actions_ai.rsi/emergency_off.png new file mode 100644 index 00000000000..86328da46be Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_ai.rsi/emergency_off.png differ diff --git a/Resources/Textures/Interface/Actions/actions_ai.rsi/emergency_on.png b/Resources/Textures/Interface/Actions/actions_ai.rsi/emergency_on.png new file mode 100644 index 00000000000..14034429f4c Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_ai.rsi/emergency_on.png differ diff --git a/Resources/Textures/Interface/Actions/actions_ai.rsi/meta.json b/Resources/Textures/Interface/Actions/actions_ai.rsi/meta.json index 6b974d8521a..1efee13f3aa 100644 --- a/Resources/Textures/Interface/Actions/actions_ai.rsi/meta.json +++ b/Resources/Textures/Interface/Actions/actions_ai.rsi/meta.json @@ -1,27 +1,27 @@ { - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/blob/c473a8bcc28fbd80827dfca5660d81ca6e833e2c/icons/hud/screen_ai.dmi", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "ai_core" - }, - { - "name": "camera_light" - }, - { - "name": "crew_monitor" - }, - { - "name": "manifest" - }, - { - "name": "state_laws" - }, + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/blob/c473a8bcc28fbd80827dfca5660d81ca6e833e2c/icons/hud/screen_ai.dmi , some sprites updated by ScarKy0(Discord), door actions by ScarKy0(Discord) and @Max_tanuki(Twitter)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "ai_core" + }, + { + "name": "camera_light" + }, + { + "name": "crew_monitor" + }, + { + "name": "manifest" + }, + { + "name": "state_laws" + }, { "name": "station_records" }, @@ -33,6 +33,24 @@ }, { "name": "comms_console" + }, + { + "name": "emergency_off" + }, + { + "name": "emergency_on" + }, + { + "name": "bolt_door" + }, + { + "name": "unbolt_door" + }, + { + "name": "door_overcharge_on" + }, + { + "name": "door_overcharge_off" } - ] + ] } diff --git a/Resources/Textures/Interface/Actions/actions_ai.rsi/unbolt_door.png b/Resources/Textures/Interface/Actions/actions_ai.rsi/unbolt_door.png new file mode 100644 index 00000000000..dfbb102f97b Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_ai.rsi/unbolt_door.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/adv-cleaning-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/adv-cleaning-module.png new file mode 100644 index 00000000000..f608aaa0bc8 Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/adv-cleaning-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/adv-diagnosis-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/adv-diagnosis-module.png new file mode 100644 index 00000000000..df4d53633be Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/adv-diagnosis-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/adv-tools-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/adv-tools-module.png new file mode 100644 index 00000000000..47d0a45033a Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/adv-tools-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/anomaly-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/anomaly-module.png new file mode 100644 index 00000000000..2270e2e86f1 Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/anomaly-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/appraisal-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/appraisal-module.png new file mode 100644 index 00000000000..9f327af0630 Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/appraisal-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/cleaning-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/cleaning-module.png new file mode 100644 index 00000000000..8caf592553c Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/cleaning-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/clowning-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/clowning-module.png new file mode 100644 index 00000000000..bb6c4412062 Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/clowning-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/construction-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/construction-module.png new file mode 100644 index 00000000000..c77c02f207d Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/construction-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/defib-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/defib-module.png new file mode 100644 index 00000000000..4d22bb55d79 Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/defib-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/diagnosis-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/diagnosis-module.png new file mode 100644 index 00000000000..80686c3ce4d Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/diagnosis-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/extinguisher-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/extinguisher-module.png new file mode 100644 index 00000000000..b74cd09fda5 Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/extinguisher-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/gardening-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/gardening-module.png new file mode 100644 index 00000000000..d400ba2b999 Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/gardening-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/geiger-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/geiger-module.png new file mode 100644 index 00000000000..d962befeace Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/geiger-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/gps-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/gps-module.png new file mode 100644 index 00000000000..67af612968a Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/gps-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/grappling-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/grappling-module.png new file mode 100644 index 00000000000..68209e0adaf Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/grappling-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/harvesting-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/harvesting-module.png new file mode 100644 index 00000000000..24e1c57f5ef Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/harvesting-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/light-replacer-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/light-replacer-module.png new file mode 100644 index 00000000000..7f70d15f248 Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/light-replacer-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/meta.json b/Resources/Textures/Interface/Actions/actions_borg.rsi/meta.json index f63bacd07a9..dc8a6fcf9c6 100644 --- a/Resources/Textures/Interface/Actions/actions_borg.rsi/meta.json +++ b/Resources/Textures/Interface/Actions/actions_borg.rsi/meta.json @@ -9,6 +9,99 @@ "states": [ { "name": "state-laws" + }, + { + "name": "no-action" + }, + { + "name":"tool-module" + }, + { + "name":"wire-module" + }, + { + "name":"gps-module" + }, + { + "name":"extinguisher-module" + }, + { + "name":"geiger-module" + }, + { + "name":"rcd-module" + }, + { + "name":"adv-tools-module" + }, + { + "name":"construction-module" + }, + { + "name":"appraisal-module" + }, + { + "name":"grappling-module" + }, + { + "name":"mining-module" + }, + { + "name":"light-replacer-module" + }, + { + "name":"cleaning-module" + }, + { + "name":"adv-cleaning-module" + }, + { + "name":"diagnosis-module" + }, + { + "name":"treatment-module" + }, + { + "name":"adv-diagnosis-module" + }, + { + "name":"defib-module" + }, + { + "name":"node-scanner-module" + }, + { + "name":"anomaly-module" + }, + { + "name":"service-module" + }, + { + "name":"musical-module" + }, + { + "name":"gardening-module" + }, + { + "name":"harvesting-module" + }, + { + "name":"clowning-module" + }, + { + "name":"syndicate-weapon-module" + }, + { + "name":"syndicate-operative-module" + }, + { + "name":"syndicate-esword-module" + }, + { + "name":"syndicate-l6c-module" + }, + { + "name":"syndicate-martyr-module" } ] } diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/mining-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/mining-module.png new file mode 100644 index 00000000000..bfef5bfd04d Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/mining-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/musical-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/musical-module.png new file mode 100644 index 00000000000..c611269ddfe Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/musical-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/no-action.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/no-action.png new file mode 100644 index 00000000000..4196b8b9f4e Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/no-action.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/node-scanner-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/node-scanner-module.png new file mode 100644 index 00000000000..4fa2554eadf Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/node-scanner-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/rcd-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/rcd-module.png new file mode 100644 index 00000000000..388c0c6e8fb Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/rcd-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/service-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/service-module.png new file mode 100644 index 00000000000..1c114ef314e Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/service-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-esword-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-esword-module.png new file mode 100644 index 00000000000..201149cf18e Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-esword-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-l6c-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-l6c-module.png new file mode 100644 index 00000000000..c06ce963580 Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-l6c-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-martyr-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-martyr-module.png new file mode 100644 index 00000000000..771bb75f10d Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-martyr-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-operative-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-operative-module.png new file mode 100644 index 00000000000..19642942f9d Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-operative-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-weapon-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-weapon-module.png new file mode 100644 index 00000000000..cd1f115e8bb Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/syndicate-weapon-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/tool-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/tool-module.png new file mode 100644 index 00000000000..c4658049760 Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/tool-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/treatment-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/treatment-module.png new file mode 100644 index 00000000000..988b3de761c Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/treatment-module.png differ diff --git a/Resources/Textures/Interface/Actions/actions_borg.rsi/wire-module.png b/Resources/Textures/Interface/Actions/actions_borg.rsi/wire-module.png new file mode 100644 index 00000000000..00361aa00fa Binary files /dev/null and b/Resources/Textures/Interface/Actions/actions_borg.rsi/wire-module.png differ diff --git a/Resources/Textures/Interface/Emotes/attributions.yml b/Resources/Textures/Interface/Emotes/attributions.yml index c65eeb25da0..6f547720b61 100644 --- a/Resources/Textures/Interface/Emotes/attributions.yml +++ b/Resources/Textures/Interface/Emotes/attributions.yml @@ -115,3 +115,8 @@ license: "CC-BY-SA-3.0" copyright: "Created by Sarahon" source: "https://github.com/Sarahon" + +- files: ["tailslap.png"] + license: "CC-BY-SA-3.0" + copyright: "Created by Sarahon" + source: "https://github.com/Sarahon" diff --git a/Resources/Textures/Interface/Emotes/tailslap.png b/Resources/Textures/Interface/Emotes/tailslap.png new file mode 100644 index 00000000000..75405a67bab Binary files /dev/null and b/Resources/Textures/Interface/Emotes/tailslap.png differ diff --git a/Resources/Textures/Interface/Paper/paper_background_black.svg b/Resources/Textures/Interface/Paper/paper_background_black.svg new file mode 100644 index 00000000000..7c208901f41 --- /dev/null +++ b/Resources/Textures/Interface/Paper/paper_background_black.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + diff --git a/Resources/Textures/Interface/Paper/paper_background_black.svg.96dpi.png b/Resources/Textures/Interface/Paper/paper_background_black.svg.96dpi.png new file mode 100644 index 00000000000..47e74fc873b Binary files /dev/null and b/Resources/Textures/Interface/Paper/paper_background_black.svg.96dpi.png differ diff --git a/Resources/Textures/Interface/Paper/paper_background_black.svg.96dpi.png.yml b/Resources/Textures/Interface/Paper/paper_background_black.svg.96dpi.png.yml new file mode 100644 index 00000000000..5c43e233050 --- /dev/null +++ b/Resources/Textures/Interface/Paper/paper_background_black.svg.96dpi.png.yml @@ -0,0 +1,2 @@ +sample: + filter: true diff --git a/Resources/Textures/Interface/Paper/paper_heading_syndicate_logo.svg b/Resources/Textures/Interface/Paper/paper_heading_syndicate_logo.svg new file mode 100644 index 00000000000..e7ba27f8cde --- /dev/null +++ b/Resources/Textures/Interface/Paper/paper_heading_syndicate_logo.svg @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Resources/Textures/Interface/Paper/paper_heading_syndicate_logo.svg.96dpi.png b/Resources/Textures/Interface/Paper/paper_heading_syndicate_logo.svg.96dpi.png new file mode 100644 index 00000000000..21e85b65d84 Binary files /dev/null and b/Resources/Textures/Interface/Paper/paper_heading_syndicate_logo.svg.96dpi.png differ diff --git a/Resources/Textures/Interface/Paper/paper_heading_syndicate_logo.svg.96dpi.png.yml b/Resources/Textures/Interface/Paper/paper_heading_syndicate_logo.svg.96dpi.png.yml new file mode 100644 index 00000000000..5c43e233050 --- /dev/null +++ b/Resources/Textures/Interface/Paper/paper_heading_syndicate_logo.svg.96dpi.png.yml @@ -0,0 +1,2 @@ +sample: + filter: true diff --git a/Resources/Textures/Mobs/Customization/human_hair.rsi/longbow.png b/Resources/Textures/Mobs/Customization/human_hair.rsi/longbow.png new file mode 100644 index 00000000000..40705175a47 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/human_hair.rsi/longbow.png differ diff --git a/Resources/Textures/Mobs/Customization/human_hair.rsi/meta.json b/Resources/Textures/Mobs/Customization/human_hair.rsi/meta.json index d6cd1e11daa..ff556dbc780 100644 --- a/Resources/Textures/Mobs/Customization/human_hair.rsi/meta.json +++ b/Resources/Textures/Mobs/Customization/human_hair.rsi/meta.json @@ -790,6 +790,14 @@ { "name": "classiclong3", "directions": 4 + }, + { + "name": "shaped", + "directions": 4 + }, + { + "name": "longbow", + "directions": 4 } ] } diff --git a/Resources/Textures/Mobs/Customization/human_hair.rsi/shaped.png b/Resources/Textures/Mobs/Customization/human_hair.rsi/shaped.png new file mode 100644 index 00000000000..f65d7cf4446 Binary files /dev/null and b/Resources/Textures/Mobs/Customization/human_hair.rsi/shaped.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Devices/cartridge.rsi/cart-psi.png b/Resources/Textures/Mobs/Silicon/Bots/firebot.rsi/firebot.png similarity index 61% rename from Resources/Textures/Nyanotrasen/Objects/Devices/cartridge.rsi/cart-psi.png rename to Resources/Textures/Mobs/Silicon/Bots/firebot.rsi/firebot.png index 876b480550f..70ee9313d2d 100644 Binary files a/Resources/Textures/Nyanotrasen/Objects/Devices/cartridge.rsi/cart-psi.png and b/Resources/Textures/Mobs/Silicon/Bots/firebot.rsi/firebot.png differ diff --git a/Resources/Textures/Mobs/Silicon/Bots/firebot.rsi/meta.json b/Resources/Textures/Mobs/Silicon/Bots/firebot.rsi/meta.json new file mode 100644 index 00000000000..e13b42deee7 --- /dev/null +++ b/Resources/Textures/Mobs/Silicon/Bots/firebot.rsi/meta.json @@ -0,0 +1,20 @@ +{ + "version": 1, + "size": { + "x": 32, + "y": 32 + }, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from https://github.com/tgstation/tgstation/commit/eba0d62005e7754dd8b1c88e45cd949c360774d5", + "states": [ + { + "name": "firebot", + "delays": [ + [ + 0.5, + 0.2 + ] + ] + } + ] +} diff --git a/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/eyeballs-inhand-left.png b/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/eyeballs-inhand-left.png new file mode 100644 index 00000000000..a623e75a285 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/eyeballs-inhand-left.png differ diff --git a/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/eyeballs-inhand-right.png b/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/eyeballs-inhand-right.png new file mode 100644 index 00000000000..45649b92618 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/eyeballs-inhand-right.png differ diff --git a/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/heart-inhand-left.png b/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/heart-inhand-left.png new file mode 100644 index 00000000000..56698f87e29 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/heart-inhand-left.png differ diff --git a/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/heart-inhand-right.png b/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/heart-inhand-right.png new file mode 100644 index 00000000000..c7fb3993998 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/heart-inhand-right.png differ diff --git a/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/meta.json b/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/meta.json index 6141fd5de86..62d1f04bf0c 100644 --- a/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/meta.json +++ b/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Made by PixelTheKermit (github) for SS14", + "copyright": "Made by PixelTheKermit (github) for SS14, inhands by mubururu_ (github)", "size": { "x": 32, "y": 32 @@ -14,7 +14,23 @@ "name": "eyeball-r" }, { - "name": "tongue" + "name": "eyeballs-inhand-left", + "directions": 4 + }, + { + "name": "eyeballs-inhand-right", + "directions": 4 + }, + { + "name": "tongue" + }, + { + "name": "heart-inhand-left", + "directions": 4 + }, + { + "name": "heart-inhand-right", + "directions": 4 }, { "name": "heart-on", @@ -42,6 +58,14 @@ { "name": "stomach" }, + { + "name": "stomach-inhand-left", + "directions": 4 + }, + { + "name": "stomach-inhand-right", + "directions": 4 + }, { "name": "web-gland" } diff --git a/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/stomach-inhand-left.png b/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/stomach-inhand-left.png new file mode 100644 index 00000000000..a346078b4a8 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/stomach-inhand-left.png differ diff --git a/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/stomach-inhand-right.png b/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/stomach-inhand-right.png new file mode 100644 index 00000000000..001203bdc38 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Arachnid/organs.rsi/stomach-inhand-right.png differ diff --git a/Resources/Textures/Mobs/Species/Diona/organs.rsi/brain-inhand-left.png b/Resources/Textures/Mobs/Species/Diona/organs.rsi/brain-inhand-left.png new file mode 100644 index 00000000000..43e0cd40340 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Diona/organs.rsi/brain-inhand-left.png differ diff --git a/Resources/Textures/Mobs/Species/Diona/organs.rsi/brain-inhand-right.png b/Resources/Textures/Mobs/Species/Diona/organs.rsi/brain-inhand-right.png new file mode 100644 index 00000000000..df6dded7441 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Diona/organs.rsi/brain-inhand-right.png differ diff --git a/Resources/Textures/Mobs/Species/Diona/organs.rsi/lungs-inhand-left.png b/Resources/Textures/Mobs/Species/Diona/organs.rsi/lungs-inhand-left.png new file mode 100644 index 00000000000..5d31e96a37a Binary files /dev/null and b/Resources/Textures/Mobs/Species/Diona/organs.rsi/lungs-inhand-left.png differ diff --git a/Resources/Textures/Mobs/Species/Diona/organs.rsi/lungs-inhand-right.png b/Resources/Textures/Mobs/Species/Diona/organs.rsi/lungs-inhand-right.png new file mode 100644 index 00000000000..4830b1e0a68 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Diona/organs.rsi/lungs-inhand-right.png differ diff --git a/Resources/Textures/Mobs/Species/Diona/organs.rsi/lungs.png b/Resources/Textures/Mobs/Species/Diona/organs.rsi/lungs.png new file mode 100644 index 00000000000..77b61c344f7 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Diona/organs.rsi/lungs.png differ diff --git a/Resources/Textures/Mobs/Species/Diona/organs.rsi/meta.json b/Resources/Textures/Mobs/Species/Diona/organs.rsi/meta.json index 1c1697efc71..de4f8f8dc39 100644 --- a/Resources/Textures/Mobs/Species/Diona/organs.rsi/meta.json +++ b/Resources/Textures/Mobs/Species/Diona/organs.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "https://github.com/Citadel-Station-13/Citadel-Station-13-RP/commit/38051f45d3b26bd31f6e292239f43adb36ff01fe", + "copyright": "https://github.com/Citadel-Station-13/Citadel-Station-13-RP/commit/38051f45d3b26bd31f6e292239f43adb36ff01fe lungs and inhands by mubururu_ (github)", "size": { "x": 32, "y": 32 @@ -10,6 +10,14 @@ { "name": "brain" }, + { + "name": "brain-inhand-left", + "directions": 4 + }, + { + "name": "brain-inhand-right", + "directions": 4 + }, { "name": "ears" }, @@ -19,8 +27,27 @@ { "name": "eyeball-r" }, + { + "name": "lungs" + }, + { + "name": "lungs-inhand-left", + "directions": 4 + }, + { + "name": "lungs-inhand-right", + "directions": 4 + }, { "name": "stomach" + }, + { + "name": "stomach-inhand-left", + "directions": 4 + }, + { + "name": "stomach-inhand-right", + "directions": 4 } ] } diff --git a/Resources/Textures/Mobs/Species/Diona/organs.rsi/stomach-inhand-left.png b/Resources/Textures/Mobs/Species/Diona/organs.rsi/stomach-inhand-left.png new file mode 100644 index 00000000000..e8d5a7c86c4 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Diona/organs.rsi/stomach-inhand-left.png differ diff --git a/Resources/Textures/Mobs/Species/Diona/organs.rsi/stomach-inhand-right.png b/Resources/Textures/Mobs/Species/Diona/organs.rsi/stomach-inhand-right.png new file mode 100644 index 00000000000..257c0af83a3 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Diona/organs.rsi/stomach-inhand-right.png differ diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/brain-inhand-left.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/brain-inhand-left.png index cf6e4684e9c..b4d4d86dd56 100644 Binary files a/Resources/Textures/Mobs/Species/Human/organs.rsi/brain-inhand-left.png and b/Resources/Textures/Mobs/Species/Human/organs.rsi/brain-inhand-left.png differ diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/brain-inhand-right.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/brain-inhand-right.png index 978d4f3c5f1..2360c07898b 100644 Binary files a/Resources/Textures/Mobs/Species/Human/organs.rsi/brain-inhand-right.png and b/Resources/Textures/Mobs/Species/Human/organs.rsi/brain-inhand-right.png differ diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/eyeballs-inhand-left.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/eyeballs-inhand-left.png new file mode 100644 index 00000000000..d0187579a30 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Human/organs.rsi/eyeballs-inhand-left.png differ diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/eyeballs-inhand-right.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/eyeballs-inhand-right.png new file mode 100644 index 00000000000..4dfafd118d0 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Human/organs.rsi/eyeballs-inhand-right.png differ diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/heart-inhand-left.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/heart-inhand-left.png new file mode 100644 index 00000000000..1d73edaf033 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Human/organs.rsi/heart-inhand-left.png differ diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/heart-inhand-right.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/heart-inhand-right.png new file mode 100644 index 00000000000..3f7ace9b485 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Human/organs.rsi/heart-inhand-right.png differ diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/kidneys-inhand-left.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/kidneys-inhand-left.png new file mode 100644 index 00000000000..f8d889b5def Binary files /dev/null and b/Resources/Textures/Mobs/Species/Human/organs.rsi/kidneys-inhand-left.png differ diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/kidneys-inhand-right.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/kidneys-inhand-right.png new file mode 100644 index 00000000000..9b2e3131504 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Human/organs.rsi/kidneys-inhand-right.png differ diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/liver-inhand-left.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/liver-inhand-left.png new file mode 100644 index 00000000000..d63f9e1ef43 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Human/organs.rsi/liver-inhand-left.png differ diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/liver-inhand-right.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/liver-inhand-right.png new file mode 100644 index 00000000000..69ce8ffd77e Binary files /dev/null and b/Resources/Textures/Mobs/Species/Human/organs.rsi/liver-inhand-right.png differ diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/lungs-inhand-left.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/lungs-inhand-left.png new file mode 100644 index 00000000000..62b30a5ad5c Binary files /dev/null and b/Resources/Textures/Mobs/Species/Human/organs.rsi/lungs-inhand-left.png differ diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/lungs-inhand-right.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/lungs-inhand-right.png new file mode 100644 index 00000000000..1a5e3a70582 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Human/organs.rsi/lungs-inhand-right.png differ diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/meta.json b/Resources/Textures/Mobs/Species/Human/organs.rsi/meta.json index 354132ea110..a9112535f82 100644 --- a/Resources/Textures/Mobs/Species/Human/organs.rsi/meta.json +++ b/Resources/Textures/Mobs/Species/Human/organs.rsi/meta.json @@ -1,80 +1,128 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation and cev-eris at https://github.com/tgstation/tgstation/commit/c4b7f3c41b6742aca260fe60cc358a778ba9b8c8 and https://github.com/discordia-space/CEV-Eris/commit/476e374cea95ff5e8b1603c48342bf700e2cd7af", + "copyright": "Taken from tgstation and cev-eris at https://github.com/tgstation/tgstation/commit/c4b7f3c41b6742aca260fe60cc358a778ba9b8c8 and https://github.com/discordia-space/CEV-Eris/commit/476e374cea95ff5e8b1603c48342bf700e2cd7af, inhands by mubururu_ (github)", "size": { "x": 32, "y": 32 }, - "states": [ - { - "name": "appendix" - }, - { - "name": "appendix-inflamed" - }, - { - "name": "brain" - }, - { - "name": "brain-inhand-left", - "directions": 4 - }, - { - "name": "brain-inhand-right", - "directions": 4 - }, - { - "name": "ears" - }, - { - "name": "eyeball-l" - }, - { - "name": "eyeball-r" - }, - { - "name": "heart-off" - }, - { - "name": "heart-on", - "delays": [ - [ - 0.6, - 0.1, - 0.1 - ] - ] - }, - { - "name": "kidney-l" - }, - { - "name": "kidney-r" - }, - { - "name": "liver" - }, - { - "name": "lung-l" - }, - { - "name": "lung-r" - }, - { - "name": "stomach" - }, - { - "name": "tongue" - }, - { - "name": "muscle" - }, - { - "name": "nerve" - }, - { - "name": "vessel" - } - ] + "states": [ + { + "name": "appendix" + }, + { + "name": "appendix-inflamed" + }, + { + "name": "brain" + }, + { + "name": "brain-inhand-left", + "directions": 4 + }, + { + "name": "brain-inhand-right", + "directions": 4 + }, + { + "name": "ears" + }, + { + "name": "eyeballs-inhand-left", + "directions": 4 + }, + { + "name": "eyeballs-inhand-right", + "directions": 4 + }, + { + "name": "eyeball-l" + }, + { + "name": "eyeball-r" + }, + { + "name": "heart-inhand-left", + "directions": 4 + }, + { + "name": "heart-inhand-right", + "directions": 4 + }, + { + "name": "heart-off" + }, + { + "name": "heart-on", + "delays": [ + [ + 0.6, + 0.1, + 0.1 + ] + ] + }, + { + "name": "kidneys-inhand-left", + "directions": 4 + }, + { + "name": "kidneys-inhand-right", + "directions": 4 + }, + { + "name": "kidney-l" + }, + { + "name": "kidney-r" + }, + { + "name": "liver" + }, + { + "name": "liver-inhand-left", + "directions": 4 + }, + { + "name": "liver-inhand-right", + "directions": 4 + }, + { + "name": "lungs-inhand-left", + "directions": 4 + }, + { + "name": "lungs-inhand-right", + "directions": 4 + }, + { + "name": "lung-l" + }, + { + "name": "lung-r" + }, + { + "name": "stomach" + }, + { + "name": "stomach-inhand-left", + "directions": 4 + }, + { + "name": "stomach-inhand-right", + "directions": 4 + }, + { + "name": "tongue" + }, + { + "name": "muscle" + }, + { + "name": "nerve" + }, + { + "name": "vessel" + } + ] } diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/stomach-inhand-left.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/stomach-inhand-left.png new file mode 100644 index 00000000000..a346078b4a8 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Human/organs.rsi/stomach-inhand-left.png differ diff --git a/Resources/Textures/Mobs/Species/Human/organs.rsi/stomach-inhand-right.png b/Resources/Textures/Mobs/Species/Human/organs.rsi/stomach-inhand-right.png new file mode 100644 index 00000000000..001203bdc38 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Human/organs.rsi/stomach-inhand-right.png differ diff --git a/Resources/Textures/Mobs/Species/Slime/organs.rsi/brain-inhand-left.png b/Resources/Textures/Mobs/Species/Slime/organs.rsi/brain-inhand-left.png index a536818eee9..c0c260afced 100644 Binary files a/Resources/Textures/Mobs/Species/Slime/organs.rsi/brain-inhand-left.png and b/Resources/Textures/Mobs/Species/Slime/organs.rsi/brain-inhand-left.png differ diff --git a/Resources/Textures/Mobs/Species/Slime/organs.rsi/brain-inhand-right.png b/Resources/Textures/Mobs/Species/Slime/organs.rsi/brain-inhand-right.png index c7e0adca9a1..50f22d7a3f2 100644 Binary files a/Resources/Textures/Mobs/Species/Slime/organs.rsi/brain-inhand-right.png and b/Resources/Textures/Mobs/Species/Slime/organs.rsi/brain-inhand-right.png differ diff --git a/Resources/Textures/Mobs/Species/Slime/organs.rsi/lungs-inhand-left.png b/Resources/Textures/Mobs/Species/Slime/organs.rsi/lungs-inhand-left.png new file mode 100644 index 00000000000..0354025ce91 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Slime/organs.rsi/lungs-inhand-left.png differ diff --git a/Resources/Textures/Mobs/Species/Slime/organs.rsi/lungs-inhand-right.png b/Resources/Textures/Mobs/Species/Slime/organs.rsi/lungs-inhand-right.png new file mode 100644 index 00000000000..a3c6ba485ed Binary files /dev/null and b/Resources/Textures/Mobs/Species/Slime/organs.rsi/lungs-inhand-right.png differ diff --git a/Resources/Textures/Mobs/Species/Slime/organs.rsi/meta.json b/Resources/Textures/Mobs/Species/Slime/organs.rsi/meta.json index cacfcdc40bb..451ab138dfa 100644 --- a/Resources/Textures/Mobs/Species/Slime/organs.rsi/meta.json +++ b/Resources/Textures/Mobs/Species/Slime/organs.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Sprited by Nimfar11 (Github) for Space Station 14", + "copyright": "Sprited by Nimfar11 (Github) for Space Station 14, inhands by mubururu_ (github)", "size": { "x": 32, "y": 32 @@ -15,8 +15,16 @@ "directions": 4 }, { - "name": "brain-inhand-right", - "directions": 4 + "name": "brain-inhand-right", + "directions": 4 + }, + { + "name": "lungs-inhand-left", + "directions": 4 + }, + { + "name": "lungs-inhand-right", + "directions": 4 }, { "name": "lung-l-slime" diff --git a/Resources/Textures/Mobs/Species/Vox/organs.rsi/lung-l.png b/Resources/Textures/Mobs/Species/Vox/organs.rsi/lung-l.png new file mode 100644 index 00000000000..5ae28e95945 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Vox/organs.rsi/lung-l.png differ diff --git a/Resources/Textures/Mobs/Species/Vox/organs.rsi/lung-r.png b/Resources/Textures/Mobs/Species/Vox/organs.rsi/lung-r.png new file mode 100644 index 00000000000..8110a03b473 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Vox/organs.rsi/lung-r.png differ diff --git a/Resources/Textures/Mobs/Species/Vox/organs.rsi/lungs-inhand-left.png b/Resources/Textures/Mobs/Species/Vox/organs.rsi/lungs-inhand-left.png new file mode 100644 index 00000000000..4b9489e8384 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Vox/organs.rsi/lungs-inhand-left.png differ diff --git a/Resources/Textures/Mobs/Species/Vox/organs.rsi/lungs-inhand-right.png b/Resources/Textures/Mobs/Species/Vox/organs.rsi/lungs-inhand-right.png new file mode 100644 index 00000000000..b1fd54694e9 Binary files /dev/null and b/Resources/Textures/Mobs/Species/Vox/organs.rsi/lungs-inhand-right.png differ diff --git a/Resources/Textures/Mobs/Species/Vox/organs.rsi/meta.json b/Resources/Textures/Mobs/Species/Vox/organs.rsi/meta.json new file mode 100644 index 00000000000..1d7b44d6edb --- /dev/null +++ b/Resources/Textures/Mobs/Species/Vox/organs.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "made by mubururu_ (github)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "lungs-inhand-left", + "directions": 4 + }, + { + "name": "lungs-inhand-right", + "directions": 4 + }, + { + "name": "lung-l" + }, + { + "name": "lung-r" + } + ] +} diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pie.rsi/meta.json b/Resources/Textures/Objects/Consumable/Food/Baked/pie.rsi/meta.json index ced8d583736..644424690db 100644 --- a/Resources/Textures/Objects/Consumable/Food/Baked/pie.rsi/meta.json +++ b/Resources/Textures/Objects/Consumable/Food/Baked/pie.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24, mime tart slice and banana cream pie slice from rosysyntax under under CC BY-SA 4.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24, the pumpkin and pumpkin slice are made by ss14nekow (Mute Maid), the mime tart slice and banana cream pie slice are made by rosysyntax.", "size": { "x": 32, "y": 32 @@ -95,6 +95,12 @@ { "name": "plump" }, + { + "name": "pumpkin" + }, + { + "name": "pumpkin-slice" + }, { "name": "tin" }, diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pie.rsi/pumpkin-slice.png b/Resources/Textures/Objects/Consumable/Food/Baked/pie.rsi/pumpkin-slice.png new file mode 100644 index 00000000000..e462de6b654 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pie.rsi/pumpkin-slice.png differ diff --git a/Resources/Textures/Objects/Consumable/Food/Baked/pie.rsi/pumpkin.png b/Resources/Textures/Objects/Consumable/Food/Baked/pie.rsi/pumpkin.png new file mode 100644 index 00000000000..f2f18879448 Binary files /dev/null and b/Resources/Textures/Objects/Consumable/Food/Baked/pie.rsi/pumpkin.png differ diff --git a/Resources/Textures/Objects/Devices/ai_card.rsi/base.png b/Resources/Textures/Objects/Devices/ai_card.rsi/base.png index 244183c078c..535f5a48e99 100644 Binary files a/Resources/Textures/Objects/Devices/ai_card.rsi/base.png and b/Resources/Textures/Objects/Devices/ai_card.rsi/base.png differ diff --git a/Resources/Textures/Objects/Devices/ai_card.rsi/empty.png b/Resources/Textures/Objects/Devices/ai_card.rsi/empty.png index 7e61f368de2..a62b9263d52 100644 Binary files a/Resources/Textures/Objects/Devices/ai_card.rsi/empty.png and b/Resources/Textures/Objects/Devices/ai_card.rsi/empty.png differ diff --git a/Resources/Textures/Objects/Devices/ai_card.rsi/full.png b/Resources/Textures/Objects/Devices/ai_card.rsi/full.png index 59131c8c0aa..69a1825d91d 100644 Binary files a/Resources/Textures/Objects/Devices/ai_card.rsi/full.png and b/Resources/Textures/Objects/Devices/ai_card.rsi/full.png differ diff --git a/Resources/Textures/Objects/Devices/camera_bug.rsi/camera_bug.png b/Resources/Textures/Objects/Devices/camera_bug.rsi/camera_bug.png new file mode 100644 index 00000000000..ba8255fc146 Binary files /dev/null and b/Resources/Textures/Objects/Devices/camera_bug.rsi/camera_bug.png differ diff --git a/Resources/Textures/Nyanotrasen/Objects/Devices/cartridge.rsi/meta.json b/Resources/Textures/Objects/Devices/camera_bug.rsi/meta.json similarity index 65% rename from Resources/Textures/Nyanotrasen/Objects/Devices/cartridge.rsi/meta.json rename to Resources/Textures/Objects/Devices/camera_bug.rsi/meta.json index 43891272a02..c4298b6ec8c 100644 --- a/Resources/Textures/Nyanotrasen/Objects/Devices/cartridge.rsi/meta.json +++ b/Resources/Textures/Objects/Devices/camera_bug.rsi/meta.json @@ -1,14 +1,14 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Rane", + "copyright": "created by pofitlo", "size": { "x": 32, "y": 32 }, "states": [ { - "name": "cart-psi" + "name": "camera_bug" } ] } diff --git a/Resources/Textures/Objects/Devices/cartridge.rsi/cart-med.png b/Resources/Textures/Objects/Devices/cartridge.rsi/cart-med.png new file mode 100644 index 00000000000..69be9eb42e1 Binary files /dev/null and b/Resources/Textures/Objects/Devices/cartridge.rsi/cart-med.png differ diff --git a/Resources/Textures/Objects/Devices/cartridge.rsi/cart-nav.png b/Resources/Textures/Objects/Devices/cartridge.rsi/cart-nav.png new file mode 100644 index 00000000000..427129da0ed Binary files /dev/null and b/Resources/Textures/Objects/Devices/cartridge.rsi/cart-nav.png differ diff --git a/Resources/Textures/Objects/Devices/cartridge.rsi/meta.json b/Resources/Textures/Objects/Devices/cartridge.rsi/meta.json index f3b02a2b2ea..35a44770479 100644 --- a/Resources/Textures/Objects/Devices/cartridge.rsi/meta.json +++ b/Resources/Textures/Objects/Devices/cartridge.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from vgstation at https://github.com/vgstation-coders/vgstation13/commit/1cdfb0230cc96d0ba751fa002d04f8aa2f25ad7d and tgstation at tgstation at https://github.com/tgstation/tgstation/commit/0c15d9dbcf0f2beb230eba5d9d889ef2d1945bb8, cart-log made by Skarletto (github)", + "copyright": "Taken from vgstation at https://github.com/vgstation-coders/vgstation13/commit/1cdfb0230cc96d0ba751fa002d04f8aa2f25ad7d and tgstation at tgstation at https://github.com/tgstation/tgstation/commit/0c15d9dbcf0f2beb230eba5d9d889ef2d1945bb8, cart-log made by Skarletto (github), cart-nav, cart-med made by ArchRBX (github)", "size": { "x": 32, "y": 32 @@ -55,9 +55,15 @@ { "name": "cart-m" }, + { + "name": "cart-med" + }, { "name": "cart-mi" }, + { + "name": "cart-nav" + }, { "name": "cart-ord" }, diff --git a/Resources/Textures/_NF/Structures/Walls/solid_reinforced_diagonal.rsi/state1.png b/Resources/Textures/Objects/Devices/encryption_keys.rsi/ai_label.png similarity index 60% rename from Resources/Textures/_NF/Structures/Walls/solid_reinforced_diagonal.rsi/state1.png rename to Resources/Textures/Objects/Devices/encryption_keys.rsi/ai_label.png index a0ce5d516e8..02409127a3f 100644 Binary files a/Resources/Textures/_NF/Structures/Walls/solid_reinforced_diagonal.rsi/state1.png and b/Resources/Textures/Objects/Devices/encryption_keys.rsi/ai_label.png differ diff --git a/Resources/Textures/Objects/Devices/encryption_keys.rsi/meta.json b/Resources/Textures/Objects/Devices/encryption_keys.rsi/meta.json index 6ae7bca9dda..a6222e988f7 100644 --- a/Resources/Textures/Objects/Devices/encryption_keys.rsi/meta.json +++ b/Resources/Textures/Objects/Devices/encryption_keys.rsi/meta.json @@ -35,6 +35,7 @@ {"name": "sec_label"}, {"name": "service_label"}, {"name": "synd_label"}, - {"name": "borg_label"} + {"name": "borg_label"}, + {"name": "ai_label"} ] } diff --git a/Resources/Textures/Objects/Fun/spectrallocator.rsi/icon.png b/Resources/Textures/Objects/Fun/spectrallocator.rsi/icon.png new file mode 100644 index 00000000000..b18dfd1c294 Binary files /dev/null and b/Resources/Textures/Objects/Fun/spectrallocator.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Fun/spectrallocator.rsi/inhand-left.png b/Resources/Textures/Objects/Fun/spectrallocator.rsi/inhand-left.png new file mode 100644 index 00000000000..cb25c6e3cf2 Binary files /dev/null and b/Resources/Textures/Objects/Fun/spectrallocator.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Fun/spectrallocator.rsi/inhand-right.png b/Resources/Textures/Objects/Fun/spectrallocator.rsi/inhand-right.png new file mode 100644 index 00000000000..7c34512cb66 Binary files /dev/null and b/Resources/Textures/Objects/Fun/spectrallocator.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Fun/spectrallocator.rsi/meta.json b/Resources/Textures/Objects/Fun/spectrallocator.rsi/meta.json new file mode 100644 index 00000000000..1556cd4eb9f --- /dev/null +++ b/Resources/Textures/Objects/Fun/spectrallocator.rsi/meta.json @@ -0,0 +1,33 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "Originally created by EmoGarbage404 (github) for Space Station 14, modified by Ilya246 (github) for Space Station 14.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "screen", + "delays": [ + [ + 0.2, + 0.2, + 0.2, + 0.2 + ] + ] + } + ] +} diff --git a/Resources/Textures/Objects/Fun/spectrallocator.rsi/screen.png b/Resources/Textures/Objects/Fun/spectrallocator.rsi/screen.png new file mode 100644 index 00000000000..eb4ab6bbbec Binary files /dev/null and b/Resources/Textures/Objects/Fun/spectrallocator.rsi/screen.png differ diff --git a/Resources/Textures/Objects/Misc/bureaucracy.rsi/meta.json b/Resources/Textures/Objects/Misc/bureaucracy.rsi/meta.json index c10dbd9c705..071fd538f76 100644 --- a/Resources/Textures/Objects/Misc/bureaucracy.rsi/meta.json +++ b/Resources/Textures/Objects/Misc/bureaucracy.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/e1142f20f5e4661cb6845cfcf2dd69f864d67432. paper_stamp-syndicate by Veritius. paper_receipt, paper_receipt_horizontal by eoineoineoin. paper_stamp-greytide by ubaser. paper_stamp-psychologist by clinux | paper_stamp-signature by Mnemotechnician.", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/e1142f20f5e4661cb6845cfcf2dd69f864d67432. paper_stamp-syndicate by Veritius. paper_receipt, paper_receipt_horizontal by eoineoineoin. paper_stamp-greytide by ubaser. paper_stamp-psychologist by clinux. syndicate_card by Aserovich | paper_stamp-signature by Mnemotechnician.", "size": { "x": 32, "y": 32 @@ -237,6 +237,9 @@ { "name": "paper_stamp-greytide" }, + { + "name": "syndicate_card" + }, { "name": "paper_stamp-psychologist" } diff --git a/Resources/Textures/Objects/Misc/bureaucracy.rsi/syndicate_card.png b/Resources/Textures/Objects/Misc/bureaucracy.rsi/syndicate_card.png new file mode 100644 index 00000000000..e015c78484e Binary files /dev/null and b/Resources/Textures/Objects/Misc/bureaucracy.rsi/syndicate_card.png differ diff --git a/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/meta.json b/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/meta.json index 1495eccd7a6..0c29f3e3fb1 100644 --- a/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/meta.json +++ b/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/meta.json @@ -57,6 +57,15 @@ { "name": "syringe2" }, + { + "name": "minisyringe1" + }, + { + "name": "minisyringe2" + }, + { + "name": "minisyringe3" + }, { "name": "inhand-left", "directions": 4 diff --git a/Resources/Textures/_NF/Structures/Walls/wood_diagonal.rsi/state1.png b/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe1.png similarity index 56% rename from Resources/Textures/_NF/Structures/Walls/wood_diagonal.rsi/state1.png rename to Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe1.png index 56f7cc2ff6d..66c49a744cd 100644 Binary files a/Resources/Textures/_NF/Structures/Walls/wood_diagonal.rsi/state1.png and b/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe1.png differ diff --git a/Resources/Textures/_NF/Structures/Walls/wood_diagonal.rsi/state0.png b/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe2.png similarity index 56% rename from Resources/Textures/_NF/Structures/Walls/wood_diagonal.rsi/state0.png rename to Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe2.png index b9c2a97a1d6..6f5d5663546 100644 Binary files a/Resources/Textures/_NF/Structures/Walls/wood_diagonal.rsi/state0.png and b/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe2.png differ diff --git a/Resources/Textures/_NF/Structures/Walls/solid_reinforced_diagonal.rsi/state0.png b/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe3.png similarity index 59% rename from Resources/Textures/_NF/Structures/Walls/solid_reinforced_diagonal.rsi/state0.png rename to Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe3.png index d437ad8b738..71d3bad044a 100644 Binary files a/Resources/Textures/_NF/Structures/Walls/solid_reinforced_diagonal.rsi/state0.png and b/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/minisyringe3.png differ diff --git a/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/syringeproj.png b/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/syringeproj.png index 7819a48c661..5faf746ae3a 100644 Binary files a/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/syringeproj.png and b/Resources/Textures/Objects/Specific/Chemistry/syringe.rsi/syringeproj.png differ diff --git a/Resources/Textures/Objects/Tiles/tile.rsi/meta.json b/Resources/Textures/Objects/Tiles/tile.rsi/meta.json index 7db50200ed6..7562d0f9b11 100644 --- a/Resources/Textures/Objects/Tiles/tile.rsi/meta.json +++ b/Resources/Textures/Objects/Tiles/tile.rsi/meta.json @@ -159,6 +159,9 @@ { "name": "bcircuit" }, + { + "name": "rcircuit" + }, { "name": "carpet-black" }, @@ -472,6 +475,14 @@ "name": "gold-inhand-left", "directions": 4 }, + { + "name": "rcircuit-inhand-right", + "directions": 4 + }, + { + "name": "rcircuit-inhand-left", + "directions": 4 + }, { "name": "reinforced-inhand-right", "directions": 4 diff --git a/Resources/Textures/Objects/Tiles/tile.rsi/rcircuit-inhand-left.png b/Resources/Textures/Objects/Tiles/tile.rsi/rcircuit-inhand-left.png new file mode 100644 index 00000000000..06a279199c0 Binary files /dev/null and b/Resources/Textures/Objects/Tiles/tile.rsi/rcircuit-inhand-left.png differ diff --git a/Resources/Textures/Objects/Tiles/tile.rsi/rcircuit-inhand-right.png b/Resources/Textures/Objects/Tiles/tile.rsi/rcircuit-inhand-right.png new file mode 100644 index 00000000000..44703f72f7d Binary files /dev/null and b/Resources/Textures/Objects/Tiles/tile.rsi/rcircuit-inhand-right.png differ diff --git a/Resources/Textures/Objects/Tiles/tile.rsi/rcircuit.png b/Resources/Textures/Objects/Tiles/tile.rsi/rcircuit.png new file mode 100644 index 00000000000..be9dc0c20fa Binary files /dev/null and b/Resources/Textures/Objects/Tiles/tile.rsi/rcircuit.png differ diff --git a/Resources/Textures/Objects/Tools/appraisal-tool.rsi/equipped-BELT.png b/Resources/Textures/Objects/Tools/appraisal-tool.rsi/equipped-BELT.png index 877a76785e8..e80c4fa942b 100644 Binary files a/Resources/Textures/Objects/Tools/appraisal-tool.rsi/equipped-BELT.png and b/Resources/Textures/Objects/Tools/appraisal-tool.rsi/equipped-BELT.png differ diff --git a/Resources/Textures/Objects/Tools/appraisal-tool.rsi/inhand-left.png b/Resources/Textures/Objects/Tools/appraisal-tool.rsi/inhand-left.png new file mode 100644 index 00000000000..19d43a58d25 Binary files /dev/null and b/Resources/Textures/Objects/Tools/appraisal-tool.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Tools/appraisal-tool.rsi/inhand-right.png b/Resources/Textures/Objects/Tools/appraisal-tool.rsi/inhand-right.png new file mode 100644 index 00000000000..99d7bc37309 Binary files /dev/null and b/Resources/Textures/Objects/Tools/appraisal-tool.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Tools/appraisal-tool.rsi/meta.json b/Resources/Textures/Objects/Tools/appraisal-tool.rsi/meta.json index 07cec4822e9..3a6e8e9d8e9 100644 --- a/Resources/Textures/Objects/Tools/appraisal-tool.rsi/meta.json +++ b/Resources/Textures/Objects/Tools/appraisal-tool.rsi/meta.json @@ -1,18 +1,26 @@ { - "copyright" : "Taken from https://github.com/tgstation/tgstation/blob/master/icons/obj/device.dmi state export_scanner at commit 7544e865d0771d9bd917461e9da16d301fe40fc3.", + "copyright" : "Taken from https://github.com/tgstation/tgstation/blob/master/icons/obj/device.dmi state export_scanner at commit 7544e865d0771d9bd917461e9da16d301fe40fc3. In-hand sprites made by obscenelytinyshark for use in SS14.", "license" : "CC-BY-SA-3.0", "size" : { "x" : 32, "y" : 32 }, - "states" : [ - { - "name" : "icon" - }, - { - "name": "equipped-BELT", - "directions": 4 - } - ], + "states": [ + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "icon" + }, + { + "name": "equipped-BELT", + "directions": 4 + } + ], "version" : 1 } diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/mag-1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/mag-1.png index 1784e7f6236..6a141b7efb1 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/mag-1.png and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/mag-1.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/mag-2.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/mag-2.png new file mode 100644 index 00000000000..2414fe500b9 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/mag-2.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/mag-3.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/mag-3.png new file mode 100644 index 00000000000..1784e7f6236 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/mag-3.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/magb-1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/magb-1.png index 3ff1180051b..d68f85845e5 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/magb-1.png and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/magb-1.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/magb-2.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/magb-2.png new file mode 100644 index 00000000000..50ea7c47ff3 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/magb-2.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/magb-3.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/magb-3.png new file mode 100644 index 00000000000..94a2272c800 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/magb-3.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/meta.json index a72e24594e3..b2728ab02bb 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/anti_materiel.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from cev-eris at https://github.com/discordia-space/CEV-Eris/raw/983ad377d25729357b7ff8025f8014bd2f6ae9f7/icons/obj/ammo.dmi , base and mag-1 by Alekshhh", + "copyright": "Taken from cev-eris at https://github.com/discordia-space/CEV-Eris/raw/983ad377d25729357b7ff8025f8014bd2f6ae9f7/icons/obj/ammo.dmi, base and mag-1 by Alekshhh", "size": { "x": 32, "y": 32 @@ -16,8 +16,20 @@ { "name": "mag-1" }, + { + "name": "mag-2" + }, + { + "name": "mag-3" + }, { "name": "magb-1" + }, + { + "name": "magb-2" + }, + { + "name": "magb-3" } ] } diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag-1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag-1.png index edcbdbd3851..c9f029f32a3 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag-1.png and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag-1.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag-2.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag-2.png new file mode 100644 index 00000000000..84725cfd321 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag-2.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag-3.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag-3.png new file mode 100644 index 00000000000..532baa546b3 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag-3.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag10-1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag10-1.png index da73a5f853b..8b49392b77d 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag10-1.png and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag10-1.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag10-2.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag10-2.png new file mode 100644 index 00000000000..80e504f560e Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag10-2.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag10-3.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag10-3.png new file mode 100644 index 00000000000..0c582b01d57 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/mag10-3.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/magb-1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/magb-1.png index 6a77161ab26..39e05c72114 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/magb-1.png and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/magb-1.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/magb-2.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/magb-2.png new file mode 100644 index 00000000000..8fd938dce0b Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/magb-2.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/magb-3.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/magb-3.png new file mode 100644 index 00000000000..6a77161ab26 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/magb-3.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/meta.json index 878138f73fa..958aeb6f48e 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/caseless_rifle.rsi/meta.json @@ -19,12 +19,30 @@ { "name": "mag-1" }, + { + "name": "mag-2" + }, + { + "name": "mag-3" + }, { "name": "magb-1" }, + { + "name": "magb-2" + }, + { + "name": "magb-3" + }, { "name": "mag10-1" }, + { + "name": "mag10-2" + }, + { + "name": "mag10-3" + }, { "name": "practice" }, diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/mag-1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/mag-1.png index a6feb95c36c..36c872a4268 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/mag-1.png and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/mag-1.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/mag-2.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/mag-2.png new file mode 100644 index 00000000000..025bec650e0 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/mag-2.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/mag-3.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/mag-3.png new file mode 100644 index 00000000000..31c1c6b5c76 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/mag-3.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/magb-1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/magb-1.png index 7fbc8f50acf..39e05c72114 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/magb-1.png and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/magb-1.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/magb-2.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/magb-2.png new file mode 100644 index 00000000000..8fd938dce0b Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/magb-2.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/magb-3.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/magb-3.png new file mode 100644 index 00000000000..6a77161ab26 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/magb-3.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/meta.json index 22eef0aaf3a..ff9704e4fc7 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/light_rifle.rsi/meta.json @@ -16,9 +16,21 @@ { "name": "mag-1" }, + { + "name": "mag-2" + }, + { + "name": "mag-3" + }, { "name": "magb-1" }, + { + "name": "magb-2" + }, + { + "name": "magb-3" + }, { "name": "incendiary" }, diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/mag-1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/mag-1.png index a36a9226170..8b7d23dc6c4 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/mag-1.png and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/mag-1.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/mag-2.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/mag-2.png new file mode 100644 index 00000000000..6d2b4034e1f Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/mag-2.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/mag-3.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/mag-3.png new file mode 100644 index 00000000000..7d2bcd29ec2 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/mag-3.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/meta.json index 67af0dcd27b..bb09b47a524 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/magnum.rsi/meta.json @@ -16,6 +16,12 @@ { "name": "mag-1" }, + { + "name": "mag-2" + }, + { + "name": "mag-3" + }, { "name": "cap" }, diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/mag-1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/mag-1.png index f32f6862662..43d1f0f5f71 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/mag-1.png and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/mag-1.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/mag-2.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/mag-2.png new file mode 100644 index 00000000000..5d6d61f5dbf Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/mag-2.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/meta.json index 6237fcbe6fe..dd1e88cffcb 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/pistol.rsi/meta.json @@ -13,6 +13,9 @@ { "name": "mag-1" }, + { + "name": "mag-2" + }, { "name": "incendiarydisplay" }, diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/mag-1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/mag-1.png index 0c642312083..4d7eb62cbf2 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/mag-1.png and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/mag-1.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/mag-2.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/mag-2.png new file mode 100644 index 00000000000..24cf3a37fb9 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/mag-2.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/mag-3.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/mag-3.png new file mode 100644 index 00000000000..68bb5da7bed Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/mag-3.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/magb-1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/magb-1.png index a3d15b76e69..39e05c72114 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/magb-1.png and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/magb-1.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/magb-2.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/magb-2.png new file mode 100644 index 00000000000..8fd938dce0b Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/magb-2.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/magb-3.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/magb-3.png new file mode 100644 index 00000000000..6a77161ab26 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/magb-3.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/meta.json index 18e89881dd9..5c5b4eaef38 100644 --- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Boxes/rifle.rsi/meta.json @@ -16,9 +16,21 @@ { "name": "mag-1" }, + { + "name": "mag-2" + }, + { + "name": "mag-3" + }, { "name": "magb-1" }, + { + "name": "magb-2" + }, + { + "name": "magb-3" + }, { "name": "incendiary" }, diff --git a/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-left.png new file mode 100644 index 00000000000..b59a4d52682 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-right.png new file mode 100644 index 00000000000..6a8268d27e3 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/meta.json new file mode 100644 index 00000000000..dae584eb812 --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from vgstation13 at https://github.com/vgstation-coders/vgstation13 at f91dfe2e0dba1b7a8b9a0fa18251340920979a62, held sprite by ScarKy0", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "syringe_gun" + }, + { + "name": "inhand-left", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/syringe_gun.png b/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/syringe_gun.png new file mode 100644 index 00000000000..972714d1c71 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/syringe_gun.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/LMGs/l6.rsi/equipped-SUITSTORAGE.png b/Resources/Textures/Objects/Weapons/Guns/LMGs/l6.rsi/equipped-SUITSTORAGE.png new file mode 100644 index 00000000000..66bba2db27b Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/LMGs/l6.rsi/equipped-SUITSTORAGE.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/LMGs/l6.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/LMGs/l6.rsi/meta.json index 8cd2e3fe7b8..4b0e50c2b39 100644 --- a/Resources/Textures/Objects/Weapons/Guns/LMGs/l6.rsi/meta.json +++ b/Resources/Textures/Objects/Weapons/Guns/LMGs/l6.rsi/meta.json @@ -47,6 +47,10 @@ { "name": "equipped-BACKPACK", "directions": 4 + }, + { + "name": "equipped-SUITSTORAGE", + "directions": 4 } ] } diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/assembly.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/assembly.png new file mode 100644 index 00000000000..43cb50a1529 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/assembly.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/bolted_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/bolted_unlit.png new file mode 100644 index 00000000000..6857f2a2415 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/bolted_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/closed.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/closed.png new file mode 100644 index 00000000000..e610fd71316 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/closed.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/closed_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/closed_unlit.png new file mode 100644 index 00000000000..c78d01c42d0 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/closed_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/closing.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/closing.png new file mode 100644 index 00000000000..9051b942128 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/closing.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/closing_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/closing_unlit.png new file mode 100644 index 00000000000..2a71f76d5d0 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/closing_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/deny_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/deny_unlit.png new file mode 100644 index 00000000000..7c56263f839 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/deny_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/emergency_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/emergency_unlit.png new file mode 100644 index 00000000000..817f2fb3f95 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/emergency_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/meta.json b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/meta.json new file mode 100644 index 00000000000..99585b1df81 --- /dev/null +++ b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/meta.json @@ -0,0 +1,195 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24. Recolor by Ko4erga (discord)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "assembly" + }, + { + "name": "bolted_unlit" + }, + { + "name": "closed" + }, + { + "name": "closed_unlit" + }, + { + "name": "closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "closing_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "deny_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "opening_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "panel_opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "sparks", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_broken", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_damaged", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 1.7 + ] + ] + }, + { + "name": "sparks_open", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "welded" + }, + { + "name": "emergency_unlit", + "delays": [ + [ + 0.4, + 0.4 + ] + ] + } + ] +} diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/open.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/open.png new file mode 100644 index 00000000000..1d53e597964 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/open.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/opening.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/opening.png new file mode 100644 index 00000000000..411c0a41292 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/opening.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/opening_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/opening_unlit.png new file mode 100644 index 00000000000..84933bd5ed9 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/opening_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/panel_closing.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/panel_closing.png new file mode 100644 index 00000000000..db7be0bc4a0 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/panel_closing.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/panel_open.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/panel_open.png new file mode 100644 index 00000000000..24eb2aedc22 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/panel_open.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/panel_opening.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/panel_opening.png new file mode 100644 index 00000000000..fc90acd637a Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/panel_opening.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks.png new file mode 100644 index 00000000000..dd67e88a315 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks_broken.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks_broken.png new file mode 100644 index 00000000000..fb5d774588a Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks_broken.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks_damaged.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks_damaged.png new file mode 100644 index 00000000000..f16a028dee5 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks_damaged.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks_open.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks_open.png new file mode 100644 index 00000000000..630eabb976e Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/sparks_open.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/welded.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/welded.png new file mode 100644 index 00000000000..a0040dfdc73 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/chemistry.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/assembly.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/assembly.png new file mode 100644 index 00000000000..f84c6150fdf Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/assembly.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/bolted_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/bolted_unlit.png new file mode 100644 index 00000000000..6857f2a2415 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/bolted_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closed.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closed.png new file mode 100644 index 00000000000..65ea6c4f570 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closed.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closed_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closed_unlit.png new file mode 100644 index 00000000000..c78d01c42d0 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closed_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closing.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closing.png new file mode 100644 index 00000000000..567e59aaef1 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closing.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closing_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closing_unlit.png new file mode 100644 index 00000000000..2a71f76d5d0 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/closing_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/deny_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/deny_unlit.png new file mode 100644 index 00000000000..7c56263f839 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/deny_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/emergency_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/emergency_unlit.png new file mode 100644 index 00000000000..817f2fb3f95 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/emergency_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/meta.json b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/meta.json new file mode 100644 index 00000000000..ed871d3b7e6 --- /dev/null +++ b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/meta.json @@ -0,0 +1,195 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24, hydroponics version made by BackeTako (github) for ss14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "assembly" + }, + { + "name": "bolted_unlit" + }, + { + "name": "closed" + }, + { + "name": "closed_unlit" + }, + { + "name": "closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "closing_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "deny_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "opening_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "panel_opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "sparks", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_broken", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_damaged", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 1.7 + ] + ] + }, + { + "name": "sparks_open", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "welded" + }, + { + "name": "emergency_unlit", + "delays": [ + [ + 0.4, + 0.4 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/open.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/open.png new file mode 100644 index 00000000000..667b6bcf003 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/open.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/opening.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/opening.png new file mode 100644 index 00000000000..084547837bf Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/opening.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/opening_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/opening_unlit.png new file mode 100644 index 00000000000..84933bd5ed9 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/opening_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/panel_closing.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/panel_closing.png new file mode 100644 index 00000000000..db7be0bc4a0 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/panel_closing.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/panel_open.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/panel_open.png new file mode 100644 index 00000000000..24eb2aedc22 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/panel_open.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/panel_opening.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/panel_opening.png new file mode 100644 index 00000000000..fc90acd637a Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/panel_opening.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks.png new file mode 100644 index 00000000000..dd67e88a315 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks_broken.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks_broken.png new file mode 100644 index 00000000000..fb5d774588a Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks_broken.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks_damaged.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks_damaged.png new file mode 100644 index 00000000000..f16a028dee5 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks_damaged.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks_open.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks_open.png new file mode 100644 index 00000000000..630eabb976e Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/sparks_open.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/welded.png b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/welded.png new file mode 100644 index 00000000000..a0040dfdc73 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Glass/hydroponics.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/assembly.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/assembly.png new file mode 100644 index 00000000000..44195639743 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/assembly.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/bolted_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/bolted_unlit.png new file mode 100644 index 00000000000..6857f2a2415 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/bolted_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/closed.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/closed.png new file mode 100644 index 00000000000..62321ed40e3 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/closed.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/closed_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/closed_unlit.png new file mode 100644 index 00000000000..c78d01c42d0 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/closed_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/closing.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/closing.png new file mode 100644 index 00000000000..96096e51540 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/closing.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/closing_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/closing_unlit.png new file mode 100644 index 00000000000..2a71f76d5d0 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/closing_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/deny_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/deny_unlit.png new file mode 100644 index 00000000000..7c56263f839 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/deny_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/emergency_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/emergency_unlit.png new file mode 100644 index 00000000000..817f2fb3f95 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/emergency_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/meta.json b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/meta.json new file mode 100644 index 00000000000..99585b1df81 --- /dev/null +++ b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/meta.json @@ -0,0 +1,195 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24. Recolor by Ko4erga (discord)", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "assembly" + }, + { + "name": "bolted_unlit" + }, + { + "name": "closed" + }, + { + "name": "closed_unlit" + }, + { + "name": "closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "closing_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "deny_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "opening_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "panel_opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "sparks", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_broken", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_damaged", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 1.7 + ] + ] + }, + { + "name": "sparks_open", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "welded" + }, + { + "name": "emergency_unlit", + "delays": [ + [ + 0.4, + 0.4 + ] + ] + } + ] +} diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/open.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/open.png new file mode 100644 index 00000000000..1d53e597964 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/open.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/opening.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/opening.png new file mode 100644 index 00000000000..0013d57cb58 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/opening.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/opening_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/opening_unlit.png new file mode 100644 index 00000000000..84933bd5ed9 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/opening_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/panel_closing.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/panel_closing.png new file mode 100644 index 00000000000..db7be0bc4a0 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/panel_closing.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/panel_open.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/panel_open.png new file mode 100644 index 00000000000..24eb2aedc22 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/panel_open.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/panel_opening.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/panel_opening.png new file mode 100644 index 00000000000..fc90acd637a Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/panel_opening.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks.png new file mode 100644 index 00000000000..dd67e88a315 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks_broken.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks_broken.png new file mode 100644 index 00000000000..fb5d774588a Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks_broken.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks_damaged.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks_damaged.png new file mode 100644 index 00000000000..f16a028dee5 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks_damaged.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks_open.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks_open.png new file mode 100644 index 00000000000..630eabb976e Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/sparks_open.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/welded.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/welded.png new file mode 100644 index 00000000000..a0040dfdc73 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/chemistry.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/assembly.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/assembly.png new file mode 100644 index 00000000000..c0d8c9c7d59 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/assembly.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/bolted_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/bolted_unlit.png new file mode 100644 index 00000000000..6857f2a2415 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/bolted_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closed.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closed.png new file mode 100644 index 00000000000..bba4b803083 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closed.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closed_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closed_unlit.png new file mode 100644 index 00000000000..c78d01c42d0 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closed_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closing.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closing.png new file mode 100644 index 00000000000..9963ddf614c Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closing.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closing_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closing_unlit.png new file mode 100644 index 00000000000..2a71f76d5d0 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/closing_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/deny_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/deny_unlit.png new file mode 100644 index 00000000000..7c56263f839 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/deny_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/emergency_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/emergency_unlit.png new file mode 100644 index 00000000000..817f2fb3f95 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/emergency_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/meta.json b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/meta.json new file mode 100644 index 00000000000..def0b429a27 --- /dev/null +++ b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/meta.json @@ -0,0 +1,195 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c6e3401f2e7e1e55c57060cdf956a98ef1fefc24, hydroponics version made by BackeTako (github) for ss14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "assembly" + }, + { + "name": "bolted_unlit" + }, + { + "name": "closed" + }, + { + "name": "closed_unlit" + }, + { + "name": "closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "closing_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "deny_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "opening_unlit", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_closing", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "panel_open", + "delays": [ + [ + 1 + ] + ] + }, + { + "name": "panel_opening", + "delays": [ + [ + 0.1, + 0.1, + 0.07, + 0.07, + 0.07, + 0.2 + ] + ] + }, + { + "name": "sparks", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_broken", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks_damaged", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 1.7 + ] + ] + }, + { + "name": "sparks_open", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "welded" + }, + { + "name": "emergency_unlit", + "delays": [ + [ + 0.4, + 0.4 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/open.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/open.png new file mode 100644 index 00000000000..667b6bcf003 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/open.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/opening.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/opening.png new file mode 100644 index 00000000000..81aa75f7a5a Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/opening.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/opening_unlit.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/opening_unlit.png new file mode 100644 index 00000000000..84933bd5ed9 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/opening_unlit.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/panel_closing.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/panel_closing.png new file mode 100644 index 00000000000..db7be0bc4a0 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/panel_closing.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/panel_open.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/panel_open.png new file mode 100644 index 00000000000..24eb2aedc22 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/panel_open.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/panel_opening.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/panel_opening.png new file mode 100644 index 00000000000..fc90acd637a Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/panel_opening.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks.png new file mode 100644 index 00000000000..dd67e88a315 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks_broken.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks_broken.png new file mode 100644 index 00000000000..fb5d774588a Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks_broken.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks_damaged.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks_damaged.png new file mode 100644 index 00000000000..f16a028dee5 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks_damaged.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks_open.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks_open.png new file mode 100644 index 00000000000..630eabb976e Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/sparks_open.png differ diff --git a/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/welded.png b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/welded.png new file mode 100644 index 00000000000..a0040dfdc73 Binary files /dev/null and b/Resources/Textures/Structures/Doors/Airlocks/Standard/hydroponics.rsi/welded.png differ diff --git a/Resources/Textures/Structures/Machines/computers.rsi/generic_panel_open.png b/Resources/Textures/Structures/Machines/computers.rsi/generic_panel_open.png new file mode 100644 index 00000000000..ac7f9f66414 Binary files /dev/null and b/Resources/Textures/Structures/Machines/computers.rsi/generic_panel_open.png differ diff --git a/Resources/Textures/Structures/Machines/computers.rsi/meta.json b/Resources/Textures/Structures/Machines/computers.rsi/meta.json index b6741b195d2..5355f379ab1 100644 --- a/Resources/Textures/Structures/Machines/computers.rsi/meta.json +++ b/Resources/Textures/Structures/Machines/computers.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/bd6873fd4dd6a61d7e46f1d75cd4d90f64c40894. comm_syndie made by Veritius, based on comm.", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/bd6873fd4dd6a61d7e46f1d75cd4d90f64c40894. comm_syndie made by Veritius, based on comm. generic_panel_open made by Errant, commit https://github.com/space-wizards/space-station-14/pull/32273.", "size": { "x": 32, "y": 32 @@ -1013,6 +1013,10 @@ "name": "generic_keys", "directions": 4 }, + { + "name": "generic_panel_open", + "directions": 4 + }, { "name": "generic_keyboard", "directions": 4 diff --git a/Resources/Textures/Structures/Storage/closet.rsi/freezer_icon.png b/Resources/Textures/Structures/Storage/closet.rsi/freezer_icon.png new file mode 100644 index 00000000000..ab148aa7cb2 Binary files /dev/null and b/Resources/Textures/Structures/Storage/closet.rsi/freezer_icon.png differ diff --git a/Resources/Textures/Structures/Storage/closet.rsi/meta.json b/Resources/Textures/Structures/Storage/closet.rsi/meta.json index d1ce3f5d4e0..d26d0c6545d 100644 --- a/Resources/Textures/Structures/Storage/closet.rsi/meta.json +++ b/Resources/Textures/Structures/Storage/closet.rsi/meta.json @@ -326,6 +326,9 @@ { "name": "freezer" }, + { + "name": "freezer_icon" + }, { "name": "freezer_door" }, diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/meta.json b/Resources/Textures/Structures/Wallmounts/posters.rsi/meta.json index 751413ad0c0..a33df81531d 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, poster63_contraband by discord foboscheshir_ poster29_legit modified by TJohnson.", + "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 foboscheshir_, poster52_legit by SlamBamActionman | poster29_legit modified by TJohnson.", "size": { "x": 32, "y": 32 @@ -381,6 +381,9 @@ { "name": "poster51_legit" }, + { + "name": "poster52_legit" + }, { "name": "random_legit" }, diff --git a/Resources/Textures/Structures/Wallmounts/posters.rsi/poster52_legit.png b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster52_legit.png new file mode 100644 index 00000000000..91954d0edc1 Binary files /dev/null and b/Resources/Textures/Structures/Wallmounts/posters.rsi/poster52_legit.png differ diff --git a/Resources/Textures/Structures/Walls/solid.rsi/reinf_over0.png b/Resources/Textures/Structures/Walls/solid.rsi/reinf_over0.png index eb81655efaa..338d7c8de01 100644 Binary files a/Resources/Textures/Structures/Walls/solid.rsi/reinf_over0.png and b/Resources/Textures/Structures/Walls/solid.rsi/reinf_over0.png differ diff --git a/Resources/Textures/Tiles/attributions.yml b/Resources/Textures/Tiles/attributions.yml index 6a6f545d1e9..652947cb53c 100644 --- a/Resources/Textures/Tiles/attributions.yml +++ b/Resources/Textures/Tiles/attributions.yml @@ -26,7 +26,7 @@ copyright: "Taken from /tg/station at commit 6665eec76c98a4f3f89bebcd10b34b47dcc0b8ae." source: "https://github.com/tgstation/tgstation/" -- files: ["blue_circuit.png", "cropped_parallax.png", "eighties.png", "gold.png", "grass.png", "ironsand1.png", "ironsand2.png", "ironsand3.png", "ironsand4.png", "junglegrass.png", "lattice.png", "reinforced.png", "silver.png", "snow.png", "wood.png"] +- files: ["blue_circuit.png", "cropped_parallax.png", "eighties.png", "gold.png", "grass.png", "ironsand1.png", "ironsand2.png", "ironsand3.png", "ironsand4.png", "junglegrass.png", "lattice.png", "red_circuit.png", "reinforced.png", "silver.png", "snow.png", "wood.png"] license: "CC-BY-SA-3.0" copyright: "tgstation commit 8abb19545828230d92ba18827feeb42a67a55d49, cropped_parallax modified from parallax." source: "https://github.com/tgstation/tgstation/" diff --git a/Resources/Textures/Tiles/blue_circuit.png b/Resources/Textures/Tiles/blue_circuit.png index 021c5363d6e..0a95b49aa50 100644 Binary files a/Resources/Textures/Tiles/blue_circuit.png and b/Resources/Textures/Tiles/blue_circuit.png differ diff --git a/Resources/Textures/Tiles/green_circuit.png b/Resources/Textures/Tiles/green_circuit.png index 1628c20ae77..0638d7bde5c 100644 Binary files a/Resources/Textures/Tiles/green_circuit.png and b/Resources/Textures/Tiles/green_circuit.png differ diff --git a/Resources/Textures/Tiles/red_circuit.png b/Resources/Textures/Tiles/red_circuit.png new file mode 100644 index 00000000000..44e33bdee31 Binary files /dev/null and b/Resources/Textures/Tiles/red_circuit.png differ diff --git a/Resources/Textures/Tiles/steel.png b/Resources/Textures/Tiles/steel.png index b7792ef138e..e41e7a1804e 100644 Binary files a/Resources/Textures/Tiles/steel.png and b/Resources/Textures/Tiles/steel.png differ diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_reinforced.rsi/assembly.png b/Resources/Textures/_NF/Structures/Doors/secret_door_reinforced.rsi/assembly.png deleted file mode 100644 index c5e502d1f9d..00000000000 Binary files a/Resources/Textures/_NF/Structures/Doors/secret_door_reinforced.rsi/assembly.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_reinforced.rsi/closed.png b/Resources/Textures/_NF/Structures/Doors/secret_door_reinforced.rsi/closed.png deleted file mode 100644 index e677fb00249..00000000000 Binary files a/Resources/Textures/_NF/Structures/Doors/secret_door_reinforced.rsi/closed.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_reinforced.rsi/closing.png b/Resources/Textures/_NF/Structures/Doors/secret_door_reinforced.rsi/closing.png deleted file mode 100644 index c96b6ab401b..00000000000 Binary files a/Resources/Textures/_NF/Structures/Doors/secret_door_reinforced.rsi/closing.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_reinforced.rsi/meta.json b/Resources/Textures/_NF/Structures/Doors/secret_door_reinforced.rsi/meta.json deleted file mode 100644 index c1f0d5e09ec..00000000000 --- a/Resources/Textures/_NF/Structures/Doors/secret_door_reinforced.rsi/meta.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Made by Nimfar11 (GitHub) for Space Station 14", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "assembly" - }, - { - "name": "closed", - "directions": 1, - "delays": [ - [ - 1.0 - ] - ] - }, - { - "name": "closing", - "directions": 1, - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "open", - "directions": 1, - "delays": [ - [ - 1.0 - ] - ] - }, - { - "name": "opening", - "directions": 1, - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - } - ] -} diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_reinforced.rsi/open.png b/Resources/Textures/_NF/Structures/Doors/secret_door_reinforced.rsi/open.png deleted file mode 100644 index 71f56ae15b1..00000000000 Binary files a/Resources/Textures/_NF/Structures/Doors/secret_door_reinforced.rsi/open.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_reinforced.rsi/opening.png b/Resources/Textures/_NF/Structures/Doors/secret_door_reinforced.rsi/opening.png deleted file mode 100644 index 8d14635c6de..00000000000 Binary files a/Resources/Textures/_NF/Structures/Doors/secret_door_reinforced.rsi/opening.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_shuttle.rsi/assembly.png b/Resources/Textures/_NF/Structures/Doors/secret_door_shuttle.rsi/assembly.png deleted file mode 100644 index a32da6cdb7c..00000000000 Binary files a/Resources/Textures/_NF/Structures/Doors/secret_door_shuttle.rsi/assembly.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_shuttle.rsi/closed.png b/Resources/Textures/_NF/Structures/Doors/secret_door_shuttle.rsi/closed.png deleted file mode 100644 index 680aee0efdd..00000000000 Binary files a/Resources/Textures/_NF/Structures/Doors/secret_door_shuttle.rsi/closed.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_shuttle.rsi/closing.png b/Resources/Textures/_NF/Structures/Doors/secret_door_shuttle.rsi/closing.png deleted file mode 100644 index 916e062da27..00000000000 Binary files a/Resources/Textures/_NF/Structures/Doors/secret_door_shuttle.rsi/closing.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_shuttle.rsi/meta.json b/Resources/Textures/_NF/Structures/Doors/secret_door_shuttle.rsi/meta.json deleted file mode 100644 index c1f0d5e09ec..00000000000 --- a/Resources/Textures/_NF/Structures/Doors/secret_door_shuttle.rsi/meta.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Made by Nimfar11 (GitHub) for Space Station 14", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "assembly" - }, - { - "name": "closed", - "directions": 1, - "delays": [ - [ - 1.0 - ] - ] - }, - { - "name": "closing", - "directions": 1, - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "open", - "directions": 1, - "delays": [ - [ - 1.0 - ] - ] - }, - { - "name": "opening", - "directions": 1, - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - } - ] -} diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_shuttle.rsi/open.png b/Resources/Textures/_NF/Structures/Doors/secret_door_shuttle.rsi/open.png deleted file mode 100644 index bd6c53c076a..00000000000 Binary files a/Resources/Textures/_NF/Structures/Doors/secret_door_shuttle.rsi/open.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_shuttle.rsi/opening.png b/Resources/Textures/_NF/Structures/Doors/secret_door_shuttle.rsi/opening.png deleted file mode 100644 index 10f1d3103fc..00000000000 Binary files a/Resources/Textures/_NF/Structures/Doors/secret_door_shuttle.rsi/opening.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_uranium.rsi/assembly.png b/Resources/Textures/_NF/Structures/Doors/secret_door_uranium.rsi/assembly.png deleted file mode 100644 index a4835963628..00000000000 Binary files a/Resources/Textures/_NF/Structures/Doors/secret_door_uranium.rsi/assembly.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_uranium.rsi/closed.png b/Resources/Textures/_NF/Structures/Doors/secret_door_uranium.rsi/closed.png deleted file mode 100644 index 12b9ac2d1d5..00000000000 Binary files a/Resources/Textures/_NF/Structures/Doors/secret_door_uranium.rsi/closed.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_uranium.rsi/closing.png b/Resources/Textures/_NF/Structures/Doors/secret_door_uranium.rsi/closing.png deleted file mode 100644 index 65089f40cb0..00000000000 Binary files a/Resources/Textures/_NF/Structures/Doors/secret_door_uranium.rsi/closing.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_uranium.rsi/meta.json b/Resources/Textures/_NF/Structures/Doors/secret_door_uranium.rsi/meta.json deleted file mode 100644 index c1f0d5e09ec..00000000000 --- a/Resources/Textures/_NF/Structures/Doors/secret_door_uranium.rsi/meta.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Made by Nimfar11 (GitHub) for Space Station 14", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "assembly" - }, - { - "name": "closed", - "directions": 1, - "delays": [ - [ - 1.0 - ] - ] - }, - { - "name": "closing", - "directions": 1, - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "open", - "directions": 1, - "delays": [ - [ - 1.0 - ] - ] - }, - { - "name": "opening", - "directions": 1, - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - } - ] -} diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_uranium.rsi/open.png b/Resources/Textures/_NF/Structures/Doors/secret_door_uranium.rsi/open.png deleted file mode 100644 index 5652978135c..00000000000 Binary files a/Resources/Textures/_NF/Structures/Doors/secret_door_uranium.rsi/open.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_uranium.rsi/opening.png b/Resources/Textures/_NF/Structures/Doors/secret_door_uranium.rsi/opening.png deleted file mode 100644 index 29f1e96e76f..00000000000 Binary files a/Resources/Textures/_NF/Structures/Doors/secret_door_uranium.rsi/opening.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_wood.rsi/assembly.png b/Resources/Textures/_NF/Structures/Doors/secret_door_wood.rsi/assembly.png deleted file mode 100644 index 0c3c643ed22..00000000000 Binary files a/Resources/Textures/_NF/Structures/Doors/secret_door_wood.rsi/assembly.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_wood.rsi/closed.png b/Resources/Textures/_NF/Structures/Doors/secret_door_wood.rsi/closed.png deleted file mode 100644 index 5ff2725b0fe..00000000000 Binary files a/Resources/Textures/_NF/Structures/Doors/secret_door_wood.rsi/closed.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_wood.rsi/closing.png b/Resources/Textures/_NF/Structures/Doors/secret_door_wood.rsi/closing.png deleted file mode 100644 index 5638d3aabb1..00000000000 Binary files a/Resources/Textures/_NF/Structures/Doors/secret_door_wood.rsi/closing.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_wood.rsi/meta.json b/Resources/Textures/_NF/Structures/Doors/secret_door_wood.rsi/meta.json deleted file mode 100644 index c1f0d5e09ec..00000000000 --- a/Resources/Textures/_NF/Structures/Doors/secret_door_wood.rsi/meta.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "version": 1, - "license": "CC-BY-SA-3.0", - "copyright": "Made by Nimfar11 (GitHub) for Space Station 14", - "size": { - "x": 32, - "y": 32 - }, - "states": [ - { - "name": "assembly" - }, - { - "name": "closed", - "directions": 1, - "delays": [ - [ - 1.0 - ] - ] - }, - { - "name": "closing", - "directions": 1, - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - }, - { - "name": "open", - "directions": 1, - "delays": [ - [ - 1.0 - ] - ] - }, - { - "name": "opening", - "directions": 1, - "delays": [ - [ - 0.1, - 0.1, - 0.1, - 0.1, - 0.1, - 0.1 - ] - ] - } - ] -} diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_wood.rsi/open.png b/Resources/Textures/_NF/Structures/Doors/secret_door_wood.rsi/open.png deleted file mode 100644 index 4c56ed292e6..00000000000 Binary files a/Resources/Textures/_NF/Structures/Doors/secret_door_wood.rsi/open.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Doors/secret_door_wood.rsi/opening.png b/Resources/Textures/_NF/Structures/Doors/secret_door_wood.rsi/opening.png deleted file mode 100644 index 9bb4c9e4512..00000000000 Binary files a/Resources/Textures/_NF/Structures/Doors/secret_door_wood.rsi/opening.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Walls/solid_reinforced_diagonal.rsi/meta.json b/Resources/Textures/_NF/Structures/Walls/solid_reinforced_diagonal.rsi/meta.json deleted file mode 100644 index 30760f072aa..00000000000 --- a/Resources/Textures/_NF/Structures/Walls/solid_reinforced_diagonal.rsi/meta.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": 1, - "size": { - "x": 32, - "y": 32 - }, - "license": "CC-BY-SA-3.0", - "copyright": "Sprited by erhardsteinhauer (discord) for Space Station 14 New Frontier server", - "states": [ - { - "name": "state0" - }, - { - "name": "state1" - } - ] -} diff --git a/Resources/Textures/_NF/Structures/Walls/uranium_diagonal.rsi/meta.json b/Resources/Textures/_NF/Structures/Walls/uranium_diagonal.rsi/meta.json deleted file mode 100644 index 30760f072aa..00000000000 --- a/Resources/Textures/_NF/Structures/Walls/uranium_diagonal.rsi/meta.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": 1, - "size": { - "x": 32, - "y": 32 - }, - "license": "CC-BY-SA-3.0", - "copyright": "Sprited by erhardsteinhauer (discord) for Space Station 14 New Frontier server", - "states": [ - { - "name": "state0" - }, - { - "name": "state1" - } - ] -} diff --git a/Resources/Textures/_NF/Structures/Walls/uranium_diagonal.rsi/state0.png b/Resources/Textures/_NF/Structures/Walls/uranium_diagonal.rsi/state0.png deleted file mode 100644 index 7be0038f527..00000000000 Binary files a/Resources/Textures/_NF/Structures/Walls/uranium_diagonal.rsi/state0.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Walls/uranium_diagonal.rsi/state1.png b/Resources/Textures/_NF/Structures/Walls/uranium_diagonal.rsi/state1.png deleted file mode 100644 index 7be0038f527..00000000000 Binary files a/Resources/Textures/_NF/Structures/Walls/uranium_diagonal.rsi/state1.png and /dev/null differ diff --git a/Resources/Textures/_NF/Structures/Walls/wood_diagonal.rsi/meta.json b/Resources/Textures/_NF/Structures/Walls/wood_diagonal.rsi/meta.json deleted file mode 100644 index 30760f072aa..00000000000 --- a/Resources/Textures/_NF/Structures/Walls/wood_diagonal.rsi/meta.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": 1, - "size": { - "x": 32, - "y": 32 - }, - "license": "CC-BY-SA-3.0", - "copyright": "Sprited by erhardsteinhauer (discord) for Space Station 14 New Frontier server", - "states": [ - { - "name": "state0" - }, - { - "name": "state1" - } - ] -} diff --git a/Resources/clientCommandPerms.yml b/Resources/clientCommandPerms.yml index 99e0fea0c5a..04961185d04 100644 --- a/Resources/clientCommandPerms.yml +++ b/Resources/clientCommandPerms.yml @@ -20,13 +20,10 @@ - net_watchent - devwindow - fill - - dumpentities - ">" - gcf - gc - gc_mode - - resetent - - resetallents - cvar - midipanic - replay_recording_start @@ -53,6 +50,8 @@ - hidemechanisms - showmechanisms - menuvis + - resetent + - resetallents - showhealthbars - toggledecals - nodevis @@ -72,7 +71,8 @@ - detachent - localdelete - fullstatereset - - fuckrules + - dumpentities + - fuckrules # DeltaV: move fuckrules to DEBUG - Flags: MAPPING Commands: diff --git a/Resources/mapping_actions_alarms.yml b/Resources/mapping_actions_alarms.yml new file mode 100644 index 00000000000..ce569d7d052 --- /dev/null +++ b/Resources/mapping_actions_alarms.yml @@ -0,0 +1,139 @@ +- action: !type:InstantActionComponent + icon: + entity: AirAlarm + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: AirAlarm + assignments: + - 0: 1 + name: Air Alarm +- action: !type:InstantActionComponent + icon: + entity: FireAlarm + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: FireAlarm + assignments: + - 0: 2 + name: Fire Alarm +- action: !type:InstantActionComponent + icon: + entity: AirSensor + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: AirSensor + assignments: + - 0: 3 + name: Air Sensor +- action: !type:InstantActionComponent + icon: + entity: Firelock + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: Firelock + assignments: + - 0: 4 + name: Firelock +- action: !type:InstantActionComponent + icon: + entity: FirelockGlass + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: FirelockGlass + assignments: + - 0: 5 + name: Firelock Glass +- action: !type:InstantActionComponent + icon: + entity: FirelockEdge + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: FirelockEdge + assignments: + - 0: 6 + name: Firelock Edge +- action: !type:InstantActionComponent + icon: + entity: Multitool + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: Multitool + assignments: + - 0: 7 + name: Multitool +- action: !type:InstantActionComponent + icon: + entity: GasVentScrubber + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: GasVentScrubber + assignments: + - 0: 8 + name: Gas Vent Scrubber +- action: !type:InstantActionComponent + icon: + entity: GasVentPump + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: GasVentPump + assignments: + - 0: 9 + name: Gas Vent Pump +- action: !type:InstantActionComponent + icon: Interface/VerbIcons/delete.svg.192dpi.png + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + eraser: True + assignments: + - 0: 0 + name: action-name-mapping-erase +... diff --git a/Resources/mapping_actions_deltav.yml b/Resources/mapping_actions_deltav.yml new file mode 100644 index 00000000000..2cf8994595d --- /dev/null +++ b/Resources/mapping_actions_deltav.yml @@ -0,0 +1,136 @@ +- action: !type:InstantActionComponent + icon: + entity: WallSolid + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: WallSolid + assignments: + - 0: 1 + name: Wall Solid +- action: !type:InstantActionComponent + icon: + entity: WallReinforced + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: WallReinforced + assignments: + - 0: 2 + name: WallReinforced +- action: !type:InstantActionComponent + icon: + entity: Window + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: Window + assignments: + - 0: 3 + name: Window +- action: !type:InstantActionComponent + icon: + entity: ReinforcedWindow + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: ReinforcedWindow + assignments: + - 0: 4 + name: ReinforcedWindow +- action: !type:InstantActionComponent + icon: + entity: Grille + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: Grille + assignments: + - 0: 5 + name: Grille +- action: !type:InstantActionComponent + icon: /Textures/Tiles/steel.png + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: AlignTileAny + tileId: FloorSteel + assignments: + - 0: 6 + name: steel floor +- action: !type:InstantActionComponent + icon: + entity: Firelock + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: Firelock + assignments: + - 0: 7 + name: Firelock +- action: !type:InstantActionComponent + icon: /Textures/Tiles/plating.png + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: AlignTileAny + tileId: Plating + assignments: + - 0: 8 + name: plating +- action: !type:InstantActionComponent + icon: /Textures/Tiles/cropped_parallax.png + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: AlignTileAny + tileId: Space + assignments: + - 0: 9 + name: space +- action: !type:InstantActionComponent + icon: Interface/VerbIcons/delete.svg.192dpi.png + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + eraser: True + assignments: + - 0: 0 + name: action-name-mapping-erase +... diff --git a/Resources/mapping_actions_disposals.yml b/Resources/mapping_actions_disposals.yml new file mode 100644 index 00000000000..bcccbefc17e --- /dev/null +++ b/Resources/mapping_actions_disposals.yml @@ -0,0 +1,140 @@ + +- action: !type:InstantActionComponent + icon: + entity: DisposalUnit + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: DisposalUnit + assignments: + - 0: 1 + name: Disposal Unit +- action: !type:InstantActionComponent + icon: + entity: DisposalTrunk + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: DisposalTrunk + assignments: + - 0: 2 + name: Disposal Trunk +- action: !type:InstantActionComponent + icon: + entity: DisposalPipe + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: DisposalPipe + assignments: + - 0: 3 + name: Disposal Pipe +- action: !type:InstantActionComponent + icon: + entity: DisposalBend + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: DisposalBend + assignments: + - 0: 4 + name: Disposal Bend +- action: !type:InstantActionComponent + icon: + entity: DisposalJunction + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: DisposalJunction + assignments: + - 0: 5 + name: Disposal Junction +- action: !type:InstantActionComponent + icon: + entity: DisposalJunctionFlipped + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: DisposalJunctionFlipped + assignments: + - 0: 6 + name: Disposal Junction Flipped +- action: !type:InstantActionComponent + icon: + entity: DisposalYJunction + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: DisposalYJunction + assignments: + - 0: 7 + name: Disposal Y-Junction +- action: !type:InstantActionComponent + icon: + entity: DisposalTagger + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: DisposalTagger + assignments: + - 0: 8 + name: Disposal Tagger +- action: !type:InstantActionComponent + icon: + entity: SignDisposalSpace + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: SignDisposalSpace + assignments: + - 0: 9 + name: Sign Disposal Space +- action: !type:InstantActionComponent + icon: Interface/VerbIcons/delete.svg.192dpi.png + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + eraser: True + assignments: + - 0: 0 + name: action-name-mapping-erase +... diff --git a/Resources/mapping_actions_pipes.yml b/Resources/mapping_actions_pipes.yml new file mode 100644 index 00000000000..5799fead740 --- /dev/null +++ b/Resources/mapping_actions_pipes.yml @@ -0,0 +1,139 @@ +- action: !type:InstantActionComponent + icon: + entity: GasPipeStraight + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: GasPipeStraight + assignments: + - 0: 1 + name: Gas Pipe Straight +- action: !type:InstantActionComponent + icon: + entity: GasPipeBend + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: GasPipeBend + assignments: + - 0: 2 + name: Gas Pipe Bend +- action: !type:InstantActionComponent + icon: + entity: GasPipeTJunction + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: GasPipeTJunction + assignments: + - 0: 3 + name: Gas Pipe T-Junction +- action: !type:InstantActionComponent + icon: + entity: GasPipeFourway + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: GasPipeFourway + assignments: + - 0: 4 + name: Gas Pipe Fourway +- action: !type:InstantActionComponent + icon: + entity: GasVentScrubber + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: GasVentScrubber + assignments: + - 0: 5 + name: Gas Vent Scrubber +- action: !type:InstantActionComponent + icon: + entity: GasVentPump + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: GasVentPump + assignments: + - 0: 6 + name: Gas Vent Pump +- action: !type:InstantActionComponent + icon: + entity: GasVolumePump + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: GasVolumePump + assignments: + - 0: 7 + name: Gas Volume Pump +- action: !type:InstantActionComponent + EntityIcon: + entity: GasPort + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: GasPort + assignments: + - 0: 8 + name: Gas Port +- action: !type:InstantActionComponent + icon: + entity: GasPressurePump + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: GasPressurePump + assignments: + - 0: 9 + name: Gas Pressure Pump +- action: !type:InstantActionComponent + icon: Interface/VerbIcons/delete.svg.192dpi.png + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + eraser: True + assignments: + - 0: 0 + name: action-name-mapping-erase +... diff --git a/Resources/mapping_actions_power.yml b/Resources/mapping_actions_power.yml new file mode 100644 index 00000000000..f1e59b9789b --- /dev/null +++ b/Resources/mapping_actions_power.yml @@ -0,0 +1,139 @@ +- action: !type:InstantActionComponent + icon: + entity: APCBasic + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: APCBasic + assignments: + - 0: 1 + name: APC Basic +- action: !type:InstantActionComponent + icon: + entity: CableApcExtension + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: CableApcExtension + assignments: + - 0: 2 + name: Cable ApcExtension +- action: !type:InstantActionComponent + icon: + entity: CableMV + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: CableMV + assignments: + - 0: 3 + name: Cable MV +- action: !type:InstantActionComponent + icon: + entity: CableHV + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: CableHV + assignments: + - 0: 4 + name: Cable HV +- action: !type:InstantActionComponent + icon: + entity: SubstationBasic + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: SubstationBasic + assignments: + - 0: 5 + name: Substation Basic +- action: !type:InstantActionComponent + icon: + entity: SMESBasic + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: SMESBasic + assignments: + - 0: 6 + name: SMES Basic +- action: !type:InstantActionComponent + icon: + entity: CableTerminal + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: CableTerminal + assignments: + - 0: 7 + name: Cable Terminal +- action: !type:InstantActionComponent + icon: + entity: Poweredlight + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: Poweredlight + assignments: + - 0: 8 + name: Powered light +- action: !type:InstantActionComponent + icon: + entity: PoweredSmallLightMaintenance + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + placementOption: SnapgridCenter + entityType: PoweredSmallLightMaintenance + assignments: + - 0: 9 + name: Small Light Maintenance +- action: !type:InstantActionComponent + icon: Interface/VerbIcons/delete.svg.192dpi.png + keywords: [] + checkCanInteract: False + clientExclusive: True + autoPopulate: False + temporary: True + event: !type:StartPlacementActionEvent + eraser: True + assignments: + - 0: 0 + name: action-name-mapping-erase +... diff --git a/RobustToolbox b/RobustToolbox index c86cb0b7951..32bca7cfd41 160000 --- a/RobustToolbox +++ b/RobustToolbox @@ -1 +1 @@ -Subproject commit c86cb0b7951cc4a662c7292138c5f45d868c5f58 +Subproject commit 32bca7cfd417edcad9a60c2b1703eba8675f56af