diff --git a/.github/workflows/update-credits.yml b/.github/workflows/update-credits.yml index fec053dc1b9..fb3508385e5 100644 --- a/.github/workflows/update-credits.yml +++ b/.github/workflows/update-credits.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest # Hey there fork dev! If you like to include your own contributors in this then you can probably just change this to your own repo # Do this in dump_github_contributors.ps1 too into your own repo - if: github.repository == 'DeltaV-Station/Delta-v-rebase' + if: github.repository == 'DeltaV-Station/Delta-v' steps: - uses: actions/checkout@v3.6.0 @@ -23,25 +23,25 @@ jobs: # TODO #- name: Get this week's Patreons - # run: Tools/script2dumppatreons > Resources/Credits/Patrons.yml - + # run: Tools/script2dumppatreons > Resources/Credits/Patrons.yml + # MAKE SURE YOU ENABLED "Allow GitHub Actions to create and approve pull requests" IN YOUR ACTIONS, OTHERWISE IT WILL MOST LIKELY FAIL - # For this you can use a pat token of an account with direct push access to the repo if you have protected branches. + # For this you can use a pat token of an account with direct push access to the repo if you have protected branches. # Uncomment this and comment the other line if you do this. # https://github.com/stefanzweifel/git-auto-commit-action#push-to-protected-branches - + #- name: Commit new credit files # uses: stefanzweifel/git-auto-commit-action@v4 # with: # commit_message: Update Credits # commit_author: PJBot - + # This will make a PR - name: Set current date as env variable run: echo "NOW=$(date +'%Y-%m-%dT%H-%M-%S')" >> $GITHUB_ENV - + - name: Create Pull Request uses: peter-evans/create-pull-request@v5 with: diff --git a/Content.Client/Input/ContentContexts.cs b/Content.Client/Input/ContentContexts.cs index ba8b72788e6..03f4f3f38b7 100644 --- a/Content.Client/Input/ContentContexts.cs +++ b/Content.Client/Input/ContentContexts.cs @@ -30,6 +30,8 @@ public static void SetupContexts(IInputContextContainer contexts) common.AddFunction(ContentKeyFunctions.TakeScreenshot); common.AddFunction(ContentKeyFunctions.TakeScreenshotNoUI); common.AddFunction(ContentKeyFunctions.ToggleFullscreen); + common.AddFunction(ContentKeyFunctions.MoveStoredItem); + common.AddFunction(ContentKeyFunctions.RotateStoredItem); common.AddFunction(ContentKeyFunctions.Point); common.AddFunction(ContentKeyFunctions.ZoomOut); common.AddFunction(ContentKeyFunctions.ZoomIn); @@ -63,6 +65,8 @@ public static void SetupContexts(IInputContextContainer contexts) human.AddFunction(ContentKeyFunctions.OpenInventoryMenu); human.AddFunction(ContentKeyFunctions.SmartEquipBackpack); human.AddFunction(ContentKeyFunctions.SmartEquipBelt); + human.AddFunction(ContentKeyFunctions.OpenBackpack); + human.AddFunction(ContentKeyFunctions.OpenBelt); human.AddFunction(ContentKeyFunctions.MouseMiddle); human.AddFunction(ContentKeyFunctions.ArcadeUp); human.AddFunction(ContentKeyFunctions.ArcadeDown); diff --git a/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs b/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs index 87b1f10352f..ce5cf421aef 100644 --- a/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs +++ b/Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs @@ -97,6 +97,12 @@ private void HandleToggleWalk(BaseButton.ButtonToggledEventArgs args) _deferCommands.Add(_inputManager.SaveToUserData); } + private void HandleStaticStorageUI(BaseButton.ButtonToggledEventArgs args) + { + _cfg.SetCVar(CCVars.StaticStorageUI, args.Pressed); + _cfg.SaveToFile(); + } + public KeyRebindTab() { IoCManager.InjectDependencies(this); @@ -175,10 +181,14 @@ void AddCheckBox(string checkBoxName, bool currentState, Action().GetUIController(); - _window = controller.EnsureStorageWindow(Owner); - _window.Title = EntMan.GetComponent(Owner).EntityName; - - _window.EntityList.GenerateItem += _window.GenerateButton; - _window.EntityList.ItemPressed += InteractWithItem; - _window.StorageContainerButton.OnPressed += TouchedContainerButton; - - _window.OnClose += Close; - - if (EntMan.TryGetComponent(Owner, out var storageComp)) - { - BuildEntityList(Owner, storageComp); - } - - } - else - { - _window.Open(); - } - } - - public void BuildEntityList(EntityUid uid, StorageComponent component) - { - _window?.BuildEntityList(uid, component); - } +[UsedImplicitly] +public sealed class StorageBoundUserInterface : BoundUserInterface +{ + [Dependency] private readonly IEntityManager _entManager = default!; - public void InteractWithItem(BaseButton.ButtonEventArgs? args, ListData? cData) - { - if (args == null || cData is not EntityListData { Uid: var entity }) - return; + private readonly StorageSystem _storage; - if (args.Event.Function == EngineKeyFunctions.UIClick) - { - SendPredictedMessage(new StorageInteractWithItemEvent(_entManager.GetNetEntity(entity))); - } - else if (EntMan.EntityExists(entity)) - { - OnButtonPressed(args.Event, entity); - } - } + public StorageBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + IoCManager.InjectDependencies(this); + _storage = _entManager.System(); + } - private void OnButtonPressed(GUIBoundKeyEventArgs args, EntityUid entity) - { - if (args.Function == ContentKeyFunctions.ExamineEntity) - { - EntMan.System() - .DoExamine(entity); - } - else if (args.Function == EngineKeyFunctions.UseSecondary) - { - IoCManager.Resolve().GetUIController().OpenVerbMenu(entity); - } - else if (args.Function == ContentKeyFunctions.ActivateItemInWorld) - { - EntMan.EntityNetManager?.SendSystemNetworkMessage( - new InteractInventorySlotEvent(EntMan.GetNetEntity(entity), altInteract: false)); - } - else if (args.Function == ContentKeyFunctions.AltActivateItemInWorld) - { - EntMan.RaisePredictiveEvent(new InteractInventorySlotEvent(EntMan.GetNetEntity(entity), altInteract: true)); - } - else - { - return; - } + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + if (!disposing) + return; - args.Handle(); - } + _storage.CloseStorageWindow(Owner); + } - public void TouchedContainerButton(BaseButton.ButtonEventArgs args) - { - SendPredictedMessage(new StorageInsertItemMessage()); - } + protected override void ReceiveMessage(BoundUserInterfaceMessage message) + { + base.ReceiveMessage(message); - protected override void Dispose(bool disposing) + if (message is StorageModifyWindowMessage) { - base.Dispose(disposing); - if (!disposing) - return; - - if (_window != null) - { - _window.Orphan(); - _window.EntityList.GenerateItem -= _window.GenerateButton; - _window.EntityList.ItemPressed -= InteractWithItem; - _window.StorageContainerButton.OnPressed -= TouchedContainerButton; - _window.OnClose -= Close; - _window = null; - } + if (_entManager.TryGetComponent(Owner, out var comp)) + _storage.OpenStorageWindow((Owner, comp)); } } } + diff --git a/Content.Client/Storage/Systems/StorageSystem.cs b/Content.Client/Storage/Systems/StorageSystem.cs index 5b55c3c8d57..ce0a6bf1ca4 100644 --- a/Content.Client/Storage/Systems/StorageSystem.cs +++ b/Content.Client/Storage/Systems/StorageSystem.cs @@ -1,32 +1,125 @@ -using Content.Client.Animations; +using System.Linq; +using Content.Client.Animations; using Content.Shared.Hands; using Content.Shared.Storage; using Content.Shared.Storage.EntitySystems; +using Robust.Shared.Collections; using Robust.Shared.Map; using Robust.Shared.Timing; namespace Content.Client.Storage.Systems; -// TODO kill this is all horrid. public sealed class StorageSystem : SharedStorageSystem { [Dependency] private readonly IGameTiming _timing = default!; [Dependency] private readonly EntityPickupAnimationSystem _entityPickupAnimation = default!; - public event Action? StorageUpdated; + private readonly List> _openStorages = new(); + public int OpenStorageAmount => _openStorages.Count; + + public event Action>? StorageUpdated; + public event Action?>? StorageOrderChanged; public override void Initialize() { base.Initialize(); + SubscribeLocalEvent(OnShutdown); SubscribeNetworkEvent(HandlePickupAnimation); SubscribeNetworkEvent(HandleAnimatingInsertingEntities); } - public override void UpdateUI(EntityUid uid, StorageComponent component) + public override void UpdateUI(Entity entity) + { + if (Resolve(entity.Owner, ref entity.Comp)) + StorageUpdated?.Invoke((entity, entity.Comp)); + } + + public void OpenStorageWindow(Entity entity) + { + if (_openStorages.Contains(entity)) + { + if (_openStorages.LastOrDefault() == entity) + { + CloseStorageWindow((entity, entity.Comp)); + } + else + { + var storages = new ValueList>(_openStorages); + var reverseStorages = storages.Reverse(); + + foreach (var storageEnt in reverseStorages) + { + if (storageEnt == entity) + break; + + CloseStorageBoundUserInterface(storageEnt.Owner); + _openStorages.Remove(entity); + } + } + return; + } + + ClearNonParentStorages(entity); + _openStorages.Add(entity); + Entity? last = _openStorages.LastOrDefault(); + StorageOrderChanged?.Invoke(last); + } + + public void CloseStorageWindow(Entity entity) + { + if (!Resolve(entity, ref entity.Comp)) + return; + + if (!_openStorages.Contains((entity, entity.Comp))) + return; + + var storages = new ValueList>(_openStorages); + var reverseStorages = storages.Reverse(); + + foreach (var storage in reverseStorages) + { + CloseStorageBoundUserInterface(storage.Owner); + _openStorages.Remove(storage); + if (storage.Owner == entity.Owner) + break; + } + + Entity? last = null; + if (_openStorages.Any()) + last = _openStorages.LastOrDefault(); + StorageOrderChanged?.Invoke(last); + } + + private void ClearNonParentStorages(EntityUid uid) + { + var storages = new ValueList>(_openStorages); + var reverseStorages = storages.Reverse(); + + foreach (var storage in reverseStorages) + { + if (storage.Comp.Container.Contains(uid)) + break; + + CloseStorageBoundUserInterface(storage.Owner); + _openStorages.Remove(storage); + } + } + + private void CloseStorageBoundUserInterface(Entity entity) + { + if (!Resolve(entity, ref entity.Comp, false)) + return; + + if (entity.Comp.OpenInterfaces.GetValueOrDefault(StorageComponent.StorageUiKey.Key) is not { } bui) + return; + + bui.Close(); + } + + private void OnShutdown(Entity ent, ref ComponentShutdown args) { - // Should we wrap this in some prediction call maybe? - StorageUpdated?.Invoke(uid, component); + CloseStorageWindow((ent, ent.Comp)); } /// @@ -49,14 +142,14 @@ public void PickupAnimation(EntityUid item, EntityCoordinates initialCoords, Ent if (!_timing.IsFirstTimePredicted) return; - if (finalCoords.InRange(EntityManager, _transform, initialCoords, 0.1f) || + if (finalCoords.InRange(EntityManager, TransformSystem, initialCoords, 0.1f) || !Exists(initialCoords.EntityId) || !Exists(finalCoords.EntityId)) { return; } - var finalMapPos = finalCoords.ToMapPos(EntityManager, _transform); - var finalPos = _transform.GetInvWorldMatrix(initialCoords.EntityId).Transform(finalMapPos); + var finalMapPos = finalCoords.ToMapPos(EntityManager, TransformSystem); + var finalPos = TransformSystem.GetInvWorldMatrix(initialCoords.EntityId).Transform(finalMapPos); _entityPickupAnimation.AnimateEntityPickup(item, initialCoords, finalPos, initialAngle); } @@ -74,7 +167,7 @@ public void HandleAnimatingInsertingEntities(AnimateInsertingEntitiesEvent msg) var entity = GetEntity(msg.StoredEntities[i]); var initialPosition = msg.EntityPositions[i]; - if (EntityManager.EntityExists(entity) && transformComp != null) + if (Exists(entity) && transformComp != null) { _entityPickupAnimation.AnimateEntityPickup(entity, GetCoordinates(initialPosition), transformComp.LocalPosition, msg.EntityAngles[i]); } diff --git a/Content.Client/Storage/UI/StorageUIController.cs b/Content.Client/Storage/UI/StorageUIController.cs deleted file mode 100644 index 352ee4f9edc..00000000000 --- a/Content.Client/Storage/UI/StorageUIController.cs +++ /dev/null @@ -1,71 +0,0 @@ -using Content.Client.Gameplay; -using Content.Client.Storage.Systems; -using Content.Shared.Storage; -using Robust.Client.UserInterface.Controllers; - -namespace Content.Client.Storage.UI; - -public sealed class StorageUIController : UIController, IOnSystemChanged, IOnStateExited -{ - // This is mainly to keep legacy functionality for now. - private readonly Dictionary _storageWindows = new(); - - public override void Initialize() - { - base.Initialize(); - EntityManager.EventBus.SubscribeLocalEvent(OnStorageShutdown); - } - public StorageWindow EnsureStorageWindow(EntityUid uid) - { - if (_storageWindows.TryGetValue(uid, out var window)) - { - UIManager.WindowRoot.AddChild(window); - return window; - } - - window = new StorageWindow(EntityManager); - _storageWindows[uid] = window; - window.OpenCenteredLeft(); - return window; - } - - private void OnStorageShutdown(EntityUid uid, StorageComponent component, ComponentShutdown args) - { - if (!_storageWindows.TryGetValue(uid, out var window)) - return; - - _storageWindows.Remove(uid); - window.Dispose(); - } - - private void OnStorageUpdate(EntityUid uid, StorageComponent component) - { - if (EntityManager.TryGetComponent(uid, out var uiComp) && - uiComp.OpenInterfaces.TryGetValue(StorageComponent.StorageUiKey.Key, out var bui)) - { - var storageBui = (StorageBoundUserInterface) bui; - - storageBui.BuildEntityList(uid, component); - } - } - - public void OnSystemLoaded(StorageSystem system) - { - system.StorageUpdated += OnStorageUpdate; - } - - public void OnSystemUnloaded(StorageSystem system) - { - system.StorageUpdated -= OnStorageUpdate; - } - - public void OnStateExited(GameplayState state) - { - foreach (var window in _storageWindows.Values) - { - window.Dispose(); - } - - _storageWindows.Clear(); - } -} diff --git a/Content.Client/Storage/UI/StorageWindow.cs b/Content.Client/Storage/UI/StorageWindow.cs deleted file mode 100644 index 1af50cb147d..00000000000 --- a/Content.Client/Storage/UI/StorageWindow.cs +++ /dev/null @@ -1,163 +0,0 @@ -using System.Numerics; -using Robust.Client.GameObjects; -using Robust.Client.Graphics; -using Robust.Client.UserInterface.Controls; -using Robust.Client.UserInterface.CustomControls; -using Content.Client.Stylesheets; -using Content.Client.UserInterface.Controls; -using Content.Shared.IdentityManagement; -using Content.Shared.Item; -using Content.Shared.Stacks; -using Content.Shared.Storage; -using Robust.Client.UserInterface; -using Robust.Shared.Containers; -using static Robust.Client.UserInterface.Controls.BoxContainer; -using Direction = Robust.Shared.Maths.Direction; - -namespace Content.Client.Storage.UI -{ - /// - /// GUI class for client storage component - /// - public sealed class StorageWindow : FancyWindow - { - private readonly IEntityManager _entityManager; - - private readonly Label _information; - public readonly ContainerButton StorageContainerButton; - public readonly ListContainer EntityList; - private readonly StyleBoxFlat _hoveredBox = new() { BackgroundColor = Color.Black.WithAlpha(0.35f) }; - private readonly StyleBoxFlat _unHoveredBox = new() { BackgroundColor = Color.Black.WithAlpha(0.0f) }; - - public StorageWindow(IEntityManager entityManager) - { - _entityManager = entityManager; - SetSize = new Vector2(240, 320); - Title = Loc.GetString("comp-storage-window-title"); - RectClipContent = true; - - StorageContainerButton = new ContainerButton - { - Name = "StorageContainerButton", - MouseFilter = MouseFilterMode.Pass, - }; - - ContentsContainer.AddChild(StorageContainerButton); - - var innerContainerButton = new PanelContainer - { - PanelOverride = _unHoveredBox, - }; - - StorageContainerButton.AddChild(innerContainerButton); - - Control vBox = new BoxContainer() - { - Orientation = LayoutOrientation.Vertical, - MouseFilter = MouseFilterMode.Ignore, - Margin = new Thickness(5), - }; - - StorageContainerButton.AddChild(vBox); - - _information = new Label - { - Text = Loc.GetString("comp-storage-window-volume", ("itemCount", 0), ("usedVolume", 0), ("maxVolume", 0)), - VerticalAlignment = VAlignment.Center - }; - - vBox.AddChild(_information); - - EntityList = new ListContainer - { - Name = "EntityListContainer", - }; - - vBox.AddChild(EntityList); - - EntityList.OnMouseEntered += _ => - { - innerContainerButton.PanelOverride = _hoveredBox; - }; - - EntityList.OnMouseExited += _ => - { - innerContainerButton.PanelOverride = _unHoveredBox; - }; - } - - /// - /// Loops through stored entities creating buttons for each, updates information labels - /// - public void BuildEntityList(EntityUid entity, StorageComponent component) - { - var storedCount = component.Container.ContainedEntities.Count; - var list = new List(storedCount); - - foreach (var uid in component.Container.ContainedEntities) - { - list.Add(new EntityListData(uid)); - } - - EntityList.PopulateList(list); - - // Sets information about entire storage container current capacity - if (component.StorageCapacityMax != 0) - { - _information.Text = Loc.GetString("comp-storage-window-volume", ("itemCount", storedCount), - ("usedVolume", component.StorageUsed), ("maxVolume", component.StorageCapacityMax)); - } - else - { - _information.Text = Loc.GetString("comp-storage-window-volume-unlimited", ("itemCount", storedCount)); - } - } - - /// - /// Button created for each entity that represents that item in the storage UI, with a texture, and name and size label - /// - public void GenerateButton(ListData data, ListContainerButton button) - { - if (data is not EntityListData {Uid: var entity} - || !_entityManager.EntityExists(entity)) - return; - - _entityManager.TryGetComponent(entity, out ItemComponent? item); - _entityManager.TryGetComponent(entity, out StackComponent? stack); - var count = stack?.Count ?? 1; - var size = item?.Size; - - var spriteView = new SpriteView - { - HorizontalAlignment = HAlignment.Left, - VerticalAlignment = VAlignment.Center, - SetSize = new Vector2(32.0f, 32.0f), - OverrideDirection = Direction.South, - }; - spriteView.SetEntity(entity); - button.AddChild(new BoxContainer - { - Orientation = LayoutOrientation.Horizontal, - SeparationOverride = 2, - Children = - { - spriteView, - new Label - { - HorizontalExpand = true, - ClipText = true, - Text = _entityManager.GetComponent(Identity.Entity(entity, _entityManager)).EntityName + - (count > 1 ? $" x {count}" : string.Empty), - }, - new Label - { - Align = Label.AlignMode.Right, - Text = size.ToString() ?? Loc.GetString("comp-storage-no-item-size"), - } - } - }); - button.StyleClasses.Add(StyleNano.StyleClassStorageButton); - button.EnableAllKeybinds = true; - } - } -} diff --git a/Content.Client/UserInterface/Systems/Hands/Controls/HandsContainer.cs b/Content.Client/UserInterface/Systems/Hands/Controls/HandsContainer.cs index 4f97adeca89..1421e302b86 100644 --- a/Content.Client/UserInterface/Systems/Hands/Controls/HandsContainer.cs +++ b/Content.Client/UserInterface/Systems/Hands/Controls/HandsContainer.cs @@ -10,6 +10,8 @@ public sealed class HandsContainer : ItemSlotUIContainer public int ColumnLimit { get => _grid.Columns; set => _grid.Columns = value; } public int MaxButtonCount { get; set; } = 0; + public int MaxButtonsPerRow { get; set; }= 6; + /// /// Indexer. This is used to reference a HandsContainer from the /// controller. @@ -36,6 +38,7 @@ public HandsContainer() _grid.AddChild(newButton); } + _grid.Columns = Math.Min(_grid.ChildCount, MaxButtonsPerRow); return base.AddButton(newButton); } diff --git a/Content.Client/UserInterface/Systems/Hotbar/HotbarUIController.cs b/Content.Client/UserInterface/Systems/Hotbar/HotbarUIController.cs index 17cc03c1131..397da978d8a 100644 --- a/Content.Client/UserInterface/Systems/Hotbar/HotbarUIController.cs +++ b/Content.Client/UserInterface/Systems/Hotbar/HotbarUIController.cs @@ -4,6 +4,8 @@ using Content.Client.UserInterface.Systems.Hotbar.Widgets; using Content.Client.UserInterface.Systems.Inventory; using Content.Client.UserInterface.Systems.Inventory.Controls; +using Content.Client.UserInterface.Systems.Storage; +using Content.Client.UserInterface.Systems.Storage.Controls; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controllers; @@ -13,6 +15,7 @@ public sealed class HotbarUIController : UIController { private InventoryUIController? _inventory; private HandsUIController? _hands; + private StorageUIController? _storage; public override void Initialize() { @@ -27,12 +30,14 @@ private void OnScreenLoad() ReloadHotbar(); } - public void Setup(HandsContainer handsContainer, ItemSlotButtonContainer inventoryBar, ItemStatusPanel handStatus) + public void Setup(HandsContainer handsContainer, ItemSlotButtonContainer inventoryBar, ItemStatusPanel handStatus, StorageContainer storageContainer) { _inventory = UIManager.GetUIController(); _hands = UIManager.GetUIController(); + _storage = UIManager.GetUIController(); _hands.RegisterHandContainer(handsContainer); _inventory.RegisterInventoryBarContainer(inventoryBar); + _storage.RegisterStorageContainer(storageContainer); } public void ReloadHotbar() diff --git a/Content.Client/UserInterface/Systems/Hotbar/Widgets/HotbarGui.xaml b/Content.Client/UserInterface/Systems/Hotbar/Widgets/HotbarGui.xaml index cd34412da61..04b606de080 100644 --- a/Content.Client/UserInterface/Systems/Hotbar/Widgets/HotbarGui.xaml +++ b/Content.Client/UserInterface/Systems/Hotbar/Widgets/HotbarGui.xaml @@ -1,6 +1,7 @@  - - - + + + + + + + - - + Margin="0 0 0 4" + /> + + + + + diff --git a/Content.Client/UserInterface/Systems/Hotbar/Widgets/HotbarGui.xaml.cs b/Content.Client/UserInterface/Systems/Hotbar/Widgets/HotbarGui.xaml.cs index 2fd3537206a..0e670d978f8 100644 --- a/Content.Client/UserInterface/Systems/Hotbar/Widgets/HotbarGui.xaml.cs +++ b/Content.Client/UserInterface/Systems/Hotbar/Widgets/HotbarGui.xaml.cs @@ -13,7 +13,7 @@ public HotbarGui() StatusPanel.Update(null); var hotbarController = UserInterfaceManager.GetUIController(); - hotbarController.Setup(HandContainer, InventoryHotbar, StatusPanel); + hotbarController.Setup(HandContainer, InventoryHotbar, StatusPanel, StoragePanel); LayoutContainer.SetGrowVertical(this, LayoutContainer.GrowDirection.Begin); } diff --git a/Content.Client/UserInterface/Systems/Inventory/Controls/ItemSlotUIContainer.cs b/Content.Client/UserInterface/Systems/Inventory/Controls/ItemSlotUIContainer.cs index 6a2e3fa5cbd..d44a4a2d765 100644 --- a/Content.Client/UserInterface/Systems/Inventory/Controls/ItemSlotUIContainer.cs +++ b/Content.Client/UserInterface/Systems/Inventory/Controls/ItemSlotUIContainer.cs @@ -68,6 +68,7 @@ public bool TryAddButton(SlotControl control) { if (!Children.Contains(newButton) && newButton.Parent == null && newButton.SlotName != "") AddChild(newButton); + Columns = ChildCount; return AddButtonToDict(newButton); } diff --git a/Content.Client/UserInterface/Systems/Storage/Controls/ItemGridPiece.cs b/Content.Client/UserInterface/Systems/Storage/Controls/ItemGridPiece.cs new file mode 100644 index 00000000000..0ca1797965f --- /dev/null +++ b/Content.Client/UserInterface/Systems/Storage/Controls/ItemGridPiece.cs @@ -0,0 +1,277 @@ +using System.Numerics; +using Content.Client.Items.Systems; +using Content.Shared.Item; +using Content.Shared.Storage; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.CustomControls; + +namespace Content.Client.UserInterface.Systems.Storage.Controls; + +public sealed class ItemGridPiece : Control +{ + private readonly IEntityManager _entityManager; + private readonly StorageUIController _storageController; + + private readonly List<(Texture, Vector2)> _texturesPositions = new(); + + public readonly EntityUid Entity; + public ItemStorageLocation Location; + public bool Marked = false; + + public event Action? OnPiecePressed; + public event Action? OnPieceUnpressed; + + #region Textures + private readonly string _centerTexturePath = "Storage/piece_center"; + private Texture? _centerTexture; + private readonly string _topTexturePath = "Storage/piece_top"; + private Texture? _topTexture; + private readonly string _bottomTexturePath = "Storage/piece_bottom"; + private Texture? _bottomTexture; + private readonly string _leftTexturePath = "Storage/piece_left"; + private Texture? _leftTexture; + private readonly string _rightTexturePath = "Storage/piece_right"; + private Texture? _rightTexture; + private readonly string _topLeftTexturePath = "Storage/piece_topLeft"; + private Texture? _topLeftTexture; + private readonly string _topRightTexturePath = "Storage/piece_topRight"; + private Texture? _topRightTexture; + private readonly string _bottomLeftTexturePath = "Storage/piece_bottomLeft"; + private Texture? _bottomLeftTexture; + private readonly string _bottomRightTexturePath = "Storage/piece_bottomRight"; + private Texture? _bottomRightTexture; + private readonly string _markedTexturePath = "Storage/marked"; + private Texture? _markedTexture; + #endregion + + public ItemGridPiece(Entity entity, ItemStorageLocation location, IEntityManager entityManager) + { + IoCManager.InjectDependencies(this); + + _entityManager = entityManager; + _storageController = UserInterfaceManager.GetUIController(); + + Entity = entity.Owner; + Location = location; + + Visible = true; + MouseFilter = MouseFilterMode.Pass; + + TooltipSupplier = SupplyTooltip; + + OnThemeUpdated(); + } + + private Control? SupplyTooltip(Control sender) + { + if (_storageController.IsDragging) + return null; + + return new Tooltip + { + Text = _entityManager.GetComponent(Entity).EntityName + }; + } + + protected override void OnThemeUpdated() + { + base.OnThemeUpdated(); + + _centerTexture = Theme.ResolveTextureOrNull(_centerTexturePath)?.Texture; + _topTexture = Theme.ResolveTextureOrNull(_topTexturePath)?.Texture; + _bottomTexture = Theme.ResolveTextureOrNull(_bottomTexturePath)?.Texture; + _leftTexture = Theme.ResolveTextureOrNull(_leftTexturePath)?.Texture; + _rightTexture = Theme.ResolveTextureOrNull(_rightTexturePath)?.Texture; + _topLeftTexture = Theme.ResolveTextureOrNull(_topLeftTexturePath)?.Texture; + _topRightTexture = Theme.ResolveTextureOrNull(_topRightTexturePath)?.Texture; + _bottomLeftTexture = Theme.ResolveTextureOrNull(_bottomLeftTexturePath)?.Texture; + _bottomRightTexture = Theme.ResolveTextureOrNull(_bottomRightTexturePath)?.Texture; + _markedTexture = Theme.ResolveTextureOrNull(_markedTexturePath)?.Texture; + } + + protected override void Draw(DrawingHandleScreen handle) + { + base.Draw(handle); + + // really just an "oh shit" catch. + if (!_entityManager.EntityExists(Entity) || !_entityManager.TryGetComponent(Entity, out var itemComponent)) + { + Dispose(); + return; + } + + if (_storageController.IsDragging && _storageController.DraggingGhost?.Entity == Entity && _storageController.DraggingGhost != this) + return; + + var adjustedShape = _entityManager.System().GetAdjustedItemShape((Entity, itemComponent), Location.Rotation, Vector2i.Zero); + var boundingGrid = adjustedShape.GetBoundingBox(); + var size = _centerTexture!.Size * 2 * UIScale; + + var hovering = !_storageController.IsDragging && UserInterfaceManager.CurrentlyHovered == this; + //yeah, this coloring is kinda hardcoded. deal with it. B) + Color? colorModulate = hovering ? null : Color.FromHex("#a8a8a8"); + + var marked = Marked; + Vector2i? maybeMarkedPos = null; + + _texturesPositions.Clear(); + for (var y = boundingGrid.Bottom; y <= boundingGrid.Top; y++) + { + for (var x = boundingGrid.Left; x <= boundingGrid.Right; x++) + { + if (!adjustedShape.Contains(x, y)) + continue; + + var offset = size * 2 * new Vector2(x - boundingGrid.Left, y - boundingGrid.Bottom); + var topLeft = PixelPosition + offset.Floored(); + + if (GetTexture(adjustedShape, new Vector2i(x, y), Direction.NorthEast) is {} neTexture) + { + var neOffset = new Vector2(size.X, 0); + handle.DrawTextureRect(neTexture, new UIBox2(topLeft + neOffset, topLeft + neOffset + size), colorModulate); + } + if (GetTexture(adjustedShape, new Vector2i(x, y), Direction.NorthWest) is {} nwTexture) + { + _texturesPositions.Add((nwTexture, Position + offset / UIScale)); + handle.DrawTextureRect(nwTexture, new UIBox2(topLeft, topLeft + size), colorModulate); + + if (marked && nwTexture == _topLeftTexture) + { + maybeMarkedPos = topLeft; + marked = false; + } + } + if (GetTexture(adjustedShape, new Vector2i(x, y), Direction.SouthEast) is {} seTexture) + { + var seOffset = size; + handle.DrawTextureRect(seTexture, new UIBox2(topLeft + seOffset, topLeft + seOffset + size), colorModulate); + } + if (GetTexture(adjustedShape, new Vector2i(x, y), Direction.SouthWest) is {} swTexture) + { + var swOffset = new Vector2(0, size.Y); + handle.DrawTextureRect(swTexture, new UIBox2(topLeft + swOffset, topLeft + swOffset + size), colorModulate); + } + } + } + + // typically you'd divide by two, but since the textures are half a tile, this is done implicitly + var iconPosition = new Vector2((boundingGrid.Width + 1) * size.X , + (boundingGrid.Height + 1) * size.Y); + var iconRotation = Location.Rotation + Angle.FromDegrees(itemComponent.StoredRotation); + + if (itemComponent.StoredSprite is { } storageSprite) + { + var scale = 2 * UIScale; + var offset = (((Box2) boundingGrid).Size - Vector2.One) * size; + var sprite = _entityManager.System().Frame0(storageSprite); + + var spriteBox = new Box2Rotated(new Box2(0f, sprite.Height * scale, sprite.Width * scale, 0f), -iconRotation, Vector2.Zero); + var root = spriteBox.CalcBoundingBox().BottomLeft; + var pos = PixelPosition * 2 + + (Parent?.GlobalPixelPosition ?? Vector2.Zero) + + offset; + + handle.SetTransform(pos, iconRotation); + var box = new UIBox2(root, root + sprite.Size * scale); + handle.DrawTextureRect(sprite, box); + handle.SetTransform(GlobalPixelPosition, Angle.Zero); + } + else + { + _entityManager.System().ForceUpdate(Entity); + handle.DrawEntity(Entity, + PixelPosition + iconPosition, + Vector2.One * 2 * UIScale, + Angle.Zero, + eyeRotation: iconRotation, + overrideDirection: Direction.South); + } + + if (maybeMarkedPos is {} markedPos && _markedTexture != null) + { + handle.DrawTextureRect(_markedTexture, new UIBox2(markedPos, markedPos + size)); + } + } + + protected override bool HasPoint(Vector2 point) + { + foreach (var (texture, position) in _texturesPositions) + { + if (!new Box2(position, position + texture.Size * 4).Contains(point)) + continue; + + return true; + } + + return false; + } + + protected override void KeyBindDown(GUIBoundKeyEventArgs args) + { + base.KeyBindDown(args); + + OnPiecePressed?.Invoke(args, this); + } + + protected override void KeyBindUp(GUIBoundKeyEventArgs args) + { + base.KeyBindUp(args); + + OnPieceUnpressed?.Invoke(args, this); + } + + private Texture? GetTexture(IReadOnlyList boxes, Vector2i position, Direction corner) + { + var top = !boxes.Contains(position - Vector2i.Up); + var bottom = !boxes.Contains(position - Vector2i.Down); + var left = !boxes.Contains(position + Vector2i.Left); + var right = !boxes.Contains(position + Vector2i.Right); + + switch (corner) + { + case Direction.NorthEast: + if (top && right) + return _topRightTexture; + if (top) + return _topTexture; + if (right) + return _rightTexture; + return _centerTexture; + case Direction.NorthWest: + if (top && left) + return _topLeftTexture; + if (top) + return _topTexture; + if (left) + return _leftTexture; + return _centerTexture; + case Direction.SouthEast: + if (bottom && right) + return _bottomRightTexture; + if (bottom) + return _bottomTexture; + if (right) + return _rightTexture; + return _centerTexture; + case Direction.SouthWest: + if (bottom && left) + return _bottomLeftTexture; + if (bottom) + return _bottomTexture; + if (left) + return _leftTexture; + return _centerTexture; + default: + return null; + } + } + + public static Vector2 GetCenterOffset(Entity entity, ItemStorageLocation location, IEntityManager entMan) + { + var boxSize = entMan.System().GetAdjustedItemShape(entity, location).GetBoundingBox().Size; + var actualSize = new Vector2(boxSize.X + 1, boxSize.Y + 1); + return actualSize * new Vector2i(8, 8); + } +} diff --git a/Content.Client/UserInterface/Systems/Storage/Controls/StorageContainer.cs b/Content.Client/UserInterface/Systems/Storage/Controls/StorageContainer.cs new file mode 100644 index 00000000000..8dfe2fff63b --- /dev/null +++ b/Content.Client/UserInterface/Systems/Storage/Controls/StorageContainer.cs @@ -0,0 +1,464 @@ +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Numerics; +using Content.Client.Hands.Systems; +using Content.Client.Items.Systems; +using Content.Client.Storage.Systems; +using Content.Shared.Input; +using Content.Shared.Item; +using Content.Shared.Storage; +using Robust.Client.Graphics; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.CustomControls; +using Robust.Shared.Timing; + +namespace Content.Client.UserInterface.Systems.Storage.Controls; + +public sealed class StorageContainer : BaseWindow +{ + [Dependency] private readonly IEntityManager _entity = default!; + private readonly StorageUIController _storageController; + + public EntityUid? StorageEntity; + + private readonly GridContainer _pieceGrid; + private readonly GridContainer _backgroundGrid; + private readonly GridContainer _sidebar; + + public event Action? OnPiecePressed; + public event Action? OnPieceUnpressed; + + private readonly string _emptyTexturePath = "Storage/tile_empty"; + private Texture? _emptyTexture; + private readonly string _blockedTexturePath = "Storage/tile_blocked"; + private Texture? _blockedTexture; + private readonly string _emptyOpaqueTexturePath = "Storage/tile_empty_opaque"; + private Texture? _emptyOpaqueTexture; + private readonly string _blockedOpaqueTexturePath = "Storage/tile_blocked_opaque"; + private Texture? _blockedOpaqueTexture; + private readonly string _exitTexturePath = "Storage/exit"; + private Texture? _exitTexture; + private readonly string _backTexturePath = "Storage/back"; + private Texture? _backTexture; + private readonly string _sidebarTopTexturePath = "Storage/sidebar_top"; + private Texture? _sidebarTopTexture; + private readonly string _sidebarMiddleTexturePath = "Storage/sidebar_mid"; + private Texture? _sidebarMiddleTexture; + private readonly string _sidebarBottomTexturePath = "Storage/sidebar_bottom"; + private Texture? _sidebarBottomTexture; + private readonly string _sidebarFatTexturePath = "Storage/sidebar_fat"; + private Texture? _sidebarFatTexture; + + public StorageContainer() + { + IoCManager.InjectDependencies(this); + + _storageController = UserInterfaceManager.GetUIController(); + + OnThemeUpdated(); + + MouseFilter = MouseFilterMode.Stop; + + _sidebar = new GridContainer + { + HSeparationOverride = 0, + VSeparationOverride = 0, + Columns = 1 + }; + + _pieceGrid = new GridContainer + { + HSeparationOverride = 0, + VSeparationOverride = 0 + }; + + _backgroundGrid = new GridContainer + { + HSeparationOverride = 0, + VSeparationOverride = 0 + }; + + var container = new BoxContainer + { + Orientation = BoxContainer.LayoutOrientation.Vertical, + Children = + { + new BoxContainer + { + Orientation = BoxContainer.LayoutOrientation.Horizontal, + Children = + { + _sidebar, + new Control + { + Children = + { + _backgroundGrid, + _pieceGrid + } + } + } + } + } + }; + + AddChild(container); + } + + protected override void OnThemeUpdated() + { + base.OnThemeUpdated(); + + _emptyTexture = Theme.ResolveTextureOrNull(_emptyTexturePath)?.Texture; + _blockedTexture = Theme.ResolveTextureOrNull(_blockedTexturePath)?.Texture; + _emptyOpaqueTexture = Theme.ResolveTextureOrNull(_emptyOpaqueTexturePath)?.Texture; + _blockedOpaqueTexture = Theme.ResolveTextureOrNull(_blockedOpaqueTexturePath)?.Texture; + _exitTexture = Theme.ResolveTextureOrNull(_exitTexturePath)?.Texture; + _backTexture = Theme.ResolveTextureOrNull(_backTexturePath)?.Texture; + _sidebarTopTexture = Theme.ResolveTextureOrNull(_sidebarTopTexturePath)?.Texture; + _sidebarMiddleTexture = Theme.ResolveTextureOrNull(_sidebarMiddleTexturePath)?.Texture; + _sidebarBottomTexture = Theme.ResolveTextureOrNull(_sidebarBottomTexturePath)?.Texture; + _sidebarFatTexture = Theme.ResolveTextureOrNull(_sidebarFatTexturePath)?.Texture; + } + + public void UpdateContainer(Entity? entity) + { + Visible = entity != null; + StorageEntity = entity; + if (entity == null) + return; + + BuildGridRepresentation(); + } + + private void BuildGridRepresentation() + { + if (!_entity.TryGetComponent(StorageEntity, out var comp) || !comp.Grid.Any()) + return; + + var boundingGrid = comp.Grid.GetBoundingBox(); + + BuildBackground(); + + #region Sidebar + _sidebar.Children.Clear(); + _sidebar.Rows = boundingGrid.Height + 1; + var exitButton = new TextureButton + { + TextureNormal = _entity.System().OpenStorageAmount == 1 + ?_exitTexture + : _backTexture, + Scale = new Vector2(2, 2), + }; + exitButton.OnPressed += _ => + { + Close(); + }; + exitButton.OnKeyBindDown += args => + { + // it just makes sense... + if (!args.Handled && args.Function == ContentKeyFunctions.ActivateItemInWorld) + { + Close(); + args.Handle(); + } + }; + var exitContainer = new BoxContainer + { + Children = + { + new TextureRect + { + Texture = boundingGrid.Height != 0 + ? _sidebarTopTexture + : _sidebarFatTexture, + TextureScale = new Vector2(2, 2), + Children = + { + exitButton + } + } + } + }; + _sidebar.AddChild(exitContainer); + for (var i = 0; i < boundingGrid.Height - 1; i++) + { + _sidebar.AddChild(new TextureRect + { + Texture = _sidebarMiddleTexture, + TextureScale = new Vector2(2, 2), + }); + } + + if (boundingGrid.Height > 0) + { + _sidebar.AddChild(new TextureRect + { + Texture = _sidebarBottomTexture, + TextureScale = new Vector2(2, 2), + }); + } + + #endregion + + BuildItemPieces(); + } + + public void BuildBackground() + { + if (!_entity.TryGetComponent(StorageEntity, out var comp) || !comp.Grid.Any()) + return; + + var boundingGrid = comp.Grid.GetBoundingBox(); + + var emptyTexture = _storageController.OpaqueStorageWindow + ? _emptyOpaqueTexture + : _emptyTexture; + var blockedTexture = _storageController.OpaqueStorageWindow + ? _blockedOpaqueTexture + : _blockedTexture; + + _backgroundGrid.Children.Clear(); + _backgroundGrid.Rows = boundingGrid.Height + 1; + _backgroundGrid.Columns = boundingGrid.Width + 1; + for (var y = boundingGrid.Bottom; y <= boundingGrid.Top; y++) + { + for (var x = boundingGrid.Left; x <= boundingGrid.Right; x++) + { + var texture = comp.Grid.Contains(x, y) + ? emptyTexture + : blockedTexture; + + _backgroundGrid.AddChild(new TextureRect + { + Texture = texture, + TextureScale = new Vector2(2, 2) + }); + } + } + } + + public void BuildItemPieces() + { + if (!_entity.TryGetComponent(StorageEntity, out var storageComp)) + return; + + if (!storageComp.Grid.Any()) + return; + + var boundingGrid = storageComp.Grid.GetBoundingBox(); + var size = _emptyTexture!.Size * 2; + var lastEntity = storageComp.Container.ContainedEntities.LastOrDefault(); + + //todo. at some point, we may want to only rebuild the pieces that have actually received new data. + + _pieceGrid.Children.Clear(); + _pieceGrid.Rows = boundingGrid.Height + 1; + _pieceGrid.Columns = boundingGrid.Width + 1; + for (var y = boundingGrid.Bottom; y <= boundingGrid.Top; y++) + { + for (var x = boundingGrid.Left; x <= boundingGrid.Right; x++) + { + var control = new Control + { + MinSize = size + }; + + var currentPosition = new Vector2i(x, y); + + foreach (var item in storageComp.StoredItems) + { + if (item.Value.Position != currentPosition) + continue; + + var itemEnt = _entity.GetEntity(item.Key); + + if (_entity.TryGetComponent(itemEnt, out var itemEntComponent)) + { + var gridPiece = new ItemGridPiece((itemEnt, itemEntComponent), item.Value, _entity) + { + MinSize = size, + Marked = itemEnt == lastEntity + }; + gridPiece.OnPiecePressed += OnPiecePressed; + gridPiece.OnPieceUnpressed += OnPieceUnpressed; + + control.AddChild(gridPiece); + } + } + + _pieceGrid.AddChild(control); + } + } + } + + protected override void FrameUpdate(FrameEventArgs args) + { + base.FrameUpdate(args); + + if (!IsOpen) + return; + + var itemSystem = _entity.System(); + var storageSystem = _entity.System(); + var handsSystem = _entity.System(); + + foreach (var child in _backgroundGrid.Children) + { + child.ModulateSelfOverride = Color.FromHex("#222222"); + } + + if (UserInterfaceManager.CurrentlyHovered is StorageContainer con && con != this) + return; + + if (!_entity.TryGetComponent(StorageEntity, out var storageComponent)) + return; + + EntityUid currentEnt; + ItemStorageLocation currentLocation; + var usingInHand = false; + if (_storageController.IsDragging && _storageController.DraggingGhost is { } dragging) + { + currentEnt = dragging.Entity; + currentLocation = dragging.Location; + } + else if (handsSystem.GetActiveHandEntity() is { } handEntity && + storageSystem.CanInsert(StorageEntity.Value, handEntity, out _, storageComp: storageComponent, ignoreLocation: true)) + { + currentEnt = handEntity; + currentLocation = new ItemStorageLocation(_storageController.DraggingRotation, Vector2i.Zero); + usingInHand = true; + } + else + { + return; + } + + if (!_entity.TryGetComponent(currentEnt, out var itemComp)) + return; + + var origin = GetMouseGridPieceLocation((currentEnt, itemComp), currentLocation); + + var itemShape = itemSystem.GetAdjustedItemShape( + (currentEnt, itemComp), + currentLocation.Rotation, + origin); + var itemBounding = itemShape.GetBoundingBox(); + + var validLocation = storageSystem.ItemFitsInGridLocation( + (currentEnt, itemComp), + (StorageEntity.Value, storageComponent), + origin, + currentLocation.Rotation); + + var validColor = usingInHand ? Color.Goldenrod : Color.FromHex("#1E8000"); + + for (var y = itemBounding.Bottom; y <= itemBounding.Top; y++) + { + for (var x = itemBounding.Left; x <= itemBounding.Right; x++) + { + if (TryGetBackgroundCell(x, y, out var cell) && itemShape.Contains(x, y)) + { + cell.ModulateSelfOverride = validLocation ? validColor : Color.FromHex("#B40046"); + } + } + } + } + + protected override DragMode GetDragModeFor(Vector2 relativeMousePos) + { + if (_storageController.StaticStorageUIEnabled) + return DragMode.None; + + if (_sidebar.SizeBox.Contains(relativeMousePos - _sidebar.Position)) + { + return DragMode.Move; + } + + return DragMode.None; + } + + public Vector2i GetMouseGridPieceLocation(Entity entity, ItemStorageLocation location) + { + var origin = Vector2i.Zero; + + if (StorageEntity != null) + origin = _entity.GetComponent(StorageEntity.Value).Grid.GetBoundingBox().BottomLeft; + + var textureSize = (Vector2) _emptyTexture!.Size * 2; + var position = ((UserInterfaceManager.MousePositionScaled.Position + - _backgroundGrid.GlobalPosition + - ItemGridPiece.GetCenterOffset(entity, location, _entity) * 2 + + textureSize / 2f) + / textureSize).Floored() + origin; + return position; + } + + public bool TryGetBackgroundCell(int x, int y, [NotNullWhen(true)] out Control? cell) + { + cell = null; + + if (!_entity.TryGetComponent(StorageEntity, out var storageComponent)) + return false; + var boundingBox = storageComponent.Grid.GetBoundingBox(); + x -= boundingBox.Left; + y -= boundingBox.Bottom; + + if (x < 0 || + x >= _backgroundGrid.Columns || + y < 0 || + y >= _backgroundGrid.Rows) + { + return false; + } + + cell = _backgroundGrid.GetChild(y * _backgroundGrid.Columns + x); + return true; + } + + protected override void KeyBindDown(GUIBoundKeyEventArgs args) + { + base.KeyBindDown(args); + + if (!IsOpen) + return; + + var storageSystem = _entity.System(); + var handsSystem = _entity.System(); + + if (args.Function == ContentKeyFunctions.MoveStoredItem && StorageEntity != null) + { + if (handsSystem.GetActiveHandEntity() is { } handEntity && + storageSystem.CanInsert(StorageEntity.Value, handEntity, out _)) + { + var pos = GetMouseGridPieceLocation((handEntity, null), + new ItemStorageLocation(_storageController.DraggingRotation, Vector2i.Zero)); + + var insertLocation = new ItemStorageLocation(_storageController.DraggingRotation, pos); + if (storageSystem.ItemFitsInGridLocation( + (handEntity, null), + (StorageEntity.Value, null), + insertLocation)) + { + _entity.RaisePredictiveEvent(new StorageInsertItemIntoLocationEvent( + _entity.GetNetEntity(handEntity), + _entity.GetNetEntity(StorageEntity.Value), + insertLocation)); + _storageController.DraggingRotation = Angle.Zero; + args.Handle(); + } + } + } + } + + public override void Close() + { + base.Close(); + + if (StorageEntity == null) + return; + + _entity.System().CloseStorageWindow(StorageEntity.Value); + } +} diff --git a/Content.Client/UserInterface/Systems/Storage/StorageUIController.cs b/Content.Client/UserInterface/Systems/Storage/StorageUIController.cs new file mode 100644 index 00000000000..c83a80b4a5e --- /dev/null +++ b/Content.Client/UserInterface/Systems/Storage/StorageUIController.cs @@ -0,0 +1,376 @@ +using System.Numerics; +using Content.Client.Examine; +using Content.Client.Hands.Systems; +using Content.Client.Interaction; +using Content.Client.Storage.Systems; +using Content.Client.UserInterface.Systems.Hotbar.Widgets; +using Content.Client.UserInterface.Systems.Storage.Controls; +using Content.Client.Verbs.UI; +using Content.Shared.CCVar; +using Content.Shared.Input; +using Content.Shared.Interaction; +using Content.Shared.Item; +using Content.Shared.Storage; +using Robust.Client.Input; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controllers; +using Robust.Client.UserInterface.Controls; +using Robust.Shared.Configuration; +using Robust.Shared.Input; +using Robust.Shared.Timing; + +namespace Content.Client.UserInterface.Systems.Storage; + +public sealed class StorageUIController : UIController, IOnSystemChanged +{ + [Dependency] private readonly IConfigurationManager _configuration = default!; + [Dependency] private readonly IEntityManager _entity = default!; + [Dependency] private readonly IInputManager _input = default!; + [Dependency] private readonly IUserInterfaceManager _ui = default!; + + private readonly DragDropHelper _menuDragHelper; + private StorageContainer? _container; + + private Vector2? _lastContainerPosition; + + private HotbarGui? Hotbar => UIManager.GetActiveUIWidgetOrNull(); + + public ItemGridPiece? DraggingGhost; + public Angle DraggingRotation = Angle.Zero; + public bool StaticStorageUIEnabled; + public bool OpaqueStorageWindow; + + public bool IsDragging => _menuDragHelper.IsDragging; + public ItemGridPiece? CurrentlyDragging => _menuDragHelper.Dragged; + + public StorageUIController() + { + _menuDragHelper = new DragDropHelper(OnMenuBeginDrag, OnMenuContinueDrag, OnMenuEndDrag); + } + + public override void Initialize() + { + base.Initialize(); + + _configuration.OnValueChanged(CCVars.StaticStorageUI, OnStaticStorageChanged, true); + _configuration.OnValueChanged(CCVars.OpaqueStorageWindow, OnOpaqueWindowChanged, true); + } + + public void OnSystemLoaded(StorageSystem system) + { + _input.FirstChanceOnKeyEvent += OnMiddleMouse; + system.StorageUpdated += OnStorageUpdated; + system.StorageOrderChanged += OnStorageOrderChanged; + } + + public void OnSystemUnloaded(StorageSystem system) + { + _input.FirstChanceOnKeyEvent -= OnMiddleMouse; + system.StorageUpdated -= OnStorageUpdated; + system.StorageOrderChanged -= OnStorageOrderChanged; + } + + private void OnStorageOrderChanged(Entity? nullEnt) + { + if (_container == null) + return; + + if (IsDragging) + _menuDragHelper.EndDrag(); + + _container.UpdateContainer(nullEnt); + + if (nullEnt is not null) + { + // center it if we knock it off screen somehow. + if (!StaticStorageUIEnabled && + (_lastContainerPosition == null || + _lastContainerPosition.Value.X < 0 || + _lastContainerPosition.Value.Y < 0 || + _lastContainerPosition.Value.X > _ui.WindowRoot.Width || + _lastContainerPosition.Value.Y > _ui.WindowRoot.Height)) + { + _container.OpenCenteredAt(new Vector2(0.5f, 0.75f)); + } + else + { + _container.Open(); + + var pos = !StaticStorageUIEnabled && _lastContainerPosition != null + ? _lastContainerPosition.Value + : Vector2.Zero; + + LayoutContainer.SetPosition(_container, pos); + } + + if (StaticStorageUIEnabled) + { + // we have to orphan it here because Open() sets the parent. + _container.Orphan(); + Hotbar?.StorageContainer.AddChild(_container); + } + _lastContainerPosition = _container.GlobalPosition; + } + else + { + _lastContainerPosition = _container.GlobalPosition; + _container.Close(); + } + } + + private void OnStaticStorageChanged(bool obj) + { + if (StaticStorageUIEnabled == obj) + return; + + StaticStorageUIEnabled = obj; + _lastContainerPosition = null; + + if (_container == null) + return; + + if (!_container.IsOpen) + return; + + _container.Orphan(); + if (StaticStorageUIEnabled) + { + Hotbar?.StorageContainer.AddChild(_container); + } + else + { + _ui.WindowRoot.AddChild(_container); + } + + if (_entity.TryGetComponent(_container.StorageEntity, out var comp)) + OnStorageOrderChanged((_container.StorageEntity.Value, comp)); + } + + private void OnOpaqueWindowChanged(bool obj) + { + if (OpaqueStorageWindow == obj) + return; + OpaqueStorageWindow = obj; + _container?.BuildBackground(); + } + + /// One might ask, Hey Emo, why are you parsing raw keyboard input just to rotate a rectangle? + /// The answer is, that input bindings regarding mouse inputs are always intercepted by the UI, + /// thus, if i want to be able to rotate my damn piece anywhere on the screen, + /// I have to side-step all of the input handling. Cheers. + private void OnMiddleMouse(KeyEventArgs keyEvent, KeyEventType type) + { + if (keyEvent.Handled) + return; + + if (type != KeyEventType.Down) + return; + + //todo there's gotta be a method for this in InputManager just expose it to content I BEG. + if (!_input.TryGetKeyBinding(ContentKeyFunctions.RotateStoredItem, out var binding)) + return; + if (binding.BaseKey != keyEvent.Key) + return; + + if (keyEvent.Shift && + !(binding.Mod1 == Keyboard.Key.Shift || + binding.Mod2 == Keyboard.Key.Shift || + binding.Mod3 == Keyboard.Key.Shift)) + return; + + if (keyEvent.Alt && + !(binding.Mod1 == Keyboard.Key.Alt || + binding.Mod2 == Keyboard.Key.Alt || + binding.Mod3 == Keyboard.Key.Alt)) + return; + + if (keyEvent.Control && + !(binding.Mod1 == Keyboard.Key.Control || + binding.Mod2 == Keyboard.Key.Control || + binding.Mod3 == Keyboard.Key.Control)) + return; + + if (!IsDragging && _entity.System().GetActiveHandEntity() == null) + return; + + //clamp it to a cardinal. + DraggingRotation = (DraggingRotation + Math.PI / 2f).GetCardinalDir().ToAngle(); + if (DraggingGhost != null) + DraggingGhost.Location.Rotation = DraggingRotation; + + if (IsDragging || (_container != null && UIManager.CurrentlyHovered == _container)) + keyEvent.Handle(); + } + + private void OnStorageUpdated(Entity uid) + { + if (_container?.StorageEntity != uid) + return; + + _container.BuildItemPieces(); + } + + public void RegisterStorageContainer(StorageContainer container) + { + if (_container != null) + { + container.OnPiecePressed -= OnPiecePressed; + container.OnPieceUnpressed -= OnPieceUnpressed; + } + + _container = container; + container.OnPiecePressed += OnPiecePressed; + container.OnPieceUnpressed += OnPieceUnpressed; + + if (!StaticStorageUIEnabled) + _container.Orphan(); + } + + private void OnPiecePressed(GUIBoundKeyEventArgs args, ItemGridPiece control) + { + if (IsDragging || !_container?.IsOpen == true) + return; + + if (args.Function == ContentKeyFunctions.MoveStoredItem) + { + _menuDragHelper.MouseDown(control); + _menuDragHelper.Update(0f); + + args.Handle(); + } + else if (args.Function == ContentKeyFunctions.ExamineEntity) + { + _entity.System().DoExamine(control.Entity); + args.Handle(); + } + else if (args.Function == EngineKeyFunctions.UseSecondary) + { + UIManager.GetUIController().OpenVerbMenu(control.Entity); + args.Handle(); + } + else if (args.Function == ContentKeyFunctions.ActivateItemInWorld) + { + _entity.EntityNetManager?.SendSystemNetworkMessage( + new InteractInventorySlotEvent(_entity.GetNetEntity(control.Entity), altInteract: false)); + args.Handle(); + } + else if (args.Function == ContentKeyFunctions.AltActivateItemInWorld) + { + _entity.RaisePredictiveEvent(new InteractInventorySlotEvent(_entity.GetNetEntity(control.Entity), altInteract: true)); + args.Handle(); + } + } + + private void OnPieceUnpressed(GUIBoundKeyEventArgs args, ItemGridPiece control) + { + if (args.Function != ContentKeyFunctions.MoveStoredItem) + return; + + if (_container?.StorageEntity is not { } storageEnt|| !_entity.TryGetComponent(storageEnt, out var storageComp)) + return; + + if (DraggingGhost is { } draggingGhost) + { + var dragEnt = draggingGhost.Entity; + var dragLoc = draggingGhost.Location; + var itemSys = _entity.System(); + + var position = _container.GetMouseGridPieceLocation(dragEnt, dragLoc); + var itemBounding = itemSys.GetAdjustedItemShape(dragEnt, dragLoc).GetBoundingBox(); + var gridBounding = storageComp.Grid.GetBoundingBox(); + + // The extended bounding box for if this is out of the window is the grid bounding box dimensions combined + // with the item shape bounding box dimensions. Plus 1 on the left for the sidebar. This makes it so that. + // dropping an item on the floor requires dragging it all the way out of the window. + var left = gridBounding.Left - itemBounding.Width - 1; + var bottom = gridBounding.Bottom - itemBounding.Height; + var top = gridBounding.Top; + var right = gridBounding.Right; + var lenientBounding = new Box2i(left, bottom, right, top); + + if (lenientBounding.Contains(position)) + { + _entity.RaisePredictiveEvent(new StorageSetItemLocationEvent( + _entity.GetNetEntity(draggingGhost.Entity), + _entity.GetNetEntity(storageEnt), + new ItemStorageLocation(DraggingRotation, position))); + } + else + { + _entity.RaisePredictiveEvent(new StorageRemoveItemEvent( + _entity.GetNetEntity(draggingGhost.Entity), + _entity.GetNetEntity(storageEnt))); + } + + _container?.BuildItemPieces(); + } + else //if we just clicked, then take it out of the bag. + { + _entity.RaisePredictiveEvent(new StorageInteractWithItemEvent( + _entity.GetNetEntity(control.Entity), + _entity.GetNetEntity(storageEnt))); + } + _menuDragHelper.EndDrag(); + args.Handle(); + } + + private bool OnMenuBeginDrag() + { + if (_menuDragHelper.Dragged is not { } dragged) + return false; + + DraggingRotation = dragged.Location.Rotation; + DraggingGhost = new ItemGridPiece( + (dragged.Entity, _entity.GetComponent(dragged.Entity)), + dragged.Location, + _entity); + DraggingGhost.MouseFilter = Control.MouseFilterMode.Ignore; + DraggingGhost.Visible = true; + DraggingGhost.Orphan(); + + UIManager.PopupRoot.AddChild(DraggingGhost); + SetDraggingRotation(); + return true; + } + + private bool OnMenuContinueDrag(float frameTime) + { + if (DraggingGhost == null) + return false; + SetDraggingRotation(); + return true; + } + + private void SetDraggingRotation() + { + if (DraggingGhost == null) + return; + + var offset = ItemGridPiece.GetCenterOffset( + (DraggingGhost.Entity, null), + new ItemStorageLocation(DraggingRotation, Vector2i.Zero), + _entity); + + // I don't know why it divides the position by 2. Hope this helps! -emo + LayoutContainer.SetPosition(DraggingGhost, UIManager.MousePositionScaled.Position / 2 - offset ); + } + + private void OnMenuEndDrag() + { + if (DraggingGhost == null) + return; + DraggingGhost.Visible = false; + DraggingGhost = null; + DraggingRotation = Angle.Zero; + } + + public override void FrameUpdate(FrameEventArgs args) + { + base.FrameUpdate(args); + + _menuDragHelper.Update(args.DeltaSeconds); + + if (!StaticStorageUIEnabled && _container?.Parent != null && _lastContainerPosition != null) + _lastContainerPosition = _container.GlobalPosition; + } +} diff --git a/Content.IntegrationTests/Tests/HumanInventoryUniformSlotsTest.cs b/Content.IntegrationTests/Tests/HumanInventoryUniformSlotsTest.cs index 3ea3dd7916b..4bba605f0ae 100644 --- a/Content.IntegrationTests/Tests/HumanInventoryUniformSlotsTest.cs +++ b/Content.IntegrationTests/Tests/HumanInventoryUniformSlotsTest.cs @@ -26,7 +26,7 @@ public sealed class HumanInventoryUniformSlotsTest - type: Clothing slots: [innerclothing] - type: Item - size: 5 + size: Tiny - type: entity name: IDCardDummy @@ -36,7 +36,7 @@ public sealed class HumanInventoryUniformSlotsTest slots: - idcard - type: Item - size: 5 + size: Tiny - type: IdCard - type: entity @@ -44,14 +44,14 @@ public sealed class HumanInventoryUniformSlotsTest id: FlashlightDummy components: - type: Item - size: 5 + size: Tiny - type: entity name: ToolboxDummy id: ToolboxDummy components: - type: Item - size: 9999 + size: Huge "; [Test] public async Task Test() diff --git a/Content.IntegrationTests/Tests/StackTest.cs b/Content.IntegrationTests/Tests/StackTest.cs deleted file mode 100644 index f991a5a5e58..00000000000 --- a/Content.IntegrationTests/Tests/StackTest.cs +++ /dev/null @@ -1,39 +0,0 @@ -using Content.Shared.Item; -using Content.Shared.Stacks; -using Robust.Shared.GameObjects; -using Robust.Shared.Prototypes; - -namespace Content.IntegrationTests.Tests; - -[TestFixture] -public sealed class StackTest -{ - [Test] - public async Task StackCorrectItemSize() - { - await using var pair = await PoolManager.GetServerClient(); - var server = pair.Server; - - var protoManager = server.ResolveDependency(); - var compFact = server.ResolveDependency(); - - Assert.Multiple(() => - { - foreach (var entity in pair.GetPrototypesWithComponent()) - { - if (!entity.TryGetComponent(out var stackComponent, compFact) || - !entity.TryGetComponent(out var itemComponent, compFact)) - continue; - - if (!protoManager.TryIndex(stackComponent.StackTypeId, out var stackProto) || - stackProto.ItemSize == null) - continue; - - var expectedSize = stackProto.ItemSize * stackComponent.Count; - Assert.That(itemComponent.Size, Is.EqualTo(expectedSize), $"Prototype id: {entity.ID} has an item size of {itemComponent.Size} but expected size of {expectedSize}."); - } - }); - - await pair.CleanReturnAsync(); - } -} diff --git a/Content.IntegrationTests/Tests/StorageTest.cs b/Content.IntegrationTests/Tests/StorageTest.cs index 6bcdb84df46..659b310661b 100644 --- a/Content.IntegrationTests/Tests/StorageTest.cs +++ b/Content.IntegrationTests/Tests/StorageTest.cs @@ -3,11 +3,12 @@ using System.Linq; using Content.Server.Storage.Components; using Content.Shared.Item; +using Content.Shared.Prototypes; using Content.Shared.Storage; using Content.Shared.Storage.Components; +using Content.Shared.Storage.EntitySystems; using Robust.Shared.GameObjects; using Robust.Shared.Prototypes; -using Robust.UnitTesting; namespace Content.IntegrationTests.Tests { @@ -25,6 +26,9 @@ public async Task StorageSizeArbitrageTest() var server = pair.Server; var protoManager = server.ResolveDependency(); + var entMan = server.ResolveDependency(); + + var itemSys = entMan.System(); await server.WaitAssertion(() => { @@ -32,9 +36,13 @@ await server.WaitAssertion(() => { if (!proto.TryGetComponent("Storage", out var storage) || storage.Whitelist != null || - !proto.TryGetComponent("Item", out var item)) continue; + storage.MaxItemSize == null || + !proto.TryGetComponent("Item", out var item)) + continue; - Assert.That(storage.StorageCapacityMax, Is.LessThanOrEqualTo(item.Size), $"Found storage arbitrage on {proto.ID}"); + Assert.That(itemSys.GetSizePrototype(storage.MaxItemSize.Value).Weight, + Is.LessThanOrEqualTo(itemSys.GetSizePrototype(item.Size).Weight), + $"Found storage arbitrage on {proto.ID}"); } }); await pair.CleanReturnAsync(); @@ -74,77 +82,147 @@ public async Task TestSufficientSpaceForFill() await using var pair = await PoolManager.GetServerClient(); var server = pair.Server; + var entMan = server.ResolveDependency(); var protoMan = server.ResolveDependency(); var compFact = server.ResolveDependency(); var id = compFact.GetComponentName(typeof(StorageFillComponent)); + var itemSys = entMan.System(); + + var allSizes = protoMan.EnumeratePrototypes().ToList(); + allSizes.Sort(); + Assert.Multiple(() => { foreach (var proto in pair.GetPrototypesWithComponent()) { - int capacity; - var isEntStorage = false; + if (proto.HasComponent(compFact)) + continue; - if (proto.TryGetComponent("Storage", out var storage)) + if (!proto.TryGetComponent("Storage", out var storage)) { - capacity = storage.StorageCapacityMax; + Assert.Fail($"Entity {proto.ID} has storage-fill without a storage component!"); + continue; } - else if (proto.TryGetComponent("EntityStorage", out var entStorage)) + + proto.TryGetComponent("Item", out var item); + + var fill = (StorageFillComponent) proto.Components[id].Component; + var size = GetFillSize(fill, false, protoMan, itemSys); + + var maxSize = storage.MaxItemSize; + if (storage.MaxItemSize == null) { - capacity = entStorage.Capacity; - isEntStorage = true; + if (item?.Size == null) + { + maxSize = SharedStorageSystem.DefaultStorageMaxItemSize; + } + else + { + var curIndex = allSizes.IndexOf(protoMan.Index(item.Size)); + var index = Math.Max(0, curIndex - 1); + maxSize = allSizes[index].ID; + } } - else + + if (maxSize == null) + continue; + + Assert.That(size, Is.LessThanOrEqualTo(storage.Grid.GetArea()), $"{proto.ID} storage fill is too large."); + + foreach (var entry in fill.Contents) + { + if (entry.PrototypeId == null) + continue; + + if (!protoMan.TryIndex(entry.PrototypeId, out var fillItem)) + continue; + + if (!fillItem.TryGetComponent("Item", out var entryItem)) + continue; + + Assert.That(protoMan.Index(entryItem.Size).Weight, + Is.LessThanOrEqualTo(protoMan.Index(maxSize.Value).Weight), + $"Entity {proto.ID} has storage-fill item, {entry.PrototypeId}, that is too large"); + } + } + }); + + await pair.CleanReturnAsync(); + } + + [Test] + public async Task TestSufficientSpaceForEntityStorageFill() + { + await using var pair = await PoolManager.GetServerClient(); + var server = pair.Server; + + var entMan = server.ResolveDependency(); + var protoMan = server.ResolveDependency(); + var compFact = server.ResolveDependency(); + var id = compFact.GetComponentName(typeof(StorageFillComponent)); + + var itemSys = entMan.System(); + + Assert.Multiple(() => + { + foreach (var proto in pair.GetPrototypesWithComponent()) + { + if (proto.HasComponent(compFact)) + continue; + + if (!proto.TryGetComponent("EntityStorage", out var entStorage)) { Assert.Fail($"Entity {proto.ID} has storage-fill without a storage component!"); continue; } var fill = (StorageFillComponent) proto.Components[id].Component; - var size = GetFillSize(fill, isEntStorage); - Assert.That(size, Is.LessThanOrEqualTo(capacity), $"{proto.ID} storage fill is too large."); + var size = GetFillSize(fill, true, protoMan, itemSys); + Assert.That(size, Is.LessThanOrEqualTo(entStorage.Capacity), + $"{proto.ID} storage fill is too large."); } }); + await pair.CleanReturnAsync(); + } + + private int GetEntrySize(EntitySpawnEntry entry, bool getCount, IPrototypeManager protoMan, SharedItemSystem itemSystem) + { + if (entry.PrototypeId == null) + return 0; - int GetEntrySize(EntitySpawnEntry entry, bool isEntStorage) + if (!protoMan.TryIndex(entry.PrototypeId, out var proto)) { - if (entry.PrototypeId == null) - return 0; + Assert.Fail($"Unknown prototype: {entry.PrototypeId}"); + return 0; + } - if (!protoMan.TryIndex(entry.PrototypeId, out var proto)) - { - Assert.Fail($"Unknown prototype: {entry.PrototypeId}"); - return 0; - } + if (getCount) + return entry.Amount; - if (isEntStorage) - return entry.Amount; - if (proto.TryGetComponent("Item", out var item)) - return item.Size * entry.Amount; + if (proto.TryGetComponent("Item", out var item)) + return itemSystem.GetItemShape(item).GetArea() * entry.Amount; - Assert.Fail($"Prototype is missing item comp: {entry.PrototypeId}"); - return 0; - } + Assert.Fail($"Prototype is missing item comp: {entry.PrototypeId}"); + return 0; + } - int GetFillSize(StorageFillComponent fill, bool isEntStorage) + private int GetFillSize(StorageFillComponent fill, bool getCount, IPrototypeManager protoMan, SharedItemSystem itemSystem) + { + var totalSize = 0; + var groups = new Dictionary(); + foreach (var entry in fill.Contents) { - var totalSize = 0; - var groups = new Dictionary(); - foreach (var entry in fill.Contents) - { - var size = GetEntrySize(entry, isEntStorage); - - if (entry.GroupId == null) - totalSize += size; - else - groups[entry.GroupId] = Math.Max(size, groups.GetValueOrDefault(entry.GroupId)); - } + var size = GetEntrySize(entry, getCount, protoMan, itemSystem); - return totalSize + groups.Values.Sum(); + if (entry.GroupId == null) + totalSize += size; + else + groups[entry.GroupId] = Math.Max(size, groups.GetValueOrDefault(entry.GroupId)); } - await pair.CleanReturnAsync(); + return totalSize + groups.Values.Sum(); } } } diff --git a/Content.Server/Administration/Commands/PersistenceSaveCommand.cs b/Content.Server/Administration/Commands/PersistenceSaveCommand.cs new file mode 100644 index 00000000000..2684e85d5f1 --- /dev/null +++ b/Content.Server/Administration/Commands/PersistenceSaveCommand.cs @@ -0,0 +1,60 @@ +using Content.Server.GameTicking; +using Content.Server.Ghost.Components; +using Content.Server.Players; +using Content.Shared.Administration; +using Content.Shared.CCVar; +using Content.Shared.Ghost; +using Robust.Server.GameObjects; +using Robust.Server.Player; +using Robust.Shared.Configuration; +using Robust.Shared.Console; +using Robust.Shared.Map; +using System.Linq; + +namespace Content.Server.Administration.Commands; + +[AdminCommand(AdminFlags.Server)] +public sealed class PersistenceSave : IConsoleCommand +{ + [Dependency] private readonly IConfigurationManager _config = default!; + [Dependency] private readonly IEntityManager _entities = default!; + [Dependency] private readonly IEntitySystemManager _system = default!; + [Dependency] private readonly IMapManager _map = default!; + + public string Command => "persistencesave"; + public string Description => "Saves server data to a persistence file to be loaded later."; + public string Help => "persistencesave [mapId] [filePath - default: game.map (CCVar) ]"; + + public void Execute(IConsoleShell shell, string argStr, string[] args) + { + if (args.Length < 1 || args.Length > 2) + { + shell.WriteError(Loc.GetString("shell-wrong-arguments-number")); + return; + } + + if (!int.TryParse(args[0], out var intMapId)) + { + shell.WriteError(Loc.GetString("cmd-parse-failure-integer", ("arg", args[0]))); + return; + } + + var mapId = new MapId(intMapId); + if (!_map.MapExists(mapId)) + { + shell.WriteError(Loc.GetString("cmd-savemap-not-exist")); + return; + } + + var saveFilePath = (args.Length > 1 ? args[1] : null) ?? _config.GetCVar(CCVars.GameMap); + if (string.IsNullOrWhiteSpace(saveFilePath)) + { + shell.WriteError(Loc.GetString("cmd-persistencesave-no-path", ("cvar", nameof(CCVars.GameMap)))); + return; + } + + var mapLoader = _system.GetEntitySystem(); + mapLoader.SaveMap(mapId, saveFilePath); + shell.WriteLine(Loc.GetString("cmd-savemap-success")); + } +} diff --git a/Content.Server/Chat/Systems/ChatSystem.cs b/Content.Server/Chat/Systems/ChatSystem.cs index dc4e03049e1..fc04e8e49ad 100644 --- a/Content.Server/Chat/Systems/ChatSystem.cs +++ b/Content.Server/Chat/Systems/ChatSystem.cs @@ -5,7 +5,8 @@ using Content.Server.Administration.Managers; using Content.Server.Chat.Managers; using Content.Server.GameTicking; -using Content.Server.Players; +using Content.Server.Speech.Components; +using Content.Server.Speech.EntitySystems; using Content.Server.Nyanotrasen.Chat; using Content.Server.Speech.Components; using Content.Server.Speech.EntitySystems; diff --git a/Content.Server/Chemistry/EntitySystems/ChemMasterSystem.cs b/Content.Server/Chemistry/EntitySystems/ChemMasterSystem.cs index 07ac01fab69..cbb84be83c3 100644 --- a/Content.Server/Chemistry/EntitySystems/ChemMasterSystem.cs +++ b/Content.Server/Chemistry/EntitySystems/ChemMasterSystem.cs @@ -181,14 +181,13 @@ private void OnCreatePillsMessage(Entity chemMaster, ref Ch var user = message.Session.AttachedEntity; var maybeContainer = _itemSlotsSystem.GetItemOrNull(chemMaster, SharedChemMaster.OutputSlotName); if (maybeContainer is not { Valid: true } container - || !TryComp(container, out StorageComponent? storage) - || storage.Container is null) + || !TryComp(container, out StorageComponent? storage)) { return; // output can't fit pills } // Ensure the number is valid. - if (message.Number == 0 || message.Number > storage.StorageCapacityMax - storage.StorageUsed) + if (message.Number == 0 || !_storageSystem.HasSpace((container, storage))) return; // Ensure the amount is valid. @@ -349,17 +348,14 @@ private void ClickSound(Entity chemMaster) if (!TryComp(container, out StorageComponent? storage)) return null; - var pills = storage.Container?.ContainedEntities.Select((Func) (pill => + var pills = storage.Container.ContainedEntities.Select((Func) (pill => { _solutionContainerSystem.TryGetSolution(pill, SharedChemMaster.PillSolutionName, out var solution); var quantity = solution?.Volume ?? FixedPoint2.Zero; return (Name(pill), quantity); })).ToList(); - if (pills == null) - return null; - - return new ContainerInfo(name, storage.StorageUsed, storage.StorageCapacityMax) + return new ContainerInfo(name, _storageSystem.GetCumulativeItemAreas((container.Value, storage)), storage.Grid.GetArea()) { Entities = pills }; diff --git a/Content.Server/Hands/Systems/HandsSystem.cs b/Content.Server/Hands/Systems/HandsSystem.cs index 5c750e7544f..15190c81c79 100644 --- a/Content.Server/Hands/Systems/HandsSystem.cs +++ b/Content.Server/Hands/Systems/HandsSystem.cs @@ -59,8 +59,6 @@ public override void Initialize() CommandBinds.Builder .Bind(ContentKeyFunctions.ThrowItemInHand, new PointerInputCmdHandler(HandleThrowItem)) - .Bind(ContentKeyFunctions.SmartEquipBackpack, InputCmdHandler.FromDelegate(HandleSmartEquipBackpack)) - .Bind(ContentKeyFunctions.SmartEquipBelt, InputCmdHandler.FromDelegate(HandleSmartEquipBelt)) .Register(); } @@ -217,85 +215,7 @@ hands.ActiveHandEntity is not { } throwEnt || return true; } - private void HandleSmartEquipBackpack(ICommonSession? session) - { - HandleSmartEquip(session, "back"); - } - - private void HandleSmartEquipBelt(ICommonSession? session) - { - HandleSmartEquip(session, "belt"); - } - - // why tf is this even in hands system. - // TODO: move to storage or inventory - private void HandleSmartEquip(ICommonSession? session, string equipmentSlot) - { - if (session is not { } playerSession) - return; - - if (playerSession.AttachedEntity is not {Valid: true} plyEnt || !Exists(plyEnt)) - return; - - if (!_actionBlockerSystem.CanInteract(plyEnt, null)) - return; - if (!TryComp(plyEnt, out var hands) || hands.ActiveHand == null) - return; - - if (!_inventorySystem.TryGetSlotEntity(plyEnt, equipmentSlot, out var slotEntity) || - !TryComp(slotEntity, out StorageComponent? storageComponent)) - { - if (_inventorySystem.HasSlot(plyEnt, equipmentSlot)) - { - if (hands.ActiveHand.HeldEntity == null && slotEntity != null) - { - _inventorySystem.TryUnequip(plyEnt, equipmentSlot); - PickupOrDrop(plyEnt, slotEntity.Value); - return; - } - if (hands.ActiveHand.HeldEntity == null) - return; - if (!_inventorySystem.CanEquip(plyEnt, hands.ActiveHand.HeldEntity.Value, equipmentSlot, out var reason)) - { - _popupSystem.PopupEntity(Loc.GetString(reason), plyEnt, session); - return; - } - if (slotEntity == null) - { - _inventorySystem.TryEquip(plyEnt, hands.ActiveHand.HeldEntity.Value, equipmentSlot); - return; - } - _inventorySystem.TryUnequip(plyEnt, equipmentSlot); - _inventorySystem.TryEquip(plyEnt, hands.ActiveHand.HeldEntity.Value, equipmentSlot); - PickupOrDrop(plyEnt, slotEntity.Value); - return; - } - _popupSystem.PopupEntity(Loc.GetString("hands-system-missing-equipment-slot", ("slotName", equipmentSlot)), plyEnt, session); - return; - } - - if (hands.ActiveHand.HeldEntity != null) - { - _storageSystem.PlayerInsertHeldEntity(slotEntity.Value, plyEnt, storageComponent); - } - else - { - if (!storageComponent.Container.ContainedEntities.Any()) - { - _popupSystem.PopupEntity(Loc.GetString("hands-system-empty-equipment-slot", ("slotName", equipmentSlot)), plyEnt, session); - } - else - { - var lastStoredEntity = storageComponent.Container.ContainedEntities[^1]; - - if (storageComponent.Container.Remove(lastStoredEntity)) - { - PickupOrDrop(plyEnt, lastStoredEntity, animateUser: true, handsComp: hands); - } - } - } - } #endregion } } diff --git a/Content.Server/Item/ItemSystem.cs b/Content.Server/Item/ItemSystem.cs index efb99ae6533..9053ec05cd3 100644 --- a/Content.Server/Item/ItemSystem.cs +++ b/Content.Server/Item/ItemSystem.cs @@ -1,24 +1,7 @@ -using Content.Server.Storage.Components; -using Content.Server.Storage.EntitySystems; -using Content.Shared.Item; -using Content.Shared.Stacks; -using Content.Shared.Storage; +using Content.Shared.Item; namespace Content.Server.Item; public sealed class ItemSystem : SharedItemSystem { - [Dependency] private readonly StorageSystem _storage = default!; - - protected override void OnStackCountChanged(EntityUid uid, ItemComponent component, StackCountChangedEvent args) - { - base.OnStackCountChanged(uid, component, args); - - if (!Container.TryGetContainingContainer(uid, out var container) || - !TryComp(container.Owner, out var storage)) - return; - - _storage.RecalculateStorageUsed(container.Owner, storage); - _storage.UpdateUI(container.Owner, storage); - } } diff --git a/Content.Server/Maps/GameMapManager.cs b/Content.Server/Maps/GameMapManager.cs index 69f732151f8..9638dffaa7c 100644 --- a/Content.Server/Maps/GameMapManager.cs +++ b/Content.Server/Maps/GameMapManager.cs @@ -5,8 +5,10 @@ using Content.Shared.CCVar; using Robust.Server.Player; using Robust.Shared.Configuration; +using Robust.Shared.ContentPack; using Robust.Shared.Prototypes; using Robust.Shared.Random; +using Robust.Shared.Utility; namespace Content.Server.Maps; @@ -16,6 +18,7 @@ public sealed class GameMapManager : IGameMapManager [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IConfigurationManager _configurationManager = default!; [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly IResourceManager _resMan = default!; [Dependency] private readonly IRobustRandom _random = default!; [ViewVariables(VVAccess.ReadOnly)] @@ -40,18 +43,34 @@ public void Initialize() if (TryLookupMap(value, out GameMapPrototype? map)) { _configSelectedMap = map; + return; } - else + + if (string.IsNullOrEmpty(value)) { - if (string.IsNullOrEmpty(value)) - { - _configSelectedMap = default!; - } - else + _configSelectedMap = default!; + return; + } + + if (_configurationManager.GetCVar(CCVars.UsePersistence)) + { + var startMap = _configurationManager.GetCVar(CCVars.PersistenceMap); + _configSelectedMap = _prototypeManager.Index(startMap); + + var mapPath = new ResPath(value); + if (_resMan.UserData.Exists(mapPath)) { - _log.Error($"Unknown map prototype {value} was selected!"); + _configSelectedMap = _configSelectedMap.Persistence(mapPath); + _log.Info($"Using persistence map from {value}"); + return; } + + // persistence save path doesn't exist so we just use the start map + _log.Warning($"Using persistence start map {startMap} as {value} doesn't exist"); + return; } + + _log.Error($"Unknown map prototype {value} was selected!"); }, true); _configurationManager.OnValueChanged(CCVars.GameMapRotation, value => _mapRotationEnabled = value, true); _configurationManager.OnValueChanged(CCVars.GameMapMemoryDepth, value => diff --git a/Content.Server/Maps/GameMapPrototype.cs b/Content.Server/Maps/GameMapPrototype.cs index 837e838290a..bd15194495e 100644 --- a/Content.Server/Maps/GameMapPrototype.cs +++ b/Content.Server/Maps/GameMapPrototype.cs @@ -40,4 +40,18 @@ public sealed partial class GameMapPrototype : IPrototype /// The stations this map contains. The names should match with the BecomesStation components. /// public IReadOnlyDictionary Stations => _stations; + + /// + /// Performs a shallow clone of this map prototype, replacing MapPath with the argument. + /// + public GameMapPrototype Persistence(ResPath mapPath) + { + return new() + { + ID = ID, + MapName = MapName, + MapPath = mapPath, + _stations = _stations + }; + } } diff --git a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs index ea500631076..b18c77fffb7 100644 --- a/Content.Server/Nutrition/EntitySystems/FoodSystem.cs +++ b/Content.Server/Nutrition/EntitySystems/FoodSystem.cs @@ -1,3 +1,4 @@ +using System.Linq; using Content.Server.Body.Components; using Content.Server.Body.Systems; using Content.Server.Inventory; @@ -125,7 +126,7 @@ private void OnFeedFood(EntityUid uid, FoodComponent foodComponent, AfterInterac return (false, false); // Check for used storage on the food item - if (TryComp(food, out var storageState) && storageState.StorageUsed != 0) + if (TryComp(food, out var storageState) && storageState.Container.ContainedEntities.Any()) { _popup.PopupEntity(Loc.GetString("food-has-used-storage", ("food", food)), user, user); return (false, true); diff --git a/Content.Server/Nyanotrasen/Item/PseudoItem/PseudoItemSystem.cs b/Content.Server/Nyanotrasen/Item/PseudoItem/PseudoItemSystem.cs index 9f5bd596d76..03c494332cf 100644 --- a/Content.Server/Nyanotrasen/Item/PseudoItem/PseudoItemSystem.cs +++ b/Content.Server/Nyanotrasen/Item/PseudoItem/PseudoItemSystem.cs @@ -14,161 +14,161 @@ namespace Content.Server.Item.PseudoItem; public sealed class PseudoItemSystem : EntitySystem { - [Dependency] private readonly StorageSystem _storageSystem = default!; - [Dependency] private readonly ItemSystem _itemSystem = default!; - [Dependency] private readonly DoAfterSystem _doAfter = default!; - [Dependency] private readonly TagSystem _tagSystem = default!; - - [ValidatePrototypeId] - private const string PreventTag = "PreventLabel"; - - public override void Initialize() - { - base.Initialize(); - SubscribeLocalEvent>(AddInsertVerb); - SubscribeLocalEvent>(AddInsertAltVerb); - SubscribeLocalEvent(OnEntRemoved); - SubscribeLocalEvent(OnGettingPickedUpAttempt); - SubscribeLocalEvent(OnDropAttempt); - SubscribeLocalEvent(OnDoAfter); - SubscribeLocalEvent(OnInsertAttempt); - } - - private void AddInsertVerb(EntityUid uid, PseudoItemComponent component, GetVerbsEvent args) - { - if (!args.CanInteract || !args.CanAccess) - return; - - if (component.Active) - return; - - if (!TryComp(args.Target, out var targetStorage)) - return; - - if (component.Size > targetStorage.StorageCapacityMax - targetStorage.StorageUsed) - return; - - if (Transform(args.Target).ParentUid == uid) - return; - - InnateVerb verb = new() - { - Act = () => - { - TryInsert(args.Target, uid, component, targetStorage); - }, - Text = Loc.GetString("action-name-insert-self"), - Priority = 2 - }; - args.Verbs.Add(verb); - } - - private void AddInsertAltVerb(EntityUid uid, PseudoItemComponent component, GetVerbsEvent args) - { - if (!args.CanInteract || !args.CanAccess) - return; - - if (args.User == args.Target) - return; - - if (args.Hands == null) - return; - - if (!TryComp(args.Hands.ActiveHandEntity, out var targetStorage)) - return; - - AlternativeVerb verb = new() - { - Act = () => - { - StartInsertDoAfter(args.User, uid, args.Hands.ActiveHandEntity.Value, component); - }, - Text = Loc.GetString("action-name-insert-other", ("target", Identity.Entity(args.Target, EntityManager))), - Priority = 2 - }; - args.Verbs.Add(verb); - } - - private void OnEntRemoved(EntityUid uid, PseudoItemComponent component, EntGotRemovedFromContainerMessage args) - { - if (!component.Active) - return; - - RemComp(uid); - component.Active = false; - } - - private void OnGettingPickedUpAttempt(EntityUid uid, PseudoItemComponent component, - GettingPickedUpAttemptEvent args) - { - if (args.User == args.Item) - return; - - Transform(uid).AttachToGridOrMap(); - args.Cancel(); - } - - private void OnDropAttempt(EntityUid uid, PseudoItemComponent component, DropAttemptEvent args) - { - if (component.Active) - args.Cancel(); - } - - private void OnDoAfter(EntityUid uid, PseudoItemComponent component, DoAfterEvent args) - { - if (args.Handled || args.Cancelled || args.Args.Used == null) - return; - - args.Handled = TryInsert(args.Args.Used.Value, uid, component); - } - - public bool TryInsert(EntityUid storageUid, EntityUid toInsert, PseudoItemComponent component, - StorageComponent? storage = null) - { - if (!Resolve(storageUid, ref storage)) - return false; - - if (component.Size > storage.StorageCapacityMax - storage.StorageUsed) - return false; - - var item = EnsureComp(toInsert); - _tagSystem.TryAddTag(toInsert, PreventTag); - _itemSystem.SetSize(toInsert, component.Size, item); - - if (!_storageSystem.Insert(storageUid, toInsert, out _, null, storage)) - { - component.Active = false; - RemComp(toInsert); - return false; - } - - component.Active = true; - return true; - } - - private void StartInsertDoAfter(EntityUid inserter, EntityUid toInsert, EntityUid storageEntity, - PseudoItemComponent? pseudoItem = null) - { - if (!Resolve(toInsert, ref pseudoItem)) - return; - - var ev = new PseudoItemInsertDoAfterEvent(); - var args = new DoAfterArgs(EntityManager, inserter, 5f, ev, toInsert, toInsert, storageEntity) - { - BreakOnTargetMove = true, - BreakOnUserMove = true, - NeedHand = true - }; - - _doAfter.TryStartDoAfter(args); - } - - private void OnInsertAttempt(EntityUid uid, PseudoItemComponent component, - ContainerGettingInsertedAttemptEvent args) - { - if (!component.Active) - return; - // This hopefully shouldn't trigger, but this is a failsafe just in case so we dont bluespace them cats - args.Cancel(); - } + // [Dependency] private readonly StorageSystem _storageSystem = default!; + // [Dependency] private readonly ItemSystem _itemSystem = default!; + // [Dependency] private readonly DoAfterSystem _doAfter = default!; + // [Dependency] private readonly TagSystem _tagSystem = default!; + // + // [ValidatePrototypeId] + // private const string PreventTag = "PreventLabel"; + // + // public override void Initialize() + // { + // base.Initialize(); + // SubscribeLocalEvent>(AddInsertVerb); + // SubscribeLocalEvent>(AddInsertAltVerb); + // SubscribeLocalEvent(OnEntRemoved); + // SubscribeLocalEvent(OnGettingPickedUpAttempt); + // SubscribeLocalEvent(OnDropAttempt); + // SubscribeLocalEvent(OnDoAfter); + // SubscribeLocalEvent(OnInsertAttempt); + // } + // + // private void AddInsertVerb(EntityUid uid, PseudoItemComponent component, GetVerbsEvent args) + // { + // if (!args.CanInteract || !args.CanAccess) + // return; + // + // if (component.Active) + // return; + // + // if (!TryComp(args.Target, out var targetStorage)) + // return; + // + // if (component.Size > targetStorage.StorageCapacityMax - targetStorage.StorageUsed) + // return; + // + // if (Transform(args.Target).ParentUid == uid) + // return; + // + // InnateVerb verb = new() + // { + // Act = () => + // { + // TryInsert(args.Target, uid, component, targetStorage); + // }, + // Text = Loc.GetString("action-name-insert-self"), + // Priority = 2 + // }; + // args.Verbs.Add(verb); + // } + // + // private void AddInsertAltVerb(EntityUid uid, PseudoItemComponent component, GetVerbsEvent args) + // { + // if (!args.CanInteract || !args.CanAccess) + // return; + // + // if (args.User == args.Target) + // return; + // + // if (args.Hands == null) + // return; + // + // if (!TryComp(args.Hands.ActiveHandEntity, out var targetStorage)) + // return; + // + // AlternativeVerb verb = new() + // { + // Act = () => + // { + // StartInsertDoAfter(args.User, uid, args.Hands.ActiveHandEntity.Value, component); + // }, + // Text = Loc.GetString("action-name-insert-other", ("target", Identity.Entity(args.Target, EntityManager))), + // Priority = 2 + // }; + // args.Verbs.Add(verb); + // } + // + // private void OnEntRemoved(EntityUid uid, PseudoItemComponent component, EntGotRemovedFromContainerMessage args) + // { + // if (!component.Active) + // return; + // + // RemComp(uid); + // component.Active = false; + // } + // + // private void OnGettingPickedUpAttempt(EntityUid uid, PseudoItemComponent component, + // GettingPickedUpAttemptEvent args) + // { + // if (args.User == args.Item) + // return; + // + // Transform(uid).AttachToGridOrMap(); + // args.Cancel(); + // } + // + // private void OnDropAttempt(EntityUid uid, PseudoItemComponent component, DropAttemptEvent args) + // { + // if (component.Active) + // args.Cancel(); + // } + // + // private void OnDoAfter(EntityUid uid, PseudoItemComponent component, DoAfterEvent args) + // { + // if (args.Handled || args.Cancelled || args.Args.Used == null) + // return; + // + // args.Handled = TryInsert(args.Args.Used.Value, uid, component); + // } + // + // public bool TryInsert(EntityUid storageUid, EntityUid toInsert, PseudoItemComponent component, + // StorageComponent? storage = null) + // { + // if (!Resolve(storageUid, ref storage)) + // return false; + // + // if (component.Size > storage.StorageCapacityMax - storage.StorageUsed) + // return false; + // + // var item = EnsureComp(toInsert); + // _tagSystem.TryAddTag(toInsert, PreventTag); + // _itemSystem.SetSize(toInsert, component.Size, item); + // + // if (!_storageSystem.Insert(storageUid, toInsert, out _, null, storage)) + // { + // component.Active = false; + // RemComp(toInsert); + // return false; + // } + // + // component.Active = true; + // return true; + // } + // + // private void StartInsertDoAfter(EntityUid inserter, EntityUid toInsert, EntityUid storageEntity, + // PseudoItemComponent? pseudoItem = null) + // { + // if (!Resolve(toInsert, ref pseudoItem)) + // return; + // + // var ev = new PseudoItemInsertDoAfterEvent(); + // var args = new DoAfterArgs(EntityManager, inserter, 5f, ev, toInsert, toInsert, storageEntity) + // { + // BreakOnTargetMove = true, + // BreakOnUserMove = true, + // NeedHand = true + // }; + // + // _doAfter.TryStartDoAfter(args); + // } + // + // private void OnInsertAttempt(EntityUid uid, PseudoItemComponent component, + // ContainerGettingInsertedAttemptEvent args) + // { + // if (!component.Active) + // return; + // // This hopefully shouldn't trigger, but this is a failsafe just in case so we dont bluespace them cats + // args.Cancel(); + // } } diff --git a/Content.Server/Nyanotrasen/Kitchen/EntitySystems/DeepFryerSystem.cs b/Content.Server/Nyanotrasen/Kitchen/EntitySystems/DeepFryerSystem.cs index 9279c1a2b38..2816eb01e34 100644 --- a/Content.Server/Nyanotrasen/Kitchen/EntitySystems/DeepFryerSystem.cs +++ b/Content.Server/Nyanotrasen/Kitchen/EntitySystems/DeepFryerSystem.cs @@ -594,7 +594,7 @@ private void DeepFry(EntityUid uid, DeepFryerComponent component, EntityUid item // Determine how much solution to spend on this item. var solutionQuantity = FixedPoint2.Min( component.Solution.Volume, - itemComponent.Size * component.SolutionSizeCoefficient); + _random.Next(5,100)); if (component.Whitelist != null && component.Whitelist.IsValid(item, EntityManager) || beingEvent.TurnIntoFood) diff --git a/Content.Server/Nyanotrasen/Mail/MailSystem.cs b/Content.Server/Nyanotrasen/Mail/MailSystem.cs index 2516352c321..5f63e7f2223 100644 --- a/Content.Server/Nyanotrasen/Mail/MailSystem.cs +++ b/Content.Server/Nyanotrasen/Mail/MailSystem.cs @@ -36,6 +36,7 @@ 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.PDA; @@ -691,7 +692,6 @@ public void OpenMail(EntityUid uid, MailComponent? component = null, EntityUid? _handsSystem.PickupOrDrop(user, entity); } - _itemSystem.SetSize(uid, 1); _tagSystem.AddTag(uid, "Trash"); _tagSystem.AddTag(uid, "Recyclable"); component.IsEnabled = false; diff --git a/Content.Server/Stack/StackSystem.cs b/Content.Server/Stack/StackSystem.cs index f49e02ab9aa..001093a8dd4 100644 --- a/Content.Server/Stack/StackSystem.cs +++ b/Content.Server/Stack/StackSystem.cs @@ -1,10 +1,7 @@ -using Content.Server.Storage.EntitySystems; using Content.Shared.Popups; using Content.Shared.Stacks; -using Content.Shared.Storage; using Content.Shared.Verbs; using JetBrains.Annotations; -using Robust.Server.Containers; using Robust.Shared.Map; using Robust.Shared.Prototypes; @@ -17,8 +14,6 @@ namespace Content.Server.Stack [UsedImplicitly] public sealed class StackSystem : SharedStackSystem { - [Dependency] private readonly ContainerSystem _container = default!; - [Dependency] private readonly StorageSystem _storage = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!; public static readonly int[] DefaultSplitAmounts = { 1, 5, 10, 20, 30, 50 }; @@ -165,12 +160,6 @@ private void UserSplit(EntityUid uid, EntityUid userUid, int amount, if (Split(uid, amount, userTransform.Coordinates, stack) is not {} split) return; - if (_container.TryGetContainingContainer(uid, out var container) && - TryComp(container.Owner, out var storage)) - { - _storage.UpdateUI(container.Owner, storage); - } - Hands.PickupOrDrop(userUid, split); Popup.PopupCursor(Loc.GetString("comp-stack-split"), userUid); diff --git a/Content.Server/Station/Components/StationMemberComponent.cs b/Content.Server/Station/Components/StationMemberComponent.cs index 7213d2549e5..2100c20c55d 100644 --- a/Content.Server/Station/Components/StationMemberComponent.cs +++ b/Content.Server/Station/Components/StationMemberComponent.cs @@ -11,6 +11,6 @@ public sealed partial class StationMemberComponent : Component /// /// Station that this grid is a part of. /// - [ViewVariables] + [DataField] public EntityUid Station = EntityUid.Invalid; } diff --git a/Content.Server/Station/Systems/StationSystem.cs b/Content.Server/Station/Systems/StationSystem.cs index 65eabd81900..8f9e634c098 100644 --- a/Content.Server/Station/Systems/StationSystem.cs +++ b/Content.Server/Station/Systems/StationSystem.cs @@ -331,7 +331,7 @@ public void AddGridToStation(EntityUid station, EntityUid mapGrid, MapGridCompon if (!string.IsNullOrEmpty(name)) _metaData.SetEntityName(mapGrid, name); - var stationMember = AddComp(mapGrid); + var stationMember = EnsureComp(mapGrid); stationMember.Station = station; stationData.Grids.Add(mapGrid); diff --git a/Content.Server/Storage/Components/SecretStashComponent.cs b/Content.Server/Storage/Components/SecretStashComponent.cs index 60d0c829e90..a63cb074ad2 100644 --- a/Content.Server/Storage/Components/SecretStashComponent.cs +++ b/Content.Server/Storage/Components/SecretStashComponent.cs @@ -3,6 +3,7 @@ using Content.Shared.Item; using Content.Shared.Toilet; using Robust.Shared.Containers; +using Robust.Shared.Prototypes; namespace Content.Server.Storage.Components { @@ -19,7 +20,7 @@ public sealed partial class SecretStashComponent : Component /// Max item size that can be fitted into secret stash. /// [DataField("maxItemSize")] - public int MaxItemSize = (int) ReferenceSizes.Pocket; + public ProtoId MaxItemSize = "Small"; /// /// IC secret stash name. For example "the toilet cistern". diff --git a/Content.Server/Storage/EntitySystems/SecretStashSystem.cs b/Content.Server/Storage/EntitySystems/SecretStashSystem.cs index 81e8bd431ef..49be0a2f880 100644 --- a/Content.Server/Storage/EntitySystems/SecretStashSystem.cs +++ b/Content.Server/Storage/EntitySystems/SecretStashSystem.cs @@ -13,6 +13,7 @@ public sealed class SecretStashSystem : EntitySystem [Dependency] private readonly PopupSystem _popupSystem = default!; [Dependency] private readonly SharedHandsSystem _handsSystem = default!; [Dependency] private readonly SharedContainerSystem _containerSystem = default!; + [Dependency] private readonly SharedItemSystem _item = default!; public override void Initialize() { @@ -66,7 +67,7 @@ public bool TryHideItem(EntityUid uid, EntityUid userUid, EntityUid itemToHideUi } // check if item is too big to fit into secret stash - if (item.Size > component.MaxItemSize) + if (_item.GetSizePrototype(item.Size) > _item.GetSizePrototype(component.MaxItemSize)) { var msg = Loc.GetString("comp-secret-stash-action-hide-item-too-big", ("item", itemToHideUid), ("stash", GetSecretPartName(uid, component))); diff --git a/Content.Server/Storage/EntitySystems/StorageFillVisualizerSystem.cs b/Content.Server/Storage/EntitySystems/StorageFillVisualizerSystem.cs index ed48de2e450..01ed9a13dce 100644 --- a/Content.Server/Storage/EntitySystems/StorageFillVisualizerSystem.cs +++ b/Content.Server/Storage/EntitySystems/StorageFillVisualizerSystem.cs @@ -1,7 +1,6 @@ using Content.Shared.Rounding; using Content.Shared.Storage; using Content.Shared.Storage.Components; -using Robust.Server.GameObjects; using Robust.Shared.Containers; namespace Content.Server.Storage.EntitySystems; @@ -13,12 +12,12 @@ public sealed class StorageFillVisualizerSystem : EntitySystem public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnInit); + SubscribeLocalEvent(OnStartup); SubscribeLocalEvent(OnInserted); SubscribeLocalEvent(OnRemoved); } - private void OnInit(EntityUid uid, StorageFillVisualizerComponent component, ComponentInit args) + private void OnStartup(EntityUid uid, StorageFillVisualizerComponent component, ComponentStartup args) { UpdateAppearance(uid, component: component); } @@ -42,7 +41,13 @@ private void UpdateAppearance(EntityUid uid, StorageComponent? storage = null, A if (component.MaxFillLevels < 1) return; - var level = ContentHelpers.RoundToEqualLevels(storage.StorageUsed, storage.StorageCapacityMax, component.MaxFillLevels); + if (!_appearance.TryGetData(uid, StorageVisuals.StorageUsed, out var used, appearance)) + return; + + if (!_appearance.TryGetData(uid, StorageVisuals.Capacity, out var capacity, appearance)) + return; + + var level = ContentHelpers.RoundToEqualLevels(used, capacity, component.MaxFillLevels); _appearance.SetData(uid, StorageFillVisuals.FillLevel, level, appearance); } } diff --git a/Content.Server/Storage/EntitySystems/StorageSystem.Fill.cs b/Content.Server/Storage/EntitySystems/StorageSystem.Fill.cs index 902ab471f18..10278cc8051 100644 --- a/Content.Server/Storage/EntitySystems/StorageSystem.Fill.cs +++ b/Content.Server/Storage/EntitySystems/StorageSystem.Fill.cs @@ -1,5 +1,7 @@ +using System.Linq; using Content.Server.Spawners.Components; using Content.Server.Storage.Components; +using Content.Shared.Item; using Content.Shared.Prototypes; using Content.Shared.Storage; using Content.Shared.Storage.Components; @@ -15,15 +17,71 @@ private void OnStorageFillMapInit(EntityUid uid, StorageFillComponent component, if (component.Contents.Count == 0) return; - TryComp(uid, out var storageComp); - TryComp(uid, out var entityStorageComp); - - if (entityStorageComp == null && storageComp == null) + if (TryComp(uid, out var storageComp)) + { + FillStorage((uid, component, storageComp)); + } + else if (TryComp(uid, out var entityStorageComp)) + { + FillEntityStorage((uid, component, entityStorageComp)); + } + else { Log.Error($"StorageFillComponent couldn't find any StorageComponent ({uid})"); + } + } + + private void FillStorage(Entity entity) + { + var (uid, component, storage) = entity; + + if (!Resolve(uid, ref component, ref storage)) return; + + var coordinates = Transform(uid).Coordinates; + + var spawnItems = EntitySpawnCollection.GetSpawns(component.Contents, Random); + + var items = new List>(); + foreach (var spawnPrototype in spawnItems) + { + var ent = Spawn(spawnPrototype, coordinates); + + // No, you are not allowed to fill a container with entity spawners. + DebugTools.Assert(!_prototype.Index(spawnPrototype) + .HasComponent(typeof(RandomSpawnerComponent))); + + if (!TryComp(ent, out var itemComp)) + { + Log.Error($"Tried to fill {ToPrettyString(entity)} with non-item {spawnPrototype}."); + Del(ent); + continue; + } + + items.Add((ent, itemComp)); } + // we order the items from biggest to smallest to try and reduce poor placement in the grid. + var sortedItems = items + .OrderByDescending(x => ItemSystem.GetItemShape(x.Comp).GetArea()); + + foreach (var ent in sortedItems) + { + if (Insert(uid, ent, out _, out var reason, storageComp: storage, playSound: false)) + continue; + + Log.Error($"Tried to StorageFill {ToPrettyString(ent)} inside {ToPrettyString(uid)} but can't. reason: {reason}"); + Del(ent); + } + } + + private void FillEntityStorage(Entity entity) + { + var (uid, component, entityStorageComp) = entity; + + if (!Resolve(uid, ref component, ref entityStorageComp)) + return; + var coordinates = Transform(uid).Coordinates; var spawnItems = EntitySpawnCollection.GetSpawns(component.Contents, Random); @@ -32,17 +90,14 @@ private void OnStorageFillMapInit(EntityUid uid, StorageFillComponent component, // No, you are not allowed to fill a container with entity spawners. DebugTools.Assert(!_prototype.Index(item) .HasComponent(typeof(RandomSpawnerComponent))); - var ent = EntityManager.SpawnEntity(item, coordinates); + var ent = Spawn(item, coordinates); // handle depending on storage component, again this should be unified after ECS if (entityStorageComp != null && EntityStorage.Insert(ent, uid, entityStorageComp)) continue; - if (storageComp != null && Insert(uid, ent, out _, storageComp: storageComp, playSound: false)) - continue; - Log.Error($"Tried to StorageFill {item} inside {ToPrettyString(uid)} but can't."); - EntityManager.DeleteEntity(ent); + Del(ent); } } } diff --git a/Content.Server/Storage/EntitySystems/StorageSystem.cs b/Content.Server/Storage/EntitySystems/StorageSystem.cs index 49ebe99aeb7..3223cbf60c2 100644 --- a/Content.Server/Storage/EntitySystems/StorageSystem.cs +++ b/Content.Server/Storage/EntitySystems/StorageSystem.cs @@ -3,6 +3,8 @@ using Content.Shared.Explosion; using Content.Shared.Ghost; using Content.Shared.Hands; +using Content.Shared.Input; +using Content.Shared.Inventory; using Content.Shared.Lock; using Content.Shared.Storage; using Content.Shared.Storage.Components; @@ -10,6 +12,7 @@ using Content.Shared.Timing; using Content.Shared.Verbs; using Robust.Server.GameObjects; +using Robust.Shared.Input.Binding; using Robust.Shared.Map; using Robust.Shared.Player; using Robust.Shared.Prototypes; @@ -21,6 +24,7 @@ public sealed partial class StorageSystem : SharedStorageSystem { [Dependency] private readonly IAdminManager _admin = default!; [Dependency] private readonly IPrototypeManager _prototype = default!; + [Dependency] private readonly InventorySystem _inventory = default!; [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; public override void Initialize() @@ -31,6 +35,11 @@ public override void Initialize() SubscribeLocalEvent(OnExploded); SubscribeLocalEvent(OnStorageFillMapInit); + + CommandBinds.Builder + .Bind(ContentKeyFunctions.OpenBackpack, InputCmdHandler.FromDelegate(HandleOpenBackpack)) + .Bind(ContentKeyFunctions.OpenBelt, InputCmdHandler.FromDelegate(HandleOpenBelt)) + .Register(); } private void AddUiVerb(EntityUid uid, StorageComponent component, GetVerbsEvent args) @@ -92,7 +101,7 @@ private void OnBoundUIClosed(EntityUid uid, StorageComponent storageComp, BoundU if (!_uiSystem.IsUiOpen(uid, args.UiKey)) { storageComp.IsUiOpen = false; - UpdateStorageVisualization(uid, storageComp); + UpdateAppearance((uid, storageComp, null)); if (storageComp.StorageCloseSound is not null) Audio.PlayEntity(storageComp.StorageCloseSound, Filter.Pvs(uid, entityManager: EntityManager), uid, true, storageComp.StorageCloseSound.Params); @@ -110,7 +119,7 @@ private void OnExploded(Entity ent, ref BeforeExplodeEvent arg /// The entity to open the UI for public override void OpenStorageUI(EntityUid uid, EntityUid entity, StorageComponent? storageComp = null, bool silent = false) { - if (!Resolve(uid, ref storageComp) || !TryComp(entity, out ActorComponent? player)) + if (!Resolve(uid, ref storageComp, false) || !TryComp(entity, out ActorComponent? player)) return; // prevent spamming bag open / honkerton honk sound @@ -125,8 +134,10 @@ public override void OpenStorageUI(EntityUid uid, EntityUid entity, StorageCompo Log.Debug($"Storage (UID {uid}) \"used\" by player session (UID {player.PlayerSession.AttachedEntity})."); var bui = _uiSystem.GetUiOrNull(uid, StorageComponent.StorageUiKey.Key); - if (bui != null) - _uiSystem.OpenUi(bui, player.PlayerSession); + if (bui == null) + return; + _uiSystem.OpenUi(bui, player.PlayerSession); + _uiSystem.SendUiMessage(bui, new StorageModifyWindowMessage()); } /// @@ -162,4 +173,31 @@ public void CloseNestedInterfaces(EntityUid uid, ICommonSession session, Storage } } } + + private void HandleOpenBackpack(ICommonSession? session) + { + HandleOpenSlotUI(session, "back"); + } + + private void HandleOpenBelt(ICommonSession? session) + { + HandleOpenSlotUI(session, "belt"); + } + + private void HandleOpenSlotUI(ICommonSession? session, string slot) + { + if (session is not { } playerSession) + return; + + if (playerSession.AttachedEntity is not {Valid: true} playerEnt || !Exists(playerEnt)) + return; + + if (!_inventory.TryGetSlotEntity(playerEnt, slot, out var storageEnt)) + return; + + if (!ActionBlocker.CanInteract(playerEnt, storageEnt)) + return; + + OpenStorageUI(storageEnt.Value, playerEnt); + } } diff --git a/Content.Server/UserInterface/StatValuesCommand.cs b/Content.Server/UserInterface/StatValuesCommand.cs index fe2ee380fea..9ec38753d40 100644 --- a/Content.Server/UserInterface/StatValuesCommand.cs +++ b/Content.Server/UserInterface/StatValuesCommand.cs @@ -3,7 +3,9 @@ using Content.Server.Administration; using Content.Server.Cargo.Systems; using Content.Server.EUI; +using Content.Server.Item; using Content.Shared.Administration; +using Content.Shared.Item; using Content.Shared.Materials; using Content.Shared.Research.Prototypes; using Content.Shared.UserInterface; @@ -23,7 +25,7 @@ public sealed class StatValuesCommand : IConsoleCommand public string Command => "showvalues"; public string Description => Loc.GetString("stat-values-desc"); - public string Help => $"{Command} "; + public string Help => $"{Command} "; public void Execute(IConsoleShell shell, string argStr, string[] args) { if (shell.Player is not { } pSession) @@ -51,6 +53,9 @@ public void Execute(IConsoleShell shell, string argStr, string[] args) case "melee": message = GetMelee(); break; + case "itemsize": + message = GetItem(); + break; default: shell.WriteError(Loc.GetString("stat-values-invalid", ("arg", args[0]))); return; @@ -119,6 +124,50 @@ private StatValuesEuiMessage GetCargo() return state; } + private StatValuesEuiMessage GetItem() + { + var values = new List(); + var itemSystem = _entManager.System(); + var metaQuery = _entManager.GetEntityQuery(); + var itemQuery = _entManager.GetEntityQuery(); + var items = new HashSet(1024); + var ents = _entManager.GetEntities().ToArray(); + + foreach (var entity in ents) + { + if (!metaQuery.TryGetComponent(entity, out var meta)) + continue; + + var id = meta.EntityPrototype?.ID; + + // We'll add it even if we don't have it so we don't have to raise the event again because this is probably faster. + if (id == null || !items.Add(id)) + continue; + + if (!itemQuery.TryGetComponent(entity, out var itemComp)) + continue; + + values.Add(new[] + { + id, + $"{itemSystem.GetItemSizeLocale(itemComp.Size)}", + }); + } + + var state = new StatValuesEuiMessage + { + Title = Loc.GetString("stat-item-values"), + Headers = new List + { + Loc.GetString("stat-item-id"), + Loc.GetString("stat-item-price"), + }, + Values = values, + }; + + return state; + } + private StatValuesEuiMessage GetMelee() { var values = new List(); diff --git a/Content.Server/Weapons/Melee/EnergySword/EnergySwordSystem.cs b/Content.Server/Weapons/Melee/EnergySword/EnergySwordSystem.cs index ca2a367d9b4..a08ff17ec8c 100644 --- a/Content.Server/Weapons/Melee/EnergySword/EnergySwordSystem.cs +++ b/Content.Server/Weapons/Melee/EnergySword/EnergySwordSystem.cs @@ -100,7 +100,7 @@ private void TurnOff(EntityUid uid, EnergySwordComponent comp, ref EnergySwordDe { if (TryComp(uid, out ItemComponent? item)) { - _item.SetSize(uid, 5, item); + _item.SetSize(uid, "Small", item); } if (TryComp(uid, out var malus)) @@ -127,7 +127,7 @@ private void TurnOn(EntityUid uid, EnergySwordComponent comp, ref EnergySwordAct { if (TryComp(uid, out ItemComponent? item)) { - _item.SetSize(uid, 9999, item); + _item.SetSize(uid, "Huge", item); } if (comp.IsSharp) diff --git a/Content.Shared.Database/LogType.cs b/Content.Shared.Database/LogType.cs index b6580f2faf8..93a4dcc71cc 100644 --- a/Content.Shared.Database/LogType.cs +++ b/Content.Shared.Database/LogType.cs @@ -89,7 +89,7 @@ public enum LogType ItemConfigure = 84, DeviceLinking = 85, Tile = 86, - BagOfHolding = 420, //Nyano - Summary: adds bag of holding. + BagOfHolding = 420, //Nyano - Summary: adds bag of holding. Psionics = 421, //Nyano - Summary: ads psionic as a log type. /// diff --git a/Content.Shared/CCVar/CCVars.cs b/Content.Shared/CCVar/CCVars.cs index 7787b34476a..6e16d09d030 100644 --- a/Content.Shared/CCVar/CCVars.cs +++ b/Content.Shared/CCVar/CCVars.cs @@ -179,6 +179,19 @@ public static readonly CVarDef public static readonly CVarDef GameMap = CVarDef.Create("game.map", string.Empty, CVar.SERVERONLY); + /// + /// Controls whether to use world persistence or not. + /// + public static readonly CVarDef + UsePersistence = CVarDef.Create("game.usepersistence", false, CVar.ARCHIVE); + + /// + /// If world persistence is used, what map prototype should be initially loaded. + /// If the save file exists, it replaces MapPath but everything else stays the same (station name and such). + /// + public static readonly CVarDef + PersistenceMap = CVarDef.Create("game.persistencemap", "Empty", CVar.ARCHIVE); + /// /// Prototype to use for map pool. /// @@ -1700,6 +1713,22 @@ public static readonly CVarDef public static readonly CVarDef ToggleWalk = CVarDef.Create("control.toggle_walk", false, CVar.CLIENTONLY | CVar.ARCHIVE); + /* + * STORAGE + */ + + /// + /// Whether or not the storage UI is static and bound to the hotbar, or unbound and allowed to be dragged anywhere. + /// + public static readonly CVarDef StaticStorageUI = + CVarDef.Create("control.static_storage_ui", true, CVar.CLIENTONLY | CVar.ARCHIVE); + + /// + /// Whether or not the storage window uses a transparent or opaque sprite. + /// + public static readonly CVarDef OpaqueStorageWindow = + CVarDef.Create("control.opaque_storage_background", false, CVar.CLIENTONLY | CVar.ARCHIVE); + /* * UPDATE */ diff --git a/Content.Shared/ContainerHeld/ContainerHeldComponent.cs b/Content.Shared/ContainerHeld/ContainerHeldComponent.cs new file mode 100644 index 00000000000..cc6d2bf8722 --- /dev/null +++ b/Content.Shared/ContainerHeld/ContainerHeldComponent.cs @@ -0,0 +1,14 @@ +namespace Content.Shared.ContainerHeld; + +[RegisterComponent] +public sealed partial class ContainerHeldComponent: Component +{ + /// + /// The amount of weight needed to be in the container + /// in order for it to toggle it's appearance + /// to ToggleVisuals.Toggled = true, and + /// SetHeldPrefix() to "full" instead of "empty". + /// + [DataField("threshold")] + public int Threshold { get; private set; } = 1; +} diff --git a/Content.Shared/ContainerHeld/ContainerHeldSystem.cs b/Content.Shared/ContainerHeld/ContainerHeldSystem.cs new file mode 100644 index 00000000000..db8ad5e5e1c --- /dev/null +++ b/Content.Shared/ContainerHeld/ContainerHeldSystem.cs @@ -0,0 +1,43 @@ +using Robust.Shared.Containers; + +using Content.Shared.Item; +using Content.Shared.Storage; +using Content.Shared.Storage.EntitySystems; +using Content.Shared.Toggleable; + +namespace Content.Shared.ContainerHeld; + +public sealed class ContainerHeldSystem : EntitySystem +{ + [Dependency] private readonly SharedItemSystem _item = default!; + [Dependency] private readonly SharedAppearanceSystem _appearance = default!; + [Dependency] private readonly SharedStorageSystem _storage = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnContainerModified); + SubscribeLocalEvent(OnContainerModified); + } + + private void OnContainerModified(EntityUid uid, ContainerHeldComponent comp, ContainerModifiedMessage args) + { + if (!(TryComp(uid, out var storage) + && TryComp(uid, out var appearance) + && TryComp(uid, out var item))) + { + return; + } + if (_storage.GetCumulativeItemAreas(uid) >= comp.Threshold) + { + _item.SetHeldPrefix(uid, "full", item); + _appearance.SetData(uid, ToggleVisuals.Toggled, true, appearance); + } + else + { + _item.SetHeldPrefix(uid, "empty", item); + _appearance.SetData(uid, ToggleVisuals.Toggled, false, appearance); + } + } +} diff --git a/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs index ad27101cc14..b272cc182ef 100644 --- a/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs +++ b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs @@ -277,7 +277,7 @@ public bool CanInsert(EntityUid uid, EntityUid usedUid, EntityUid? user, ItemSlo /// Tries to insert item into a specific slot. /// /// False if failed to insert item - public bool TryInsert(EntityUid uid, string id, EntityUid item, EntityUid? user, ItemSlotsComponent? itemSlots = null) + public bool TryInsert(EntityUid uid, string id, EntityUid item, EntityUid? user, ItemSlotsComponent? itemSlots = null, bool excludeUserAudio = false) { if (!Resolve(uid, ref itemSlots)) return false; @@ -285,19 +285,19 @@ public bool TryInsert(EntityUid uid, string id, EntityUid item, EntityUid? user, if (!itemSlots.Slots.TryGetValue(id, out var slot)) return false; - return TryInsert(uid, slot, item, user); + return TryInsert(uid, slot, item, user, excludeUserAudio: excludeUserAudio); } /// /// Tries to insert item into a specific slot. /// /// False if failed to insert item - public bool TryInsert(EntityUid uid, ItemSlot slot, EntityUid item, EntityUid? user) + public bool TryInsert(EntityUid uid, ItemSlot slot, EntityUid item, EntityUid? user, bool excludeUserAudio = false) { if (!CanInsert(uid, item, user, slot)) return false; - Insert(uid, slot, item, user); + Insert(uid, slot, item, user, excludeUserAudio: excludeUserAudio); return true; } @@ -306,12 +306,12 @@ public bool TryInsert(EntityUid uid, ItemSlot slot, EntityUid item, EntityUid? u /// Does not check action blockers. /// /// False if failed to insert item - public bool TryInsertFromHand(EntityUid uid, ItemSlot slot, EntityUid user, HandsComponent? hands = null) + public bool TryInsertFromHand(EntityUid uid, ItemSlot slot, EntityUid user, HandsComponent? hands = null, bool excludeUserAudio = false) { if (!Resolve(user, ref hands, false)) return false; - if (hands.ActiveHand?.HeldEntity is not EntityUid held) + if (hands.ActiveHand?.HeldEntity is not { } held) return false; if (!CanInsert(uid, held, user, slot)) @@ -321,7 +321,7 @@ public bool TryInsertFromHand(EntityUid uid, ItemSlot slot, EntityUid user, Hand if (!_handsSystem.TryDrop(user, hands.ActiveHand)) return false; - Insert(uid, slot, held, user); + Insert(uid, slot, held, user, excludeUserAudio: excludeUserAudio); return true; } #endregion diff --git a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs index d474391f17f..15b07cb62f8 100644 --- a/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs +++ b/Content.Shared/Hands/EntitySystems/SharedHandsSystem.Drop.cs @@ -27,6 +27,20 @@ protected virtual void HandleEntityRemoved(EntityUid uid, HandsComponent hands, RaiseLocalEvent(uid, didUnequip); } + /// + /// Checks whether an entity can drop a given entity. Will return false if they are not holding the entity. + /// + public bool CanDrop(EntityUid uid, EntityUid entity, HandsComponent? handsComp = null, bool checkActionBlocker = true) + { + if (!Resolve(uid, ref handsComp)) + return false; + + if (!IsHolding(uid, entity, out var hand, handsComp)) + return false; + + return CanDropHeld(uid, hand, checkActionBlocker); + } + /// /// Checks if the contents of a hand is able to be removed from its container. /// diff --git a/Content.Shared/Input/ContentKeyFunctions.cs b/Content.Shared/Input/ContentKeyFunctions.cs index f4307cd058c..ee4a4e9023b 100644 --- a/Content.Shared/Input/ContentKeyFunctions.cs +++ b/Content.Shared/Input/ContentKeyFunctions.cs @@ -30,8 +30,12 @@ public static class ContentKeyFunctions public static readonly BoundKeyFunction OpenInventoryMenu = "OpenInventoryMenu"; public static readonly BoundKeyFunction SmartEquipBackpack = "SmartEquipBackpack"; public static readonly BoundKeyFunction SmartEquipBelt = "SmartEquipBelt"; + public static readonly BoundKeyFunction OpenBackpack = "OpenBackpack"; + public static readonly BoundKeyFunction OpenBelt = "OpenBelt"; public static readonly BoundKeyFunction OpenAHelp = "OpenAHelp"; public static readonly BoundKeyFunction SwapHands = "SwapHands"; + public static readonly BoundKeyFunction MoveStoredItem = "MoveStoredItem"; + public static readonly BoundKeyFunction RotateStoredItem = "RotateStoredItem"; public static readonly BoundKeyFunction ThrowItemInHand = "ThrowItemInHand"; public static readonly BoundKeyFunction TryPullObject = "TryPullObject"; public static readonly BoundKeyFunction MovePulledObject = "MovePulledObject"; diff --git a/Content.Shared/Interaction/SmartEquipSystem.cs b/Content.Shared/Interaction/SmartEquipSystem.cs new file mode 100644 index 00000000000..17c8f2e511f --- /dev/null +++ b/Content.Shared/Interaction/SmartEquipSystem.cs @@ -0,0 +1,215 @@ +using Content.Shared.ActionBlocker; +using Content.Shared.Containers.ItemSlots; +using Content.Shared.Hands.Components; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.Input; +using Content.Shared.Inventory; +using Content.Shared.Popups; +using Content.Shared.Storage; +using Content.Shared.Storage.EntitySystems; +using Robust.Shared.Containers; +using Robust.Shared.Input.Binding; +using Robust.Shared.Player; + +namespace Content.Shared.Interaction; + +/// +/// This handles smart equipping or inserting/ejecting from slots through keybinds--generally shift+E and shift+B +/// +public sealed class SmartEquipSystem : EntitySystem +{ + [Dependency] private readonly SharedHandsSystem _hands = default!; + [Dependency] private readonly SharedStorageSystem _storage = default!; + [Dependency] private readonly InventorySystem _inventory = default!; + [Dependency] private readonly ItemSlotsSystem _slots = default!; + [Dependency] private readonly SharedContainerSystem _container = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!; + + /// + public override void Initialize() + { + CommandBinds.Builder + .Bind(ContentKeyFunctions.SmartEquipBackpack, InputCmdHandler.FromDelegate(HandleSmartEquipBackpack, handle: false, outsidePrediction: false)) + .Bind(ContentKeyFunctions.SmartEquipBelt, InputCmdHandler.FromDelegate(HandleSmartEquipBelt, handle: false, outsidePrediction: false)) + .Register(); + } + + public override void Shutdown() + { + base.Shutdown(); + + CommandBinds.Unregister(); + } + + private void HandleSmartEquipBackpack(ICommonSession? session) + { + HandleSmartEquip(session, "back"); + } + + private void HandleSmartEquipBelt(ICommonSession? session) + { + HandleSmartEquip(session, "belt"); + } + + private void HandleSmartEquip(ICommonSession? session, string equipmentSlot) + { + if (session is not { } playerSession) + return; + + if (playerSession.AttachedEntity is not { Valid: true } uid || !Exists(uid)) + return; + + if (!_actionBlocker.CanInteract(uid, null)) + return; + + // early out if we don't have any hands or a valid inventory slot + if (!TryComp(uid, out var hands) || hands.ActiveHand == null) + return; + + if (!TryComp(uid, out var inventory) || !_inventory.HasSlot(uid, equipmentSlot, inventory)) + { + _popup.PopupClient(Loc.GetString("smart-equip-missing-equipment-slot", ("slotName", equipmentSlot)), uid, uid); + return; + } + + var handItem = hands.ActiveHand.HeldEntity; + + // early out if we have an item and cant drop it at all + if (handItem != null && !_hands.CanDropHeld(uid, hands.ActiveHand)) + { + _popup.PopupClient(Loc.GetString("smart-equip-cant-drop"), uid, uid); + return; + } + + // There are eight main cases we want to handle here, + // so let's write them out + + // if the slot we're trying to smart equip from: + // 1) doesn't have an item + // - with hand item: try to put it in the slot + // - without hand item: fail + // 2) has an item, and that item is a storage item + // - with hand item: try to put it in storage + // - without hand item: try to take the last stored item and put it in our hands + // 3) has an item, and that item is an item slots holder + // - with hand item: get the highest priority item slot with a valid whitelist and try to insert it + // - without hand item: get the highest priority item slot with an item and try to eject it + // 4) has an item, with no special storage components + // - with hand item: fail + // - without hand item: try to put the item into your hand + + _inventory.TryGetSlotEntity(uid, equipmentSlot, out var slotEntity); + var emptyEquipmentSlotString = Loc.GetString("smart-equip-empty-equipment-slot", ("slotName", equipmentSlot)); + + // case 1 (no slot item): + if (slotEntity is not { } slotItem) + { + if (handItem == null) + { + _popup.PopupClient(emptyEquipmentSlotString, uid, uid); + return; + } + + if (!_inventory.CanEquip(uid, handItem.Value, equipmentSlot, out var reason)) + { + _popup.PopupClient(Loc.GetString(reason), uid, uid); + return; + } + + _hands.TryDrop(uid, hands.ActiveHand, handsComp: hands); + _inventory.TryEquip(uid, handItem.Value, equipmentSlot, predicted: true); + return; + } + + // case 2 (storage item): + if (TryComp(slotItem, out var storage)) + { + switch (handItem) + { + case null when storage.Container.ContainedEntities.Count == 0: + _popup.PopupClient(emptyEquipmentSlotString, uid, uid); + return; + case null: + var removing = storage.Container.ContainedEntities[^1]; + _container.RemoveEntity(slotItem, removing); + _hands.TryPickup(uid, removing, handsComp: hands); + return; + } + + if (!_storage.CanInsert(slotItem, handItem.Value, out var reason)) + { + if (reason != null) + _popup.PopupClient(Loc.GetString(reason), uid, uid); + + return; + } + + _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); + + return; + } + + // case 3 (itemslot item): + if (TryComp(slotItem, out var slots)) + { + if (handItem == null) + { + ItemSlot? toEjectFrom = null; + + foreach (var slot in slots.Slots.Values) + { + if (slot.HasItem && slot.Priority > (toEjectFrom?.Priority ?? int.MinValue)) + toEjectFrom = slot; + } + + if (toEjectFrom == null) + { + _popup.PopupClient(emptyEquipmentSlotString, uid, uid); + return; + } + + _slots.TryEjectToHands(slotItem, toEjectFrom, uid, excludeUserAudio: true); + return; + } + + ItemSlot? toInsertTo = null; + + foreach (var slot in slots.Slots.Values) + { + if (!slot.HasItem + && (slot.Whitelist?.IsValid(handItem.Value, EntityManager) ?? true) + && slot.Priority > (toInsertTo?.Priority ?? int.MinValue)) + { + toInsertTo = slot; + } + } + + if (toInsertTo == null) + { + _popup.PopupClient(Loc.GetString("smart-equip-no-valid-item-slot-insert", ("item", handItem.Value)), uid, uid); + return; + } + + _slots.TryInsertFromHand(slotItem, toInsertTo, uid, hands, excludeUserAudio: true); + return; + } + + // case 4 (just an item): + if (handItem != null) + return; + + if (!_inventory.CanUnequip(uid, equipmentSlot, out var inventoryReason)) + { + _popup.PopupClient(Loc.GetString(inventoryReason), uid, uid); + return; + } + + _inventory.TryUnequip(uid, equipmentSlot, inventory: inventory, predicted: true); + _hands.TryPickup(uid, slotItem, handsComp: hands); + } +} diff --git a/Content.Shared/Inventory/InventorySystem.Equip.cs b/Content.Shared/Inventory/InventorySystem.Equip.cs index fd990d17e25..456c8373df5 100644 --- a/Content.Shared/Inventory/InventorySystem.Equip.cs +++ b/Content.Shared/Inventory/InventorySystem.Equip.cs @@ -34,6 +34,9 @@ public abstract partial class InventorySystem [Dependency] private readonly INetManager _netMan = default!; [Dependency] private readonly SharedTransformSystem _transform = default!; + [ValidatePrototypeId] + private const string PocketableItemSize = "Small"; + private void InitializeEquip() { //these events ensure that the client also gets its proper events raised when getting its containerstate updated @@ -255,7 +258,9 @@ public bool CanEquip(EntityUid actor, EntityUid target, EntityUid itemUid, strin if (slotDefinition.DependsOn != null && !TryGetSlotEntity(target, slotDefinition.DependsOn, out _, inventory)) return false; - var fittingInPocket = slotDefinition.SlotFlags.HasFlag(SlotFlags.POCKET) && item is { Size: <= (int) ReferenceSizes.Pocket }; + var fittingInPocket = slotDefinition.SlotFlags.HasFlag(SlotFlags.POCKET) && + item != null && + _item.GetSizePrototype(item.Size) <= _item.GetSizePrototype(PocketableItemSize); if (clothing == null && !fittingInPocket || clothing != null && !clothing.Slots.HasFlag(slotDefinition.SlotFlags) && !fittingInPocket) { diff --git a/Content.Shared/Item/ItemComponent.cs b/Content.Shared/Item/ItemComponent.cs index 7516f4faca3..1cb51b6ea06 100644 --- a/Content.Shared/Item/ItemComponent.cs +++ b/Content.Shared/Item/ItemComponent.cs @@ -1,6 +1,8 @@ using Content.Shared.Hands.Components; using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization; +using Robust.Shared.Utility; namespace Content.Shared.Item; @@ -13,18 +15,17 @@ namespace Content.Shared.Item; [Access(typeof(SharedItemSystem))] public sealed partial class ItemComponent : Component { - [ViewVariables(VVAccess.ReadWrite)] - [DataField("size")] - [Access(typeof(SharedItemSystem), Other = AccessPermissions.ReadExecute)] - public int Size = 5; + [DataField, ViewVariables(VVAccess.ReadWrite)] + [Access(typeof(SharedItemSystem))] + public ProtoId Size = "Small"; [Access(typeof(SharedItemSystem))] - [DataField("inhandVisuals")] + [DataField] public Dictionary> InhandVisuals = new(); [Access(typeof(SharedItemSystem))] [ViewVariables(VVAccess.ReadWrite)] - [DataField("heldPrefix")] + [DataField] public string? HeldPrefix; /// @@ -34,15 +35,34 @@ public sealed partial class ItemComponent : Component [ViewVariables(VVAccess.ReadWrite)] [DataField("sprite")] public string? RsiPath; + + /// + /// An optional override for the shape of the item within the grid storage. + /// If null, a default shape will be used based on . + /// + [DataField, AutoNetworkedField] + public List? Shape; + + /// + /// A sprite used to depict this entity specifically when it is displayed in the storage UI. + /// + [DataField, AutoNetworkedField] + public SpriteSpecifier? StoredSprite; + + /// + /// An additional angle offset, in degrees, applied to the visual depiction of the item when displayed in the storage UI. + /// + [DataField, AutoNetworkedField] + public float StoredRotation = 0; } [Serializable, NetSerializable] public sealed class ItemComponentState : ComponentState { - public int Size { get; } + public ProtoId Size { get; } public string? HeldPrefix { get; } - public ItemComponentState(int size, string? heldPrefix) + public ItemComponentState(ProtoId size, string? heldPrefix) { Size = size; HeldPrefix = heldPrefix; @@ -65,17 +85,3 @@ public VisualsChangedEvent(NetEntity item, string containerId) ContainerId = containerId; } } - -/// -/// Reference sizes for common containers and items. -/// -public enum ReferenceSizes -{ - Wallet = 4, - Pocket = 12, - Box = 24, - Belt = 30, - Toolbox = 60, - Backpack = 100, - NoStoring = 9999 -} diff --git a/Content.Shared/Item/ItemSizePrototype.cs b/Content.Shared/Item/ItemSizePrototype.cs new file mode 100644 index 00000000000..5b3d4d8f919 --- /dev/null +++ b/Content.Shared/Item/ItemSizePrototype.cs @@ -0,0 +1,59 @@ +using Robust.Shared.Prototypes; + +namespace Content.Shared.Item; + +/// +/// This is a prototype for a category of an item's size. +/// +[Prototype("itemSize")] +public sealed partial class ItemSizePrototype : IPrototype, IComparable +{ + /// + [IdDataField] + public string ID { get; } = default!; + + /// + /// The amount of space in a bag an item of this size takes. + /// + [DataField] + public readonly int Weight = 1; + + /// + /// A player-facing name used to describe this size. + /// + [DataField] + public readonly LocId Name; + + /// + /// The default inventory shape associated with this item size. + /// + [DataField(required: true)] + public IReadOnlyList DefaultShape = new List(); + + public int CompareTo(ItemSizePrototype? other) + { + if (other is not { } otherItemSize) + return 0; + return Weight.CompareTo(otherItemSize.Weight); + } + + public static bool operator <(ItemSizePrototype a, ItemSizePrototype b) + { + return a.Weight < b.Weight; + } + + public static bool operator >(ItemSizePrototype a, ItemSizePrototype b) + { + return a.Weight > b.Weight; + } + + public static bool operator <=(ItemSizePrototype a, ItemSizePrototype b) + { + return a.Weight <= b.Weight; + } + + public static bool operator >=(ItemSizePrototype a, ItemSizePrototype b) + { + return a.Weight >= b.Weight; + } +} diff --git a/Content.Shared/Item/ItemToggleComponent.cs b/Content.Shared/Item/ItemToggleComponent.cs index fda4d0904a6..eb25f259aea 100644 --- a/Content.Shared/Item/ItemToggleComponent.cs +++ b/Content.Shared/Item/ItemToggleComponent.cs @@ -1,5 +1,7 @@ +using Content.Shared.Item; using Robust.Shared.Audio; using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; namespace Content.Server.Weapons.Melee.ItemToggle; @@ -20,11 +22,11 @@ public sealed partial class ItemToggleComponent : Component [ViewVariables(VVAccess.ReadWrite)] [DataField("offSize")] - public int OffSize = 1; + public ProtoId OffSize = "Small"; [ViewVariables(VVAccess.ReadWrite)] [DataField("onSize")] - public int OnSize = 9999; + public ProtoId OnSize = "Huge"; } [ByRefEvent] diff --git a/Content.Shared/Item/SharedItemSystem.cs b/Content.Shared/Item/SharedItemSystem.cs index 5f890af99fd..c718b21e0ff 100644 --- a/Content.Shared/Item/SharedItemSystem.cs +++ b/Content.Shared/Item/SharedItemSystem.cs @@ -1,9 +1,9 @@ -using Content.Shared.CombatMode; using Content.Shared.Hands.EntitySystems; using Content.Shared.Interaction; -using Content.Shared.Stacks; using Content.Shared.Verbs; using Content.Shared.Examine; +using Content.Shared.Storage; +using JetBrains.Annotations; using Robust.Shared.Containers; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; @@ -15,7 +15,6 @@ public abstract class SharedItemSystem : EntitySystem { [Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] private readonly SharedHandsSystem _handsSystem = default!; - [Dependency] private readonly SharedCombatModeSystem _combatMode = default!; [Dependency] protected readonly SharedContainerSystem Container = default!; public override void Initialize() @@ -23,7 +22,6 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent>(AddPickupVerb); SubscribeLocalEvent(OnHandInteract, before: new []{typeof(SharedItemSystem)}); - SubscribeLocalEvent(OnStackCountChanged); SubscribeLocalEvent(OnGetState); SubscribeLocalEvent(OnHandleState); @@ -33,13 +31,13 @@ public override void Initialize() #region Public API - public void SetSize(EntityUid uid, int size, ItemComponent? component = null) + public void SetSize(EntityUid uid, ProtoId size, ItemComponent? component = null) { if (!Resolve(uid, ref component, false)) return; component.Size = size; - Dirty(component); + Dirty(uid, component); } public void SetHeldPrefix(EntityUid uid, string? heldPrefix, ItemComponent? component = null) @@ -51,7 +49,7 @@ public void SetHeldPrefix(EntityUid uid, string? heldPrefix, ItemComponent? comp return; component.HeldPrefix = heldPrefix; - Dirty(component); + Dirty(uid, component); VisualsChanged(uid); } @@ -67,7 +65,7 @@ public void CopyVisuals(EntityUid uid, ItemComponent otherItem, ItemComponent? i item.InhandVisuals = otherItem.InhandVisuals; item.HeldPrefix = otherItem.HeldPrefix; - Dirty(item); + Dirty(uid, item); VisualsChanged(uid); } @@ -81,18 +79,6 @@ private void OnHandInteract(EntityUid uid, ItemComponent component, InteractHand args.Handled = _handsSystem.TryPickup(args.User, uid, animateUser: false); } - protected virtual void OnStackCountChanged(EntityUid uid, ItemComponent component, StackCountChangedEvent args) - { - if (!TryComp(uid, out var stack)) - return; - - if (!_prototype.TryIndex(stack.StackTypeId, out var stackProto) || - stackProto.ItemSize is not { } size) - return; - - SetSize(uid, args.NewCount * size, component); - } - private void OnHandleState(EntityUid uid, ItemComponent component, ref ComponentHandleState args) { if (args.Current is not ItemComponentState state) @@ -135,7 +121,12 @@ private void AddPickupVerb(EntityUid uid, ItemComponent component, GetVerbsEvent private void OnExamine(EntityUid uid, ItemComponent component, ExaminedEvent args) { args.PushMarkup(Loc.GetString("item-component-on-examine-size", - ("size", component.Size))); + ("size", GetItemSizeLocale(component.Size)))); + } + + public ItemSizePrototype GetSizePrototype(ProtoId id) + { + return _prototype.Index(id); } /// @@ -148,4 +139,70 @@ private void OnExamine(EntityUid uid, ItemComponent component, ExaminedEvent arg public virtual void VisualsChanged(EntityUid owner) { } + + [PublicAPI] + public string GetItemSizeLocale(ProtoId size) + { + return Loc.GetString(GetSizePrototype(size).Name); + } + + [PublicAPI] + public int GetItemSizeWeight(ProtoId size) + { + return GetSizePrototype(size).Weight; + } + + /// + /// Gets the default shape of an item. + /// + public IReadOnlyList GetItemShape(Entity uid) + { + if (!Resolve(uid, ref uid.Comp)) + return new Box2i[] { }; + + return uid.Comp.Shape ?? GetSizePrototype(uid.Comp.Size).DefaultShape; + } + + /// + /// Gets the default shape of an item. + /// + public IReadOnlyList GetItemShape(ItemComponent component) + { + return component.Shape ?? GetSizePrototype(component.Size).DefaultShape; + } + + /// + /// Gets the shape of an item, adjusting for rotation and offset. + /// + public IReadOnlyList GetAdjustedItemShape(Entity entity, ItemStorageLocation location) + { + return GetAdjustedItemShape(entity, location.Rotation, location.Position); + } + + /// + /// Gets the shape of an item, adjusting for rotation and offset. + /// + public IReadOnlyList GetAdjustedItemShape(Entity entity, Angle rotation, Vector2i position) + { + if (!Resolve(entity, ref entity.Comp)) + return new Box2i[] { }; + + var shapes = GetItemShape(entity); + var boundingShape = shapes.GetBoundingBox(); + var boundingCenter = ((Box2) boundingShape).Center; + var matty = Matrix3.CreateTransform(boundingCenter, rotation); + var drift = boundingShape.BottomLeft - matty.TransformBox(boundingShape).BottomLeft; + + var adjustedShapes = new List(); + foreach (var shape in shapes) + { + var transformed = matty.TransformBox(shape).Translated(drift); + var floored = new Box2i(transformed.BottomLeft.Floored(), transformed.TopRight.Floored()); + var translated = floored.Translated(position); + + adjustedShapes.Add(translated); + } + + return adjustedShapes; + } } diff --git a/Content.Shared/Stacks/SharedStackSystem.cs b/Content.Shared/Stacks/SharedStackSystem.cs index d70dfc52f95..756c84cac55 100644 --- a/Content.Shared/Stacks/SharedStackSystem.cs +++ b/Content.Shared/Stacks/SharedStackSystem.cs @@ -329,6 +329,9 @@ public bool TryAdd(EntityUid insertEnt, EntityUid targetEnt, int count, StackCom if (!Resolve(insertEnt, ref insertStack) || !Resolve(targetEnt, ref targetStack)) return false; + if (insertStack.StackTypeId != targetStack.StackTypeId) + return false; + var available = GetAvailableSpace(targetStack); if (available <= 0) diff --git a/Content.Shared/Storage/EntitySystems/MagnetPickupSystem.cs b/Content.Shared/Storage/EntitySystems/MagnetPickupSystem.cs index b6f03f001b0..1703db25f3d 100644 --- a/Content.Shared/Storage/EntitySystems/MagnetPickupSystem.cs +++ b/Content.Shared/Storage/EntitySystems/MagnetPickupSystem.cs @@ -1,10 +1,7 @@ using Content.Server.Storage.Components; -using Content.Shared.Hands; using Content.Shared.Inventory; -using Content.Shared.Stacks; using Robust.Shared.Map; using Robust.Shared.Physics.Components; -using Robust.Shared.Player; using Robust.Shared.Timing; namespace Content.Shared.Storage.EntitySystems; @@ -55,16 +52,16 @@ public override void Update(float frameTime) comp.NextScan += ScanDelay; - // No space - if (storage.StorageUsed >= storage.StorageCapacityMax) - continue; - if (!_inventory.TryGetContainingSlot((uid, xform, meta), out var slotDef)) continue; if ((slotDef.SlotFlags & comp.SlotFlags) == 0x0) continue; + // No space + if (!_storage.HasSpace((uid, storage))) + continue; + var parentUid = xform.ParentUid; var playedSound = false; var finalCoords = xform.Coordinates; diff --git a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs index a58aff323af..aa49e5ef0ee 100644 --- a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs +++ b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs @@ -1,9 +1,9 @@ +using System.Diagnostics.CodeAnalysis; using System.Linq; using Content.Shared.ActionBlocker; using Content.Shared.Containers.ItemSlots; using Content.Shared.Destructible; using Content.Shared.DoAfter; -using Content.Shared.Hands; using Content.Shared.Hands.Components; using Content.Shared.Hands.EntitySystems; using Content.Shared.Implants.Components; @@ -17,36 +17,43 @@ using Content.Shared.Storage.Components; using Content.Shared.Timing; using Content.Shared.Verbs; -using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; using Robust.Shared.Containers; using Robust.Shared.Map; +using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Shared.Storage.EntitySystems; public abstract class SharedStorageSystem : EntitySystem { + [Dependency] private readonly IPrototypeManager _prototype = default!; [Dependency] protected readonly IRobustRandom Random = default!; [Dependency] private readonly SharedContainerSystem _containerSystem = default!; [Dependency] private readonly SharedDoAfterSystem _doAfterSystem = default!; [Dependency] private readonly EntityLookupSystem _entityLookupSystem = default!; [Dependency] protected readonly SharedEntityStorageSystem EntityStorage = default!; [Dependency] private readonly SharedInteractionSystem _interactionSystem = default!; + [Dependency] protected readonly SharedItemSystem ItemSystem = default!; [Dependency] private readonly SharedPopupSystem _popupSystem = default!; [Dependency] private readonly SharedHandsSystem _sharedHandsSystem = default!; - [Dependency] private readonly SharedInteractionSystem _sharedInteractionSystem = default!; - [Dependency] private readonly ActionBlockerSystem _actionBlockerSystem = default!; + [Dependency] protected readonly ActionBlockerSystem ActionBlocker = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] protected readonly SharedAudioSystem Audio = default!; - [Dependency] protected readonly SharedTransformSystem _transform = default!; + [Dependency] protected readonly SharedTransformSystem TransformSystem = default!; [Dependency] private readonly SharedStackSystem _stack = default!; + [Dependency] private readonly SharedUserInterfaceSystem _ui = default!; [Dependency] protected readonly UseDelaySystem UseDelay = default!; private EntityQuery _itemQuery; private EntityQuery _stackQuery; private EntityQuery _xformQuery; + [ValidatePrototypeId] + public const string DefaultStorageMaxItemSize = "Normal"; + + public bool CheckingCanInsert; + /// public override void Initialize() { @@ -63,43 +70,28 @@ public override void Initialize() SubscribeLocalEvent(OnImplantActivate); SubscribeLocalEvent(AfterInteract); SubscribeLocalEvent(OnDestroy); - SubscribeLocalEvent(OnInsertItemMessage); SubscribeLocalEvent(OnBoundUIOpen); + SubscribeLocalEvent(OnStackCountChanged); - SubscribeLocalEvent(OnStorageItemInserted); - SubscribeLocalEvent(OnStorageItemRemoved); + SubscribeLocalEvent(OnEntInserted); + SubscribeLocalEvent(OnEntRemoved); + SubscribeLocalEvent(OnInsertAttempt); SubscribeLocalEvent(OnDoAfter); - SubscribeLocalEvent(OnInteractWithItem); + SubscribeAllEvent(OnInteractWithItem); + SubscribeAllEvent(OnSetItemLocation); + SubscribeAllEvent(OnInsertItemIntoLocation); + SubscribeAllEvent(OnRemoveItem); } private void OnComponentInit(EntityUid uid, StorageComponent storageComp, ComponentInit args) { - // ReSharper disable once StringLiteralTypo - storageComp.Container = _containerSystem.EnsureContainer(uid, "storagebase"); - UpdateStorage(uid, storageComp); + storageComp.Container = _containerSystem.EnsureContainer(uid, StorageComponent.ContainerId); + UpdateAppearance((uid, storageComp, null)); } - /// - /// Updates the storage UI, visualizer, etc. - /// - /// - /// - private void UpdateStorage(EntityUid uid, StorageComponent component) - { - // TODO: I had this. - // We can get states being applied before the container is ready. - if (component.Container == default) - return; - - RecalculateStorageUsed(uid, component); - UpdateStorageVisualization(uid, component); - UpdateUI(uid, component); - Dirty(uid, component); - } - - public virtual void UpdateUI(EntityUid uid, StorageComponent component) {} + public virtual void UpdateUI(Entity entity) {} public virtual void OpenStorageUI(EntityUid uid, EntityUid entity, StorageComponent? storageComp = null, bool silent = false) { } @@ -115,7 +107,7 @@ private void AddTransferVerbs(EntityUid uid, StorageComponent component, GetVerb // if the target is storage, add a verb to transfer storage. if (TryComp(args.Target, out StorageComponent? targetStorage) - && (!TryComp(uid, out LockComponent? targetLock) || !targetLock.Locked)) + && (!TryComp(args.Target, out LockComponent? targetLock) || !targetLock.Locked)) { UtilityVerb verb = new() { @@ -137,15 +129,13 @@ private void OnInteractUsing(EntityUid uid, StorageComponent storageComp, Intera if (args.Handled || !storageComp.ClickInsert || TryComp(uid, out LockComponent? lockComponent) && lockComponent.Locked) return; - Log.Debug($"Storage (UID {uid}) attacked by user (UID {args.User}) with entity (UID {args.Used})."); - if (HasComp(uid)) return; PlayerInsertHeldEntity(uid, args.User, storageComp); // Always handle it, even if insertion fails. // We don't want to trigger any AfterInteract logic here. - // Example bug: placing wires if item doesn't fit in backpack. + // Example issue would be placing wires if item doesn't fit in backpack. args.Handled = true; } @@ -158,6 +148,7 @@ private void OnActivate(EntityUid uid, StorageComponent storageComp, ActivateInW return; OpenStorageUI(uid, args.User, storageComp); + args.Handled = true; } /// @@ -165,11 +156,11 @@ private void OnActivate(EntityUid uid, StorageComponent storageComp, ActivateInW /// private void OnImplantActivate(EntityUid uid, StorageComponent storageComp, OpenStorageImplantEvent args) { - // TODO: Make this an action or something. - if (args.Handled || !_xformQuery.TryGetComponent(uid, out var xform)) + if (args.Handled) return; - OpenStorageUI(uid, xform.ParentUid, storageComp); + OpenStorageUI(uid, args.Performer, storageComp); + args.Handled = true; } /// @@ -179,7 +170,7 @@ private void OnImplantActivate(EntityUid uid, StorageComponent storageComp, Open /// private void AfterInteract(EntityUid uid, StorageComponent storageComp, AfterInteractEvent args) { - if (!args.CanReach) + if (args.Handled || !args.CanReach) return; // Pick up all entities in a radius around the clicked location. @@ -212,6 +203,7 @@ private void AfterInteract(EntityUid uid, StorageComponent storageComp, AfterInt }; _doAfterSystem.TryStartDoAfter(doAfterArgs); + args.Handled = true; } return; @@ -230,17 +222,18 @@ private void AfterInteract(EntityUid uid, StorageComponent storageComp, AfterInt return; } - if (TryComp(uid, out var transformOwner) && TryComp(target, out var transformEnt)) + if (_xformQuery.TryGetComponent(uid, out var transformOwner) && TryComp(target, out var transformEnt)) { var parent = transformOwner.ParentUid; var position = EntityCoordinates.FromMap( parent.IsValid() ? parent : uid, - transformEnt.MapPosition, - _transform + TransformSystem.GetMapCoordinates(transformEnt), + TransformSystem ); - if (PlayerInsertEntityInWorld(uid, args.User, target, storageComp)) + args.Handled = true; + if (PlayerInsertEntityInWorld((uid, storageComp), args.User, target)) { RaiseNetworkEvent(new AnimateInsertingEntitiesEvent(GetNetEntity(uid), new List { GetNetEntity(target) }, @@ -256,6 +249,7 @@ private void OnDoAfter(EntityUid uid, StorageComponent component, AreaPickupDoAf if (args.Handled || args.Cancelled) return; + args.Handled = true; var successfullyInserted = new List(); var successfullyInsertedPositions = new List(); var successfullyInsertedAngles = new List(); @@ -280,13 +274,13 @@ private void OnDoAfter(EntityUid uid, StorageComponent component, AreaPickupDoAf var position = EntityCoordinates.FromMap( xform.ParentUid.IsValid() ? xform.ParentUid : uid, - new MapCoordinates(_transform.GetWorldPosition(targetXform), targetXform.MapID), - _transform + new MapCoordinates(TransformSystem.GetWorldPosition(targetXform), targetXform.MapID), + TransformSystem ); var angle = targetXform.LocalRotation; - if (PlayerInsertEntityInWorld(uid, args.Args.User, entity, component)) + if (PlayerInsertEntityInWorld((uid, component), args.Args.User, entity)) { successfullyInserted.Add(entity); successfullyInsertedPositions.Add(position); @@ -294,7 +288,7 @@ private void OnDoAfter(EntityUid uid, StorageComponent component, AreaPickupDoAf } } - // If we picked up atleast one thing, play a sound and do a cool animation! + // If we picked up at least one thing, play a sound and do a cool animation! if (successfullyInserted.Count > 0) { Audio.PlayPvs(component.StorageInsertSound, uid); @@ -310,7 +304,7 @@ private void OnDoAfter(EntityUid uid, StorageComponent component, AreaPickupDoAf private void OnDestroy(EntityUid uid, StorageComponent storageComp, DestructionEventArgs args) { - var coordinates = _transform.GetMoverCoordinates(uid); + var coordinates = TransformSystem.GetMoverCoordinates(uid); // Being destroyed so need to recalculate. _containerSystem.EmptyContainer(storageComp.Container, destination: coordinates); @@ -321,20 +315,28 @@ private void OnDestroy(EntityUid uid, StorageComponent storageComp, DestructionE /// item in the user's hand if it is currently empty, or interact with the item using the user's currently /// held item. /// - private void OnInteractWithItem(EntityUid uid, StorageComponent storageComp, StorageInteractWithItemEvent args) + private void OnInteractWithItem(StorageInteractWithItemEvent msg, EntitySessionEventArgs args) { - if (args.Session.AttachedEntity is not EntityUid player) + if (args.SenderSession.AttachedEntity is not { } player) return; - var entity = GetEntity(args.InteractedItemUID); + var uid = GetEntity(msg.StorageUid); + var entity = GetEntity(msg.InteractedItemUid); + + if (!TryComp(uid, out var storageComp)) + return; + + if (!_ui.TryGetUi(uid, StorageComponent.StorageUiKey.Key, out var bui) || + !bui.SubscribedSessions.Contains(args.SenderSession)) + return; if (!Exists(entity)) { - Log.Error($"Player {args.Session} interacted with non-existent item {args.InteractedItemUID} stored in {ToPrettyString(uid)}"); + Log.Error($"Player {args.SenderSession} interacted with non-existent item {msg.InteractedItemUid} stored in {ToPrettyString(uid)}"); return; } - if (!_actionBlockerSystem.CanInteract(player, entity) || !storageComp.Container.Contains(entity)) + if (!ActionBlocker.CanInteract(player, entity) || !storageComp.Container.Contains(entity)) return; // Does the player have hands? @@ -356,68 +358,170 @@ private void OnInteractWithItem(EntityUid uid, StorageComponent storageComp, Sto _interactionSystem.InteractUsing(player, hands.ActiveHandEntity.Value, entity, Transform(entity).Coordinates, checkCanInteract: false); } - private void OnInsertItemMessage(EntityUid uid, StorageComponent storageComp, StorageComponent.StorageInsertItemMessage args) + private void OnSetItemLocation(StorageSetItemLocationEvent msg, EntitySessionEventArgs args) { - if (args.Session.AttachedEntity == null) + if (args.SenderSession.AttachedEntity is not { } player) + return; + + var storageEnt = GetEntity(msg.StorageEnt); + var itemEnt = GetEntity(msg.ItemEnt); + + if (!TryComp(storageEnt, out var storageComp)) + return; + + if (!_ui.TryGetUi(storageEnt, StorageComponent.StorageUiKey.Key, out var bui) || + !bui.SubscribedSessions.Contains(args.SenderSession)) + return; + + if (!Exists(itemEnt)) + { + Log.Error($"Player {args.SenderSession} set location of non-existent item {msg.ItemEnt} stored in {ToPrettyString(storageEnt)}"); + return; + } + + if (!ActionBlocker.CanInteract(player, itemEnt)) return; - PlayerInsertHeldEntity(uid, args.Session.AttachedEntity.Value, storageComp); + TrySetItemStorageLocation((itemEnt, null), (storageEnt, storageComp), msg.Location); } - private void OnBoundUIOpen(EntityUid uid, StorageComponent storageComp, BoundUIOpenedEvent args) + private void OnRemoveItem(StorageRemoveItemEvent msg, EntitySessionEventArgs args) { - if (!storageComp.IsUiOpen) + if (args.SenderSession.AttachedEntity is not { } player) + return; + + var storageEnt = GetEntity(msg.StorageEnt); + var itemEnt = GetEntity(msg.ItemEnt); + + if (!TryComp(storageEnt, out var storageComp)) + return; + + if (!_ui.TryGetUi(storageEnt, StorageComponent.StorageUiKey.Key, out var bui) || + !bui.SubscribedSessions.Contains(args.SenderSession)) + return; + + if (!Exists(itemEnt)) { - storageComp.IsUiOpen = true; - UpdateStorageVisualization(uid, storageComp); + Log.Error($"Player {args.SenderSession} set location of non-existent item {msg.ItemEnt} stored in {ToPrettyString(storageEnt)}"); + return; } + + if (!ActionBlocker.CanInteract(player, itemEnt)) + return; + + TransformSystem.DropNextTo(itemEnt, player); + Audio.PlayPredicted(storageComp.StorageRemoveSound, storageEnt, player); } - private void OnStorageItemInserted(EntityUid uid, StorageComponent component, EntInsertedIntoContainerMessage args) + private void OnInsertItemIntoLocation(StorageInsertItemIntoLocationEvent msg, EntitySessionEventArgs args) { - UpdateStorage(uid, component); + if (args.SenderSession.AttachedEntity is not { } player) + return; + + var storageEnt = GetEntity(msg.StorageEnt); + var itemEnt = GetEntity(msg.ItemEnt); + + if (!TryComp(storageEnt, out var storageComp)) + return; + + if (!_ui.TryGetUi(storageEnt, StorageComponent.StorageUiKey.Key, out var bui) || + !bui.SubscribedSessions.Contains(args.SenderSession)) + return; + + if (!Exists(itemEnt)) + { + Log.Error($"Player {args.SenderSession} set location of non-existent item {msg.ItemEnt} stored in {ToPrettyString(storageEnt)}"); + return; + } + + if (!ActionBlocker.CanInteract(player, itemEnt) || !_sharedHandsSystem.IsHolding(player, itemEnt, out _)) + return; + + InsertAt((storageEnt, storageComp), (itemEnt, null), msg.Location, out _, player, stackAutomatically: false); } - private void OnStorageItemRemoved(EntityUid uid, StorageComponent storageComp, EntRemovedFromContainerMessage args) + private void OnBoundUIOpen(EntityUid uid, StorageComponent storageComp, BoundUIOpenedEvent args) { - UpdateStorage(uid, storageComp); + if (!storageComp.IsUiOpen) + { + storageComp.IsUiOpen = true; + UpdateAppearance((uid, storageComp, null)); + } } - protected void UpdateStorageVisualization(EntityUid uid, StorageComponent storageComp) + private void OnEntInserted(Entity entity, ref EntInsertedIntoContainerMessage args) { - if (!TryComp(uid, out var appearance)) + // ReSharper disable once ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract + if (entity.Comp.Container == null) return; - _appearance.SetData(uid, StorageVisuals.Open, storageComp.IsUiOpen, appearance); - _appearance.SetData(uid, SharedBagOpenVisuals.BagState, storageComp.IsUiOpen ? SharedBagState.Open : SharedBagState.Closed); + if (args.Container.ID != StorageComponent.ContainerId) + return; + + if (!entity.Comp.StoredItems.ContainsKey(GetNetEntity(args.Entity))) + { + if (!TryGetAvailableGridSpace((entity.Owner, entity.Comp), (args.Entity, null), out var location)) + { + _containerSystem.Remove(args.Entity, args.Container, force: true); + return; + } + + entity.Comp.StoredItems[GetNetEntity(args.Entity)] = location.Value; + Dirty(entity, entity.Comp); + } - if (HasComp(uid)) - _appearance.SetData(uid, StackVisuals.Hide, !storageComp.IsUiOpen); + UpdateAppearance((entity, entity.Comp, null)); + UpdateUI((entity, entity.Comp)); } - public void RecalculateStorageUsed(EntityUid uid, StorageComponent storageComp) + private void OnEntRemoved(Entity entity, ref EntRemovedFromContainerMessage args) { - storageComp.StorageUsed = 0; + // ReSharper disable once ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract + if (entity.Comp.Container == null) + return; - foreach (var entity in storageComp.Container.ContainedEntities) - { - if (!_itemQuery.TryGetComponent(entity, out var itemComp)) - continue; + if (args.Container.ID != StorageComponent.ContainerId) + return; - var size = itemComp.Size; - storageComp.StorageUsed += size; - } + entity.Comp.StoredItems.Remove(GetNetEntity(args.Entity)); + Dirty(entity, entity.Comp); - _appearance.SetData(uid, StorageVisuals.StorageUsed, storageComp.StorageUsed); - _appearance.SetData(uid, StorageVisuals.Capacity, storageComp.StorageCapacityMax); + UpdateAppearance((entity, entity.Comp, null)); + UpdateUI((entity, entity.Comp)); } - public int GetAvailableSpace(EntityUid uid, StorageComponent? component = null) + private void OnInsertAttempt(EntityUid uid, StorageComponent component, ContainerIsInsertingAttemptEvent args) { - if (!Resolve(uid, ref component)) - return 0; + if (args.Cancelled || args.Container.ID != StorageComponent.ContainerId) + return; + + // don't run cyclical CanInsert() loops + if (CheckingCanInsert) + return; - return component.StorageCapacityMax - component.StorageUsed; + if (!CanInsert(uid, args.EntityUid, out _, component, ignoreStacks: true)) + args.Cancel(); + } + + public void UpdateAppearance(Entity entity) + { + // TODO STORAGE remove appearance data and just use the data on the component. + var (uid, storage, appearance) = entity; + if (!Resolve(uid, ref storage, ref appearance, false)) + return; + + // ReSharper disable once ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract + if (storage.Container == null) + return; // component hasn't yet been initialized. + + var capacity = storage.Grid.GetArea(); + var used = GetCumulativeItemAreas((uid, storage)); + + _appearance.SetData(uid, StorageVisuals.StorageUsed, used, appearance); + _appearance.SetData(uid, StorageVisuals.Capacity, capacity, appearance); + _appearance.SetData(uid, StorageVisuals.Open, storage.IsUiOpen, appearance); + _appearance.SetData(uid, SharedBagOpenVisuals.BagState, storage.IsUiOpen ? SharedBagState.Open : SharedBagState.Closed, appearance); + _appearance.SetData(uid, StackVisuals.Hide, !storage.IsUiOpen, appearance); } /// @@ -453,17 +557,29 @@ public void TransferEntities(EntityUid source, EntityUid target, EntityUid? user /// Verifies if an entity can be stored and if it fits /// /// The entity to check + /// /// If returning false, the reason displayed to the player + /// + /// + /// + /// /// true if it can be inserted, false otherwise - public bool CanInsert(EntityUid uid, EntityUid insertEnt, out string? reason, StorageComponent? storageComp = null) + public bool CanInsert( + EntityUid uid, + EntityUid insertEnt, + out string? reason, + StorageComponent? storageComp = null, + ItemComponent? item = null, + bool ignoreStacks = false, + bool ignoreLocation = false) { - if (!Resolve(uid, ref storageComp)) + if (!Resolve(uid, ref storageComp) || !Resolve(insertEnt, ref item, false)) { reason = null; return false; } - if (TryComp(insertEnt, out TransformComponent? transformComp) && transformComp.Anchored) + if (Transform(insertEnt).Anchored) { reason = "comp-storage-anchored-failure"; return false; @@ -481,33 +597,126 @@ public bool CanInsert(EntityUid uid, EntityUid insertEnt, out string? reason, St return false; } - if (TryComp(insertEnt, out StorageComponent? storage) && - storage.StorageCapacityMax >= storageComp.StorageCapacityMax) + if (!ignoreStacks + && _stackQuery.TryGetComponent(insertEnt, out var stack) + && HasSpaceInStacks((uid, storageComp), stack.StackTypeId)) + { + reason = null; + return true; + } + + var maxSize = ItemSystem.GetSizePrototype(GetMaxItemSize((uid, storageComp))); + if (ItemSystem.GetSizePrototype(item.Size) > maxSize) { - reason = "comp-storage-insufficient-capacity"; + reason = "comp-storage-too-big"; return false; } - if (TryComp(insertEnt, out ItemComponent? itemComp) && - itemComp.Size > storageComp.StorageCapacityMax - storageComp.StorageUsed) + if (TryComp(insertEnt, out var insertStorage) + && ItemSystem.GetSizePrototype(GetMaxItemSize((insertEnt, insertStorage))) >= maxSize) { - reason = "comp-storage-insufficient-capacity"; + reason = "comp-storage-too-big"; return false; } + if (!ignoreLocation && !storageComp.StoredItems.ContainsKey(GetNetEntity(insertEnt))) + { + if (!TryGetAvailableGridSpace((uid, storageComp), (insertEnt, item), out _)) + { + reason = "comp-storage-insufficient-capacity"; + return false; + } + } + + CheckingCanInsert = true; + if (!_containerSystem.CanInsert(insertEnt, storageComp.Container)) + { + CheckingCanInsert = false; + reason = null; + return false; + } + CheckingCanInsert = false; + reason = null; return true; } + /// + /// Inserts into the storage container at a given location + /// + /// true if the entity was inserted, false otherwise. This will also return true if a stack was partially + /// inserted. + public bool InsertAt( + Entity uid, + Entity insertEnt, + ItemStorageLocation location, + out EntityUid? stackedEntity, + EntityUid? user = null, + bool playSound = true, + bool stackAutomatically = true) + { + stackedEntity = null; + if (!Resolve(uid, ref uid.Comp)) + return false; + + if (!ItemFitsInGridLocation(insertEnt, uid, location)) + return false; + + uid.Comp.StoredItems[GetNetEntity(insertEnt)] = location; + Dirty(uid, uid.Comp); + + if (Insert(uid, + insertEnt, + out stackedEntity, + out _, + user: user, + storageComp: uid.Comp, + playSound: playSound, + stackAutomatically: stackAutomatically)) + { + return true; + } + + uid.Comp.StoredItems.Remove(GetNetEntity(insertEnt)); + return false; + } + + /// + /// Inserts into the storage container + /// + /// true if the entity was inserted, false otherwise. This will also return true if a stack was partially + /// inserted. + public bool Insert( + EntityUid uid, + EntityUid insertEnt, + out EntityUid? stackedEntity, + EntityUid? user = null, + StorageComponent? storageComp = null, + bool playSound = true, + bool stackAutomatically = true) + { + return Insert(uid, insertEnt, out stackedEntity, out _, user: user, storageComp: storageComp, playSound: playSound, stackAutomatically: stackAutomatically); + } + /// /// Inserts into the storage container /// - /// true if the entity was inserted, false otherwise - public bool Insert(EntityUid uid, EntityUid insertEnt, out EntityUid? stackedEntity, EntityUid? user = null, StorageComponent? storageComp = null, bool playSound = true) + /// true if the entity was inserted, false otherwise. This will also return true if a stack was partially + /// inserted + public bool Insert( + EntityUid uid, + EntityUid insertEnt, + out EntityUid? stackedEntity, + out string? reason, + EntityUid? user = null, + StorageComponent? storageComp = null, + bool playSound = true, + bool stackAutomatically = true) { stackedEntity = null; + reason = null; - if (!Resolve(uid, ref storageComp) || !CanInsert(uid, insertEnt, out _, storageComp)) + if (!Resolve(uid, ref storageComp)) return false; /* @@ -519,51 +728,42 @@ public bool Insert(EntityUid uid, EntityUid insertEnt, out EntityUid? stackedEnt * For now we just treat items as always being the same size regardless of stack count. */ - // If it's stackable then prefer to stack it - if (_stackQuery.TryGetComponent(insertEnt, out var insertStack)) + if (!stackAutomatically || !_stackQuery.TryGetComponent(insertEnt, out var insertStack)) { - var toInsertCount = insertStack.Count; + if (!_containerSystem.Insert(insertEnt, storageComp.Container)) + return false; - foreach (var ent in storageComp.Container.ContainedEntities) - { - if (!_stackQuery.TryGetComponent(ent, out var containedStack) || !insertStack.StackTypeId.Equals(containedStack.StackTypeId)) - continue; + if (playSound) + Audio.PlayPredicted(storageComp.StorageInsertSound, uid, user); - if (!_stack.TryAdd(insertEnt, ent, insertStack, containedStack)) - continue; + return true; + } - stackedEntity = ent; - var remaining = insertStack.Count; - toInsertCount -= toInsertCount - remaining; + var toInsertCount = insertStack.Count; - if (remaining > 0) - continue; + foreach (var ent in storageComp.Container.ContainedEntities) + { + if (!_stackQuery.TryGetComponent(ent, out var containedStack)) + continue; - break; - } + if (!_stack.TryAdd(insertEnt, ent, insertStack, containedStack)) + continue; - // Still stackable remaining - if (insertStack.Count > 0) - { - // Try to insert it as a new stack. - if (TryComp(insertEnt, out ItemComponent? itemComp) && - itemComp.Size > storageComp.StorageCapacityMax - storageComp.StorageUsed || - !storageComp.Container.Insert(insertEnt)) - { - // If we also didn't do any stack fills above then just end - // otherwise play sound and update UI anyway. - if (toInsertCount == insertStack.Count) - return false; - } - } + stackedEntity = ent; + if (insertStack.Count == 0) + break; } - // Non-stackable but no insertion for reasons. - else if (!storageComp.Container.Insert(insertEnt)) + + // Still stackable remaining + if (insertStack.Count > 0 + && !_containerSystem.Insert(insertEnt, storageComp.Container) + && toInsertCount == insertStack.Count) { + // Failed to insert anything. return false; } - if (playSound && storageComp.StorageInsertSound is not null) + if (playSound) Audio.PlayPredicted(storageComp.StorageInsertSound, uid, user); return true; @@ -572,7 +772,9 @@ public bool Insert(EntityUid uid, EntityUid insertEnt, out EntityUid? stackedEnt /// /// Inserts an entity into storage from the player's active hand /// + /// /// The player to insert an entity from + /// /// true if inserted, false otherwise public bool PlayerInsertHeldEntity(EntityUid uid, EntityUid player, StorageComponent? storageComp = null) { @@ -587,27 +789,29 @@ public bool PlayerInsertHeldEntity(EntityUid uid, EntityUid player, StorageCompo return false; } - if (!_sharedHandsSystem.TryDrop(player, toInsert.Value, handsComp: hands)) + if (!_sharedHandsSystem.CanDrop(player, toInsert.Value, hands)) { _popupSystem.PopupClient(Loc.GetString("comp-storage-cant-drop", ("entity", toInsert.Value)), uid, player); return false; } - return PlayerInsertEntityInWorld(uid, player, toInsert.Value, storageComp); + return PlayerInsertEntityInWorld((uid, storageComp), player, toInsert.Value); } /// /// Inserts an Entity () in the world into storage, informing if it fails. - /// is *NOT* held, see . + /// is *NOT* held, see . /// + /// /// The player to insert an entity with + /// /// true if inserted, false otherwise - public bool PlayerInsertEntityInWorld(EntityUid uid, EntityUid player, EntityUid toInsert, StorageComponent? storageComp = null) + public bool PlayerInsertEntityInWorld(Entity uid, EntityUid player, EntityUid toInsert) { - if (!Resolve(uid, ref storageComp) || !_sharedInteractionSystem.InRangeUnobstructed(player, uid)) + if (!Resolve(uid, ref uid.Comp) || !_interactionSystem.InRangeUnobstructed(player, uid)) return false; - if (!Insert(uid, toInsert, out _, user: player, storageComp)) + if (!Insert(uid, toInsert, out _, user: player, uid.Comp)) { _popupSystem.PopupClient(Loc.GetString("comp-storage-cant-insert"), uid, player); return false; @@ -615,6 +819,231 @@ public bool PlayerInsertEntityInWorld(EntityUid uid, EntityUid player, EntityUid return true; } + /// + /// Attempts to set the location of an item already inside of a storage container. + /// + public bool TrySetItemStorageLocation(Entity itemEnt, Entity storageEnt, ItemStorageLocation location) + { + if (!Resolve(itemEnt, ref itemEnt.Comp) || !Resolve(storageEnt, ref storageEnt.Comp)) + return false; + + if (!storageEnt.Comp.Container.ContainedEntities.Contains(itemEnt)) + return false; + + if (!ItemFitsInGridLocation(itemEnt, storageEnt, location.Position, location.Rotation)) + return false; + + storageEnt.Comp.StoredItems[GetNetEntity(itemEnt)] = location; + Dirty(storageEnt, storageEnt.Comp); + return true; + } + + /// + /// Tries to find the first available spot on a storage grid. + /// starts at the top-left and goes right and down. + /// + public bool TryGetAvailableGridSpace( + Entity storageEnt, + Entity itemEnt, + [NotNullWhen(true)] out ItemStorageLocation? storageLocation) + { + storageLocation = null; + + if (!Resolve(storageEnt, ref storageEnt.Comp) || !Resolve(itemEnt, ref itemEnt.Comp)) + return false; + + var storageBounding = storageEnt.Comp.Grid.GetBoundingBox(); + + for (var y = storageBounding.Bottom; y <= storageBounding.Top; y++) + { + for (var x = storageBounding.Left; x <= storageBounding.Right; x++) + { + for (var angle = Angle.FromDegrees(-itemEnt.Comp.StoredRotation); angle <= Angle.FromDegrees(360 - itemEnt.Comp.StoredRotation); angle += Math.PI / 2f) + { + var location = new ItemStorageLocation(angle, (x, y)); + if (ItemFitsInGridLocation(itemEnt, storageEnt, location)) + { + storageLocation = location; + return true; + } + } + } + } + + return false; + } + + /// + /// Checks if an item fits into a specific spot on a storage grid. + /// + public bool ItemFitsInGridLocation( + Entity itemEnt, + Entity storageEnt, + ItemStorageLocation location) + { + return ItemFitsInGridLocation(itemEnt, storageEnt, location.Position, location.Rotation); + } + + /// + /// Checks if an item fits into a specific spot on a storage grid. + /// + public bool ItemFitsInGridLocation( + Entity itemEnt, + Entity storageEnt, + Vector2i position, + Angle rotation) + { + if (!Resolve(itemEnt, ref itemEnt.Comp) || !Resolve(storageEnt, ref storageEnt.Comp)) + return false; + + var gridBounds = storageEnt.Comp.Grid.GetBoundingBox(); + if (!gridBounds.Contains(position)) + return false; + + var itemShape = ItemSystem.GetAdjustedItemShape(itemEnt, rotation, position); + + foreach (var box in itemShape) + { + for (var offsetY = box.Bottom; offsetY <= box.Top; offsetY++) + { + for (var offsetX = box.Left; offsetX <= box.Right; offsetX++) + { + var pos = (offsetX, offsetY); + + if (!IsGridSpaceEmpty(itemEnt, storageEnt, pos)) + return false; + } + } + } + + return true; + } + + /// + /// Checks if a space on a grid is valid and not occupied by any other pieces. + /// + public bool IsGridSpaceEmpty(Entity itemEnt, Entity storageEnt, Vector2i location) + { + if (!Resolve(storageEnt, ref storageEnt.Comp)) + return false; + + var validGrid = false; + foreach (var grid in storageEnt.Comp.Grid) + { + if (grid.Contains(location)) + { + validGrid = true; + break; + } + } + + if (!validGrid) + return false; + + foreach (var (netEnt, storedItem) in storageEnt.Comp.StoredItems) + { + var ent = GetEntity(netEnt); + + if (ent == itemEnt.Owner) + continue; + + if (!_itemQuery.TryGetComponent(ent, out var itemComp)) + continue; + + var adjustedShape = ItemSystem.GetAdjustedItemShape((ent, itemComp), storedItem); + foreach (var box in adjustedShape) + { + if (box.Contains(location)) + return false; + } + } + + return true; + } + + /// + /// Returns true if there is enough space to theoretically fit another item. + /// + public bool HasSpace(Entity uid) + { + if (!Resolve(uid, ref uid.Comp)) + return false; + + return GetCumulativeItemAreas(uid) < uid.Comp.Grid.GetArea() || HasSpaceInStacks(uid); + } + + private bool HasSpaceInStacks(Entity uid, string? stackType = null) + { + if (!Resolve(uid, ref uid.Comp)) + return false; + + foreach (var contained in uid.Comp.Container.ContainedEntities) + { + if (!_stackQuery.TryGetComponent(contained, out var stack)) + continue; + + if (stackType != null && !stack.StackTypeId.Equals(stackType)) + continue; + + if (_stack.GetAvailableSpace(stack) == 0) + continue; + + return true; + } + + return false; + } + + /// + /// Returns the sum of all the ItemSizes of the items inside of a storage. + /// + public int GetCumulativeItemAreas(Entity entity) + { + if (!Resolve(entity, ref entity.Comp)) + return 0; + + var sum = 0; + foreach (var item in entity.Comp.Container.ContainedEntities) + { + if (!_itemQuery.TryGetComponent(item, out var itemComp)) + continue; + sum += ItemSystem.GetItemShape((item, itemComp)).GetArea(); + } + + return sum; + } + + public ProtoId GetMaxItemSize(Entity uid) + { + if (!Resolve(uid, ref uid.Comp)) + return DefaultStorageMaxItemSize; + + // If we specify a max item size, use that + if (uid.Comp.MaxItemSize != null) + return uid.Comp.MaxItemSize.Value; + + if (!_itemQuery.TryGetComponent(uid, out var item)) + return DefaultStorageMaxItemSize; + var size = ItemSystem.GetSizePrototype(item.Size); + + // if there is no max item size specified, the value used + // is one below the item size of the storage entity, clamped at ItemSize.Tiny + var sizes = _prototype.EnumeratePrototypes().ToList(); + sizes.Sort(); + var currentSizeIndex = sizes.IndexOf(size); + return sizes[Math.Max(currentSizeIndex - 1, 0)].ID; + } + + private void OnStackCountChanged(EntityUid uid, MetaDataComponent component, StackCountChangedEvent args) + { + if (_containerSystem.TryGetContainingContainer(uid, out var container, component) && + container.ID == StorageComponent.ContainerId) + { + UpdateAppearance(container.Owner); + UpdateUI(container.Owner); + } + } + /// /// Plays a clientside pickup animation for the specified uid. /// diff --git a/Content.Shared/Storage/ItemStorageLocation.cs b/Content.Shared/Storage/ItemStorageLocation.cs new file mode 100644 index 00000000000..a43be5a44fa --- /dev/null +++ b/Content.Shared/Storage/ItemStorageLocation.cs @@ -0,0 +1,40 @@ +using Robust.Shared.Serialization; + +namespace Content.Shared.Storage; + +[DataDefinition, Serializable, NetSerializable] +public partial record struct ItemStorageLocation +{ + /// + /// The rotation, stored a cardinal direction in order to reduce rounding errors. + /// + [DataField] + private Direction _rotation; + + /// + /// The rotation of the piece in storage. + /// + public Angle Rotation + { + get => _rotation.ToAngle(); + set => _rotation = value.GetCardinalDir(); + } + + /// + /// Where the item is located in storage. + /// + [DataField] + public Vector2i Position; + + public ItemStorageLocation(Angle rotation, Vector2i position) + { + Rotation = rotation; + Position = position; + } + + public bool Equals(ItemStorageLocation? other) + { + return Rotation == other?.Rotation && + Position == other.Value.Position; + } +}; diff --git a/Content.Shared/Storage/StorageComponent.cs b/Content.Shared/Storage/StorageComponent.cs index fdcf06bf5d5..e3287b20ad7 100644 --- a/Content.Shared/Storage/StorageComponent.cs +++ b/Content.Shared/Storage/StorageComponent.cs @@ -1,8 +1,12 @@ +using Content.Shared.Item; +using Content.Shared.Storage.EntitySystems; using Content.Shared.Whitelist; using Robust.Shared.Audio; using Robust.Shared.Containers; using Robust.Shared.GameStates; using Robust.Shared.Map; +using Robust.Shared.Player; +using Robust.Shared.Prototypes; using Robust.Shared.Serialization; namespace Content.Shared.Storage @@ -13,6 +17,8 @@ namespace Content.Shared.Storage [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] public sealed partial class StorageComponent : Component { + public static string ContainerId = "storagebase"; + // TODO: This fucking sucks [ViewVariables(VVAccess.ReadWrite), DataField("isOpen"), AutoNetworkedField] public bool IsUiOpen; @@ -20,6 +26,25 @@ public sealed partial class StorageComponent : Component [ViewVariables] public Container Container = default!; + /// + /// A dictionary storing each entity to its position within the storage grid. + /// + [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public Dictionary StoredItems = new(); + + /// + /// A list of boxes that comprise a combined grid that determines the location that items can be stored. + /// + [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + public List Grid = new(); + + /// + /// The maximum size item that can be inserted into this storage, + /// + [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField] + [Access(typeof(SharedStorageSystem))] + public ProtoId? MaxItemSize; + // TODO: Make area insert its own component. [DataField("quickInsert")] public bool QuickInsert; // Can insert storables by "attacking" them with the storage entity @@ -45,18 +70,6 @@ public sealed partial class StorageComponent : Component [DataField("blacklist")] public EntityWhitelist? Blacklist; - /// - /// How much storage is currently being used by contained entities. - /// - [ViewVariables, DataField("storageUsed"), AutoNetworkedField] - public int StorageUsed; - - /// - /// Maximum capacity for storage. - /// - [DataField("capacity"), AutoNetworkedField] - public int StorageCapacityMax = 10000; - /// /// Sound played whenever an entity is inserted into storage. /// @@ -82,27 +95,75 @@ public sealed partial class StorageComponent : Component public SoundSpecifier? StorageCloseSound; [Serializable, NetSerializable] - public sealed class StorageInsertItemMessage : BoundUserInterfaceMessage + public enum StorageUiKey { + Key, } + } - [Serializable, NetSerializable] - public enum StorageUiKey + [Serializable, NetSerializable] + public sealed class StorageInteractWithItemEvent : EntityEventArgs + { + public readonly NetEntity InteractedItemUid; + + public readonly NetEntity StorageUid; + + public StorageInteractWithItemEvent(NetEntity interactedItemUid, NetEntity storageUid) { - Key, + InteractedItemUid = interactedItemUid; + StorageUid = storageUid; + } + } + + [Serializable, NetSerializable] + public sealed class StorageSetItemLocationEvent : EntityEventArgs + { + public readonly NetEntity ItemEnt; + + public readonly NetEntity StorageEnt; + + public readonly ItemStorageLocation Location; + + public StorageSetItemLocationEvent(NetEntity itemEnt, NetEntity storageEnt, ItemStorageLocation location) + { + ItemEnt = itemEnt; + StorageEnt = storageEnt; + Location = location; } } [Serializable, NetSerializable] - public sealed class StorageInteractWithItemEvent : BoundUserInterfaceMessage + public sealed class StorageRemoveItemEvent : EntityEventArgs { - public readonly NetEntity InteractedItemUID; - public StorageInteractWithItemEvent(NetEntity interactedItemUID) + public readonly NetEntity ItemEnt; + + public readonly NetEntity StorageEnt; + + public StorageRemoveItemEvent(NetEntity itemEnt, NetEntity storageEnt) { - InteractedItemUID = interactedItemUID; + ItemEnt = itemEnt; + StorageEnt = storageEnt; } } + [Serializable, NetSerializable] + public sealed class StorageInsertItemIntoLocationEvent : EntityEventArgs + { + public readonly NetEntity ItemEnt; + + public readonly NetEntity StorageEnt; + + public readonly ItemStorageLocation Location; + + public StorageInsertItemIntoLocationEvent(NetEntity itemEnt, NetEntity storageEnt, ItemStorageLocation location) + { + ItemEnt = itemEnt; + StorageEnt = storageEnt; + Location = location; + } + } + + /// /// Network event for displaying an animation of entities flying into a storage entity /// @@ -123,6 +184,15 @@ public AnimateInsertingEntitiesEvent(NetEntity storage, List storedEn } } + /// + /// An extra BUI message that either opens, closes, or focuses the storage window based on context. + /// + [Serializable, NetSerializable] + public sealed class StorageModifyWindowMessage : BoundUserInterfaceMessage + { + + } + [NetSerializable] [Serializable] public enum StorageVisuals : byte diff --git a/Content.Shared/Storage/StorageHelpers.cs b/Content.Shared/Storage/StorageHelpers.cs new file mode 100644 index 00000000000..bf0d32a0e53 --- /dev/null +++ b/Content.Shared/Storage/StorageHelpers.cs @@ -0,0 +1,76 @@ +namespace Content.Shared.Storage; + +public static class StorageHelper +{ + public static Box2i GetBoundingBox(this IReadOnlyList boxes) + { + if (boxes.Count == 0) + return new Box2i(); + + var firstBox = boxes[0]; + + if (boxes.Count == 1) + return firstBox; + + var bottom = firstBox.Bottom; + var left = firstBox.Left; + var top = firstBox.Top; + var right = firstBox.Right; + + for (var i = 1; i < boxes.Count; i++) + { + var box = boxes[i]; + + if (bottom > box.Bottom) + bottom = box.Bottom; + + if (left > box.Left) + left = box.Left; + + if (top < box.Top) + top = box.Top; + + if (right < box.Right) + right = box.Right; + } + return new Box2i(left, bottom, right, top); + } + + public static int GetArea(this IReadOnlyList boxes) + { + var area = 0; + var bounding = boxes.GetBoundingBox(); + for (var y = bounding.Bottom; y <= bounding.Top; y++) + { + for (var x = bounding.Left; x <= bounding.Right; x++) + { + if (boxes.Contains(x, y)) + area++; + } + } + + return area; + } + + public static bool Contains(this IReadOnlyList boxes, int x, int y) + { + foreach (var box in boxes) + { + if (box.Contains(x, y)) + return true; + } + + return false; + } + + public static bool Contains(this IReadOnlyList boxes, Vector2i point) + { + foreach (var box in boxes) + { + if (box.Contains(point)) + return true; + } + + return false; + } +} diff --git a/Resources/Changelog/DeltaVChangelog.yml b/Resources/Changelog/DeltaVChangelog.yml index 6ca7dff490a..ab2bbfbc615 100644 --- a/Resources/Changelog/DeltaVChangelog.yml +++ b/Resources/Changelog/DeltaVChangelog.yml @@ -859,7 +859,7 @@ Entries: - type: Tweak message: >- Centcomm Geneticists have modified the Harpies so that they can no - longer imitate flash bangs. Your eardrums are safe now. + longer imitate flash bangs. Your eardrums are safe now. id: 130 time: '2023-11-08T22:30:39.0000000+00:00' - author: leonardo-dabepis @@ -967,7 +967,7 @@ Entries: - type: Add message: >- Salvage has been rebased. New but strangely familiar space debris will - be pulled in by the salvage magnet. Caution is recommended. + be pulled in by the salvage magnet. Caution is recommended. id: 146 time: '2023-11-22T16:13:12.0000000+00:00' - author: tryded @@ -1081,7 +1081,7 @@ Entries: - type: Tweak message: >- Harpies have been re-balanced so that they now actually have a numerical - positive. + positive. id: 161 time: '2023-12-06T20:10:49.0000000+00:00' - author: DebugOk @@ -1407,3 +1407,9 @@ Entries: message: Enabled map voting on periapsis id: 211 time: '2024-01-19T22:33:21.0000000+00:00' +- author: DebugOk + changes: + - type: Add + message: Added gridinv, sorry. + id: 212 + time: '2024-01-21T18:58:28.0000000+00:00' diff --git a/Resources/Credits/Patrons.yml b/Resources/Credits/Patrons.yml index e20ebbd5ecc..9b8752a5e89 100644 --- a/Resources/Credits/Patrons.yml +++ b/Resources/Credits/Patrons.yml @@ -44,6 +44,8 @@ Tier: Revolutionary - Name: "Austin Nelson" Tier: Syndicate Agent +- Name: "John Edward Hamilton Barchard" + Tier: Revolutionary - Name: "Cormos Lemming" Tier: Nuclear Operative - Name: "Hamcha" @@ -64,6 +66,8 @@ Tier: Revolutionary - Name: "Brandon Campbell" Tier: Nuclear Operative +- Name: "KevKev" + Tier: Revolutionary - Name: "Jacob Schramm" Tier: Revolutionary - Name: "Matouš Hrdlička" @@ -76,6 +80,8 @@ Tier: Syndicate Agent - Name: "Scott MacCombie" Tier: Nuclear Operative +- Name: "Gaxeer" + Tier: Syndicate Agent - Name: "Tamora Droppa" Tier: Revolutionary - Name: "Gavin Simmons" @@ -102,12 +108,14 @@ Tier: Syndicate Agent - Name: "tomhendo" Tier: Syndicate Agent -- Name: "Odin7heWanderer" +- Name: "Odin The Wanderer" Tier: Revolutionary - Name: "tokie" Tier: Nuclear Operative - Name: "Wallace Megas" Tier: Revolutionary +- Name: "Vandell" + Tier: Revolutionary - Name: "Enricoc3l" Tier: Revolutionary - Name: "DadNotTheBelt" @@ -118,6 +126,8 @@ Tier: Syndicate Agent - Name: "Tim Foley" Tier: Syndicate Agent +- Name: "Blight" + Tier: Syndicate Agent - Name: "Katarn" Tier: Revolutionary - Name: "eric156" @@ -149,7 +159,7 @@ - Name: "Malachi Housewright" Tier: Revolutionary - Name: "Petalmeat" - Tier: Revolutionary + Tier: Syndicate Agent - Name: "Jakub Kędziora" Tier: Syndicate Agent - Name: "Adam Smedstad" @@ -176,8 +186,6 @@ Tier: Revolutionary - Name: "François Desautels" Tier: Revolutionary -- Name: "Christian Hicks" - Tier: Syndicate Agent - Name: "MasterFurret" Tier: Revolutionary - Name: "tapohuy" @@ -190,7 +198,7 @@ Tier: Revolutionary - Name: "Graded" Tier: Syndicate Agent -- Name: "Indri" +- Name: "Christian Hodel" Tier: Revolutionary - Name: "IceStorm theDragon" Tier: Revolutionary @@ -202,33 +210,3 @@ Tier: Nuclear Operative - Name: "Aiden Baker" Tier: Revolutionary -- Name: "Zakory L Holbrook" - Tier: Revolutionary -- Name: "Beans" - Tier: Revolutionary -- Name: "ThoranTW" - Tier: Revolutionary -- Name: "David Gee" - Tier: Nuclear Operative -- Name: "Crabby Arts" - Tier: Revolutionary -- Name: "W Geertsma" - Tier: Syndicate Agent -- Name: "以迪 黃" - Tier: Syndicate Agent -- Name: "Taber" - Tier: Revolutionary -- Name: "Nicholi" - Tier: Syndicate Agent -- Name: "blitz gaming" - Tier: Revolutionary -- Name: "MrGloopy" - Tier: Revolutionary -- Name: "Swindel_" - Tier: Syndicate Agent -- Name: "Alex Nordlund" - Tier: Revolutionary -- Name: "Thomas Mcintosh" - Tier: Revolutionary -- Name: "krberryy" - Tier: Revolutionary diff --git a/Resources/Locale/en-US/commands/stat-values-command.ftl b/Resources/Locale/en-US/commands/stat-values-command.ftl index 66fa5d98b94..99c6bd194e3 100644 --- a/Resources/Locale/en-US/commands/stat-values-command.ftl +++ b/Resources/Locale/en-US/commands/stat-values-command.ftl @@ -13,3 +13,8 @@ stat-lathe-values = Lathe sell prices stat-lathe-id = ID stat-lathe-cost = Cost stat-lathe-sell = Sell price + +# Item Sizes +stat-item-values = Item sizes +stat-item-id = ID +stat-item-price = Size diff --git a/Resources/Locale/en-US/components/storage-component.ftl b/Resources/Locale/en-US/components/storage-component.ftl index a6d542e4fb4..29c858891af 100644 --- a/Resources/Locale/en-US/components/storage-component.ftl +++ b/Resources/Locale/en-US/components/storage-component.ftl @@ -1,9 +1,10 @@ comp-storage-no-item-size = N/A comp-storage-cant-insert = Can't insert. -comp-storage-insufficient-capacity = Insufficient capacity. +comp-storage-too-big = Too big! +comp-storage-insufficient-capacity = No room! comp-storage-invalid-container = This doesn't go in there! comp-storage-anchored-failure = Can't insert an anchored item. comp-storage-cant-drop = You can't let go of { THE($entity) }! comp-storage-window-title = Storage Item -comp-storage-window-volume = Items: { $itemCount }, Stored: { $usedVolume }/{ $maxVolume } -comp-storage-window-volume-unlimited = Items: { $itemCount } +comp-storage-window-weight = { $weight }/{ $maxWeight }, Max Size: {$size} +comp-storage-window-slots = Slots: { $itemCount }/{ $maxCount }, Max Size: {$size} diff --git a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl index 65e477b2e28..d68e6f2e76d 100644 --- a/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl +++ b/Resources/Locale/en-US/escape-menu/ui/options-menu.ftl @@ -38,6 +38,7 @@ ui-options-volume-percent = { TOSTRING($volume, "P0") } ui-options-show-held-item = Show held item next to cursor ui-options-show-combat-mode-indicators = Show combat mode indicators with cursor +ui-options-opaque-storage-window = Enable opaque storage window ui-options-show-looc-on-head = Show LOOC chat above characters head ui-options-fancy-speech = Show names in speech bubbles ui-options-fancy-name-background = Add background to speech bubble names @@ -124,9 +125,14 @@ ui-options-function-alt-activate-item-in-world = Alternative activate item in wo ui-options-function-drop = Drop item ui-options-function-examine-entity = Examine ui-options-function-swap-hands = Swap hands +ui-options-function-move-stored-item = Move stored item +ui-options-function-rotate-stored-item = Rotate stored item +ui-options-static-storage-ui = Static storage UI ui-options-function-smart-equip-backpack = Smart-equip to backpack ui-options-function-smart-equip-belt = Smart-equip to belt +ui-options-function-open-backpack = Open backpack +ui-options-function-open-belt = Open belt ui-options-function-throw-item-in-hand = Throw item ui-options-function-try-pull-object = Pull object ui-options-function-move-pulled-object = Move pulled object 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 be07fb839b5..25e334181b9 100644 --- a/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl +++ b/Resources/Locale/en-US/ghost/roles/ghost-role-component.ftl @@ -4,14 +4,14 @@ ghost-role-component-default-rules = You don't remember any of your previous lif You are absolutely [color=red]NOT[/color] allowed to remember, say, the name, appearance, etc. of your previous character. # Delta V soft antag rule -deltav-ghost-role-information-softantag-rules = You are allowed to attack the crew without provocation. +deltav-ghost-role-information-softantag-rules = You are allowed to attack the crew without provocation. You are allowed to coexist with the crew. The crew is allowed to kill you without warning. # Delta V salvage antag rule -deltav-ghost-role-information-salvageantag-rules = You are a salvage mob. +deltav-ghost-role-information-salvageantag-rules = You are a salvage mob. You are allowed to attack salvagers without provocation. DO NOT GIB THEIR CORPSES! - You are allowed to attack the salvage shuttle. + You are allowed to attack the salvage shuttle. You are NOT allowed to go to the station. If the salvagers go to the station, you can't follow them. ghost-role-information-mouse-name = Mouse @@ -196,14 +196,14 @@ ghost-role-information-behonker-description = You are an antagonist, bring death ghost-role-information-Death-Squad-name = Death Squad Operative ghost-role-information-Death-Squad-description = One of Nanotrasen's top internal affairs agents. Await orders from CentComm or an official. -ghost-role-information-Shiva-name = Shiva -ghost-role-information-Shiva-description = Shiva, the stations first defender. Help the Head of Security in their work -ghost-role-information-Shiva-rules = Protect security staff and the crew from danger. Stay with Security staff or around the Security department, try to disable criminals and not kill them if the situation allows for it. - ghost-role-information-Cak-name = Cak -ghost-role-information-Cak-description = You are the chef's favorite child. You're a living cake cat. +ghost-role-information-Cak-description = You are the chef's favorite child. You're a living cake cat. ghost-role-information-Cak-rules = You are a living edible sweet cat. Your task is to find your place in this world where everything wants to eat you. ghost-role-information-BreadDog-name = BreadDog ghost-role-information-BreadDog-description = You are the chef's favorite child. You're a living bread dog. ghost-role-information-BreadDog-rules = You're an edible dog made of bread. Your task is to find your place in this world where everything wants to eat you. + +ghost-role-information-Shiva-name = Shiva +ghost-role-information-Shiva-description = Shiva, the stations first defender. Help the Head of Security in their work +ghost-role-information-Shiva-rules = Protect security staff and the crew from danger. Stay with Security staff or around the Security department, try to disable criminals and not kill them if the situation allows for it. diff --git a/Resources/Locale/en-US/hands/hands-system.ftl b/Resources/Locale/en-US/hands/hands-system.ftl index 7761b0c0ce4..6b7859fe174 100644 --- a/Resources/Locale/en-US/hands/hands-system.ftl +++ b/Resources/Locale/en-US/hands/hands-system.ftl @@ -1,8 +1,3 @@ -## HandsSystem -hands-system-missing-equipment-slot = You have no {$slotName} to take something out of! -hands-system-empty-equipment-slot = There's nothing in your {$slotName} to take out! - - # Examine text after when they're holding something (in-hand) comp-hands-examine = { CAPITALIZE(SUBJECT($user)) } { CONJUGATE-BE($user) } holding { $items }. comp-hands-examine-empty = { CAPITALIZE(SUBJECT($user)) } { CONJUGATE-BE($user) } not holding anything. diff --git a/Resources/Locale/en-US/interaction/interaction-popup-component.ftl b/Resources/Locale/en-US/interaction/interaction-popup-component.ftl index 3f2a23d30dc..3f9dcded996 100644 --- a/Resources/Locale/en-US/interaction/interaction-popup-component.ftl +++ b/Resources/Locale/en-US/interaction/interaction-popup-component.ftl @@ -56,6 +56,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-recycler = You pet {THE($target)} on {POSS-ADJ($target)} mildly threatening steel exterior. petting-failure-honkbot = You reach out to pet {THE($target)}, but {SUBJECT($target)} honks in refusal! petting-failure-cleanbot = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy mopping! diff --git a/Resources/Locale/en-US/interaction/smart-equip-system.ftl b/Resources/Locale/en-US/interaction/smart-equip-system.ftl new file mode 100644 index 00000000000..8c61116caac --- /dev/null +++ b/Resources/Locale/en-US/interaction/smart-equip-system.ftl @@ -0,0 +1,4 @@ +smart-equip-missing-equipment-slot = You have no {$slotName} slot to interact with! +smart-equip-empty-equipment-slot = There's nothing in your {$slotName} slot to take out! +smart-equip-no-valid-item-slot-insert = There's no valid item slot for {THE($item)} to go into! +smart-equip-cant-drop = You can't drop that! diff --git a/Resources/Locale/en-US/items/components/item-component.ftl b/Resources/Locale/en-US/items/components/item-component.ftl index f9750a55fac..504c355edb0 100644 --- a/Resources/Locale/en-US/items/components/item-component.ftl +++ b/Resources/Locale/en-US/items/components/item-component.ftl @@ -6,4 +6,11 @@ pick-up-verb-get-data-text = Pick Up pick-up-verb-get-data-text-inventory = Put in hand -item-component-on-examine-size = Size: {$size} +item-component-on-examine-size = This is {INDEFINITE($size)} [bold]{$size}[/bold] item. + +item-component-size-Tiny = tiny +item-component-size-Small = small +item-component-size-Normal = medium +item-component-size-Large = large +item-component-size-Huge = huge +item-component-size-Ginormous = ginormous diff --git a/Resources/Locale/en-US/persistence/command.ftl b/Resources/Locale/en-US/persistence/command.ftl new file mode 100644 index 00000000000..b070aee1159 --- /dev/null +++ b/Resources/Locale/en-US/persistence/command.ftl @@ -0,0 +1 @@ +cmd-persistencesave-no-path = filePath was not specified and CCVar {$cvar} is not set. Manually set the filePath param in order to save the map. diff --git a/Resources/Locale/en-US/reagents/meta/medicine.ftl b/Resources/Locale/en-US/reagents/meta/medicine.ftl index 2587b7ad86a..8bebb167de0 100644 --- a/Resources/Locale/en-US/reagents/meta/medicine.ftl +++ b/Resources/Locale/en-US/reagents/meta/medicine.ftl @@ -1,5 +1,5 @@ reagent-name-cryptobiolin = cryptobiolin -reagent-desc-cryptobiolin = Causes confusion and dizziness. Temporarily protects from and disables psionics. +reagent-desc-cryptobiolin = Causes confusion and dizziness. This is essential to make Spaceacillin. reagent-name-dylovene = dylovene reagent-desc-dylovene = A broad-spectrum anti-toxin, which treats toxin damage in the blood stream. Overdosing will cause vomiting, dizzyness and pain. diff --git a/Resources/Locale/en-US/research/technologies.ftl b/Resources/Locale/en-US/research/technologies.ftl index 52f0fa34d23..3b682d9284b 100644 --- a/Resources/Locale/en-US/research/technologies.ftl +++ b/Resources/Locale/en-US/research/technologies.ftl @@ -42,6 +42,7 @@ research-technology-concentrated-laser-weaponry = Concentrated Laser Weaponry research-technology-wave-particle-harnessing = Wave Particle Harnessing research-technology-advanced-riot-control = Advanced Riot Control research-technology-portable-microfusion-weaponry = Portable Microfusion Weaponry +research-technology-experimental-battery-ammo = Experimental Battery Ammo research-technology-basic-robotics = Basic Robotics research-technology-basic-anomalous-research = Basic Anomalous Research diff --git a/Resources/Maps/Shuttles/cargo.yml b/Resources/Maps/Shuttles/cargo.yml index 6555e5ccb0e..a3fc04f9268 100644 --- a/Resources/Maps/Shuttles/cargo.yml +++ b/Resources/Maps/Shuttles/cargo.yml @@ -1,13 +1,13 @@ meta: - format: 5 + format: 6 postmapinit: false tilemap: 0: Space - 62: FloorShuttleBlue - 66: FloorShuttleWhite - 69: FloorSteel - 79: FloorTechMaint - 95: Plating + 76: FloorShuttleBlue + 80: FloorShuttleWhite + 84: FloorSteel + 96: FloorTechMaint + 113: Plating entities: - proto: "" entities: @@ -21,19 +21,24 @@ entities: - chunks: -1,0: ind: -1,0 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAABFAAAARQAAAEUAAABFAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAAAARQAAAEUAAABFAAAARQAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXwAAAEUAAABFAAAARQAAAEUAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAABFAAAARQAAAEUAAABFAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFAAAARQAAAEUAAABFAAAARQAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXwAAAEUAAABFAAAARQAAAEUAAABFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF8AAABfAAAARQAAAEUAAABFAAAAXwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfAAAAXwAAAEIAAAA+AAAAQgAAAF8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXwAAAF8AAABfAAAAPgAAAF8AAABfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfAAAAXwAAAF8AAABfAAAAXwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAUAAAAAAATAAAAAAAUAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAATAAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 0,0: ind: 0,0 - tiles: RQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: VAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 -1,-1: ind: -1,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF8AAABfAAAAXwAAAF8AAABfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF8AAABfAAAAXwAAAF8AAABfAAAAXwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfAAAAXwAAAF8AAABfAAAAXwAAAF8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXwAAAF8AAABPAAAAXwAAAE8AAABfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF8AAABFAAAARQAAAEUAAABFAAAARQAAAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAcQAAAAAAYAAAAAAAcQAAAAAAYAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAVAAAAAAA + version: 6 0,-1: ind: 0,-1 - tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 type: MapGrid - type: Broadphase - - angularDamping: 0.05 + - bodyStatus: InAir + angularDamping: 0.05 linearDamping: 0.05 fixedRotation: False bodyType: Dynamic @@ -345,20 +350,18 @@ entities: - pos: -3.5,-1.5 parent: 173 type: Transform -- proto: AirlockExternalGlassShuttleEmergencyLocked +- proto: AirlockGlassShuttle entities: - uid: 45 components: - - rot: 1.5707963267948966 rad - pos: 0.5,1.5 + - rot: -1.5707963267948966 rad + pos: -5.5,3.5 parent: 173 type: Transform -- proto: AirlockExternalGlassShuttleLocked - entities: - uid: 50 components: - rot: -1.5707963267948966 rad - pos: -5.5,3.5 + pos: -5.5,1.5 parent: 173 type: Transform - uid: 52 @@ -369,8 +372,8 @@ entities: type: Transform - uid: 53 components: - - rot: -1.5707963267948966 rad - pos: -5.5,1.5 + - rot: 1.5707963267948966 rad + pos: 0.5,1.5 parent: 173 type: Transform - proto: APCHyperCapacity @@ -412,14 +415,6 @@ entities: - links: - 57 type: DeviceLinkSink - - uid: 2 - components: - - pos: -5.5,4.5 - parent: 173 - type: Transform - - links: - - 56 - type: DeviceLinkSink - uid: 3 components: - pos: -5.5,0.5 @@ -436,6 +431,14 @@ entities: - links: - 58 type: DeviceLinkSink + - uid: 56 + components: + - pos: -5.5,4.5 + parent: 173 + type: Transform + - links: + - 2 + type: DeviceLinkSink - proto: CableApcExtension entities: - uid: 100 @@ -443,8 +446,6 @@ entities: - pos: -0.5,6.5 parent: 173 type: Transform - - enabled: True - type: AmbientSound - uid: 101 components: - pos: -1.5,6.5 @@ -470,15 +471,11 @@ entities: - pos: -3.5,8.5 parent: 173 type: Transform - - enabled: True - type: AmbientSound - uid: 106 components: - pos: -1.5,8.5 parent: 173 type: Transform - - enabled: True - type: AmbientSound - uid: 107 components: - pos: -3.5,6.5 @@ -524,15 +521,11 @@ entities: - pos: -2.5,-1.5 parent: 173 type: Transform - - enabled: True - type: AmbientSound - uid: 116 components: - pos: -1.5,-4.5 parent: 173 type: Transform - - enabled: True - type: AmbientSound - uid: 117 components: - pos: -1.5,-1.5 @@ -543,50 +536,36 @@ entities: - pos: -1.5,-2.5 parent: 173 type: Transform - - enabled: True - type: AmbientSound - uid: 119 components: - pos: -2.5,-4.5 parent: 173 type: Transform - - enabled: True - type: AmbientSound - uid: 120 components: - pos: -1.5,-3.5 parent: 173 type: Transform - - enabled: True - type: AmbientSound - uid: 121 components: - pos: -3.5,-4.5 parent: 173 type: Transform - - enabled: True - type: AmbientSound - uid: 122 components: - pos: -3.5,-3.5 parent: 173 type: Transform - - enabled: True - type: AmbientSound - uid: 123 components: - pos: -4.5,7.5 parent: 173 type: Transform - - enabled: True - type: AmbientSound - uid: 124 components: - pos: -0.5,7.5 parent: 173 type: Transform - - enabled: True - type: AmbientSound - uid: 125 components: - pos: -1.5,3.5 @@ -632,8 +611,6 @@ entities: - pos: -4.5,-3.5 parent: 173 type: Transform - - enabled: True - type: AmbientSound - proto: CableHV entities: - uid: 80 @@ -641,22 +618,16 @@ entities: - pos: -1.5,-2.5 parent: 173 type: Transform - - enabled: True - type: AmbientSound - uid: 81 components: - pos: -2.5,-2.5 parent: 173 type: Transform - - enabled: True - type: AmbientSound - uid: 86 components: - pos: -2.5,-3.5 parent: 173 type: Transform - - enabled: True - type: AmbientSound - proto: CableMV entities: - uid: 87 @@ -664,8 +635,6 @@ entities: - pos: -1.5,-2.5 parent: 173 type: Transform - - enabled: True - type: AmbientSound - uid: 88 components: - pos: -1.5,-1.5 @@ -676,8 +645,6 @@ entities: - pos: -2.5,-1.5 parent: 173 type: Transform - - enabled: True - type: AmbientSound - uid: 90 components: - pos: -2.5,-0.5 @@ -728,8 +695,6 @@ entities: - pos: -0.5,6.5 parent: 173 type: Transform - - enabled: True - type: AmbientSound - proto: CableTerminal entities: - uid: 82 @@ -933,8 +898,6 @@ entities: pos: -2.5,-1.5 parent: 173 type: Transform - - enabled: True - type: AmbientSound - proto: GasPipeStraight entities: - uid: 136 @@ -970,8 +933,6 @@ entities: - pos: -2.5,2.5 parent: 173 type: Transform - - enabled: False - type: AmbientSound - proto: GeneratorBasic15kW entities: - uid: 83 @@ -1105,22 +1066,22 @@ entities: type: Transform - proto: SignalButton entities: - - uid: 55 + - uid: 2 components: - - pos: -5.5,-0.5 + - pos: -5.5,5.5 parent: 173 type: Transform - linkedPorts: - 3: + 56: - Pressed: Toggle type: DeviceLinkSource - - uid: 56 + - uid: 55 components: - - pos: -5.5,5.5 + - pos: -5.5,-0.5 parent: 173 type: Transform - linkedPorts: - 2: + 3: - Pressed: Toggle type: DeviceLinkSource - uid: 57 diff --git a/Resources/Maps/Shuttles/emergency_delta.yml b/Resources/Maps/Shuttles/emergency_delta.yml new file mode 100644 index 00000000000..461b9692df4 --- /dev/null +++ b/Resources/Maps/Shuttles/emergency_delta.yml @@ -0,0 +1,4966 @@ +meta: + format: 6 + postmapinit: false +tilemap: + 0: Space + 29: FloorDark + 30: FloorDarkDiagonal + 34: FloorDarkMono + 38: FloorDarkPlastic + 48: FloorGrassDark + 84: FloorShuttleRed + 89: FloorSteel + 100: FloorSteelMono + 101: FloorSteelOffset + 108: FloorWhite + 120: Lattice + 121: Plating +entities: +- proto: "" + entities: + - uid: 1 + components: + - name: NT Evac Delta + type: MetaData + - pos: -0.5625,0.671875 + parent: invalid + type: Transform + - chunks: + 0,0: + ind: 0,0 + tiles: VAAAAAAAVAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAVAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAVAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,0: + ind: -1,0 + tiles: AAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAIgAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAZAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAZAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAAAIgAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAJgAAAAAAHgAAAAAAHgAAAAAAHgAAAAAAHgAAAAAAHgAAAAAAHgAAAAAAJgAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAJgAAAAAAHgAAAAAAHgAAAAAAHgAAAAAAHgAAAAAAHgAAAAAAHgAAAAAAJgAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAJgAAAAAAHgAAAAAAHgAAAAAAHgAAAAAAHgAAAAAAHgAAAAAAHgAAAAAAJgAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAJgAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,-1: + ind: -1,-1 + tiles: AAAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAMAAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAMAAAAAAAZAAAAAAAAAAAAAAAeQAAAAAAbAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAZAAAAAAAWQAAAAAAWQAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAAAAAAAAAeQAAAAAAbAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAZAAAAAAAWQAAAAAAWQAAAAAAZAAAAAAAMAAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAMAAAAAAAZAAAAAAAAAAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAAAAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAMAAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAMAAAAAAAZAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAZAAAAAAAZAAAAAAAeQAAAAAAeQAAAAAAZAAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAMAAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAMAAAAAAAZAAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAZQAAAAAAZQAAAAAAWQAAAAAAeQAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAZQAAAAAAZQAAAAAAWQAAAAAAeQAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAMAAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAMAAAAAAAZAAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAZQAAAAAAZQAAAAAAWQAAAAAAZAAAAAAAWQAAAAAAWQAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAZQAAAAAAZQAAAAAAWQAAAAAAZAAAAAAAWQAAAAAAWQAAAAAAZAAAAAAAMAAAAAAAZAAAAAAAWQAAAAAAZAAAAAAAMAAAAAAAZAAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAZQAAAAAAZQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAZAAAAAAAZAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAVAAAAAAAVAAAAAAAVAAAAAAA + version: 6 + 0,-1: + ind: 0,-1 + tiles: WQAAAAAAWQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAZAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAZAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAZAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAZAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAZAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAZAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAVAAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + -1,-2: + ind: -1,-2 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAHQAAAAAAHQAAAAAAHQAAAAAAHQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAHQAAAAAAIgAAAAAAIgAAAAAAHQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAHQAAAAAAIgAAAAAAIgAAAAAAHQAAAAAAeQAAAAAAAAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeAAAAAAAeQAAAAAAHQAAAAAAHQAAAAAAHQAAAAAAHQAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAIgAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAeQAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAbAAAAAAAeQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAAWQAAAAAA + version: 6 + 0,-2: + ind: 0,-2 + tiles: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeQAAAAAAeQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQAAAAAAWQAAAAAAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + version: 6 + type: MapGrid + - type: Broadphase + - bodyStatus: InAir + angularDamping: 0.05 + linearDamping: 0.05 + fixedRotation: False + bodyType: Dynamic + type: Physics + - fixtures: {} + type: Fixtures + - type: OccluderTree + - type: SpreaderGrid + - type: Shuttle + - type: GridPathfinding + - gravityShakeSound: !type:SoundPathSpecifier + path: /Audio/Effects/alert.ogg + type: Gravity + - chunkCollection: + version: 2 + nodes: + - node: + color: '#FFFFFFFF' + id: Bot + decals: + 0: -10,2 + 4: -10,-1 + 5: -11,-1 + 6: -12,-1 + 7: -13,-1 + 8: -14,-1 + 23: -11,-9 + 24: -11,-8 + 25: -11,-7 + 26: -14,-9 + 27: -14,-8 + 28: -14,-7 + 29: -14,-6 + 30: -14,-5 + 31: -14,-4 + 32: -11,-4 + 33: -11,-3 + 34: -14,-3 + 61: -7,-9 + 62: -7,-8 + 63: -7,-7 + 64: -7,-6 + 65: -7,-5 + 66: -5,-5 + 67: -5,-6 + 68: -5,-7 + 69: -5,-8 + 70: -5,-9 + 71: -9,-7 + 72: -9,-8 + 73: -9,-9 + 74: -9,-10 + 75: -9,-11 + 76: -7,-11 + 77: -7,-12 + 78: -5,-11 + 79: -5,-12 + 80: -5,-13 + 81: -7,-13 + 82: -7,-14 + 83: -5,-14 + 84: -5,-15 + 85: -7,-15 + 86: -9,-15 + 87: -3,-15 + 88: -3,-14 + 89: -3,-13 + 90: -3,-12 + 91: -3,-11 + 92: -1,-11 + 93: -1,-12 + 94: -1,-13 + 95: -1,-15 + 96: -1,-14 + 97: -1,-9 + 98: -1,-8 + 99: -1,-7 + 100: -1,-6 + 101: -1,-5 + 102: -3,-6 + 103: -3,-5 + 104: -3,-7 + 105: -3,-8 + 106: -3,-9 + 107: 1,-7 + 108: 1,-6 + 109: 1,-5 + 110: 1,-13 + 111: 1,-14 + 126: 1,-15 + - node: + color: '#334E6DFF' + id: BrickTileWhiteCornerNe + decals: + 113: -4,7 + - node: + color: '#334E6DFF' + id: BrickTileWhiteCornerNw + decals: + 112: -9,7 + - node: + color: '#334E6DFF' + id: BrickTileWhiteCornerSe + decals: + 114: -4,5 + - node: + color: '#334E6DFF' + id: BrickTileWhiteCornerSw + decals: + 115: -9,5 + - node: + color: '#334E6DFF' + id: BrickTileWhiteLineE + decals: + 116: -4,6 + - node: + color: '#334E6DFF' + id: BrickTileWhiteLineN + decals: + 122: -8,7 + 123: -7,7 + 124: -6,7 + 125: -5,7 + - node: + color: '#334E6DFF' + id: BrickTileWhiteLineS + decals: + 117: -8,5 + 118: -7,5 + 119: -6,5 + 120: -5,5 + - node: + color: '#334E6DFF' + id: BrickTileWhiteLineW + decals: + 121: -9,6 + - node: + color: '#52B4E996' + id: CheckerNESW + decals: + 47: -14,-11 + 48: -13,-11 + 49: -12,-11 + 50: -11,-11 + 51: -14,-16 + 52: -14,-17 + 53: -13,-17 + 54: -13,-16 + 55: -12,-16 + 56: -12,-17 + 57: -11,-17 + 58: -11,-16 + - node: + color: '#FFFFFFFF' + id: Delivery + decals: + 1: -12,2 + 2: -13,2 + 3: -14,2 + 19: -12,-9 + 20: -13,-9 + 21: -11,-6 + 22: -11,-5 + 35: -12,-3 + 36: -13,-3 + 37: -11,-13 + 38: -11,-14 + - node: + color: '#52B4E996' + id: HalfTileOverlayGreyscale + decals: + 44: -11,-12 + 45: -12,-12 + 46: -13,-12 + - node: + color: '#52B4E996' + id: HalfTileOverlayGreyscale180 + decals: + 41: -13,-15 + 42: -12,-15 + 43: -11,-15 + - node: + color: '#52B4E996' + id: HalfTileOverlayGreyscale270 + decals: + 59: -14,-14 + 60: -14,-13 + - node: + color: '#52B4E996' + id: ThreeQuarterTileOverlayGreyscale + decals: + 39: -14,-12 + - node: + color: '#52B4E996' + id: ThreeQuarterTileOverlayGreyscale270 + decals: + 40: -14,-15 + - node: + color: '#FFFFFFFF' + id: WarnCornerNE + decals: + 10: -12,-4 + - node: + color: '#FFFFFFFF' + id: WarnCornerNW + decals: + 9: -13,-4 + - node: + color: '#FFFFFFFF' + id: WarnCornerSE + decals: + 12: -12,-8 + - node: + color: '#FFFFFFFF' + id: WarnCornerSW + decals: + 11: -13,-8 + - node: + color: '#FFFFFFFF' + id: WarnLineE + decals: + 13: -12,-5 + 14: -12,-6 + 15: -12,-7 + - node: + color: '#FFFFFFFF' + id: WarnLineS + decals: + 16: -13,-5 + 17: -13,-6 + 18: -13,-7 + type: DecalGrid + - version: 2 + data: + tiles: + 0,0: + 0: 30583 + -1,0: + 0: 65535 + -1,-1: + 0: 65535 + 0,-1: + 0: 30583 + 0,1: + 0: 7 + -4,0: + 0: 61166 + -4,1: + 0: 14 + -3,0: + 0: 65535 + -3,1: + 0: 61167 + -3,2: + 0: 238 + -2,0: + 0: 65535 + -2,1: + 0: 65535 + -2,2: + 0: 255 + -1,1: + 0: 30591 + -1,2: + 0: 119 + -4,-4: + 0: 61166 + -4,-3: + 0: 61166 + -4,-2: + 0: 61166 + -4,-1: + 0: 61166 + -3,-4: + 0: 65535 + -3,-3: + 0: 65535 + -3,-2: + 0: 65535 + -3,-1: + 0: 65535 + -2,-4: + 0: 65535 + -2,-3: + 0: 65535 + -2,-2: + 0: 65535 + -2,-1: + 0: 65535 + -1,-4: + 0: 65535 + -1,-3: + 0: 65535 + -1,-2: + 0: 65535 + 0,-4: + 0: 30583 + 0,-3: + 0: 30583 + 0,-2: + 0: 30583 + -4,-5: + 0: 61152 + -3,-5: + 0: 65520 + -2,-6: + 0: 65520 + -2,-5: + 0: 65535 + -1,-6: + 0: 65520 + -1,-5: + 0: 65535 + 0,-6: + 0: 30576 + 0,-5: + 0: 30583 + uniqueMixes: + - volume: 2500 + temperature: 293.15 + moles: + - 21.824879 + - 82.10312 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + chunkSize: 4 + type: GridAtmosphere + - type: GasTileOverlay + - type: RadiationGridResistance +- proto: AirCanister + entities: + - uid: 326 + components: + - pos: -13.5,-3.5 + parent: 1 + type: Transform + - uid: 445 + components: + - pos: -1.5,-18.5 + parent: 1 + type: Transform +- proto: AirlockCommandGlassLocked + entities: + - uid: 70 + components: + - rot: 3.141592653589793 rad + pos: -5.5,-1.5 + parent: 1 + type: Transform + - uid: 71 + components: + - rot: 3.141592653589793 rad + pos: -6.5,-1.5 + parent: 1 + type: Transform + - uid: 78 + components: + - rot: 3.141592653589793 rad + pos: -6.5,3.5 + parent: 1 + type: Transform + - uid: 79 + components: + - rot: 3.141592653589793 rad + pos: -5.5,3.5 + parent: 1 + type: Transform + - uid: 81 + components: + - rot: 3.141592653589793 rad + pos: -8.5,2.5 + parent: 1 + type: Transform +- proto: AirlockEngineeringGlassLocked + entities: + - uid: 292 + components: + - pos: -2.5,-17.5 + parent: 1 + type: Transform +- proto: AirlockExternalGlassEasyPry + entities: + - uid: 91 + components: + - pos: -9.5,1.5 + parent: 1 + type: Transform +- proto: AirlockExternalGlassLocked + entities: + - uid: 111 + components: + - rot: 3.141592653589793 rad + pos: -14.5,1.5 + parent: 1 + type: Transform + - uid: 112 + components: + - rot: 3.141592653589793 rad + pos: -14.5,0.5 + parent: 1 + type: Transform + - uid: 433 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,-19.5 + parent: 1 + type: Transform + - uid: 581 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,-20.5 + parent: 1 + type: Transform +- proto: AirlockGlass + entities: + - uid: 671 + components: + - rot: 3.141592653589793 rad + pos: -9.5,-5.5 + parent: 1 + type: Transform + - uid: 672 + components: + - rot: 3.141592653589793 rad + pos: -9.5,-4.5 + parent: 1 + type: Transform +- proto: AirlockGlassShuttleEasyPry + entities: + - uid: 3 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-0.5 + parent: 1 + type: Transform + - uid: 260 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-2.5 + parent: 1 + type: Transform + - uid: 473 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-8.5 + parent: 1 + type: Transform + - uid: 474 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-10.5 + parent: 1 + type: Transform +- proto: AirlockMedicalGlass + entities: + - uid: 346 + components: + - pos: -9.5,-13.5 + parent: 1 + type: Transform + - uid: 347 + components: + - rot: -1.5707963267948966 rad + pos: -12.5,-9.5 + parent: 1 + type: Transform + - uid: 665 + components: + - rot: -1.5707963267948966 rad + pos: -11.5,-9.5 + parent: 1 + type: Transform + - uid: 666 + components: + - rot: -1.5707963267948966 rad + pos: -9.5,-12.5 + parent: 1 + type: Transform +- proto: AirlockSecurityGlassLocked + entities: + - uid: 35 + components: + - pos: 0.5,-1.5 + parent: 1 + type: Transform + - uid: 36 + components: + - pos: -3.5,0.5 + parent: 1 + type: Transform +- proto: APCBasic + entities: + - uid: 2 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,5.5 + parent: 1 + type: Transform + - uid: 39 + components: + - rot: 3.141592653589793 rad + pos: 1.5,-1.5 + parent: 1 + type: Transform + - uid: 119 + components: + - pos: -10.5,1.5 + parent: 1 + type: Transform + - uid: 348 + components: + - rot: 3.141592653589793 rad + pos: -10.5,-9.5 + parent: 1 + type: Transform + - uid: 351 + components: + - rot: 1.5707963267948966 rad + pos: -14.5,-10.5 + parent: 1 + type: Transform + - uid: 585 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,-11.5 + parent: 1 + type: Transform + - uid: 717 + components: + - pos: -4.5,-17.5 + parent: 1 + type: Transform +- proto: AtmosDeviceFanTiny + entities: + - uid: 583 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,-0.5 + parent: 1 + type: Transform + - uid: 658 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,-19.5 + parent: 1 + type: Transform + - uid: 659 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,-20.5 + parent: 1 + type: Transform + - uid: 696 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,-2.5 + parent: 1 + type: Transform + - uid: 763 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,-8.5 + parent: 1 + type: Transform + - uid: 764 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,-10.5 + parent: 1 + type: Transform +- proto: BorgCharger + entities: + - uid: 270 + components: + - rot: 1.5707963267948966 rad + pos: -11.5,-2.5 + parent: 1 + type: Transform + - uid: 271 + components: + - rot: 1.5707963267948966 rad + pos: -12.5,-2.5 + parent: 1 + type: Transform +- proto: BoxFlare + entities: + - uid: 285 + components: + - pos: -13.337719,-7.4710283 + parent: 1 + type: Transform +- proto: BoxFolderBlue + entities: + - uid: 258 + components: + - pos: -8.420452,8.586648 + parent: 1 + type: Transform +- proto: CableApcExtension + entities: + - uid: 40 + components: + - pos: 1.5,-1.5 + parent: 1 + type: Transform + - uid: 42 + components: + - pos: 1.5,-0.5 + parent: 1 + type: Transform + - uid: 43 + components: + - pos: 1.5,0.5 + parent: 1 + type: Transform + - uid: 44 + components: + - pos: 0.5,0.5 + parent: 1 + type: Transform + - uid: 45 + components: + - pos: -0.5,0.5 + parent: 1 + type: Transform + - uid: 46 + components: + - pos: -1.5,0.5 + parent: 1 + type: Transform + - uid: 47 + components: + - pos: -2.5,0.5 + parent: 1 + type: Transform + - uid: 48 + components: + - pos: -0.5,1.5 + parent: 1 + type: Transform + - uid: 49 + components: + - pos: -0.5,2.5 + parent: 1 + type: Transform + - uid: 50 + components: + - pos: -2.5,1.5 + parent: 1 + type: Transform + - uid: 51 + components: + - pos: -2.5,2.5 + parent: 1 + type: Transform + - uid: 52 + components: + - pos: 1.5,1.5 + parent: 1 + type: Transform + - uid: 53 + components: + - pos: 1.5,2.5 + parent: 1 + type: Transform + - uid: 54 + components: + - pos: -1.5,-0.5 + parent: 1 + type: Transform + - uid: 55 + components: + - pos: -1.5,-1.5 + parent: 1 + type: Transform + - uid: 56 + components: + - pos: -0.5,3.5 + parent: 1 + type: Transform + - uid: 57 + components: + - pos: 0.5,3.5 + parent: 1 + type: Transform + - uid: 58 + components: + - pos: 2.5,2.5 + parent: 1 + type: Transform + - uid: 59 + components: + - pos: 2.5,1.5 + parent: 1 + type: Transform + - uid: 66 + components: + - pos: -3.5,1.5 + parent: 1 + type: Transform + - uid: 120 + components: + - pos: -10.5,1.5 + parent: 1 + type: Transform + - uid: 121 + components: + - pos: -10.5,0.5 + parent: 1 + type: Transform + - uid: 122 + components: + - pos: -11.5,0.5 + parent: 1 + type: Transform + - uid: 123 + components: + - pos: -12.5,0.5 + parent: 1 + type: Transform + - uid: 124 + components: + - pos: -13.5,0.5 + parent: 1 + type: Transform + - uid: 125 + components: + - pos: -10.5,2.5 + parent: 1 + type: Transform + - uid: 126 + components: + - pos: -9.5,2.5 + parent: 1 + type: Transform + - uid: 127 + components: + - pos: -11.5,2.5 + parent: 1 + type: Transform + - uid: 128 + components: + - pos: -12.5,2.5 + parent: 1 + type: Transform + - uid: 129 + components: + - pos: -13.5,2.5 + parent: 1 + type: Transform + - uid: 130 + components: + - pos: -14.5,2.5 + parent: 1 + type: Transform + - uid: 131 + components: + - pos: -12.5,3.5 + parent: 1 + type: Transform + - uid: 132 + components: + - pos: -13.5,-0.5 + parent: 1 + type: Transform + - uid: 133 + components: + - pos: -14.5,-0.5 + parent: 1 + type: Transform + - uid: 134 + components: + - pos: -10.5,-0.5 + parent: 1 + type: Transform + - uid: 135 + components: + - pos: -9.5,-0.5 + parent: 1 + type: Transform + - uid: 226 + components: + - pos: -1.5,5.5 + parent: 1 + type: Transform + - uid: 227 + components: + - pos: -2.5,5.5 + parent: 1 + type: Transform + - uid: 228 + components: + - pos: -3.5,5.5 + parent: 1 + type: Transform + - uid: 229 + components: + - pos: -4.5,5.5 + parent: 1 + type: Transform + - uid: 230 + components: + - pos: -5.5,5.5 + parent: 1 + type: Transform + - uid: 231 + components: + - pos: -6.5,5.5 + parent: 1 + type: Transform + - uid: 232 + components: + - pos: -7.5,5.5 + parent: 1 + type: Transform + - uid: 233 + components: + - pos: -8.5,5.5 + parent: 1 + type: Transform + - uid: 234 + components: + - pos: -9.5,5.5 + parent: 1 + type: Transform + - uid: 235 + components: + - pos: -9.5,6.5 + parent: 1 + type: Transform + - uid: 236 + components: + - pos: -9.5,7.5 + parent: 1 + type: Transform + - uid: 237 + components: + - pos: -8.5,7.5 + parent: 1 + type: Transform + - uid: 238 + components: + - pos: -7.5,7.5 + parent: 1 + type: Transform + - uid: 239 + components: + - pos: -6.5,7.5 + parent: 1 + type: Transform + - uid: 240 + components: + - pos: -5.5,7.5 + parent: 1 + type: Transform + - uid: 241 + components: + - pos: -4.5,7.5 + parent: 1 + type: Transform + - uid: 242 + components: + - pos: -3.5,7.5 + parent: 1 + type: Transform + - uid: 243 + components: + - pos: -2.5,7.5 + parent: 1 + type: Transform + - uid: 244 + components: + - pos: -2.5,6.5 + parent: 1 + type: Transform + - uid: 245 + components: + - pos: -4.5,4.5 + parent: 1 + type: Transform + - uid: 246 + components: + - pos: -7.5,4.5 + parent: 1 + type: Transform + - uid: 356 + components: + - pos: -10.5,-9.5 + parent: 1 + type: Transform + - uid: 357 + components: + - pos: -10.5,-8.5 + parent: 1 + type: Transform + - uid: 358 + components: + - pos: -11.5,-8.5 + parent: 1 + type: Transform + - uid: 359 + components: + - pos: -11.5,-7.5 + parent: 1 + type: Transform + - uid: 360 + components: + - pos: -11.5,-6.5 + parent: 1 + type: Transform + - uid: 361 + components: + - pos: -11.5,-5.5 + parent: 1 + type: Transform + - uid: 362 + components: + - pos: -11.5,-4.5 + parent: 1 + type: Transform + - uid: 363 + components: + - pos: -11.5,-3.5 + parent: 1 + type: Transform + - uid: 364 + components: + - pos: -12.5,-3.5 + parent: 1 + type: Transform + - uid: 365 + components: + - pos: -13.5,-3.5 + parent: 1 + type: Transform + - uid: 366 + components: + - pos: -13.5,-4.5 + parent: 1 + type: Transform + - uid: 367 + components: + - pos: -13.5,-5.5 + parent: 1 + type: Transform + - uid: 368 + components: + - pos: -13.5,-6.5 + parent: 1 + type: Transform + - uid: 369 + components: + - pos: -13.5,-7.5 + parent: 1 + type: Transform + - uid: 370 + components: + - pos: -12.5,-7.5 + parent: 1 + type: Transform + - uid: 371 + components: + - pos: -10.5,-5.5 + parent: 1 + type: Transform + - uid: 372 + components: + - pos: -10.5,-3.5 + parent: 1 + type: Transform + - uid: 373 + components: + - pos: -14.5,-10.5 + parent: 1 + type: Transform + - uid: 374 + components: + - pos: -13.5,-10.5 + parent: 1 + type: Transform + - uid: 375 + components: + - pos: -12.5,-10.5 + parent: 1 + type: Transform + - uid: 376 + components: + - pos: -12.5,-11.5 + parent: 1 + type: Transform + - uid: 377 + components: + - pos: -12.5,-12.5 + parent: 1 + type: Transform + - uid: 378 + components: + - pos: -12.5,-13.5 + parent: 1 + type: Transform + - uid: 379 + components: + - pos: -12.5,-14.5 + parent: 1 + type: Transform + - uid: 380 + components: + - pos: -12.5,-15.5 + parent: 1 + type: Transform + - uid: 381 + components: + - pos: -11.5,-15.5 + parent: 1 + type: Transform + - uid: 382 + components: + - pos: -10.5,-15.5 + parent: 1 + type: Transform + - uid: 383 + components: + - pos: -10.5,-14.5 + parent: 1 + type: Transform + - uid: 384 + components: + - pos: -10.5,-13.5 + parent: 1 + type: Transform + - uid: 385 + components: + - pos: -10.5,-12.5 + parent: 1 + type: Transform + - uid: 386 + components: + - pos: -10.5,-11.5 + parent: 1 + type: Transform + - uid: 387 + components: + - pos: -13.5,-12.5 + parent: 1 + type: Transform + - uid: 388 + components: + - pos: -14.5,-12.5 + parent: 1 + type: Transform + - uid: 389 + components: + - pos: -14.5,-13.5 + parent: 1 + type: Transform + - uid: 390 + components: + - pos: -14.5,-14.5 + parent: 1 + type: Transform + - uid: 391 + components: + - pos: -14.5,-15.5 + parent: 1 + type: Transform + - uid: 392 + components: + - pos: -9.5,-14.5 + parent: 1 + type: Transform + - uid: 393 + components: + - pos: -9.5,-11.5 + parent: 1 + type: Transform + - uid: 434 + components: + - pos: 2.5,-18.5 + parent: 1 + type: Transform + - uid: 576 + components: + - pos: 1.5,-19.5 + parent: 1 + type: Transform + - uid: 587 + components: + - pos: -7.5,-5.5 + parent: 1 + type: Transform + - uid: 596 + components: + - pos: -5.5,-11.5 + parent: 1 + type: Transform + - uid: 597 + components: + - pos: -6.5,-11.5 + parent: 1 + type: Transform + - uid: 598 + components: + - pos: -7.5,-11.5 + parent: 1 + type: Transform + - uid: 599 + components: + - pos: -7.5,-12.5 + parent: 1 + type: Transform + - uid: 600 + components: + - pos: -7.5,-13.5 + parent: 1 + type: Transform + - uid: 601 + components: + - pos: -7.5,-15.5 + parent: 1 + type: Transform + - uid: 602 + components: + - pos: -7.5,-14.5 + parent: 1 + type: Transform + - uid: 603 + components: + - pos: -7.5,-10.5 + parent: 1 + type: Transform + - uid: 604 + components: + - pos: -7.5,-9.5 + parent: 1 + type: Transform + - uid: 605 + components: + - pos: -7.5,-8.5 + parent: 1 + type: Transform + - uid: 606 + components: + - pos: -7.5,-7.5 + parent: 1 + type: Transform + - uid: 607 + components: + - pos: -7.5,-6.5 + parent: 1 + type: Transform + - uid: 608 + components: + - pos: -7.5,-4.5 + parent: 1 + type: Transform + - uid: 609 + components: + - pos: -7.5,-3.5 + parent: 1 + type: Transform + - uid: 610 + components: + - pos: -6.5,-3.5 + parent: 1 + type: Transform + - uid: 611 + components: + - pos: -5.5,-3.5 + parent: 1 + type: Transform + - uid: 612 + components: + - pos: -4.5,-3.5 + parent: 1 + type: Transform + - uid: 613 + components: + - pos: -3.5,-3.5 + parent: 1 + type: Transform + - uid: 614 + components: + - pos: -3.5,-4.5 + parent: 1 + type: Transform + - uid: 615 + components: + - pos: -3.5,-5.5 + parent: 1 + type: Transform + - uid: 616 + components: + - pos: -3.5,-6.5 + parent: 1 + type: Transform + - uid: 617 + components: + - pos: -3.5,-7.5 + parent: 1 + type: Transform + - uid: 618 + components: + - pos: -3.5,-8.5 + parent: 1 + type: Transform + - uid: 619 + components: + - pos: -3.5,-9.5 + parent: 1 + type: Transform + - uid: 620 + components: + - pos: -3.5,-10.5 + parent: 1 + type: Transform + - uid: 621 + components: + - pos: -3.5,-11.5 + parent: 1 + type: Transform + - uid: 622 + components: + - pos: -3.5,-12.5 + parent: 1 + type: Transform + - uid: 623 + components: + - pos: -3.5,-13.5 + parent: 1 + type: Transform + - uid: 624 + components: + - pos: -3.5,-14.5 + parent: 1 + type: Transform + - uid: 625 + components: + - pos: -3.5,-15.5 + parent: 1 + type: Transform + - uid: 626 + components: + - pos: -4.5,-15.5 + parent: 1 + type: Transform + - uid: 627 + components: + - pos: -6.5,-15.5 + parent: 1 + type: Transform + - uid: 628 + components: + - pos: -5.5,-15.5 + parent: 1 + type: Transform + - uid: 629 + components: + - pos: -2.5,-15.5 + parent: 1 + type: Transform + - uid: 630 + components: + - pos: -1.5,-15.5 + parent: 1 + type: Transform + - uid: 631 + components: + - pos: -0.5,-15.5 + parent: 1 + type: Transform + - uid: 632 + components: + - pos: 0.5,-15.5 + parent: 1 + type: Transform + - uid: 633 + components: + - pos: 0.5,-14.5 + parent: 1 + type: Transform + - uid: 634 + components: + - pos: 0.5,-12.5 + parent: 1 + type: Transform + - uid: 635 + components: + - pos: 0.5,-11.5 + parent: 1 + type: Transform + - uid: 636 + components: + - pos: 0.5,-10.5 + parent: 1 + type: Transform + - uid: 637 + components: + - pos: 0.5,-13.5 + parent: 1 + type: Transform + - uid: 638 + components: + - pos: 0.5,-9.5 + parent: 1 + type: Transform + - uid: 639 + components: + - pos: -0.5,-9.5 + parent: 1 + type: Transform + - uid: 640 + components: + - pos: -1.5,-9.5 + parent: 1 + type: Transform + - uid: 641 + components: + - pos: -2.5,-9.5 + parent: 1 + type: Transform + - uid: 642 + components: + - pos: -4.5,-9.5 + parent: 1 + type: Transform + - uid: 643 + components: + - pos: -5.5,-9.5 + parent: 1 + type: Transform + - uid: 644 + components: + - pos: -6.5,-9.5 + parent: 1 + type: Transform + - uid: 645 + components: + - pos: 0.5,-8.5 + parent: 1 + type: Transform + - uid: 646 + components: + - pos: 0.5,-7.5 + parent: 1 + type: Transform + - uid: 647 + components: + - pos: 0.5,-6.5 + parent: 1 + type: Transform + - uid: 648 + components: + - pos: 0.5,-5.5 + parent: 1 + type: Transform + - uid: 649 + components: + - pos: 0.5,-4.5 + parent: 1 + type: Transform + - uid: 650 + components: + - pos: 0.5,-3.5 + parent: 1 + type: Transform + - uid: 651 + components: + - pos: -0.5,-3.5 + parent: 1 + type: Transform + - uid: 652 + components: + - pos: -1.5,-3.5 + parent: 1 + type: Transform + - uid: 653 + components: + - pos: -2.5,-3.5 + parent: 1 + type: Transform + - uid: 654 + components: + - pos: 2.5,-21.5 + parent: 1 + type: Transform + - uid: 655 + components: + - pos: 1.5,-21.5 + parent: 1 + type: Transform + - uid: 656 + components: + - pos: 1.5,-20.5 + parent: 1 + type: Transform + - uid: 675 + components: + - pos: 2.5,-19.5 + parent: 1 + type: Transform + - uid: 718 + components: + - pos: -4.5,-17.5 + parent: 1 + type: Transform + - uid: 719 + components: + - pos: -4.5,-18.5 + parent: 1 + type: Transform + - uid: 720 + components: + - pos: -5.5,-18.5 + parent: 1 + type: Transform + - uid: 721 + components: + - pos: -6.5,-18.5 + parent: 1 + type: Transform + - uid: 722 + components: + - pos: -7.5,-18.5 + parent: 1 + type: Transform + - uid: 723 + components: + - pos: -8.5,-18.5 + parent: 1 + type: Transform + - uid: 724 + components: + - pos: -9.5,-18.5 + parent: 1 + type: Transform + - uid: 725 + components: + - pos: -10.5,-18.5 + parent: 1 + type: Transform + - uid: 726 + components: + - pos: -11.5,-18.5 + parent: 1 + type: Transform + - uid: 727 + components: + - pos: -12.5,-18.5 + parent: 1 + type: Transform + - uid: 728 + components: + - pos: -13.5,-18.5 + parent: 1 + type: Transform + - uid: 731 + components: + - pos: 1.5,-18.5 + parent: 1 + type: Transform + - uid: 732 + components: + - pos: 0.5,-18.5 + parent: 1 + type: Transform + - uid: 733 + components: + - pos: -0.5,-18.5 + parent: 1 + type: Transform + - uid: 734 + components: + - pos: -1.5,-18.5 + parent: 1 + type: Transform + - uid: 735 + components: + - pos: -2.5,-18.5 + parent: 1 + type: Transform + - uid: 736 + components: + - pos: -3.5,-18.5 + parent: 1 + type: Transform + - uid: 752 + components: + - pos: -12.5,4.5 + parent: 1 + type: Transform + - uid: 753 + components: + - pos: -11.5,4.5 + parent: 1 + type: Transform + - uid: 754 + components: + - pos: -13.5,4.5 + parent: 1 + type: Transform + - uid: 755 + components: + - pos: -14.5,4.5 + parent: 1 + type: Transform + - uid: 756 + components: + - pos: 0.5,4.5 + parent: 1 + type: Transform + - uid: 757 + components: + - pos: -0.5,4.5 + parent: 1 + type: Transform + - uid: 758 + components: + - pos: 1.5,4.5 + parent: 1 + type: Transform + - uid: 759 + components: + - pos: 2.5,4.5 + parent: 1 + type: Transform + - uid: 760 + components: + - pos: 2.5,-20.5 + parent: 1 + type: Transform + - uid: 769 + components: + - pos: -1.5,-19.5 + parent: 1 + type: Transform + - uid: 770 + components: + - pos: -1.5,-20.5 + parent: 1 + type: Transform + - uid: 771 + components: + - pos: -3.5,-19.5 + parent: 1 + type: Transform + - uid: 772 + components: + - pos: -3.5,-20.5 + parent: 1 + type: Transform + - uid: 775 + components: + - pos: -1.5,-21.5 + parent: 1 + type: Transform + - uid: 776 + components: + - pos: -1.5,-22.5 + parent: 1 + type: Transform + - uid: 777 + components: + - pos: -2.5,-22.5 + parent: 1 + type: Transform +- proto: CableHV + entities: + - uid: 578 + components: + - pos: 0.5,-21.5 + parent: 1 + type: Transform + - uid: 579 + components: + - pos: 0.5,-20.5 + parent: 1 + type: Transform + - uid: 661 + components: + - pos: 0.5,-19.5 + parent: 1 + type: Transform + - uid: 687 + components: + - pos: -0.5,-19.5 + parent: 1 + type: Transform + - uid: 688 + components: + - pos: -0.5,-20.5 + parent: 1 + type: Transform +- proto: CableMV + entities: + - uid: 67 + components: + - pos: 1.5,-1.5 + parent: 1 + type: Transform + - uid: 68 + components: + - pos: 0.5,-1.5 + parent: 1 + type: Transform + - uid: 136 + components: + - pos: -10.5,1.5 + parent: 1 + type: Transform + - uid: 137 + components: + - pos: -9.5,1.5 + parent: 1 + type: Transform + - uid: 138 + components: + - pos: -9.5,2.5 + parent: 1 + type: Transform + - uid: 139 + components: + - pos: -8.5,2.5 + parent: 1 + type: Transform + - uid: 140 + components: + - pos: -7.5,2.5 + parent: 1 + type: Transform + - uid: 141 + components: + - pos: -6.5,2.5 + parent: 1 + type: Transform + - uid: 142 + components: + - pos: -6.5,1.5 + parent: 1 + type: Transform + - uid: 143 + components: + - pos: -6.5,0.5 + parent: 1 + type: Transform + - uid: 144 + components: + - pos: -6.5,-0.5 + parent: 1 + type: Transform + - uid: 145 + components: + - pos: -6.5,-1.5 + parent: 1 + type: Transform + - uid: 146 + components: + - pos: -5.5,0.5 + parent: 1 + type: Transform + - uid: 147 + components: + - pos: -4.5,0.5 + parent: 1 + type: Transform + - uid: 148 + components: + - pos: -3.5,0.5 + parent: 1 + type: Transform + - uid: 149 + components: + - pos: -2.5,0.5 + parent: 1 + type: Transform + - uid: 150 + components: + - pos: -1.5,0.5 + parent: 1 + type: Transform + - uid: 151 + components: + - pos: -0.5,0.5 + parent: 1 + type: Transform + - uid: 152 + components: + - pos: 0.5,0.5 + parent: 1 + type: Transform + - uid: 153 + components: + - pos: 1.5,0.5 + parent: 1 + type: Transform + - uid: 154 + components: + - pos: 1.5,-0.5 + parent: 1 + type: Transform + - uid: 155 + components: + - pos: -7.5,-1.5 + parent: 1 + type: Transform + - uid: 156 + components: + - pos: -4.5,-1.5 + parent: 1 + type: Transform + - uid: 160 + components: + - pos: -5.5,-1.5 + parent: 1 + type: Transform + - uid: 202 + components: + - pos: -6.5,3.5 + parent: 1 + type: Transform + - uid: 203 + components: + - pos: -6.5,4.5 + parent: 1 + type: Transform + - uid: 204 + components: + - pos: -6.5,5.5 + parent: 1 + type: Transform + - uid: 205 + components: + - pos: -5.5,5.5 + parent: 1 + type: Transform + - uid: 206 + components: + - pos: -4.5,5.5 + parent: 1 + type: Transform + - uid: 207 + components: + - pos: -3.5,5.5 + parent: 1 + type: Transform + - uid: 208 + components: + - pos: -2.5,5.5 + parent: 1 + type: Transform + - uid: 209 + components: + - pos: -1.5,5.5 + parent: 1 + type: Transform + - uid: 210 + components: + - pos: -1.5,6.5 + parent: 1 + type: Transform + - uid: 211 + components: + - pos: -1.5,7.5 + parent: 1 + type: Transform + - uid: 212 + components: + - pos: -6.5,6.5 + parent: 1 + type: Transform + - uid: 213 + components: + - pos: -6.5,7.5 + parent: 1 + type: Transform + - uid: 214 + components: + - pos: -6.5,8.5 + parent: 1 + type: Transform + - uid: 215 + components: + - pos: -6.5,9.5 + parent: 1 + type: Transform + - uid: 216 + components: + - pos: -7.5,9.5 + parent: 1 + type: Transform + - uid: 217 + components: + - pos: -8.5,9.5 + parent: 1 + type: Transform + - uid: 218 + components: + - pos: -5.5,9.5 + parent: 1 + type: Transform + - uid: 219 + components: + - pos: -4.5,9.5 + parent: 1 + type: Transform + - uid: 220 + components: + - pos: -3.5,9.5 + parent: 1 + type: Transform + - uid: 221 + components: + - pos: -7.5,6.5 + parent: 1 + type: Transform + - uid: 222 + components: + - pos: -8.5,6.5 + parent: 1 + type: Transform + - uid: 223 + components: + - pos: -9.5,6.5 + parent: 1 + type: Transform + - uid: 224 + components: + - pos: -10.5,6.5 + parent: 1 + type: Transform + - uid: 225 + components: + - pos: -10.5,7.5 + parent: 1 + type: Transform + - uid: 266 + components: + - pos: -13.5,-7.5 + parent: 1 + type: Transform + - uid: 282 + components: + - pos: -12.5,-12.5 + parent: 1 + type: Transform + - uid: 293 + components: + - pos: -6.5,-2.5 + parent: 1 + type: Transform + - uid: 294 + components: + - pos: -6.5,-3.5 + parent: 1 + type: Transform + - uid: 295 + components: + - pos: -6.5,-4.5 + parent: 1 + type: Transform + - uid: 296 + components: + - pos: -7.5,-4.5 + parent: 1 + type: Transform + - uid: 297 + components: + - pos: -8.5,-4.5 + parent: 1 + type: Transform + - uid: 298 + components: + - pos: -9.5,-4.5 + parent: 1 + type: Transform + - uid: 299 + components: + - pos: -10.5,-4.5 + parent: 1 + type: Transform + - uid: 300 + components: + - pos: -11.5,-4.5 + parent: 1 + type: Transform + - uid: 301 + components: + - pos: -12.5,-4.5 + parent: 1 + type: Transform + - uid: 302 + components: + - pos: -12.5,-5.5 + parent: 1 + type: Transform + - uid: 303 + components: + - pos: -12.5,-6.5 + parent: 1 + type: Transform + - uid: 304 + components: + - pos: -12.5,-7.5 + parent: 1 + type: Transform + - uid: 305 + components: + - pos: -12.5,-8.5 + parent: 1 + type: Transform + - uid: 307 + components: + - pos: -11.5,-7.5 + parent: 1 + type: Transform + - uid: 308 + components: + - pos: -10.5,-7.5 + parent: 1 + type: Transform + - uid: 311 + components: + - pos: -14.5,-7.5 + parent: 1 + type: Transform + - uid: 312 + components: + - pos: -14.5,-6.5 + parent: 1 + type: Transform + - uid: 313 + components: + - pos: -14.5,-5.5 + parent: 1 + type: Transform + - uid: 314 + components: + - pos: -14.5,-4.5 + parent: 1 + type: Transform + - uid: 315 + components: + - pos: -14.5,-3.5 + parent: 1 + type: Transform + - uid: 349 + components: + - pos: -10.5,-8.5 + parent: 1 + type: Transform + - uid: 350 + components: + - pos: -10.5,-9.5 + parent: 1 + type: Transform + - uid: 352 + components: + - pos: -12.5,-9.5 + parent: 1 + type: Transform + - uid: 353 + components: + - pos: -12.5,-10.5 + parent: 1 + type: Transform + - uid: 354 + components: + - pos: -13.5,-10.5 + parent: 1 + type: Transform + - uid: 355 + components: + - pos: -14.5,-10.5 + parent: 1 + type: Transform + - uid: 577 + components: + - pos: 0.5,-19.5 + parent: 1 + type: Transform + - uid: 584 + components: + - pos: -11.5,-12.5 + parent: 1 + type: Transform + - uid: 586 + components: + - pos: -12.5,-11.5 + parent: 1 + type: Transform + - uid: 589 + components: + - pos: -10.5,-12.5 + parent: 1 + type: Transform + - uid: 590 + components: + - pos: -9.5,-12.5 + parent: 1 + type: Transform + - uid: 591 + components: + - pos: -8.5,-12.5 + parent: 1 + type: Transform + - uid: 592 + components: + - pos: -7.5,-12.5 + parent: 1 + type: Transform + - uid: 593 + components: + - pos: -6.5,-12.5 + parent: 1 + type: Transform + - uid: 594 + components: + - pos: -6.5,-11.5 + parent: 1 + type: Transform + - uid: 595 + components: + - pos: -5.5,-11.5 + parent: 1 + type: Transform + - uid: 657 + components: + - pos: -1.5,-19.5 + parent: 1 + type: Transform + - uid: 660 + components: + - pos: -0.5,-19.5 + parent: 1 + type: Transform + - uid: 670 + components: + - pos: -4.5,-19.5 + parent: 1 + type: Transform + - uid: 673 + components: + - pos: -4.5,-17.5 + parent: 1 + type: Transform + - uid: 685 + components: + - pos: 0.5,-20.5 + parent: 1 + type: Transform + - uid: 686 + components: + - pos: 0.5,-21.5 + parent: 1 + type: Transform + - uid: 693 + components: + - pos: -4.5,-18.5 + parent: 1 + type: Transform + - uid: 694 + components: + - pos: -3.5,-19.5 + parent: 1 + type: Transform + - uid: 695 + components: + - pos: -2.5,-19.5 + parent: 1 + type: Transform + - uid: 737 + components: + - pos: -6.5,-13.5 + parent: 1 + type: Transform + - uid: 738 + components: + - pos: -6.5,-14.5 + parent: 1 + type: Transform + - uid: 739 + components: + - pos: -6.5,-15.5 + parent: 1 + type: Transform + - uid: 740 + components: + - pos: -5.5,-15.5 + parent: 1 + type: Transform + - uid: 741 + components: + - pos: -4.5,-15.5 + parent: 1 + type: Transform + - uid: 742 + components: + - pos: -4.5,-16.5 + parent: 1 + type: Transform + - uid: 743 + components: + - pos: -4.5,-17.5 + parent: 1 + type: Transform +- proto: Catwalk + entities: + - uid: 706 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,-19.5 + parent: 1 + type: Transform + - uid: 708 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,-21.5 + parent: 1 + type: Transform + - uid: 715 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,-19.5 + parent: 1 + type: Transform + - uid: 716 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,-20.5 + parent: 1 + type: Transform + - uid: 730 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,-20.5 + parent: 1 + type: Transform + - uid: 761 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,-18.5 + parent: 1 + type: Transform + - uid: 765 + components: + - rot: -1.5707963267948966 rad + pos: 0.5,-21.5 + parent: 1 + type: Transform + - uid: 766 + components: + - rot: -1.5707963267948966 rad + pos: 0.5,-20.5 + parent: 1 + type: Transform + - uid: 767 + components: + - rot: -1.5707963267948966 rad + pos: 0.5,-19.5 + parent: 1 + type: Transform + - uid: 768 + components: + - rot: -1.5707963267948966 rad + pos: 0.5,-18.5 + parent: 1 + type: Transform + - uid: 778 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,-21.5 + parent: 1 + type: Transform + - uid: 779 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,-18.5 + parent: 1 + type: Transform +- proto: ChairOfficeDark + entities: + - uid: 195 + components: + - rot: 3.141592653589793 rad + pos: -5.5,7.5 + parent: 1 + type: Transform + - uid: 196 + components: + - rot: 3.141592653589793 rad + pos: -6.5,7.5 + parent: 1 + type: Transform + - uid: 197 + components: + - rot: 3.141592653589793 rad + pos: -7.5,7.5 + parent: 1 + type: Transform + - uid: 198 + components: + - rot: 3.141592653589793 rad + pos: -4.5,7.5 + parent: 1 + type: Transform +- proto: ChairPilotSeat + entities: + - uid: 24 + components: + - rot: 3.141592653589793 rad + pos: -1.5,-0.5 + parent: 1 + type: Transform + - uid: 27 + components: + - rot: 3.141592653589793 rad + pos: -0.5,-0.5 + parent: 1 + type: Transform + - uid: 28 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,0.5 + parent: 1 + type: Transform + - uid: 29 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,1.5 + parent: 1 + type: Transform + - uid: 31 + components: + - pos: 0.5,2.5 + parent: 1 + type: Transform + - uid: 32 + components: + - pos: -0.5,2.5 + parent: 1 + type: Transform + - uid: 33 + components: + - pos: -1.5,2.5 + parent: 1 + type: Transform + - uid: 34 + components: + - pos: -2.5,2.5 + parent: 1 + type: Transform + - uid: 108 + components: + - rot: 3.141592653589793 rad + pos: -10.5,-0.5 + parent: 1 + type: Transform + - uid: 109 + components: + - rot: 3.141592653589793 rad + pos: -11.5,-0.5 + parent: 1 + type: Transform + - uid: 110 + components: + - rot: 3.141592653589793 rad + pos: -12.5,-0.5 + parent: 1 + type: Transform + - uid: 493 + components: + - rot: 1.5707963267948966 rad + pos: -4.5,-4.5 + parent: 1 + type: Transform + - uid: 494 + components: + - rot: 1.5707963267948966 rad + pos: -4.5,-5.5 + parent: 1 + type: Transform + - uid: 495 + components: + - rot: 1.5707963267948966 rad + pos: -4.5,-6.5 + parent: 1 + type: Transform + - uid: 496 + components: + - rot: 1.5707963267948966 rad + pos: -4.5,-7.5 + parent: 1 + type: Transform + - uid: 497 + components: + - rot: 1.5707963267948966 rad + pos: -4.5,-8.5 + parent: 1 + type: Transform + - uid: 498 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,-8.5 + parent: 1 + type: Transform + - uid: 499 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,-7.5 + parent: 1 + type: Transform + - uid: 500 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,-6.5 + parent: 1 + type: Transform + - uid: 501 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,-5.5 + parent: 1 + type: Transform + - uid: 502 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,-4.5 + parent: 1 + type: Transform + - uid: 503 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,-4.5 + parent: 1 + type: Transform + - uid: 504 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,-5.5 + parent: 1 + type: Transform + - uid: 505 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,-6.5 + parent: 1 + type: Transform + - uid: 506 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,-7.5 + parent: 1 + type: Transform + - uid: 507 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,-8.5 + parent: 1 + type: Transform + - uid: 508 + components: + - rot: 1.5707963267948966 rad + pos: -0.5,-4.5 + parent: 1 + type: Transform + - uid: 509 + components: + - rot: 1.5707963267948966 rad + pos: -0.5,-5.5 + parent: 1 + type: Transform + - uid: 510 + components: + - rot: 1.5707963267948966 rad + pos: -0.5,-6.5 + parent: 1 + type: Transform + - uid: 511 + components: + - rot: 1.5707963267948966 rad + pos: -0.5,-7.5 + parent: 1 + type: Transform + - uid: 512 + components: + - rot: 1.5707963267948966 rad + pos: -0.5,-8.5 + parent: 1 + type: Transform + - uid: 518 + components: + - rot: 1.5707963267948966 rad + pos: -4.5,-10.5 + parent: 1 + type: Transform + - uid: 519 + components: + - rot: 1.5707963267948966 rad + pos: -4.5,-11.5 + parent: 1 + type: Transform + - uid: 520 + components: + - rot: 1.5707963267948966 rad + pos: -4.5,-12.5 + parent: 1 + type: Transform + - uid: 521 + components: + - rot: 1.5707963267948966 rad + pos: -4.5,-14.5 + parent: 1 + type: Transform + - uid: 522 + components: + - rot: 1.5707963267948966 rad + pos: -4.5,-13.5 + parent: 1 + type: Transform + - uid: 523 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,-14.5 + parent: 1 + type: Transform + - uid: 524 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,-13.5 + parent: 1 + type: Transform + - uid: 525 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,-12.5 + parent: 1 + type: Transform + - uid: 526 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,-11.5 + parent: 1 + type: Transform + - uid: 527 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,-10.5 + parent: 1 + type: Transform + - uid: 538 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,-13.5 + parent: 1 + type: Transform + - uid: 539 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,-12.5 + parent: 1 + type: Transform + - uid: 540 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,-11.5 + parent: 1 + type: Transform + - uid: 541 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,-10.5 + parent: 1 + type: Transform + - uid: 542 + components: + - rot: 1.5707963267948966 rad + pos: -0.5,-10.5 + parent: 1 + type: Transform + - uid: 543 + components: + - rot: 1.5707963267948966 rad + pos: -0.5,-11.5 + parent: 1 + type: Transform + - uid: 544 + components: + - rot: 1.5707963267948966 rad + pos: -0.5,-12.5 + parent: 1 + type: Transform + - uid: 545 + components: + - rot: 1.5707963267948966 rad + pos: -0.5,-13.5 + parent: 1 + type: Transform + - uid: 546 + components: + - rot: 1.5707963267948966 rad + pos: -0.5,-14.5 + parent: 1 + type: Transform + - uid: 547 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,-14.5 + parent: 1 + type: Transform + - uid: 548 + components: + - rot: 1.5707963267948966 rad + pos: -8.5,-6.5 + parent: 1 + type: Transform + - uid: 549 + components: + - rot: 1.5707963267948966 rad + pos: -8.5,-7.5 + parent: 1 + type: Transform + - uid: 550 + components: + - rot: 1.5707963267948966 rad + pos: -8.5,-8.5 + parent: 1 + type: Transform + - uid: 551 + components: + - rot: 1.5707963267948966 rad + pos: -8.5,-9.5 + parent: 1 + type: Transform + - uid: 552 + components: + - rot: 1.5707963267948966 rad + pos: -8.5,-10.5 + parent: 1 + type: Transform + - uid: 555 + components: + - rot: 1.5707963267948966 rad + pos: -8.5,-14.5 + parent: 1 + type: Transform + - uid: 558 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-4.5 + parent: 1 + type: Transform + - uid: 559 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-5.5 + parent: 1 + type: Transform + - uid: 560 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-6.5 + parent: 1 + type: Transform + - uid: 561 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-14.5 + parent: 1 + type: Transform + - uid: 562 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-13.5 + parent: 1 + type: Transform + - uid: 563 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-12.5 + parent: 1 + type: Transform + - uid: 676 + components: + - rot: 3.141592653589793 rad + pos: -1.5,-21.5 + parent: 1 + type: Transform + - uid: 681 + components: + - rot: 3.141592653589793 rad + pos: -2.5,-21.5 + parent: 1 + type: Transform + - uid: 691 + components: + - rot: 3.141592653589793 rad + pos: -3.5,-21.5 + parent: 1 + type: Transform +- proto: ClosetEmergencyFilledRandom + entities: + - uid: 321 + components: + - pos: -10.5,-8.5 + parent: 1 + type: Transform + - uid: 554 + components: + - pos: -8.5,-15.5 + parent: 1 + type: Transform + - uid: 556 + components: + - pos: -8.5,-2.5 + parent: 1 + type: Transform + - uid: 567 + components: + - pos: 1.5,-15.5 + parent: 1 + type: Transform + - uid: 683 + components: + - pos: -4.5,-18.5 + parent: 1 + type: Transform +- proto: ClosetFireFilled + entities: + - uid: 306 + components: + - pos: -13.5,-4.5 + parent: 1 + type: Transform + - uid: 553 + components: + - pos: -8.5,-16.5 + parent: 1 + type: Transform + - uid: 568 + components: + - pos: 1.5,-16.5 + parent: 1 + type: Transform + - uid: 574 + components: + - pos: -7.5,-2.5 + parent: 1 + type: Transform + - uid: 575 + components: + - pos: -3.5,-18.5 + parent: 1 + type: Transform +- proto: ClothingBackpackDuffelSurgeryFilled + entities: + - uid: 416 + components: + - pos: -13.493203,-16.354408 + parent: 1 + type: Transform +- proto: ClothingHeadHatHardhatYellow + entities: + - uid: 800 + components: + - pos: -10.406327,-3.1185083 + parent: 1 + type: Transform +- proto: ClothingMaskGas + entities: + - uid: 798 + components: + - pos: -10.630073,-3.4031057 + parent: 1 + type: Transform +- proto: computerBodyScanner + entities: + - uid: 418 + components: + - rot: 3.141592653589793 rad + pos: -11.5,-16.5 + parent: 1 + type: Transform +- proto: ComputerCrewMonitoring + entities: + - uid: 421 + components: + - rot: -1.5707963267948966 rad + pos: -10.5,-14.5 + parent: 1 + type: Transform +- proto: ComputerEmergencyShuttle + entities: + - uid: 188 + components: + - pos: -5.5,8.5 + parent: 1 + type: Transform +- proto: ComputerId + entities: + - uid: 189 + components: + - pos: -6.5,8.5 + parent: 1 + type: Transform +- proto: ComputerMedicalRecords + entities: + - uid: 191 + components: + - pos: -4.5,8.5 + parent: 1 + type: Transform + - uid: 420 + components: + - rot: 1.5707963267948966 rad + pos: -13.5,-12.5 + parent: 1 + type: Transform +- proto: ComputerRadar + entities: + - uid: 190 + components: + - pos: -7.5,8.5 + parent: 1 + type: Transform +- proto: CrateEmergencyInflatablewall + entities: + - uid: 290 + components: + - pos: -13.5,-5.5 + parent: 1 + type: Transform +- proto: CrateEmergencyInternalsLarge + entities: + - uid: 288 + components: + - pos: -13.5,-6.5 + parent: 1 + type: Transform +- proto: Crowbar + entities: + - uid: 785 + components: + - pos: -13.464078,-7.5057697 + parent: 1 + type: Transform +- proto: Defibrillator + entities: + - uid: 415 + components: + - pos: -10.524453,-16.401283 + parent: 1 + type: Transform +- proto: EncryptionKeyCommon + entities: + - uid: 444 + components: + - flags: InContainer + type: MetaData + - parent: 804 + type: Transform + - canCollide: False + type: Physics +- proto: ExtendedEmergencyNitrogenTankFilled + entities: + - uid: 782 + components: + - pos: -13.539676,-2.3258739 + parent: 1 + type: Transform +- proto: ExtendedEmergencyOxygenTankFilled + entities: + - uid: 783 + components: + - pos: -13.399051,-2.4508739 + parent: 1 + type: Transform +- proto: ExtinguisherCabinetFilled + entities: + - uid: 114 + components: + - pos: -8.5,0.5 + parent: 1 + type: Transform + - uid: 419 + components: + - rot: 3.141592653589793 rad + pos: -14.5,-11.5 + parent: 1 + type: Transform + - uid: 569 + components: + - pos: -5.5,-7.5 + parent: 1 + type: Transform + - uid: 571 + components: + - pos: -1.5,-13.5 + parent: 1 + type: Transform + - uid: 572 + components: + - pos: -1.5,-7.5 + parent: 1 + type: Transform +- proto: FireAxeCabinetFilled + entities: + - uid: 175 + components: + - rot: 1.5707963267948966 rad + pos: -10.5,5.5 + parent: 1 + type: Transform +- proto: FuelDispenser + entities: + - uid: 781 + components: + - pos: -0.5,-17.5 + parent: 1 + type: Transform +- proto: GeneratorBasic15kW + entities: + - uid: 674 + components: + - pos: 0.5,-20.5 + parent: 1 + type: Transform + - uid: 689 + components: + - pos: -0.5,-20.5 + parent: 1 + type: Transform + - uid: 690 + components: + - pos: -0.5,-19.5 + parent: 1 + type: Transform + - uid: 802 + components: + - pos: 0.5,-19.5 + parent: 1 + type: Transform +- proto: GravityGeneratorMini + entities: + - uid: 803 + components: + - pos: -0.5,-21.5 + parent: 1 + type: Transform +- proto: Grille + entities: + - uid: 60 + components: + - rot: 3.141592653589793 rad + pos: -0.5,3.5 + parent: 1 + type: Transform + - uid: 61 + components: + - rot: 3.141592653589793 rad + pos: 0.5,3.5 + parent: 1 + type: Transform + - uid: 62 + components: + - rot: 3.141592653589793 rad + pos: 2.5,2.5 + parent: 1 + type: Transform + - uid: 63 + components: + - rot: 3.141592653589793 rad + pos: 2.5,1.5 + parent: 1 + type: Transform + - uid: 64 + components: + - rot: 3.141592653589793 rad + pos: -1.5,-1.5 + parent: 1 + type: Transform + - uid: 65 + components: + - rot: 3.141592653589793 rad + pos: -3.5,1.5 + parent: 1 + type: Transform + - uid: 157 + components: + - pos: -14.5,-0.5 + parent: 1 + type: Transform + - uid: 158 + components: + - pos: -14.5,2.5 + parent: 1 + type: Transform + - uid: 159 + components: + - pos: -12.5,3.5 + parent: 1 + type: Transform + - uid: 161 + components: + - pos: -7.5,-1.5 + parent: 1 + type: Transform + - uid: 162 + components: + - pos: -4.5,-1.5 + parent: 1 + type: Transform + - uid: 247 + components: + - rot: -1.5707963267948966 rad + pos: -10.5,6.5 + parent: 1 + type: Transform + - uid: 248 + components: + - rot: -1.5707963267948966 rad + pos: -10.5,7.5 + parent: 1 + type: Transform + - uid: 249 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,7.5 + parent: 1 + type: Transform + - uid: 250 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,6.5 + parent: 1 + type: Transform + - uid: 251 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,9.5 + parent: 1 + type: Transform + - uid: 252 + components: + - rot: -1.5707963267948966 rad + pos: -4.5,9.5 + parent: 1 + type: Transform + - uid: 253 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,9.5 + parent: 1 + type: Transform + - uid: 254 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,9.5 + parent: 1 + type: Transform + - uid: 255 + components: + - rot: -1.5707963267948966 rad + pos: -7.5,9.5 + parent: 1 + type: Transform + - uid: 256 + components: + - rot: -1.5707963267948966 rad + pos: -8.5,9.5 + parent: 1 + type: Transform + - uid: 274 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-21.5 + parent: 1 + type: Transform + - uid: 278 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-19.5 + parent: 1 + type: Transform + - uid: 316 + components: + - rot: 1.5707963267948966 rad + pos: -14.5,-3.5 + parent: 1 + type: Transform + - uid: 317 + components: + - rot: 1.5707963267948966 rad + pos: -14.5,-4.5 + parent: 1 + type: Transform + - uid: 318 + components: + - rot: 1.5707963267948966 rad + pos: -14.5,-5.5 + parent: 1 + type: Transform + - uid: 319 + components: + - rot: 1.5707963267948966 rad + pos: -14.5,-6.5 + parent: 1 + type: Transform + - uid: 320 + components: + - rot: 1.5707963267948966 rad + pos: -14.5,-7.5 + parent: 1 + type: Transform + - uid: 323 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-20.5 + parent: 1 + type: Transform + - uid: 399 + components: + - rot: 1.5707963267948966 rad + pos: -9.5,-11.5 + parent: 1 + type: Transform + - uid: 400 + components: + - rot: 1.5707963267948966 rad + pos: -9.5,-14.5 + parent: 1 + type: Transform + - uid: 401 + components: + - rot: 1.5707963267948966 rad + pos: -14.5,-15.5 + parent: 1 + type: Transform + - uid: 402 + components: + - rot: 1.5707963267948966 rad + pos: -14.5,-14.5 + parent: 1 + type: Transform + - uid: 403 + components: + - rot: 1.5707963267948966 rad + pos: -14.5,-13.5 + parent: 1 + type: Transform + - uid: 404 + components: + - rot: 1.5707963267948966 rad + pos: -14.5,-12.5 + parent: 1 + type: Transform + - uid: 427 + components: + - pos: -11.5,-17.5 + parent: 1 + type: Transform + - uid: 428 + components: + - pos: -12.5,-17.5 + parent: 1 + type: Transform + - uid: 448 + components: + - pos: -6.5,-17.5 + parent: 1 + type: Transform + - uid: 449 + components: + - pos: -8.5,-17.5 + parent: 1 + type: Transform + - uid: 480 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-4.5 + parent: 1 + type: Transform + - uid: 481 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-5.5 + parent: 1 + type: Transform + - uid: 482 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-6.5 + parent: 1 + type: Transform + - uid: 483 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-13.5 + parent: 1 + type: Transform + - uid: 484 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-14.5 + parent: 1 + type: Transform + - uid: 684 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-18.5 + parent: 1 + type: Transform + - uid: 773 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,-22.5 + parent: 1 + type: Transform + - uid: 774 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,-22.5 + parent: 1 + type: Transform +- proto: Gyroscope + entities: + - uid: 805 + components: + - rot: -1.5707963267948966 rad + pos: 0.5,-18.5 + parent: 1 + type: Transform +- proto: LockerWallMedicalFilled + entities: + - uid: 762 + components: + - rot: -1.5707963267948966 rad + pos: -9.5,-16.5 + parent: 1 + type: Transform +- proto: MagazinePistolRubber + entities: + - uid: 784 + components: + - pos: -2.2705026,-0.47059897 + parent: 1 + type: Transform +- proto: MedicalBed + entities: + - uid: 409 + components: + - pos: -13.5,-11.5 + parent: 1 + type: Transform + - uid: 410 + components: + - pos: -10.5,-11.5 + parent: 1 + type: Transform +- proto: MedkitBurnFilled + entities: + - uid: 425 + components: + - pos: -13.322543,-13.652935 + parent: 1 + type: Transform +- proto: MedkitFilled + entities: + - uid: 167 + components: + - pos: -2.4709458,4.5597963 + parent: 1 + type: Transform + - uid: 426 + components: + - pos: -13.541293,-13.465435 + parent: 1 + type: Transform +- proto: MedkitOxygenFilled + entities: + - uid: 424 + components: + - pos: -13.556918,-14.277935 + parent: 1 + type: Transform + - uid: 668 + components: + - pos: -13.556469,-7.3077974 + parent: 1 + type: Transform +- proto: MedkitToxinFilled + entities: + - uid: 423 + components: + - pos: -13.369418,-14.44981 + parent: 1 + type: Transform +- proto: OperatingTable + entities: + - uid: 417 + components: + - pos: -12.5,-16.5 + parent: 1 + type: Transform +- proto: PaperBin10 + entities: + - uid: 117 + components: + - pos: -4.5,2.5 + parent: 1 + type: Transform +- proto: Pen + entities: + - uid: 118 + components: + - pos: -4.4614916,2.6592817 + parent: 1 + type: Transform + - uid: 257 + components: + - pos: -8.607952,8.414773 + parent: 1 + type: Transform +- proto: PosterContrabandFunPolice + entities: + - uid: 795 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,-1.5 + parent: 1 + type: Transform +- proto: PosterLegitEnlist + entities: + - uid: 788 + components: + - pos: 1.5,3.5 + parent: 1 + type: Transform +- proto: PosterLegitHelpOthers + entities: + - uid: 790 + components: + - pos: -14.5,-16.5 + parent: 1 + type: Transform +- proto: PottedPlantRandom + entities: + - uid: 115 + components: + - pos: -7.5,-0.5 + parent: 1 + type: Transform + - uid: 116 + components: + - pos: -4.5,-0.5 + parent: 1 + type: Transform + - uid: 165 + components: + - pos: -8.5,4.5 + parent: 1 + type: Transform + - uid: 166 + components: + - pos: -3.5,4.5 + parent: 1 + type: Transform + - uid: 557 + components: + - pos: -8.5,-3.5 + parent: 1 + type: Transform + - uid: 564 + components: + - pos: 1.5,-7.5 + parent: 1 + type: Transform + - uid: 565 + components: + - pos: 1.5,-3.5 + parent: 1 + type: Transform + - uid: 566 + components: + - pos: 1.5,-11.5 + parent: 1 + type: Transform +- proto: PowerCellRecharger + entities: + - uid: 113 + components: + - rot: 3.141592653589793 rad + pos: -9.5,-0.5 + parent: 1 + type: Transform + - uid: 168 + components: + - pos: -9.5,4.5 + parent: 1 + type: Transform + - uid: 269 + components: + - rot: 1.5707963267948966 rad + pos: -13.5,-2.5 + parent: 1 + type: Transform + - uid: 422 + components: + - rot: -1.5707963267948966 rad + pos: -10.5,-15.5 + parent: 1 + type: Transform +- proto: Poweredlight + entities: + - uid: 439 + components: + - rot: 3.141592653589793 rad + pos: -0.5,-21.5 + parent: 1 + type: Transform + - uid: 441 + components: + - pos: -3.5,-18.5 + parent: 1 + type: Transform + - uid: 451 + components: + - rot: -1.5707963267948966 rad + pos: -10.5,-15.5 + parent: 1 + type: Transform + - uid: 452 + components: + - rot: 1.5707963267948966 rad + pos: -8.5,-15.5 + parent: 1 + type: Transform + - uid: 454 + components: + - rot: -1.5707963267948966 rad + pos: -10.5,-3.5 + parent: 1 + type: Transform + - uid: 455 + components: + - rot: 1.5707963267948966 rad + pos: -8.5,-3.5 + parent: 1 + type: Transform + - uid: 456 + components: + - rot: 1.5707963267948966 rad + pos: -8.5,-9.5 + parent: 1 + type: Transform + - uid: 457 + components: + - pos: -3.5,-2.5 + parent: 1 + type: Transform + - uid: 458 + components: + - pos: -1.5,2.5 + parent: 1 + type: Transform + - uid: 459 + components: + - rot: 3.141592653589793 rad + pos: -11.5,-0.5 + parent: 1 + type: Transform + - uid: 461 + components: + - rot: -1.5707963267948966 rad + pos: -4.5,2.5 + parent: 1 + type: Transform + - uid: 462 + components: + - rot: 3.141592653589793 rad + pos: -3.5,4.5 + parent: 1 + type: Transform + - uid: 463 + components: + - rot: 3.141592653589793 rad + pos: -8.5,4.5 + parent: 1 + type: Transform + - uid: 464 + components: + - rot: 1.5707963267948966 rad + pos: -9.5,8.5 + parent: 1 + type: Transform + - uid: 465 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,8.5 + parent: 1 + type: Transform + - uid: 467 + components: + - rot: 3.141592653589793 rad + pos: -4.5,-16.5 + parent: 1 + type: Transform + - uid: 485 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-9.5 + parent: 1 + type: Transform + - uid: 486 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-15.5 + parent: 1 + type: Transform + - uid: 487 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-3.5 + parent: 1 + type: Transform + - uid: 780 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,-21.5 + parent: 1 + type: Transform + - uid: 793 + components: + - rot: 1.5707963267948966 rad + pos: -4.5,-11.5 + parent: 1 + type: Transform + - uid: 794 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,-7.5 + parent: 1 + type: Transform +- proto: PoweredSmallLight + entities: + - uid: 450 + components: + - rot: 1.5707963267948966 rad + pos: -13.5,-11.5 + parent: 1 + type: Transform + - uid: 453 + components: + - rot: 3.141592653589793 rad + pos: -13.5,-8.5 + parent: 1 + type: Transform + - uid: 460 + components: + - rot: 1.5707963267948966 rad + pos: -9.5,2.5 + parent: 1 + type: Transform +- proto: Rack + entities: + - uid: 289 + components: + - rot: -1.5707963267948966 rad + pos: -13.5,-8.5 + parent: 1 + type: Transform + - uid: 291 + components: + - rot: -1.5707963267948966 rad + pos: -13.5,-7.5 + parent: 1 + type: Transform + - uid: 796 + components: + - pos: -10.5,-3.5 + parent: 1 + type: Transform +- proto: RandomPosterLegit + entities: + - uid: 570 + components: + - pos: -5.5,-13.5 + parent: 1 + type: Transform + - uid: 580 + components: + - pos: -1.5,-5.5 + parent: 1 + type: Transform + - uid: 786 + components: + - pos: -9.5,-9.5 + parent: 1 + type: Transform + - uid: 787 + components: + - pos: -7.5,3.5 + parent: 1 + type: Transform + - uid: 789 + components: + - pos: -3.5,-17.5 + parent: 1 + type: Transform + - uid: 791 + components: + - pos: -9.5,-3.5 + parent: 1 + type: Transform + - uid: 792 + components: + - pos: 2.5,-9.5 + parent: 1 + type: Transform +- proto: RandomVendingDrinks + entities: + - uid: 199 + components: + - pos: -9.5,8.5 + parent: 1 + type: Transform +- proto: RandomVendingSnacks + entities: + - uid: 200 + components: + - pos: -2.5,8.5 + parent: 1 + type: Transform +- proto: ShotGunCabinetFilled + entities: + - uid: 797 + components: + - pos: -1.5,3.5 + parent: 1 + type: Transform +- proto: ShuttleWindow + entities: + - uid: 6 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,1.5 + parent: 1 + type: Transform + - uid: 7 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,2.5 + parent: 1 + type: Transform + - uid: 11 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,-1.5 + parent: 1 + type: Transform + - uid: 15 + components: + - rot: 1.5707963267948966 rad + pos: -3.5,1.5 + parent: 1 + type: Transform + - uid: 18 + components: + - rot: 1.5707963267948966 rad + pos: 0.5,3.5 + parent: 1 + type: Transform + - uid: 19 + components: + - rot: 1.5707963267948966 rad + pos: -0.5,3.5 + parent: 1 + type: Transform + - uid: 41 + components: + - rot: 3.141592653589793 rad + pos: -4.5,-1.5 + parent: 1 + type: Transform + - uid: 69 + components: + - rot: 3.141592653589793 rad + pos: -7.5,-1.5 + parent: 1 + type: Transform + - uid: 100 + components: + - rot: 3.141592653589793 rad + pos: -14.5,2.5 + parent: 1 + type: Transform + - uid: 101 + components: + - rot: 3.141592653589793 rad + pos: -12.5,3.5 + parent: 1 + type: Transform + - uid: 102 + components: + - rot: 3.141592653589793 rad + pos: -14.5,-0.5 + parent: 1 + type: Transform + - uid: 170 + components: + - pos: -1.5,6.5 + parent: 1 + type: Transform + - uid: 171 + components: + - pos: -10.5,6.5 + parent: 1 + type: Transform + - uid: 173 + components: + - pos: -10.5,7.5 + parent: 1 + type: Transform + - uid: 174 + components: + - pos: -1.5,7.5 + parent: 1 + type: Transform + - uid: 182 + components: + - rot: -1.5707963267948966 rad + pos: -8.5,9.5 + parent: 1 + type: Transform + - uid: 183 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,9.5 + parent: 1 + type: Transform + - uid: 184 + components: + - rot: -1.5707963267948966 rad + pos: -4.5,9.5 + parent: 1 + type: Transform + - uid: 185 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,9.5 + parent: 1 + type: Transform + - uid: 186 + components: + - rot: -1.5707963267948966 rad + pos: -6.5,9.5 + parent: 1 + type: Transform + - uid: 187 + components: + - rot: -1.5707963267948966 rad + pos: -7.5,9.5 + parent: 1 + type: Transform + - uid: 261 + components: + - rot: 1.5707963267948966 rad + pos: -14.5,-3.5 + parent: 1 + type: Transform + - uid: 262 + components: + - rot: 1.5707963267948966 rad + pos: -14.5,-4.5 + parent: 1 + type: Transform + - uid: 263 + components: + - rot: 1.5707963267948966 rad + pos: -14.5,-5.5 + parent: 1 + type: Transform + - uid: 264 + components: + - rot: 1.5707963267948966 rad + pos: -14.5,-6.5 + parent: 1 + type: Transform + - uid: 265 + components: + - rot: 1.5707963267948966 rad + pos: -14.5,-7.5 + parent: 1 + type: Transform + - uid: 267 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,-22.5 + parent: 1 + type: Transform + - uid: 327 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,-22.5 + parent: 1 + type: Transform + - uid: 330 + components: + - rot: 3.141592653589793 rad + pos: -9.5,-11.5 + parent: 1 + type: Transform + - uid: 331 + components: + - rot: 3.141592653589793 rad + pos: -9.5,-14.5 + parent: 1 + type: Transform + - uid: 338 + components: + - pos: -11.5,-17.5 + parent: 1 + type: Transform + - uid: 339 + components: + - pos: -12.5,-17.5 + parent: 1 + type: Transform + - uid: 342 + components: + - rot: 3.141592653589793 rad + pos: -14.5,-12.5 + parent: 1 + type: Transform + - uid: 343 + components: + - rot: 3.141592653589793 rad + pos: -14.5,-13.5 + parent: 1 + type: Transform + - uid: 344 + components: + - rot: 3.141592653589793 rad + pos: -14.5,-14.5 + parent: 1 + type: Transform + - uid: 345 + components: + - rot: 3.141592653589793 rad + pos: -14.5,-15.5 + parent: 1 + type: Transform + - uid: 430 + components: + - pos: -8.5,-17.5 + parent: 1 + type: Transform + - uid: 432 + components: + - pos: -6.5,-17.5 + parent: 1 + type: Transform + - uid: 469 + components: + - rot: 3.141592653589793 rad + pos: 2.5,-4.5 + parent: 1 + type: Transform + - uid: 470 + components: + - rot: 3.141592653589793 rad + pos: 2.5,-5.5 + parent: 1 + type: Transform + - uid: 471 + components: + - rot: 3.141592653589793 rad + pos: 2.5,-6.5 + parent: 1 + type: Transform + - uid: 478 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-13.5 + parent: 1 + type: Transform + - uid: 479 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-14.5 + parent: 1 + type: Transform + - uid: 488 + components: + - rot: 3.141592653589793 rad + pos: -5.5,-4.5 + parent: 1 + type: Transform + - uid: 490 + components: + - rot: 3.141592653589793 rad + pos: -5.5,-6.5 + parent: 1 + type: Transform + - uid: 491 + components: + - rot: 3.141592653589793 rad + pos: -5.5,-8.5 + parent: 1 + type: Transform + - uid: 513 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,-8.5 + parent: 1 + type: Transform + - uid: 514 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,-6.5 + parent: 1 + type: Transform + - uid: 515 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,-4.5 + parent: 1 + type: Transform + - uid: 530 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,-10.5 + parent: 1 + type: Transform + - uid: 531 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,-12.5 + parent: 1 + type: Transform + - uid: 532 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,-14.5 + parent: 1 + type: Transform + - uid: 533 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,-10.5 + parent: 1 + type: Transform + - uid: 534 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,-12.5 + parent: 1 + type: Transform + - uid: 535 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,-14.5 + parent: 1 + type: Transform + - uid: 680 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-18.5 + parent: 1 + type: Transform + - uid: 710 + components: + - pos: 1.5,-21.5 + parent: 1 + type: Transform + - uid: 712 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-20.5 + parent: 1 + type: Transform + - uid: 713 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,-19.5 + parent: 1 + type: Transform +- proto: SignBridge + entities: + - uid: 395 + components: + - rot: 1.5707963267948966 rad + pos: -7.5,-1.5 + parent: 1 + type: Transform + - uid: 396 + components: + - rot: 1.5707963267948966 rad + pos: -4.5,-1.5 + parent: 1 + type: Transform +- proto: SignEVA + entities: + - uid: 394 + components: + - rot: 1.5707963267948966 rad + pos: -8.5,1.5 + parent: 1 + type: Transform +- proto: SignMedical + entities: + - uid: 397 + components: + - rot: 1.5707963267948966 rad + pos: -9.5,-11.5 + parent: 1 + type: Transform + - uid: 398 + components: + - rot: 1.5707963267948966 rad + pos: -9.5,-14.5 + parent: 1 + type: Transform +- proto: Sink + entities: + - uid: 408 + components: + - rot: 1.5707963267948966 rad + pos: -13.5,-15.5 + parent: 1 + type: Transform +- proto: SpawnMobMedibot + entities: + - uid: 667 + components: + - pos: -11.5,-12.5 + parent: 1 + type: Transform +- proto: StasisBed + entities: + - uid: 411 + components: + - pos: -13.5,-10.5 + parent: 1 + type: Transform + - uid: 412 + components: + - pos: -10.5,-10.5 + parent: 1 + type: Transform +- proto: SubstationBasic + entities: + - uid: 446 + components: + - pos: 0.5,-21.5 + parent: 1 + type: Transform +- proto: SuitStorageEVA + entities: + - uid: 104 + components: + - pos: -11.5,2.5 + parent: 1 + type: Transform + - uid: 105 + components: + - pos: -12.5,2.5 + parent: 1 + type: Transform + - uid: 106 + components: + - pos: -13.5,2.5 + parent: 1 + type: Transform +- proto: Table + entities: + - uid: 107 + components: + - rot: 3.141592653589793 rad + pos: -9.5,-0.5 + parent: 1 + type: Transform + - uid: 268 + components: + - rot: 1.5707963267948966 rad + pos: -13.5,-2.5 + parent: 1 + type: Transform +- proto: TableReinforced + entities: + - uid: 22 + components: + - rot: 1.5707963267948966 rad + pos: -2.5,-0.5 + parent: 1 + type: Transform + - uid: 72 + components: + - rot: 3.141592653589793 rad + pos: -4.5,1.5 + parent: 1 + type: Transform + - uid: 73 + components: + - rot: 3.141592653589793 rad + pos: -4.5,2.5 + parent: 1 + type: Transform + - uid: 163 + components: + - pos: -9.5,4.5 + parent: 1 + type: Transform + - uid: 164 + components: + - pos: -2.5,4.5 + parent: 1 + type: Transform + - uid: 192 + components: + - pos: -8.5,8.5 + parent: 1 + type: Transform + - uid: 193 + components: + - pos: -3.5,8.5 + parent: 1 + type: Transform + - uid: 405 + components: + - rot: 1.5707963267948966 rad + pos: -13.5,-14.5 + parent: 1 + type: Transform + - uid: 406 + components: + - rot: 1.5707963267948966 rad + pos: -13.5,-16.5 + parent: 1 + type: Transform + - uid: 407 + components: + - rot: 1.5707963267948966 rad + pos: -13.5,-13.5 + parent: 1 + type: Transform + - uid: 413 + components: + - rot: 1.5707963267948966 rad + pos: -10.5,-15.5 + parent: 1 + type: Transform + - uid: 414 + components: + - rot: 1.5707963267948966 rad + pos: -10.5,-16.5 + parent: 1 + type: Transform +- proto: TelecomServer + entities: + - uid: 804 + components: + - pos: -0.5,-18.5 + parent: 1 + type: Transform + - containers: + key_slots: !type:Container + showEnts: False + occludes: True + ents: + - 444 + machine_board: !type:Container + showEnts: False + occludes: True + ents: [] + machine_parts: !type:Container + showEnts: False + occludes: True + ents: [] + type: ContainerContainer +- proto: Thruster + entities: + - uid: 438 + components: + - rot: 1.5707963267948966 rad + pos: -14.5,-18.5 + parent: 1 + type: Transform + - uid: 440 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,-18.5 + parent: 1 + type: Transform + - uid: 699 + components: + - rot: 1.5707963267948966 rad + pos: -13.5,-18.5 + parent: 1 + type: Transform + - uid: 701 + components: + - rot: 3.141592653589793 rad + pos: -12.5,-18.5 + parent: 1 + type: Transform + - uid: 702 + components: + - rot: 3.141592653589793 rad + pos: -11.5,-18.5 + parent: 1 + type: Transform + - uid: 703 + components: + - rot: 3.141592653589793 rad + pos: -10.5,-18.5 + parent: 1 + type: Transform + - uid: 704 + components: + - rot: 3.141592653589793 rad + pos: -9.5,-18.5 + parent: 1 + type: Transform + - uid: 705 + components: + - rot: 3.141592653589793 rad + pos: -8.5,-18.5 + parent: 1 + type: Transform + - uid: 707 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,-19.5 + parent: 1 + type: Transform + - enabled: False + type: Thruster + - uid: 709 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,-20.5 + parent: 1 + type: Transform + - uid: 711 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,-21.5 + parent: 1 + type: Transform + - uid: 744 + components: + - pos: -11.5,4.5 + parent: 1 + type: Transform + - uid: 745 + components: + - pos: -12.5,4.5 + parent: 1 + type: Transform + - uid: 746 + components: + - rot: 1.5707963267948966 rad + pos: -14.5,4.5 + parent: 1 + type: Transform + - uid: 747 + components: + - rot: 1.5707963267948966 rad + pos: -13.5,4.5 + parent: 1 + type: Transform + - uid: 748 + components: + - rot: -1.5707963267948966 rad + pos: 2.5,4.5 + parent: 1 + type: Transform + - uid: 749 + components: + - rot: -1.5707963267948966 rad + pos: 1.5,4.5 + parent: 1 + type: Transform + - uid: 750 + components: + - pos: 0.5,4.5 + parent: 1 + type: Transform + - uid: 751 + components: + - pos: -0.5,4.5 + parent: 1 + type: Transform +- proto: ToolboxElectricalFilled + entities: + - uid: 669 + components: + - pos: -13.603344,-8.292172 + parent: 1 + type: Transform +- proto: ToolboxEmergencyFilled + entities: + - uid: 287 + components: + - pos: -13.322094,-8.573422 + parent: 1 + type: Transform +- proto: ToolboxMechanicalFilled + entities: + - uid: 664 + components: + - pos: -13.462719,-8.417172 + parent: 1 + type: Transform +- proto: VendingMachineEngivend + entities: + - uid: 692 + components: + - pos: -4.5,-21.5 + parent: 1 + type: Transform +- proto: VendingMachineSec + entities: + - uid: 30 + components: + - pos: 1.5,2.5 + parent: 1 + type: Transform +- proto: VendingMachineTankDispenserEVA + entities: + - uid: 93 + components: + - pos: -13.5,-0.5 + parent: 1 + type: Transform +- proto: VendingMachineWallMedical + entities: + - uid: 429 + components: + - pos: -9.5,-10.5 + parent: 1 + type: Transform + - uid: 573 + components: + - pos: -5.5,-5.5 + parent: 1 + type: Transform +- proto: VendingMachineYouTool + entities: + - uid: 322 + components: + - pos: -10.5,-2.5 + parent: 1 + type: Transform +- proto: WallShuttle + entities: + - uid: 4 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-1.5 + parent: 1 + type: Transform + - uid: 5 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,0.5 + parent: 1 + type: Transform + - uid: 8 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,3.5 + parent: 1 + type: Transform + - uid: 17 + components: + - rot: 1.5707963267948966 rad + pos: 1.5,3.5 + parent: 1 + type: Transform + - uid: 20 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,3.5 + parent: 1 + type: Transform + - uid: 21 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,4.5 + parent: 1 + type: Transform + - uid: 86 + components: + - rot: 3.141592653589793 rad + pos: -10.5,3.5 + parent: 1 + type: Transform + - uid: 87 + components: + - rot: 3.141592653589793 rad + pos: -11.5,3.5 + parent: 1 + type: Transform + - uid: 88 + components: + - rot: 3.141592653589793 rad + pos: -10.5,4.5 + parent: 1 + type: Transform + - uid: 98 + components: + - rot: 3.141592653589793 rad + pos: -13.5,3.5 + parent: 1 + type: Transform + - uid: 99 + components: + - rot: 3.141592653589793 rad + pos: -14.5,3.5 + parent: 1 + type: Transform + - uid: 103 + components: + - rot: 3.141592653589793 rad + pos: -14.5,-1.5 + parent: 1 + type: Transform + - uid: 169 + components: + - pos: -1.5,5.5 + parent: 1 + type: Transform + - uid: 172 + components: + - pos: -10.5,5.5 + parent: 1 + type: Transform + - uid: 176 + components: + - rot: 1.5707963267948966 rad + pos: -10.5,8.5 + parent: 1 + type: Transform + - uid: 177 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,8.5 + parent: 1 + type: Transform + - uid: 180 + components: + - rot: -1.5707963267948966 rad + pos: -2.5,9.5 + parent: 1 + type: Transform + - uid: 181 + components: + - rot: -1.5707963267948966 rad + pos: -9.5,9.5 + parent: 1 + type: Transform + - uid: 259 + components: + - pos: -14.5,-2.5 + parent: 1 + type: Transform + - uid: 281 + components: + - rot: 1.5707963267948966 rad + pos: -14.5,-9.5 + parent: 1 + type: Transform + - uid: 286 + components: + - pos: 1.5,-22.5 + parent: 1 + type: Transform + - uid: 310 + components: + - pos: -14.5,-8.5 + parent: 1 + type: Transform + - uid: 324 + components: + - rot: -1.5707963267948966 rad + pos: 0.5,-22.5 + parent: 1 + type: Transform + - uid: 325 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,-22.5 + parent: 1 + type: Transform + - uid: 328 + components: + - rot: 3.141592653589793 rad + pos: -14.5,-10.5 + parent: 1 + type: Transform + - uid: 329 + components: + - rot: 3.141592653589793 rad + pos: -14.5,-11.5 + parent: 1 + type: Transform + - uid: 334 + components: + - pos: 2.5,-17.5 + parent: 1 + type: Transform + - uid: 335 + components: + - pos: -13.5,-17.5 + parent: 1 + type: Transform + - uid: 336 + components: + - pos: -9.5,-17.5 + parent: 1 + type: Transform + - uid: 337 + components: + - pos: -10.5,-17.5 + parent: 1 + type: Transform + - uid: 340 + components: + - pos: -14.5,-16.5 + parent: 1 + type: Transform + - uid: 341 + components: + - pos: -14.5,-17.5 + parent: 1 + type: Transform + - uid: 431 + components: + - pos: -7.5,-17.5 + parent: 1 + type: Transform + - uid: 435 + components: + - pos: 2.5,-16.5 + parent: 1 + type: Transform + - uid: 436 + components: + - pos: 2.5,-15.5 + parent: 1 + type: Transform + - uid: 443 + components: + - pos: 1.5,-17.5 + parent: 1 + type: Transform + - uid: 447 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,-17.5 + parent: 1 + type: Transform + - uid: 468 + components: + - rot: 3.141592653589793 rad + pos: 2.5,-3.5 + parent: 1 + type: Transform + - uid: 472 + components: + - rot: 3.141592653589793 rad + pos: 2.5,-7.5 + parent: 1 + type: Transform + - uid: 475 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-9.5 + parent: 1 + type: Transform + - uid: 476 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-11.5 + parent: 1 + type: Transform + - uid: 477 + components: + - rot: 1.5707963267948966 rad + pos: 2.5,-12.5 + parent: 1 + type: Transform + - uid: 582 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,-18.5 + parent: 1 + type: Transform + - uid: 662 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,-22.5 + parent: 1 + type: Transform + - uid: 663 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,-21.5 + parent: 1 + type: Transform + - uid: 697 + components: + - rot: -1.5707963267948966 rad + pos: -4.5,-22.5 + parent: 1 + type: Transform + - uid: 698 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,-22.5 + parent: 1 + type: Transform + - uid: 714 + components: + - pos: 2.5,-22.5 + parent: 1 + type: Transform +- proto: WallShuttleDiagonal + entities: + - uid: 178 + components: + - pos: -10.5,9.5 + parent: 1 + type: Transform + - uid: 179 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,9.5 + parent: 1 + type: Transform +- proto: WallShuttleInterior + entities: + - uid: 9 + components: + - rot: 1.5707963267948966 rad + pos: 1.5,-1.5 + parent: 1 + type: Transform + - uid: 10 + components: + - rot: 1.5707963267948966 rad + pos: -0.5,-1.5 + parent: 1 + type: Transform + - uid: 12 + components: + - rot: 1.5707963267948966 rad + pos: -2.5,-1.5 + parent: 1 + type: Transform + - uid: 13 + components: + - rot: 1.5707963267948966 rad + pos: -3.5,-1.5 + parent: 1 + type: Transform + - uid: 14 + components: + - rot: 1.5707963267948966 rad + pos: -3.5,-0.5 + parent: 1 + type: Transform + - uid: 16 + components: + - rot: 1.5707963267948966 rad + pos: -3.5,2.5 + parent: 1 + type: Transform + - uid: 25 + components: + - rot: 1.5707963267948966 rad + pos: -3.5,3.5 + parent: 1 + type: Transform + - uid: 26 + components: + - rot: 1.5707963267948966 rad + pos: -2.5,3.5 + parent: 1 + type: Transform + - uid: 75 + components: + - rot: 3.141592653589793 rad + pos: -8.5,-1.5 + parent: 1 + type: Transform + - uid: 76 + components: + - rot: 3.141592653589793 rad + pos: -4.5,3.5 + parent: 1 + type: Transform + - uid: 77 + components: + - rot: 3.141592653589793 rad + pos: -7.5,3.5 + parent: 1 + type: Transform + - uid: 80 + components: + - rot: 3.141592653589793 rad + pos: -8.5,3.5 + parent: 1 + type: Transform + - uid: 82 + components: + - rot: 3.141592653589793 rad + pos: -8.5,-0.5 + parent: 1 + type: Transform + - uid: 83 + components: + - rot: 3.141592653589793 rad + pos: -8.5,0.5 + parent: 1 + type: Transform + - uid: 84 + components: + - rot: 3.141592653589793 rad + pos: -8.5,1.5 + parent: 1 + type: Transform + - uid: 85 + components: + - rot: 3.141592653589793 rad + pos: -9.5,3.5 + parent: 1 + type: Transform + - uid: 89 + components: + - pos: -10.5,2.5 + parent: 1 + type: Transform + - uid: 90 + components: + - pos: -10.5,1.5 + parent: 1 + type: Transform + - uid: 92 + components: + - rot: 3.141592653589793 rad + pos: -9.5,-1.5 + parent: 1 + type: Transform + - uid: 94 + components: + - rot: 3.141592653589793 rad + pos: -10.5,-1.5 + parent: 1 + type: Transform + - uid: 95 + components: + - rot: 3.141592653589793 rad + pos: -11.5,-1.5 + parent: 1 + type: Transform + - uid: 96 + components: + - rot: 3.141592653589793 rad + pos: -12.5,-1.5 + parent: 1 + type: Transform + - uid: 97 + components: + - rot: 3.141592653589793 rad + pos: -13.5,-1.5 + parent: 1 + type: Transform + - uid: 201 + components: + - pos: -9.5,-2.5 + parent: 1 + type: Transform + - uid: 272 + components: + - rot: 1.5707963267948966 rad + pos: -9.5,-3.5 + parent: 1 + type: Transform + - uid: 273 + components: + - rot: 1.5707963267948966 rad + pos: -9.5,-6.5 + parent: 1 + type: Transform + - uid: 275 + components: + - rot: 1.5707963267948966 rad + pos: -9.5,-8.5 + parent: 1 + type: Transform + - uid: 276 + components: + - rot: 3.141592653589793 rad + pos: -9.5,-10.5 + parent: 1 + type: Transform + - uid: 283 + components: + - rot: 1.5707963267948966 rad + pos: -10.5,-9.5 + parent: 1 + type: Transform + - uid: 284 + components: + - rot: 1.5707963267948966 rad + pos: -13.5,-9.5 + parent: 1 + type: Transform + - uid: 309 + components: + - rot: -1.5707963267948966 rad + pos: -9.5,-7.5 + parent: 1 + type: Transform + - uid: 332 + components: + - rot: 3.141592653589793 rad + pos: -9.5,-15.5 + parent: 1 + type: Transform + - uid: 333 + components: + - rot: 3.141592653589793 rad + pos: -9.5,-16.5 + parent: 1 + type: Transform + - uid: 437 + components: + - rot: -1.5707963267948966 rad + pos: -3.5,-17.5 + parent: 1 + type: Transform + - uid: 442 + components: + - rot: -1.5707963267948966 rad + pos: -4.5,-17.5 + parent: 1 + type: Transform + - uid: 466 + components: + - rot: -1.5707963267948966 rad + pos: 0.5,-17.5 + parent: 1 + type: Transform + - uid: 489 + components: + - rot: 3.141592653589793 rad + pos: -5.5,-5.5 + parent: 1 + type: Transform + - uid: 492 + components: + - rot: 3.141592653589793 rad + pos: -5.5,-7.5 + parent: 1 + type: Transform + - uid: 516 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,-5.5 + parent: 1 + type: Transform + - uid: 517 + components: + - rot: 1.5707963267948966 rad + pos: -1.5,-7.5 + parent: 1 + type: Transform + - uid: 528 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,-11.5 + parent: 1 + type: Transform + - uid: 529 + components: + - rot: -1.5707963267948966 rad + pos: -5.5,-13.5 + parent: 1 + type: Transform + - uid: 536 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,-11.5 + parent: 1 + type: Transform + - uid: 537 + components: + - rot: -1.5707963267948966 rad + pos: -1.5,-13.5 + parent: 1 + type: Transform + - uid: 588 + components: + - rot: 1.5707963267948966 rad + pos: -9.5,-9.5 + parent: 1 + type: Transform + - uid: 678 + components: + - pos: -1.5,-17.5 + parent: 1 + type: Transform + - uid: 679 + components: + - pos: -0.5,-17.5 + parent: 1 + type: Transform +- proto: WaterTankFull + entities: + - uid: 279 + components: + - pos: -10.5,-6.5 + parent: 1 + type: Transform +- proto: WeaponCapacitorRecharger + entities: + - uid: 23 + components: + - rot: 1.5707963267948966 rad + pos: -2.5,-0.5 + parent: 1 + type: Transform + - uid: 74 + components: + - rot: 3.141592653589793 rad + pos: -4.5,1.5 + parent: 1 + type: Transform + - uid: 194 + components: + - pos: -3.5,8.5 + parent: 1 + type: Transform +- proto: WeldingFuelTankFull + entities: + - uid: 280 + components: + - pos: -10.5,-7.5 + parent: 1 + type: Transform +- proto: WindoorSecureEngineeringLocked + entities: + - uid: 277 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,-20.5 + parent: 1 + type: Transform + - uid: 677 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,-19.5 + parent: 1 + type: Transform + - uid: 682 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,-18.5 + parent: 1 + type: Transform + - uid: 801 + components: + - rot: -1.5707963267948966 rad + pos: -0.5,-21.5 + parent: 1 + type: Transform +- proto: WindoorSecureSecurityLocked + entities: + - uid: 37 + components: + - rot: 3.141592653589793 rad + pos: -2.5,1.5 + parent: 1 + type: Transform +- proto: WindowReinforcedDirectional + entities: + - uid: 38 + components: + - rot: 1.5707963267948966 rad + pos: -2.5,2.5 + parent: 1 + type: Transform +- proto: YellowOxygenTankFilled + entities: + - uid: 799 + components: + - pos: -10.44437,-3.5553346 + parent: 1 + type: Transform +... diff --git a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/backpack.yml b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/backpack.yml index 4cf4d2caea5..3a673df4333 100644 --- a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/backpack.yml +++ b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/backpack.yml @@ -50,6 +50,16 @@ contents: - id: BoxSurvivalMedical +- type: entity + noSpawn: true + parent: ClothingBackpackMedical + id: ClothingBackpackParamedicFilled + components: + - type: StorageFill + contents: + - id: BoxSurvivalMedical + - id: EmergencyRollerBedSpawnFolded + - type: entity noSpawn: true parent: ClothingBackpackCaptain @@ -317,6 +327,9 @@ name: death squad backpack description: Holds the kit of CentComm's most feared agents. components: + - type: Storage + grid: + - 0,0,7,6 - type: StorageFill contents: - id: BoxSurvivalEngineering diff --git a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml index 3a8db627e0b..f7ad973b842 100644 --- a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml +++ b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml @@ -47,7 +47,6 @@ components: - type: StorageFill contents: - - id: BoxSurvivalBrigmedic - id: Flash - type: entity @@ -59,6 +58,16 @@ contents: - id: BoxSurvivalMedical +- type: entity + noSpawn: true + parent: ClothingBackpackDuffelMedical + id: ClothingBackpackDuffelParamedicFilled + components: + - type: StorageFill + contents: + - id: BoxSurvivalMedical + - id: EmergencyRollerBedSpawnFolded + - type: entity noSpawn: true parent: ClothingBackpackDuffelCaptain diff --git a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/satchel.yml b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/satchel.yml index 68c13608a2d..205ebee5013 100644 --- a/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/satchel.yml +++ b/Resources/Prototypes/Catalog/Fills/Backpacks/StarterGear/satchel.yml @@ -61,7 +61,6 @@ components: - type: StorageFill contents: - - id: BoxSurvivalBrigmedic - id: Flash - type: entity @@ -73,6 +72,16 @@ contents: - id: BoxSurvivalMedical +- type: entity + noSpawn: true + parent: ClothingBackpackSatchelMedical + id: ClothingBackpackSatchelParamedicFilled + components: + - type: StorageFill + contents: + - id: BoxSurvivalMedical + - id: EmergencyRollerBedSpawnFolded + - type: entity noSpawn: true parent: ClothingBackpackSatchelCaptain @@ -235,9 +244,9 @@ - type: StorageFill contents: - id: BoxSurvival + - id: BoxForensicPad - id: Lighter - id: CigPackBlack - - id: BoxForensicPad - id: HandLabeler - type: entity diff --git a/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml b/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml index 1c08c569afb..4fb6fd28934 100644 --- a/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml +++ b/Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml @@ -155,13 +155,13 @@ tags: [] # ignore "WhitelistChameleon" tag - type: StorageFill contents: + - id: ClothingOuterArmorBasic - id: ClothingHeadHatCentcom - id: ClothingEyesGlassesSunglasses - id: ClothingUniformJumpsuitCentcomOfficial - id: ClothingShoesBootsJack - id: ClothingHandsGlovesColorBlack - id: ClothingHeadsetAltCentComFake - - id: ClothingOuterArmorBasic - id: Paper - id: Pen - id: CentcomPDAFake @@ -200,6 +200,9 @@ name: syndicate pyjama duffel bag description: Contains 3 pairs of syndicate pyjamas and 3 plushies for the ultimate sleepover. components: + - type: Storage + grid: + - 0,0,8,4 - type: StorageFill contents: - id: ClothingUniformJumpsuitPyjamaSyndicateRed diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/ammunition.yml b/Resources/Prototypes/Catalog/Fills/Boxes/ammunition.yml index 20e291494f7..6482c5dd914 100644 --- a/Resources/Prototypes/Catalog/Fills/Boxes/ammunition.yml +++ b/Resources/Prototypes/Catalog/Fills/Boxes/ammunition.yml @@ -20,7 +20,7 @@ - type: StorageFill contents: - id: MagazinePistolCaselessRifle - amount: 6 + amount: 4 - type: entity name: box of .25 caseless (practice) magazines @@ -31,7 +31,7 @@ - type: StorageFill contents: - id: MagazinePistolCaselessRiflePractice - amount: 6 + amount: 4 - type: entity name: box of .25 caseless (rubber) magazines @@ -42,7 +42,7 @@ - type: StorageFill contents: - id: MagazineCaselessRifleRubber - amount: 6 + amount: 4 # LightRifle - type: entity @@ -54,7 +54,7 @@ - type: StorageFill contents: - id: MagazineLightRifle - amount: 6 + amount: 4 - type: entity name: box of .30 rifle (practice) magazines @@ -65,7 +65,7 @@ - type: StorageFill contents: - id: MagazineLightRiflePractice - amount: 6 + amount: 4 - type: entity name: box of .30 rifle (rubber) magazines @@ -76,7 +76,7 @@ - type: StorageFill contents: - id: MagazineLightRifleRubber - amount: 6 + amount: 4 - type: entity name: box of Vector magazines @@ -132,7 +132,7 @@ - type: StorageFill contents: - id: MagazinePistol - amount: 6 + amount: 4 - type: entity name: box of pistol .35 auto (practice) magazines @@ -143,7 +143,7 @@ - type: StorageFill contents: - id: MagazinePistolPractice - amount: 6 + amount: 4 - type: entity name: box of pistol .35 auto (rubber) magazines @@ -154,7 +154,7 @@ - type: StorageFill contents: - id: MagazinePistolRubber - amount: 6 + amount: 4 - type: entity name: box of machine pistol .35 auto magazines @@ -165,7 +165,7 @@ - type: StorageFill contents: - id: MagazinePistolHighCapacity - amount: 6 + amount: 4 - type: entity name: box of machine pistol .35 auto (practice) magazines @@ -176,7 +176,7 @@ - type: StorageFill contents: - id: MagazinePistolHighCapacityPractice - amount: 6 + amount: 4 - type: entity name: box of machine pistol .35 auto (rubber) magazines @@ -187,7 +187,7 @@ - type: StorageFill contents: - id: MagazinePistolHighCapacityRubber - amount: 6 + amount: 4 - type: entity @@ -233,7 +233,7 @@ - type: StorageFill contents: - id: MagazineShotgun - amount: 6 + amount: 4 - type: entity name: box of (.50 beanbag) ammo drums @@ -244,7 +244,7 @@ - type: StorageFill contents: - id: MagazineShotgunBeanbag - amount: 6 + amount: 4 - type: entity name: box of (.50 slug) ammo drums @@ -255,7 +255,7 @@ - type: StorageFill contents: - id: MagazineShotgunSlug - amount: 6 + amount: 4 - type: entity name: box of (.50 incendiary) ammo drums @@ -266,7 +266,7 @@ - type: StorageFill contents: - id: MagazineShotgunIncendiary - amount: 6 + amount: 4 # base BallisticAmmoProvider dispensers - type: entity @@ -278,7 +278,7 @@ containers: ballistic-ammo: !type:Container - type: Item - size: 30 + size: Normal - type: Sprite sprite: Objects/Storage/boxes.rsi @@ -396,7 +396,7 @@ - type: StorageFill contents: - id: MagazineRifle - amount: 6 + amount: 4 - type: entity name: box of .20 rifle (practice) magazines @@ -407,7 +407,7 @@ - type: StorageFill contents: - id: MagazineRiflePractice - amount: 6 + amount: 4 - type: entity name: box of .20 rifle (rubber) magazines @@ -418,4 +418,4 @@ - type: StorageFill contents: - id: MagazineRifleRubber - amount: 6 + amount: 4 diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/general.yml b/Resources/Prototypes/Catalog/Fills/Boxes/general.yml index 44439866432..35551337a77 100644 --- a/Resources/Prototypes/Catalog/Fills/Boxes/general.yml +++ b/Resources/Prototypes/Catalog/Fills/Boxes/general.yml @@ -4,6 +4,14 @@ id: BoxCardboard description: A cardboard box for storing things. components: + - type: Item + size: Large + shape: + - 0,0,2,2 + - type: Storage + maxItemSize: Small + grid: + - 0,0,2,2 - type: Sprite state: box @@ -16,7 +24,7 @@ - type: StorageFill contents: - id: Mousetrap - amount: 6 + amount: 4 - type: Sprite layers: - state: box @@ -37,7 +45,8 @@ - state: box - state: light - type: Storage - capacity: 60 + grid: + - 0,0,5,3 whitelist: components: - LightBulb @@ -60,7 +69,8 @@ - state: box - state: lighttube - type: Storage - capacity: 60 + grid: + - 0,0,5,3 whitelist: components: - LightBulb @@ -85,7 +95,8 @@ - state: box - state: lightmixed - type: Storage - capacity: 60 + grid: + - 0,0,5,3 whitelist: components: - LightBulb @@ -102,16 +113,11 @@ - type: StorageFill contents: - id: PassengerPDA - amount: 6 + amount: 4 - type: Sprite layers: - state: box - state: pda - - type: Storage - capacity: 60 - whitelist: - components: - - Pda - type: entity name: ID card box @@ -122,16 +128,11 @@ - type: StorageFill contents: - id: PassengerIDCard - amount: 6 + amount: 4 - type: Sprite layers: - state: box - state: pda - - type: Storage - capacity: 60 - whitelist: - components: - - IdCard - type: entity name: headset box @@ -142,16 +143,11 @@ - type: StorageFill contents: - id: ClothingHeadsetGrey - amount: 6 + amount: 4 - type: Sprite layers: - state: box - state: headset - - type: Storage - capacity: 60 - whitelist: - components: - - Headset - type: entity name: meson box @@ -191,8 +187,6 @@ id: BoxHugHealing description: A special box for sensitive people. components: - - type: Storage - capacity: 30 - type: Sprite layers: - state: box_hug @@ -229,8 +223,8 @@ - type: entity - name: hatsune miku day box - parent: BoxCardboard + name: hatsune miku day bag + parent: ClothingBackpackDuffel id: BoxPerformer description: Happy Hatsune Miku Day! components: @@ -267,7 +261,9 @@ - id: TrashBag amount: 6 - type: Storage - capacity: 800 + grid: + - 0,0,5,3 + maxItemSize: Normal whitelist: tags: - TrashBag @@ -288,13 +284,12 @@ - type: StorageFill contents: - id: EncryptionKeyCommon - amount: 6 + amount: 4 - type: Sprite layers: - state: box - state: encryptokey - type: Storage - capacity: 30 whitelist: components: - EncryptionKey @@ -307,7 +302,7 @@ - type: StorageFill contents: - id: EncryptionKeyCargo - amount: 6 + amount: 4 - type: entity name: engineering encryption key box @@ -317,7 +312,7 @@ - type: StorageFill contents: - id: EncryptionKeyEngineering - amount: 6 + amount: 4 - type: entity name: med-sci encryption key box @@ -327,7 +322,7 @@ - type: StorageFill contents: - id: EncryptionKeyMedicalScience - amount: 6 + amount: 4 - type: entity name: medical encryption key box @@ -337,7 +332,7 @@ - type: StorageFill contents: - id: EncryptionKeyMedical - amount: 6 + amount: 4 - type: entity name: robotech encryption key box @@ -347,7 +342,7 @@ - type: StorageFill contents: - id: EncryptionKeyRobo - amount: 6 + amount: 4 - type: entity name: epistemics encryption key box # DeltaV - Epistemics Department replacing Science @@ -357,7 +352,7 @@ - type: StorageFill contents: - id: EncryptionKeyScience - amount: 6 + amount: 4 - type: entity name: security encryption key box @@ -367,7 +362,7 @@ - type: StorageFill contents: - id: EncryptionKeySecurity - amount: 6 + amount: 4 - type: entity name: service encryption key box @@ -377,7 +372,7 @@ - type: StorageFill contents: - id: EncryptionKeyService - amount: 6 + amount: 4 - type: entity name: syndicate encryption key box @@ -386,13 +381,12 @@ description: Two syndicate encryption keys for the price of one. Miniaturized for ease of use. components: - type: Item - size: 15 + size: Normal - type: StorageFill contents: - id: EncryptionKeySyndie amount: 2 - type: Storage - capacity: 15 - type: entity name: deathrattle implant box @@ -401,7 +395,7 @@ description: Six deathrattle implants and handheld GPS devices for the whole squad. components: - type: Item - size: 60 + size: Normal - type: StorageFill contents: - id: DeathRattleImplanter @@ -409,7 +403,8 @@ - id: HandheldGPSBasic amount: 6 - type: Storage - capacity: 60 + grid: + - 0,0,5,3 - type: Sprite layers: - state: box @@ -432,14 +427,13 @@ parent: BoxCardboard id: BoxCandle components: - - type: Item - size: 30 - type: Sprite layers: - state: box - state: candle - type: Storage - capacity: 30 + grid: + - 0,0,9,2 - type: StorageFill contents: - id: Candle @@ -452,20 +446,19 @@ amount: 3 - id: CandlePurple amount: 3 - + - type: entity name: small candle box parent: BoxCardboard id: BoxCandleSmall components: - - type: Item - size: 30 - type: Sprite layers: - state: box - state: candle - type: Storage - capacity: 25 + grid: + - 0,0,9,2 - type: StorageFill contents: - id: CandleSmall @@ -486,20 +479,21 @@ description: This box filled with colorful darts. components: - type: Item - size: 40 + size: Normal - type: StorageFill contents: - id: Dart - amount: 5 + amount: 3 - id: DartBlue - amount: 5 + amount: 3 - id: DartPurple - amount: 5 + amount: 3 - id: DartYellow - amount: 5 + amount: 3 - type: Storage - capacity: 40 + grid: + - 0,0,5,3 - type: Sprite layers: - state: box - - state: darts \ No newline at end of file + - state: darts diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/medical.yml b/Resources/Prototypes/Catalog/Fills/Boxes/medical.yml index ff1bed3728e..aba61ce332d 100644 --- a/Resources/Prototypes/Catalog/Fills/Boxes/medical.yml +++ b/Resources/Prototypes/Catalog/Fills/Boxes/medical.yml @@ -22,7 +22,7 @@ - type: StorageFill contents: - id: PillCanister - amount: 6 + amount: 9 - type: Sprite layers: - state: box @@ -52,7 +52,7 @@ - type: StorageFill contents: - id: ClothingMaskSterile - amount: 6 + amount: 4 - type: Sprite layers: - state: box @@ -93,10 +93,13 @@ parent: BoxCardboard id: BoxMouthSwab components: + - type: Storage + grid: + - 0,0,4,3 - type: StorageFill contents: - id: DiseaseSwab - amount: 30 + amount: 10 - type: Sprite layers: - state: box @@ -115,7 +118,7 @@ - type: StorageFill contents: - id: BodyBag_Folded - amount: 5 + amount: 4 - type: Sprite layers: - state: box @@ -131,9 +134,8 @@ description: A box full of vials. components: - type: Storage - capacity: 12 - #grid: - #- 0,0,2,1 + grid: + - 0,0,2,1 - type: StorageFill contents: - id: BaseChemistryEmptyVial diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/science.yml b/Resources/Prototypes/Catalog/Fills/Boxes/science.yml index 13cae992e94..cd0320e088d 100644 --- a/Resources/Prototypes/Catalog/Fills/Boxes/science.yml +++ b/Resources/Prototypes/Catalog/Fills/Boxes/science.yml @@ -4,12 +4,16 @@ id: BoxBeaker description: A box full of beakers. components: + - type: Storage + grid: + - 0,0,3,2 + maxItemSize: Normal - type: StorageFill contents: - - id: Beaker - amount: 2 - - id: LargeBeaker - amount: 2 + - id: LargeBeaker + amount: 2 + - id: Beaker + amount: 2 - type: Sprite layers: - state: box diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/security.yml b/Resources/Prototypes/Catalog/Fills/Boxes/security.yml index a98b9eea643..b55a024d5d6 100644 --- a/Resources/Prototypes/Catalog/Fills/Boxes/security.yml +++ b/Resources/Prototypes/Catalog/Fills/Boxes/security.yml @@ -11,7 +11,7 @@ - type: StorageFill contents: - id: Handcuffs - amount: 6 + amount: 4 - type: Sprite layers: - state: box_security @@ -53,6 +53,12 @@ id: BoxZiptie description: A box full of zipties. components: + - type: Storage + grid: + - 0,0,4,3 + whitelist: + components: + - Handcuff - type: StorageFill contents: - id: Zipties @@ -68,6 +74,9 @@ id: BoxForensicPad description: A box of forensic pads. components: + - type: Storage + grid: + - 0,0,4,3 - type: StorageFill contents: - id: ForensicPad diff --git a/Resources/Prototypes/Catalog/Fills/Boxes/syndicate.yml b/Resources/Prototypes/Catalog/Fills/Boxes/syndicate.yml index 3ff3536fefc..0f1bd0f4652 100644 --- a/Resources/Prototypes/Catalog/Fills/Boxes/syndicate.yml +++ b/Resources/Prototypes/Catalog/Fills/Boxes/syndicate.yml @@ -18,7 +18,8 @@ description: A starter kit for the aspiring chemist, includes toxin and vestine for all your criminal needs! components: - type: Storage - capacity: 30 + grid: + - 0,0,3,2 - type: StorageFill contents: - id: Beaker diff --git a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml index 59c7e94caf5..4204e3249e3 100644 --- a/Resources/Prototypes/Catalog/Fills/Crates/fun.yml +++ b/Resources/Prototypes/Catalog/Fills/Crates/fun.yml @@ -317,4 +317,4 @@ - id: BoxDarts amount: 1 prob: 0.05 - + diff --git a/Resources/Prototypes/Catalog/Fills/Items/belt.yml b/Resources/Prototypes/Catalog/Fills/Items/belt.yml index 2b193fd61bd..80eac027976 100644 --- a/Resources/Prototypes/Catalog/Fills/Items/belt.yml +++ b/Resources/Prototypes/Catalog/Fills/Items/belt.yml @@ -125,6 +125,12 @@ name: grenadier chest rig suffix: Filled components: + - type: Item + size: Ginormous + - type: Storage + maxItemSize: Normal + grid: + - 0,0,7,1 - type: StorageFill contents: - id: ExGrenade diff --git a/Resources/Prototypes/Catalog/Fills/Items/briefcases.yml b/Resources/Prototypes/Catalog/Fills/Items/briefcases.yml index c487909a4b1..ce2cf1e2b34 100644 --- a/Resources/Prototypes/Catalog/Fills/Items/briefcases.yml +++ b/Resources/Prototypes/Catalog/Fills/Items/briefcases.yml @@ -15,6 +15,12 @@ parent: BriefcaseSyndie suffix: SniperBundle components: + - type: Item + size: Ginormous + - type: Storage + maxItemSize: Huge + grid: + - 0,0,6,3 - type: StorageFill contents: - id: WeaponSniperHristov diff --git a/Resources/Prototypes/Catalog/Fills/Items/firstaidkits.yml b/Resources/Prototypes/Catalog/Fills/Items/firstaidkits.yml index faa8535ab45..f1b259f829c 100644 --- a/Resources/Prototypes/Catalog/Fills/Items/firstaidkits.yml +++ b/Resources/Prototypes/Catalog/Fills/Items/firstaidkits.yml @@ -6,11 +6,8 @@ components: - type: StorageFill contents: - - id: HandheldHealthAnalyzer - id: Brutepack - amount: 2 - id: Ointment - amount: 2 - id: Gauze - id: PillCanisterTricordrazine # see https://github.com/tgstation/blob/master/code/game/objects/items/storage/firstaid.dm for example contents @@ -22,11 +19,8 @@ components: - type: StorageFill contents: - - id: RegenerativeMesh - amount: 2 - id: Ointment amount: 2 - - id: SyringeSigynate - id: PillCanisterKelotane - id: PillCanisterDermaline @@ -37,14 +31,10 @@ components: - type: StorageFill contents: - - id: MedicatedSuture - id: Brutepack - id: Gauze - - id: Bloodpack - - id: SyringeTranexamicAcid - id: PillCanisterIron - id: PillCanisterCopper - - id: PillCanisterBicaridine - type: entity id: MedkitToxinFilled @@ -79,12 +69,9 @@ components: - type: StorageFill contents: - - id: GeigerCounter - id: SyringePhalanximine - id: RadAutoInjector - amount: 1 - id: EmergencyMedipen - amount: 1 - id: PillCanisterHyronalin - type: entity @@ -95,9 +82,7 @@ - type: StorageFill contents: - id: MedicatedSuture - amount: 2 - id: RegenerativeMesh - amount: 2 - id: Bloodpack amount: 2 @@ -108,7 +93,6 @@ components: - type: StorageFill contents: - - id: HandheldHealthAnalyzer - id: MedicatedSuture - id: RegenerativeMesh - id: SyringeEphedrine diff --git a/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml b/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml index 25ec0dca867..6cae786bd00 100644 --- a/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml +++ b/Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml @@ -102,16 +102,20 @@ prob: 0.5 - type: entity + parent: ToolboxSyndicate id: ToolboxSyndicateFilled - name: suspicious toolbox suffix: Filled - parent: ToolboxSyndicate components: - type: StorageFill contents: - - id: ClothingBeltUtilityEngineering - - id: ClothingHandsGlovesCombat - - id: ClothingMaskGasSyndicate + - id: Crowbar + - id: Wrench + - id: Screwdriver + - id: Wirecutter + - id: Welder + - id: Multitool + - id: ClothingHandsGlovesCombat + - id: ClothingMaskGasSyndicate - type: entity id: ToolboxGoldFilled diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 7ee993546ba..0a2d7ee9393 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -39,6 +39,7 @@ - id: PinpointerNuclear # - id: CaptainIDCard # DeltaV - Replaced by the spare ID system - id: ClothingHeadHatCaptain + - id: ClothingNeckCloakCap - id: ClothingHandsGlovesInspection # DeltaV - ClothingHandsGlovesCaptain replaced in favour of inspection gloves - id: ClothingNeckCloakCap - id: ClothingOuterHardsuitCap @@ -172,10 +173,10 @@ - id: BoxEncryptionKeyEngineering - id: AccessConfigurator - id: BoxPDAEngineering # Delta-V - - id: CEIDCard # Delta-V - - id: ClothingShoesBootsWinterChiefEngineer #Delta V: Add departmental winter boots - id: RCD - id: RCDAmmo + - id: CEIDCard # Delta-V + - id: ClothingShoesBootsWinterChiefEngineer #Delta V: Add departmental winter boots - type: entity id: LockerChiefEngineerFilled diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chemvend.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chemvend.yml index 28ed80627fa..6af9dd81dcd 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/chemvend.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/chemvend.yml @@ -60,4 +60,4 @@ PaxChemistryBottle: 3 MuteToxinChemistryBottle: 3 LeadChemistryBottle: 2 - ToxinChemistryBottle: 1 \ No newline at end of file + ToxinChemistryBottle: 1 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/medidrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/medidrobe.yml index 4d5bbdc6104..b1e4eea66e2 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/medidrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/medidrobe.yml @@ -21,3 +21,4 @@ UniformScrubsColorCybersun: 1 #DeltaV ClothingHeadHatSurgcapCybersun: 1 #DeltaV ClothingOuterCoatCybersunWindbreaker: 1 #DeltaV + ClothingShoesBootsWinterMed: 2 diff --git a/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml b/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml index 039ab50b3cc..3514b48d226 100644 --- a/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml +++ b/Resources/Prototypes/Catalog/VendingMachines/Inventories/secdrobe.yml @@ -20,7 +20,7 @@ ClothingOuterWinterSec: 2 ClothingOuterCoatGreatcoat: 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 +## ClothingOuterArmorBasicSlim: 2 ClothingNeckScarfStripedRed: 3 ClothingEyesBlindfold: 1 ClothingShoesBootsCombat: 1 diff --git a/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/backpack.yml b/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/backpack.yml index 80b2dbede78..4c40003996f 100644 --- a/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/backpack.yml +++ b/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/backpack.yml @@ -9,8 +9,8 @@ amount: 1 - id: ClothingOuterArmorBasic amount: 1 - - id: WeaponSubMachineGunTypewriter - amount: 1 +# - id: WeaponSubMachineGunTypewriter # That dont fit >:( +# amount: 1 - id: WeaponPistolViperWood amount: 1 # - id: MagazinePistol # Ammo is too expensive nowadays (it causes test fails) @@ -21,7 +21,7 @@ - type: entity noSpawn: true parent: ClothingBackpackMedical - id: ClothingBackpackParamedicFilled + id: ClothingBackpackParamedicFilledDV components: - type: StorageFill contents: diff --git a/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml b/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml index 040c4173e33..0f63692eeb3 100644 --- a/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml +++ b/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/duffelbag.yml @@ -1,7 +1,7 @@ - type: entity noSpawn: true parent: ClothingBackpackDuffelMedical - id: ClothingBackpackDuffelParamedicFilled + id: ClothingBackpackDuffelParamedicFilledDV components: - type: StorageFill contents: diff --git a/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/satchel.yml b/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/satchel.yml index 6ecfac9866b..8d4545e8de8 100644 --- a/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/satchel.yml +++ b/Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StarterGear/satchel.yml @@ -1,7 +1,7 @@ - type: entity noSpawn: true parent: ClothingBackpackSatchelMedical - id: ClothingBackpackSatchelParamedicFilled + id: ClothingBackpackSatchelParamedicFilledDV components: - type: StorageFill contents: diff --git a/Resources/Prototypes/DeltaV/Catalog/Fills/Boxes/pda.yml b/Resources/Prototypes/DeltaV/Catalog/Fills/Boxes/pda.yml index 4df625c71ad..b6140daae59 100644 --- a/Resources/Prototypes/DeltaV/Catalog/Fills/Boxes/pda.yml +++ b/Resources/Prototypes/DeltaV/Catalog/Fills/Boxes/pda.yml @@ -8,10 +8,8 @@ contents: - id: SecurityPDA amount: 2 - - id: SecurityCadetPDA - id: DetectivePDA - id: WardenPDA - - id: SeniorOfficerPDA - type: entity name: prisoner PDA box @@ -22,7 +20,7 @@ - type: StorageFill contents: - id: PrisonerPDA - amount: 6 + amount: 4 - type: entity name: medical PDA box @@ -34,10 +32,8 @@ contents: - id: MedicalPDA amount: 2 - - id: MedicalInternPDA - id: ChemistryPDA - id: ParamedicPDA - - id: SeniorPhysicianPDA - type: entity name: epistemics PDA box @@ -49,10 +45,8 @@ contents: - id: SciencePDA amount: 2 - - id: ResearchAssistantPDA - id: ForensicMantisPDA - id: ChaplainPDA - - id: SeniorResearcherPDA - type: entity name: engineering PDA box @@ -64,9 +58,7 @@ contents: - id: EngineerPDA amount: 3 - - id: TechnicalAssistantPDA - id: AtmosPDA - - id: SeniorEngineerPDA - type: entity name: logistics PDA box @@ -79,6 +71,6 @@ - id: CargoPDA amount: 2 - id: SalvagePDA - amount: 2 + amount: 1 - id: MailCarrierPDA - amount: 2 + amount: 1 diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/Medical/portafib.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/Medical/portafib.yml index ded343d43cf..3f2b6921459 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Devices/Medical/portafib.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Devices/Medical/portafib.yml @@ -26,7 +26,7 @@ True: { visible: true } False: { visible: false } - type: Item - size: 20 + size: Normal - type: ItemCooldown - type: MultiHandedItem - type: Speech diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Misc/paperslips.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/paperslips.yml index fedd7087a44..3c25380e658 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Misc/paperslips.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Misc/paperslips.yml @@ -15,7 +15,7 @@ - state: biscuit_top map: [ "enum.BiscuitVisualLayers.Top" ] - type: Item - size: 5 + size: Small - type: Tag tags: - Document @@ -131,7 +131,7 @@ - key: enum.PaperUiKey.Key type: PaperBoundUserInterface - type: Item - size: 1 + size: Tiny - type: Tag tags: - Document diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/special.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/special.yml index 1ca4cc5a573..6f643fc0991 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/special.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Ammunition/Boxes/special.yml @@ -11,7 +11,7 @@ proto: CartridgeSpecial capacity: 60 - type: Item - size: 5 + size: Small - type: ContainerContainer containers: ballistic-ammo: !type:Container diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml index 5a1bca325ac..354f0db5233 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml @@ -14,7 +14,7 @@ - CartridgeSpecial capacity: 5 - type: Item - size: 5 + size: Small - type: ContainerContainer containers: ballistic-ammo: !type:Container diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml index f680201c079..9fb68453ee3 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml @@ -11,7 +11,7 @@ - state: base map: [ "enum.GunVisualLayers.Base" ] - type: Item - size: 60 + size: Huge - type: Gun minAngle: 4 maxAngle: 20 diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Projectiles/toy_projectiles.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Projectiles/toy_projectiles.yml index 1f8f91a1d1c..f078a3b6dae 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Projectiles/toy_projectiles.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Projectiles/toy_projectiles.yml @@ -5,7 +5,7 @@ parent: BaseItem components: - type: Item - size: 1 + size: Tiny - type: Reflective - type: Appearance - type: FlyBySound diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Rifles/rifles.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Rifles/rifles.yml index 500b0def088..5dba7d27f1e 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Rifles/rifles.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Rifles/rifles.yml @@ -55,7 +55,7 @@ suffix: Deathsquad components: - type: Item - size: 30 + size: Large - type: Sprite sprite: DeltaV/Objects/Weapons/Guns/Rifles/jackdaw.rsi layers: diff --git a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml index e18a0939c5b..d3424de0061 100644 --- a/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml +++ b/Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml @@ -9,7 +9,7 @@ - type: Clothing sprite: DeltaV/Objects/Weapons/Guns/Shotguns/Adjutant.rsi - type: Item - size: 35 + size: Large - type: Gun fireRate: 1.5 selectedMode: SemiAuto diff --git a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml index eca5fd7d0df..d5cdd354a9e 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/backpacks.yml @@ -8,13 +8,15 @@ sprite: Clothing/Back/Backpacks/backpack.rsi state: icon - type: Item - size: 9999 + size: Huge - type: Clothing quickEquip: false slots: - back - type: Storage - capacity: 100 + grid: + - 0,0,6,3 + maxItemSize: Huge - type: ContainerContainer containers: storagebase: !type:Container @@ -198,7 +200,8 @@ - type: Sprite sprite: Clothing/Back/Backpacks/ertleader.rsi - type: Storage - capacity: 250 + grid: + - 0,0,10,3 - type: entity parent: ClothingBackpackERTLeader @@ -261,8 +264,12 @@ shader: unshaded - type: Clothing equippedPrefix: holding + - type: Item + size: Ginormous - type: Storage - capacity: 9999 + maxItemSize: Huge + grid: + - 0,0,19,9 - type: entity parent: ClothingBackpackClown @@ -276,3 +283,62 @@ - type: Unremoveable deleteOnDrop: false +# Debug +- type: entity + parent: ClothingBackpack + id: ClothingBackpackDebug + name: wackpack + description: What the fuck is this? + suffix: Debug + components: + - type: Storage + grid: + - 0,0,3,3 + - 5,0,7,2 + - 0,5,7,5 + - 6,4,7,5 + - 9,2,10,3 + - 9,5,9,5 + +- type: entity + parent: ClothingBackpack + id: ClothingBackpackDebug2 + name: big wackpack + description: What the fuck is this? + suffix: Debug + components: + - type: Storage + grid: + - 0,0,39,24 + +- type: entity + parent: ClothingBackpack + id: ClothingBackpackDebug3 + name: gay wackpack + description: What the fuck is this? + suffix: Debug + components: + - type: Storage + grid: + - 0,0,0,3 + - 0,0,2,0 + - 0,3,2,3 + - 2,1,2,1 + - 4,0,4,2 + - 6,0,6,2 + - 5,1,5,1 + - 5,3,5,3 + - 9,0,9,1 + - 8,2,8,3 + - 10,2,10,3 + +- type: entity + parent: ClothingBackpack + id: ClothingBackpackDebug4 + name: offset wackpack + description: What the fuck is this? + suffix: Debug + components: + - type: Storage + grid: + - 5,5,11,8 diff --git a/Resources/Prototypes/Entities/Clothing/Back/duffel.yml b/Resources/Prototypes/Entities/Clothing/Back/duffel.yml index f307b56a825..ca16aa5d7ed 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/duffel.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/duffel.yml @@ -4,14 +4,16 @@ name: duffel bag description: A large duffel bag for holding extra things. components: - - type: Sprite - sprite: Clothing/Back/Duffels/duffel.rsi - - type: Storage - capacity: 120 - - type: ClothingSpeedModifier - walkModifier: 1 - sprintModifier: 0.9 - - type: HeldSpeedModifier + - type: Sprite + sprite: Clothing/Back/Duffels/duffel.rsi + - type: Storage + maxItemSize: Huge + grid: + - 0,0,7,4 + - type: ClothingSpeedModifier + walkModifier: 1 + sprintModifier: 0.9 + - type: HeldSpeedModifier - type: entity parent: ClothingBackpackDuffel @@ -161,12 +163,10 @@ name: syndicate duffel bag description: A large duffel bag for holding various traitor goods. components: - - type: Sprite - sprite: Clothing/Back/Duffels/syndicate.rsi - - type: Storage - capacity: 131 - - type: ExplosionResistance - damageCoefficient: 0.1 + - type: Sprite + sprite: Clothing/Back/Duffels/syndicate.rsi + - type: ExplosionResistance + damageCoefficient: 0.1 - type: entity parent: ClothingBackpackDuffelSyndicate @@ -224,18 +224,22 @@ name: duffelbag of holding description: A duffelbag that opens into a localized pocket of bluespace. components: - - type: Sprite - sprite: Clothing/Back/Duffels/holding.rsi - state: icon - layers: - - state: icon - - state: icon-unlit - shader: unshaded - - type: Storage - capacity: 9999 - - type: ClothingSpeedModifier - sprintModifier: 1 # makes its stats identical to other variants of bag of holding - - type: HeldSpeedModifier + - type: Sprite + sprite: Clothing/Back/Duffels/holding.rsi + state: icon + layers: + - state: icon + - state: icon-unlit + shader: unshaded + - type: Item + size: Ginormous + - type: Storage + maxItemSize: Huge + grid: + - 0,0,19,9 + - type: ClothingSpeedModifier + sprintModifier: 1 # makes its stats identical to other variants of bag of holding + - type: HeldSpeedModifier - type: entity parent: ClothingBackpackDuffel @@ -243,9 +247,9 @@ name: CBURN duffel bag description: A duffel bag containing a variety of biological containment equipment. components: - - type: Storage - capacity: 150 - - type: ClothingSpeedModifier - walkModifier: 1 - sprintModifier: 1 - - type: HeldSpeedModifier \ No newline at end of file + - type: Storage + maxItemSize: Huge + - type: ClothingSpeedModifier + walkModifier: 1 + sprintModifier: 1 + - type: HeldSpeedModifier diff --git a/Resources/Prototypes/Entities/Clothing/Back/satchel.yml b/Resources/Prototypes/Entities/Clothing/Back/satchel.yml index 9d3cfb7f79d..6121e9ce734 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/satchel.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/satchel.yml @@ -167,5 +167,9 @@ - state: icon - state: icon-unlit shader: unshaded + - type: Item + size: Ginormous - type: Storage - capacity: 9999 + maxItemSize: Huge + grid: + - 0,0,19,9 diff --git a/Resources/Prototypes/Entities/Clothing/Back/specific.yml b/Resources/Prototypes/Entities/Clothing/Back/specific.yml index 59640073564..8af00039b5d 100644 --- a/Resources/Prototypes/Entities/Clothing/Back/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Back/specific.yml @@ -33,7 +33,7 @@ sprite: Clothing/Back/Backpacks/waterbackpack.rsi state: icon - type: Item - size: 200 + size: Ginormous - type: Clothing slots: BACK sprite: Clothing/Back/Backpacks/waterbackpack.rsi diff --git a/Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml b/Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml index ffea87de892..614e739e058 100644 --- a/Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml +++ b/Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml @@ -6,7 +6,7 @@ - type: Sprite state: icon - type: Item - size: 50 + size: Normal - type: Clothing slots: [belt] quickEquip: false @@ -22,7 +22,11 @@ id: ClothingBeltStorageBase components: - type: Storage - capacity: 40 + maxItemSize: Normal + grid: + - 0,0,7,1 + - type: Item + size: Ginormous - type: ContainerContainer containers: storagebase: !type:Container @@ -36,12 +40,12 @@ abstract: true parent: ClothingBeltBase id: ClothingBeltAmmoProviderBase - components: + components: - type: BallisticAmmoProvider mayTransfer: true - type: Item size: Ginormous - type: ContainerContainer - containers: + containers: ballistic-ammo: !type:Container - + diff --git a/Resources/Prototypes/Entities/Clothing/Belt/belts.yml b/Resources/Prototypes/Entities/Clothing/Belt/belts.yml index 6f80cf4f260..d18753d5239 100644 --- a/Resources/Prototypes/Entities/Clothing/Belt/belts.yml +++ b/Resources/Prototypes/Entities/Clothing/Belt/belts.yml @@ -11,7 +11,7 @@ - type: Clothing sprite: Clothing/Belt/utility.rsi - type: Storage - capacity: 45 + maxItemSize: Normal # TODO: Fill this out more. whitelist: tags: @@ -88,7 +88,8 @@ - type: Clothing sprite: Clothing/Belt/ce.rsi - type: Storage - capacity: 105 + grid: + - 0,0,9,1 # TODO: Fill this out more. whitelist: tags: @@ -248,7 +249,6 @@ - type: Clothing sprite: Clothing/Belt/medical.rsi - type: Storage - capacity: 60 whitelist: tags: - Wrench @@ -409,6 +409,8 @@ state: sheath - type: Clothing sprite: Clothing/Belt/sheath.rsi + - type: Item + size: Ginormous - type: ItemSlots slots: item: @@ -425,7 +427,7 @@ tags: - CaptainSabre - type: Appearance - + # Belts without visualizers - type: entity @@ -439,7 +441,7 @@ - type: Clothing sprite: Clothing/Belt/bandolier.rsi - type: Item - size: 60 + size: Huge - type: BallisticAmmoProvider whitelist: tags: @@ -472,7 +474,8 @@ - type: Clothing sprite: Clothing/Belt/holster.rsi - type: Storage - capacity: 20 + grid: + - 0,0,3,1 - type: entity parent: ClothingBeltStorageBase @@ -485,9 +488,11 @@ - type: Clothing sprite: Clothing/Belt/syndieholster.rsi - type: Item - size: 60 + size: Ginormous - type: Storage - capacity: 60 + maxItemSize: Huge + grid: + - 0,0,3,3 whitelist: components: - Gun @@ -551,9 +556,7 @@ - type: Clothing sprite: Clothing/Belt/militarywebbingmed.rsi - type: Item - size: 70 - - type: Storage - capacity: 70 + size: Huge - type: entity parent: ClothingBeltBase @@ -582,7 +585,8 @@ - type: Clothing sprite: Clothing/Belt/wand.rsi - type: Storage - capacity: 120 + grid: + - 0,0,15,1 whitelist: tags: - WizardWand diff --git a/Resources/Prototypes/Entities/Clothing/Belt/quiver.yml b/Resources/Prototypes/Entities/Clothing/Belt/quiver.yml index 10332e46aa4..6cbf5a69cae 100644 --- a/Resources/Prototypes/Entities/Clothing/Belt/quiver.yml +++ b/Resources/Prototypes/Entities/Clothing/Belt/quiver.yml @@ -12,7 +12,9 @@ visible: false - type: Clothing - type: Storage - capacity: 150 + grid: + - 0,0,7,3 + maxItemSize: Small whitelist: tags: - Arrow diff --git a/Resources/Prototypes/Entities/Clothing/Belt/waist_bags.yml b/Resources/Prototypes/Entities/Clothing/Belt/waist_bags.yml index 6d47010efc6..81fddf379b6 100644 --- a/Resources/Prototypes/Entities/Clothing/Belt/waist_bags.yml +++ b/Resources/Prototypes/Entities/Clothing/Belt/waist_bags.yml @@ -9,8 +9,9 @@ - type: Clothing sprite: Clothing/Belt/waistbag_leather.rsi - type: Storage - capacity: 20 - + grid: + - 0,0,3,1 + #Colorization on worn items doesn't work. If this ever gets fixed, you can duplicate this entry and change the color on the sprite to add color variants. #- type: entity # parent: ClothingBeltStorageWaistbag @@ -29,4 +30,4 @@ # layers: # - state: "equipped-BELT" # color: "#bf1313" -# - state: "equipped-trinkets" \ No newline at end of file +# - state: "equipped-trinkets" diff --git a/Resources/Prototypes/Entities/Clothing/Ears/headsets.yml b/Resources/Prototypes/Entities/Clothing/Ears/headsets.yml index 9b1f6c24a96..df160f8e5a7 100644 --- a/Resources/Prototypes/Entities/Clothing/Ears/headsets.yml +++ b/Resources/Prototypes/Entities/Clothing/Ears/headsets.yml @@ -17,6 +17,8 @@ keySlots: 4 - type: Sprite state: icon + - type: Item + size: Small - type: Clothing slots: - ears diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/base_clothingeyes.yml b/Resources/Prototypes/Entities/Clothing/Eyes/base_clothingeyes.yml index dc37811fb80..a0c41120b84 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/base_clothingeyes.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/base_clothingeyes.yml @@ -7,3 +7,5 @@ state: icon - type: Clothing slots: [eyes] + - type: Item + size: Small diff --git a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml index e29aae6b190..6f7e87ff81e 100644 --- a/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml +++ b/Resources/Prototypes/Entities/Clothing/Eyes/glasses.yml @@ -83,7 +83,7 @@ - HamsterWearable - WhitelistChameleon - GlassesNearsight # SimpleStation14 NearsightedTrait - + - type: entity parent: ClothingEyesBase id: ClothingEyesGlassesJensen diff --git a/Resources/Prototypes/Entities/Clothing/Hands/base_clothinghands.yml b/Resources/Prototypes/Entities/Clothing/Hands/base_clothinghands.yml index e7d8bec69ff..5cf7fd645ba 100644 --- a/Resources/Prototypes/Entities/Clothing/Hands/base_clothinghands.yml +++ b/Resources/Prototypes/Entities/Clothing/Hands/base_clothinghands.yml @@ -9,6 +9,8 @@ slots: [gloves] - type: Food requiresSpecialDigestion: true + - type: Item + size: Small - type: SolutionContainerManager solutions: food: diff --git a/Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml b/Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml index ce1767b1bbf..88b58c9c8c8 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml @@ -8,6 +8,8 @@ - HEAD - type: Sprite state: icon + - type: Item + size: Small - type: Food requiresSpecialDigestion: true - type: SolutionContainerManager @@ -69,6 +71,7 @@ equippedPrefix: off - type: Item heldPrefix: off + size: Normal - type: ToggleableLightVisuals - type: PointLight enabled: false @@ -117,7 +120,7 @@ name: base space helmet components: - type: Item - size: 10 + size: Normal - type: PressureProtection highPressureMultiplier: 0.6 lowPressureMultiplier: 1000 @@ -241,4 +244,4 @@ - type: GroupExamine - type: Tag tags: - - HidesHair \ No newline at end of file + - HidesHair diff --git a/Resources/Prototypes/Entities/Clothing/Head/hats.yml b/Resources/Prototypes/Entities/Clothing/Head/hats.yml index 19929b98887..980e32ac64e 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hats.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hats.yml @@ -208,7 +208,8 @@ - type: Clothing sprite: Clothing/Head/Hats/chefhat.rsi - type: Storage - capacity: 5 + grid: + - 0,0,0,0 - type: UserInterface interfaces: - key: enum.StorageUiKey.Key @@ -777,10 +778,11 @@ offset: "0, 0.12" sprite: Clothing/Head/Hats/magician.rsi - type: Item - size: 10 + size: Small sprite: Clothing/Head/Hats/magician.rsi - type: Storage - capacity: 10 + grid: + - 0,0,0,0 - type: UserInterface interfaces: - key: enum.StorageUiKey.Key diff --git a/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml b/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml index b79d76aa170..d57065ba79a 100644 --- a/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml +++ b/Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml @@ -5,6 +5,8 @@ components: - type: Sprite state: icon + - type: Item + size: Small - type: Clothing slots: [mask] diff --git a/Resources/Prototypes/Entities/Clothing/Neck/base_clothingneck.yml b/Resources/Prototypes/Entities/Clothing/Neck/base_clothingneck.yml index 06ec393c78d..1bccb4c92a3 100644 --- a/Resources/Prototypes/Entities/Clothing/Neck/base_clothingneck.yml +++ b/Resources/Prototypes/Entities/Clothing/Neck/base_clothingneck.yml @@ -4,7 +4,7 @@ id: ClothingNeckBase components: - type: Item - size: 10 + size: Small - type: Clothing quickEquip: true slots: diff --git a/Resources/Prototypes/Entities/Clothing/Neck/pins.yml b/Resources/Prototypes/Entities/Clothing/Neck/pins.yml index fe72fd12e95..0d22a653dbf 100644 --- a/Resources/Prototypes/Entities/Clothing/Neck/pins.yml +++ b/Resources/Prototypes/Entities/Clothing/Neck/pins.yml @@ -6,7 +6,7 @@ description: be nothing do crime components: - type: Item - size: 1 + size: Tiny - type: entity parent: ClothingNeckPinBase diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml index a1c2de0c877..38c1fa11260 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/base_clothingouter.yml @@ -15,7 +15,7 @@ id: ClothingOuterBaseLarge components: - type: Item - size: 80 + size: Huge - type: Clothing slots: - outerClothing @@ -29,10 +29,9 @@ parent: ClothingOuterBase id: ClothingOuterStorageBase components: - - type: Item - size: 10 - type: Storage - capacity: 10 + grid: + - 0,0,2,1 - type: ContainerContainer containers: storagebase: !type:Container @@ -74,7 +73,7 @@ sprintModifier: 0.6 - type: HeldSpeedModifier - type: Item - size: 121 + size: Ginormous - type: Armor modifiers: coefficients: @@ -110,7 +109,7 @@ sprintModifier: 0.8 - type: HeldSpeedModifier - type: Item - size: 80 + size: Huge - type: entity parent: ClothingOuterBase @@ -133,7 +132,7 @@ id: ClothingOuterBaseMedium components: - type: Item - size: 30 + size: Huge - type: Clothing slots: - outerClothing diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml index 2c635514832..68fdd587ea7 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml @@ -367,7 +367,7 @@ sprintModifier: 0.75 - type: HeldSpeedModifier - type: Item - size: 50 + size: Normal - type: Tag tags: - WhitelistChameleon @@ -449,6 +449,8 @@ components: - type: Sprite sprite: Clothing/OuterClothing/Hardsuits/syndicate.rsi + - type: Item + size: Huge - type: Clothing sprite: Clothing/OuterClothing/Hardsuits/syndicate.rsi - type: PressureProtection @@ -884,9 +886,9 @@ - type: ClothingSpeedModifier walkModifier: 0.9 sprintModifier: 0.9 - # - type: Construction # DeltaV - Prevent clowns from making the hardsuit + - type: HeldSpeedModifier + #- type: Construction # DeltaV - Prevent clowns from making the hardsuit # graph: ClownHardsuit # node: clownHardsuit - - type: HeldSpeedModifier - type: ToggleableClothing clothingPrototype: ClothingHeadHelmetHardsuitClown diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml index c1a19fd3a07..94f1d584eb1 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/suits.yml @@ -200,7 +200,7 @@ - type: Sprite sprite: Clothing/OuterClothing/Suits/iansuit.rsi - type: Item - size: 30 + size: Normal - type: Clothing sprite: Clothing/OuterClothing/Suits/iansuit.rsi - type: ToggleableClothing @@ -221,7 +221,7 @@ - type: Sprite sprite: Clothing/OuterClothing/Suits/carpsuit.rsi - type: Item - size: 30 + size: Normal - type: Clothing sprite: Clothing/OuterClothing/Suits/carpsuit.rsi - type: ToggleableClothing diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml index d897553d44b..ad8454a6b4a 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/wintercoats.yml @@ -11,7 +11,7 @@ - type: TemperatureProtection coefficient: 0.1 - type: Item - size: 10 + size: Normal - type: Armor modifiers: coefficients: diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/base_clothingshoes.yml b/Resources/Prototypes/Entities/Clothing/Shoes/base_clothingshoes.yml index d0f48002054..8d7dde5928e 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/base_clothingshoes.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/base_clothingshoes.yml @@ -8,6 +8,8 @@ - FEET - type: Sprite state: icon + - type: Item + size: Normal - type: Food requiresSpecialDigestion: true - type: SolutionContainerManager diff --git a/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml b/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml index b440fac084b..4a49c804cdb 100644 --- a/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml +++ b/Resources/Prototypes/Entities/Clothing/Shoes/specific.yml @@ -202,7 +202,7 @@ - state: equipped-FEET offset: "0, -0.02" - type: Item - size: 10 + size: Small sprite: Clothing/Shoes/Specific/large_clown.rsi - type: ClothingSpeedModifier walkModifier: 0.85 @@ -223,7 +223,6 @@ - state: equipped-FEET offset: "0, -0.04" - type: Item - size: 10 sprite: Clothing/Shoes/Specific/skates.rsi - type: ClothingSpeedModifier walkModifier: 1.1 diff --git a/Resources/Prototypes/Entities/Clothing/base_clothing.yml b/Resources/Prototypes/Entities/Clothing/base_clothing.yml index a4de5d453f4..92a698dd301 100644 --- a/Resources/Prototypes/Entities/Clothing/base_clothing.yml +++ b/Resources/Prototypes/Entities/Clothing/base_clothing.yml @@ -3,6 +3,8 @@ parent: BaseItem id: Clothing components: + - type: Item + size: Normal - type: Sprite - type: Tag tags: diff --git a/Resources/Prototypes/Entities/Debugging/debug_sweps.yml b/Resources/Prototypes/Entities/Debugging/debug_sweps.yml index 2d374b8e127..e3289569a29 100644 --- a/Resources/Prototypes/Entities/Debugging/debug_sweps.yml +++ b/Resources/Prototypes/Entities/Debugging/debug_sweps.yml @@ -101,7 +101,7 @@ types: Blunt: 20000 - type: Item - size: 1 + size: Tiny sprite: Objects/Weapons/Melee/debug.rsi - type: entity diff --git a/Resources/Prototypes/Entities/Debugging/item.yml b/Resources/Prototypes/Entities/Debugging/item.yml new file mode 100644 index 00000000000..e3c8ffddd28 --- /dev/null +++ b/Resources/Prototypes/Entities/Debugging/item.yml @@ -0,0 +1,21 @@ +- type: entity + parent: BaseItem + id: DebugItemShapeWeird + name: weirdly shaped item + description: What is it...? + suffix: DEBUG + components: + - type: Tag + tags: + - Debug + - type: Sprite + sprite: Objects/Misc/skub.rsi + state: icon + - type: Item + size: Tiny + shape: + - 0, 0, 2, 2 + - 1, 1, 1, 4 + - 1, 4, 6, 4 + - 6, 2, 6, 2 + - 5, 3, 5, 5 diff --git a/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml b/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml index c674a05d2e0..2b3dbd3ba25 100644 --- a/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml +++ b/Resources/Prototypes/Entities/Mobs/Customization/Markings/gauze.yml @@ -54,20 +54,6 @@ - sprite: Mobs/Customization/gauze.rsi state: gauze_righteye_1 -- type: marking - id: GauzeBlindfold - bodyPart: Eyes - markingCategory: Head - speciesRestriction: [Moth, Dwarf, Human, Arachnid] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" - sprites: - - sprite: Mobs/Customization/gauze.rsi - state: gauze_blindfold - - type: marking id: GauzeShoulder bodyPart: Chest @@ -81,7 +67,7 @@ sprites: - sprite: Mobs/Customization/gauze.rsi state: gauze_shoulder - + - type: marking id: GauzeStomach bodyPart: Chest @@ -179,7 +165,7 @@ sprites: - sprite: Mobs/Customization/gauze.rsi state: gauze_upperleg_r - + - type: marking id: GauzeLowerLegRight bodyPart: RFoot @@ -193,103 +179,4 @@ sprites: - sprite: Mobs/Customization/gauze.rsi state: gauze_lowerleg_r - -- type: marking - id: GauzeBoxerWrapRight - bodyPart: RHand - markingCategory: Arms - speciesRestriction: [Moth, Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Harpy, Vulpkanin] # Delta V - Felinid, Oni, Harpy, Vulpkanin - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" - sprites: - - sprite: Mobs/Customization/gauze.rsi - state: gauze_boxerwrap_r - -- type: marking - id: GauzeBoxerWrapLeft - bodyPart: LHand - markingCategory: Arms - speciesRestriction: [Moth, Dwarf, Human, Reptilian, Arachnid, SlimePerson, Felinid, Oni, Harpy, Vulpkanin] # Delta V - Felinid, Oni, Harpy, Vulpkanin - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" - sprites: - - sprite: Mobs/Customization/gauze.rsi - state: gauze_boxerwrap_l - -# Lizard Specific Markings -- type: marking - id: GauzeLizardLefteyePatch - bodyPart: Eyes - markingCategory: Head - speciesRestriction: [Reptilian] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" - sprites: - - sprite: Mobs/Customization/gauze.rsi - state: gauze_lizardlefteye - -- type: marking - id: GauzeLizardRighteyePatch - bodyPart: Eyes - markingCategory: Head - speciesRestriction: [Reptilian] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" - sprites: - - sprite: Mobs/Customization/gauze.rsi - state: gauze_lizardrighteye - -- type: marking - id: GauzeLizardFootRight - bodyPart: RFoot - markingCategory: Legs - speciesRestriction: [Reptilian] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" - sprites: - - sprite: Mobs/Customization/gauze.rsi - state: gauze_lizardfoot_r - -- type: marking - id: GauzeLizardFootLeft - bodyPart: LFoot - markingCategory: Legs - speciesRestriction: [Reptilian] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" - sprites: - - sprite: Mobs/Customization/gauze.rsi - state: gauze_lizardfoot_l - -- type: marking - id: GauzeLizardBlindfold - bodyPart: Eyes - markingCategory: Head - speciesRestriction: [Reptilian] - coloring: - default: - type: - !type:SimpleColoring - color: "#FFFFFF" - sprites: - - sprite: Mobs/Customization/gauze.rsi - state: gauze_lizardblindfold diff --git a/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml b/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml index 7a0c00130c2..218414e6108 100644 --- a/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml +++ b/Resources/Prototypes/Entities/Mobs/Cyborgs/borg_chassis.yml @@ -194,13 +194,9 @@ - Science - type: AccessReader access: [["Medical"], ["Command"], ["Research"]] - - type: ContainerFill - containers: - borg_module: - - BorgModuleTreatment - - type: FabricateCandy # Nyanotrasen - The medical cyborg can generate candies filled with medicine. - type: Inventory templateId: borgDutch + - type: FabricateCandy # Nyanotrasen - The medical cyborg can generate candies filled with medicine. - type: entity id: BorgChassisService diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index d969c027a56..7cb6a8c330a 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -104,6 +104,8 @@ Base: 0 Dead: Base: dead + - type: Item + size: Tiny - type: Tag tags: - Bee @@ -122,8 +124,6 @@ task: SimpleHostileCompound - type: Puller needsHands: true - - type: Item # DeltaV - Allow grabbing and storing bees in inventory - size: 5 - type: Extractable # DeltaV - Make it so bees can be ground up grindableSolutionName: bee - type: SolutionContainerManager @@ -134,7 +134,6 @@ Quantity: 5 - type: ZombieImmune - - type: entity name: bee suffix: Angry @@ -263,7 +262,7 @@ - map: ["enum.DamageStateVisualLayers.Base"] state: cockroach - type: Item - size: 2 + size: Tiny - type: HTN rootTask: task: MouseCompound @@ -383,7 +382,7 @@ - map: ["enum.DamageStateVisualLayers.Base"] state: mothroach - type: Item - size: 15 + size: Normal - type: Clothing quickEquip: false sprite: Mobs/Animals/mothroach.rsi @@ -1196,7 +1195,7 @@ - map: ["enum.DamageStateVisualLayers.Base"] state: mouse-0 - type: Item - size: 5 + size: Tiny - type: Clothing quickEquip: false sprite: Mobs/Animals/mouse.rsi @@ -1671,7 +1670,7 @@ groups: Brute: 5 - type: Item - size: 80 + size: Normal - type: OnUseTimerTrigger delay: 10 beepSound: @@ -2638,7 +2637,7 @@ - map: ["enum.DamageStateVisualLayers.Base"] state: hamster-0 - type: Item - size: 5 + size: Tiny - type: Physics - type: Fixtures fixtures: diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml index 5b1d6d60dc5..aa6e440cf6e 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/silicon.yml @@ -164,7 +164,9 @@ graph: SupplyBot node: bot - type: Storage - capacity: 250 + maxItemSize: Huge + grid: + - 0,0,9,3 - type: Access groups: - Cargo diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks-cartons.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks-cartons.yml index a329d6272e2..83f1dea1d4b 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks-cartons.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks-cartons.yml @@ -12,6 +12,8 @@ maxVol: 50 - type: Sprite state: icon + - type: Item + size: Normal - type: MeleeWeapon soundNoDamage: path: "/Audio/Effects/Fluids/splat.ogg" diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles.yml index 8a116b0b23e..d36d48e3160 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_bottles.yml @@ -13,6 +13,8 @@ maxVol: 100 - type: Sprite state: icon + - type: Item + size: Normal - type: DamageOnLand damage: types: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml index 7afb21fe975..f651254c9b1 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks_cans.yml @@ -401,9 +401,10 @@ map: ["6pack6"] visible: false - type: Item - size: 6 + size: Normal - type: Storage - capacity: 30 + grid: + - 0,0,2,3 whitelist: tags: - Cola diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml index 5c6da9a117c..32a1815ac7c 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/bread.yml @@ -29,7 +29,7 @@ abstract: true components: - type: Item - size: 1 + size: Tiny - type: FlavorProfile flavors: - bread @@ -803,7 +803,7 @@ defaultRotation: 0 horizontalRotation: 0 - type: Item - size: 100 # Did I randomly decide this? Yes. Yes I did. + size: Ginormous - type: GhostRole prob: 1 name: ghost-role-information-BreadDog-name diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml index 1345ad0f119..dfa3be29ec3 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/cake.yml @@ -22,7 +22,7 @@ - ReagentId: Vitamin Quantity: 5 - type: Item - size: 25 + size: Normal - type: entity parent: FoodCakeBase @@ -44,7 +44,7 @@ - ReagentId: Vitamin Quantity: 1 - type: Item - size: 5 + size: Tiny # Custom Cake Example @@ -634,7 +634,8 @@ defaultRotation: 0 horizontalRotation: 0 - type: Item - size: 100 # Did I randomly decide this? Yes. Yes I did. + size: Ginormous + heldPrefix: cak - type: Clothing quickEquip: false sprite: Mobs/Pets/cat.rsi @@ -697,7 +698,7 @@ - type: Food transferAmount: 12 - type: Item - size: 40 + size: Normal - type: PointLight color: "#FFFF00" radius: 2 diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donkpocket.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donkpocket.yml index 061852f5616..b0be8011aa4 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donkpocket.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donkpocket.yml @@ -16,7 +16,7 @@ - ReagentId: Nutriment Quantity: 3 - type: Item - size: 1 + size: Tiny - type: Tag tags: - DonkPocket diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donut.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donut.yml index bd007d87cbd..9cf32f30b4e 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donut.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/donut.yml @@ -21,7 +21,7 @@ Quantity: 3 - type: Item sprite: Objects/Consumable/Food/Baked/donut.rsi - size: 1 + size: Tiny # Tastes like donut. # The sprinkles are now an overlay, so you can put them on any donut! If we really diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml index 180f176543d..0fbed6815ce 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/misc.yml @@ -17,7 +17,7 @@ - ReagentId: Nutriment Quantity: 5 - type: Item - size: 1 + size: Tiny # Muffins/Buns diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml index 9af171f4fba..95bfe6b6b4c 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml @@ -25,7 +25,7 @@ - type: SliceableFood count: 8 - type: Item - size: 8 + size: Normal - type: Tag tags: - Pizza @@ -54,7 +54,7 @@ - ReagentId: Vitamin Quantity: 0.8 - type: Item - size: 1 + size: Tiny - type: Tag tags: - Pizza diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml index 218597eca50..b8eb862c403 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/box.yml @@ -38,13 +38,14 @@ map: ["pink-box6"] visible: false - type: Storage - capacity: 6 + grid: + - 0,0,5,0 whitelist: tags: - Donut - type: Item sprite: Objects/Consumable/Food/Baked/donut.rsi - size: 6 + size: Small heldPrefix: box - type: StorageFill contents: @@ -118,13 +119,14 @@ map: ["box12"] visible: false - type: Storage - capacity: 12 + grid: + - 0,0,5,1 whitelist: tags: - Egg - type: Item sprite: Objects/Consumable/Food/egg.rsi - size: 12 + size: Small - type: StorageFill contents: - id: FoodEgg @@ -206,10 +208,9 @@ map: ["enum.StorageVisualLayers.Door"] # TODO make these entitystorage again + placeablesurface after entity storage ECS gets merged. - type: Storage - capacity: 8 - whitelist: - tags: - - Pizza + grid: + - 0,0,1,1 + maxItemSize: Normal - type: Item sprite: Objects/Consumable/Food/Baked/pizza.rsi heldPrefix: box @@ -308,10 +309,11 @@ map: ["box6"] visible: false - type: Storage - capacity: 6 + grid: + - 0,0,1,2 - type: Item sprite: Objects/Consumable/Food/Baked/nuggets.rsi - size: 6 + size: Small heldPrefix: box - type: StorageFill contents: @@ -342,13 +344,14 @@ sprite: Objects/Consumable/Food/Baked/donkpocket.rsi state: box - type: Storage + grid: + - 0,0,3,2 whitelist: tags: - DonkPocket - capacity: 6 - type: Item sprite: Objects/Consumable/Food/Baked/donkpocket.rsi - size: 6 + size: Small - type: StorageFill contents: - id: FoodDonkpocket @@ -471,7 +474,8 @@ sprite: Objects/Storage/Happyhonk/clown.rsi heldPrefix: box - type: Storage - capacity: 30 + grid: + - 0,0,3,3 - type: Tag tags: - Trash @@ -595,10 +599,9 @@ suffix: Toy Unsafe, Snacks name: syndicate snack box components: - - type: Item - size: 64 - type: Storage - capacity: 64 # need more room for goodies + grid: + - 0,0,5,2 - type: StorageFill contents: # toy diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/tin.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/tin.yml index 4e63ca5012e..89ec5a8c27b 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/tin.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/Containers/tin.yml @@ -37,7 +37,7 @@ - type: Item sprite: Objects/Consumable/Food/snacks.rsi heldPrefix: packet - size: 3 + size: Tiny - type: DamageOnLand damage: types: @@ -63,7 +63,7 @@ - type: Item sprite: Objects/Consumable/Food/snacks.rsi heldPrefix: packet - size: 3 + size: Tiny - type: PhysicalComposition materialComposition: Steel: 100 diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/egg.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/egg.yml index 82070d420d7..a6c3a8b9743 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/egg.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/egg.yml @@ -16,7 +16,7 @@ sprite: Objects/Consumable/Food/egg.rsi - type: Item sprite: Objects/Consumable/Food/egg.rsi - size: 1 + size: Tiny - type: SolutionContainerManager solutions: food: @@ -79,7 +79,7 @@ sprite: Objects/Consumable/Food/egg.rsi state: eggshells - type: Item - size: 1 + size: Tiny - type: SolutionContainerManager solutions: food: diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml index 35a141df65e..97fbb02d546 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/meat.yml @@ -24,7 +24,7 @@ - ReagentId: Fat Quantity: 5 - type: Item - size: 5 + size: Tiny - type: Fixtures fixtures: fix1: @@ -209,7 +209,7 @@ graph: BearSteak node: start defaultTarget: filet migrawr - + - type: entity name: raw penguin meat diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml index d372d896bff..f103b532eeb 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml @@ -140,7 +140,7 @@ - type: Sprite sprite: Objects/Specific/Hydroponics/nettle.rsi - type: Item - size: 10 + size: Small sprite: Objects/Specific/Hydroponics/nettle.rsi - type: MeleeWeapon damage: @@ -170,7 +170,7 @@ - type: Sprite sprite: Objects/Specific/Hydroponics/death_nettle.rsi - type: Item - size: 10 + size: Small sprite: Objects/Specific/Hydroponics/death_nettle.rsi - type: MeleeWeapon damage: @@ -188,7 +188,7 @@ - type: Produce seedId: deathNettle - type: MeleeChemicalInjector - transferAmount: 6 + transferAmount: 6 solution: food pierceArmor: true # We do a little trolling - type: Extractable @@ -226,7 +226,7 @@ - type: Tag tags: - Fruit - + - type: entity name: mimana parent: FoodProduceBase @@ -341,7 +341,7 @@ state: peel - type: Item sprite: Objects/Specific/Hydroponics/mimana.rsi - heldPrefix: peel + heldPrefix: peel - type: Slippery slipSound: path: /Audio/Effects/slip.ogg @@ -894,7 +894,7 @@ sprite: Objects/Specific/Hydroponics/corn.rsi state: cob - type: Item - size: 1 + size: Tiny - type: Tag tags: - Trash @@ -1295,7 +1295,7 @@ - type: Tag tags: - Galaxythistle - - Fruit # Probably? + - Fruit # Probably? - type: entity name: fly amanita @@ -1423,7 +1423,7 @@ description: Round green object that you can slice and eat. components: - type: Item - size: 10 + size: Small - type: FlavorProfile flavors: - watermelon @@ -1485,7 +1485,7 @@ description: Juicy green and red slice. components: - type: Item - size: 2 + size: Tiny - type: FlavorProfile flavors: - watermelon @@ -1654,7 +1654,7 @@ description: A large, orange... berry. Seriously. components: - type: Item - size: 10 + size: Small - type: FlavorProfile flavors: - pumpkin diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/skewer.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/skewer.yml index 07e85d3fe26..1f16cbd66ed 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/skewer.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/skewer.yml @@ -18,7 +18,7 @@ - ReagentId: Nutriment Quantity: 8 - type: Item - size: 5 + size: Small # Kebabs diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml b/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml index b6a7faeac6a..f9cf2231142 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Food/snacks.yml @@ -22,7 +22,7 @@ - type: Item sprite: Objects/Consumable/Food/snacks.rsi heldPrefix: packet - size: 3 + size: Tiny # Snacks # "Snacks" means food in a packet. Down the line this stuff can have multiple @@ -102,7 +102,7 @@ state: chocolatebar - type: Item heldPrefix: chocolatebar - size: 3 + size: Tiny - type: Tag tags: - FoodSnack @@ -347,7 +347,7 @@ - type: Item sprite: Objects/Consumable/Food/snacks.rsi heldPrefix: packet - size: 1 + size: Tiny - type: Food trash: FoodCookieFortune @@ -358,7 +358,7 @@ description: A carefully synthesized brick designed to contain the highest ratio of nutriment to volume. Tastes like shit. components: - type: Item - size: 10 + size: Small - type: Tag tags: - FoodSnack @@ -382,7 +382,7 @@ flavors: - nutribrick - type: Item - size: 10 + size: Small - type: Sprite state: nutribrick-open - type: Food diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cartons.yml b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cartons.yml index 4d0b442c465..12ad108881a 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cartons.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cartons.yml @@ -10,15 +10,16 @@ - state: closed - state: open map: ["openLayer"] - - type: Storage - capacity: 36 - type: Item sprite: Objects/Consumable/Smokeables/Cigarettes/Cartons/green.rsi - size: 36 + size: Normal + - type: Storage + grid: + - 0,0,4,1 - type: StorageFill contents: - id: CigPackGreen - amount: 6 + amount: 5 - type: Tag tags: - Trash @@ -42,7 +43,7 @@ - type: StorageFill contents: - id: CigPackRed - amount: 6 + amount: 5 - type: entity id: CigCartonBlue @@ -59,7 +60,7 @@ - type: StorageFill contents: - id: CigPackBlue - amount: 6 + amount: 5 - type: entity id: CigCartonBlack @@ -76,7 +77,7 @@ - type: StorageFill contents: - id: CigPackBlack - amount: 6 + amount: 5 - type: entity id: CigCartonMixed diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml index 82eacd703bf..ab435f3645a 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/cigarette.yml @@ -17,7 +17,7 @@ slots: [ mask ] equippedPrefix: unlit - type: Item - size: 1 + size: Tiny - type: Construction graph: smokeableCigarette node: cigarette @@ -41,7 +41,7 @@ slots: [ mask ] equippedPrefix: unlit - type: Item - size: 1 + size: Tiny - type: Construction graph: smokeableCigarette node: cigarette diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/joints.yml b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/joints.yml index 402dcd80f5b..e3ae06ec9f5 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/joints.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/joints.yml @@ -17,7 +17,7 @@ slots: [ mask ] equippedPrefix: unlit - type: Item - size: 1 + size: Tiny - type: Construction graph: smokeableJoint node: joint @@ -48,7 +48,7 @@ slots: [ mask ] equippedPrefix: unlit - type: Item - size: 1 + size: Tiny - type: Construction graph: smokeableBlunt node: blunt diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/packs.yml b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/packs.yml index 1d161b160a3..5ef81cc4f0d 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/packs.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/packs.yml @@ -42,10 +42,13 @@ materialComposition: Steel: 50 - type: SpaceGarbage - - type: Storage - capacity: 5 - type: Item - size: 5 + size: Tiny + shape: # Yes, this is cursed, but it breaks otherwise, dont question it. + - 0,0,0,1 + - type: Storage + grid: + - 0,0,4,1 - type: StorageFill contents: - id: Cigarette @@ -107,10 +110,13 @@ materialComposition: Steel: 50 - type: SpaceGarbage - - type: Storage - capacity: 10 - type: Item - size: 10 + size: Tiny + shape: # Yes, this is cursed, but it breaks otherwise, dont question it. + - 0,0,0,1 + - type: Storage + grid: + - 0,0,4,1 - type: StorageFill contents: - id: CigaretteRandom diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/rolling_paper.yml b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/rolling_paper.yml index e1005bf1136..44edce5e070 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/rolling_paper.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigarettes/rolling_paper.yml @@ -5,11 +5,12 @@ description: A pack of thin pieces of paper used to make fine smokeables. components: - type: Storage + grid: + - 0,0,3,1 whitelist: tags: - RollingPaper - CigFilter - capacity: 20 - type: StorageFill contents: - id: PaperRolling @@ -31,7 +32,6 @@ tags: - RollingPaper - CigFilter - capacity: 32 - type: StorageFill contents: - id: PaperRolling @@ -54,7 +54,7 @@ state: cigpaper - type: Item sprite: Objects/Consumable/Smokeables/Cigarettes/paper.rsi - size: 5 + size: Tiny - type: Tag tags: - RollingPaper @@ -68,8 +68,6 @@ components: - type: Stack count: 1 - - type: Item - size: 1 - type: entity id: CigaretteFilter @@ -86,7 +84,7 @@ state: cigfilter - type: Item sprite: Objects/Consumable/Smokeables/Cigarettes/paper.rsi - size: 10 + size: Tiny - type: Tag tags: - CigFilter @@ -99,5 +97,3 @@ components: - type: Stack count: 1 - - type: Item - size: 2 diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigars/case.yml b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigars/case.yml index 6034df179ad..2cfc429f626 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigars/case.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigars/case.yml @@ -35,10 +35,14 @@ map: ["cigar8"] visible: false - type: Storage - capacity: 8 + grid: + - 0,0,3,1 - type: Item sprite: Objects/Consumable/Smokeables/Cigars/case.rsi - size: 8 + size: Normal + shape: + - 0,0,2,1 + storedRotation: 90 - type: StorageFill contents: - id: Cigar diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigars/cigar.yml b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigars/cigar.yml index f9d490ebd30..dc8d4eaf3c4 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigars/cigar.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Cigars/cigar.yml @@ -19,7 +19,7 @@ slots: [ mask ] equippedPrefix: unlit - type: Item - size: 1 + size: Tiny - type: entity id: CigarSpent @@ -54,7 +54,7 @@ slots: [ mask ] equippedPrefix: unlit - type: Item - size: 1 + size: Tiny - type: entity id: CigarGoldSpent diff --git a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Pipes/pipe.yml b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Pipes/pipe.yml index a1371829f9f..10cf40aa2e0 100644 --- a/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Pipes/pipe.yml +++ b/Resources/Prototypes/Entities/Objects/Consumable/Smokeables/Pipes/pipe.yml @@ -12,7 +12,7 @@ slots: [ mask ] equippedPrefix: unlit - type: Item - size: 3 + size: Tiny sprite: Objects/Consumable/Smokeables/Pipes/pipe.rsi - type: Appearance - type: BurnStateVisuals diff --git a/Resources/Prototypes/Entities/Objects/Decoration/ashtray.yml b/Resources/Prototypes/Entities/Objects/Decoration/ashtray.yml index a1367b6f3d8..e4cd6ba0dea 100644 --- a/Resources/Prototypes/Entities/Objects/Decoration/ashtray.yml +++ b/Resources/Prototypes/Entities/Objects/Decoration/ashtray.yml @@ -10,14 +10,16 @@ - state: icon-0 map: ["enum.StorageFillLayers.Fill"] - type: Item - size: 10 + size: Small - type: StaticPrice price: 1 - type: Storage - capacity: 10 whitelist: tags: - Burnt + maxItemSize: Tiny + grid: + - 0,0,9,0 - type: ContainerContainer containers: storagebase: !type:Container diff --git a/Resources/Prototypes/Entities/Objects/Decoration/flora.yml b/Resources/Prototypes/Entities/Objects/Decoration/flora.yml index 920824970e0..77d155881f4 100644 --- a/Resources/Prototypes/Entities/Objects/Decoration/flora.yml +++ b/Resources/Prototypes/Entities/Objects/Decoration/flora.yml @@ -422,15 +422,15 @@ spawnEntries: - id: PresentRandom orGroup: present - - id: PresentRandomCash - prob: 0.20 - orGroup: present # - id: PresentRandomUnsafe # DeltaV - Disabled until we get a list of actually safe items. -# prob: 0.25 +# prob: 0.35 # orGroup: present # - id: PresentRandomInsane -# prob: 0.10 +# prob: 0.20 # orGroup: present + - id: PresentRandomCash + prob: 0.20 + orGroup: present receivedPopup: christmas-tree-got-gift deniedPopup: christmas-tree-no-gift requiredHoliday: FestiveSeason diff --git a/Resources/Prototypes/Entities/Objects/Decoration/jackolantern.yml b/Resources/Prototypes/Entities/Objects/Decoration/jackolantern.yml index 1205c202e41..4dbcddb983f 100644 --- a/Resources/Prototypes/Entities/Objects/Decoration/jackolantern.yml +++ b/Resources/Prototypes/Entities/Objects/Decoration/jackolantern.yml @@ -8,7 +8,7 @@ sprite: Objects/Specific/Hydroponics/pumpkin.rsi state: carved - type: Item - size: 10 + size: Normal - type: Construction graph: PumpkinAddLight node: start @@ -58,4 +58,4 @@ suffix: Large components: - type: Sprite - scale: 1.5, 1.5 \ No newline at end of file + scale: 1.5, 1.5 diff --git a/Resources/Prototypes/Entities/Objects/Decoration/lidsalami.yml b/Resources/Prototypes/Entities/Objects/Decoration/lidsalami.yml index dfff087e22c..1f0e3591922 100644 --- a/Resources/Prototypes/Entities/Objects/Decoration/lidsalami.yml +++ b/Resources/Prototypes/Entities/Objects/Decoration/lidsalami.yml @@ -9,6 +9,6 @@ layers: - state: icon - type: Item - size: 1001 + size: Ginormous - type: StaticPrice price: 0 diff --git a/Resources/Prototypes/Entities/Objects/Decoration/present.yml b/Resources/Prototypes/Entities/Objects/Decoration/present.yml index 1655468fc5f..c2d60b074a1 100644 --- a/Resources/Prototypes/Entities/Objects/Decoration/present.yml +++ b/Resources/Prototypes/Entities/Objects/Decoration/present.yml @@ -15,9 +15,7 @@ suffix: Empty components: - type: Item - size: 30 - - type: Storage - capacity: 30 + size: Normal - type: entity id: PresentRandomUnsafe diff --git a/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml b/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml index 4bb13bdd93d..c462a3cb038 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Electronics/triggers.yml @@ -17,7 +17,7 @@ sprite: Objects/Devices/timer.rsi state: timer - type: Item - size: 5 + size: Small - type: PayloadTrigger components: - type: OnUseTimerTrigger diff --git a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/chimp_upgrade_kit.yml b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/chimp_upgrade_kit.yml index aed09fe70bc..fc6c2ac7874 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/chimp_upgrade_kit.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Syndicate_Gadgets/chimp_upgrade_kit.yml @@ -6,9 +6,9 @@ components: - type: Sprite sprite: Objects/Misc/module.rsi - state: abductor_mod + state: abductor_mod - type: Item - size: 10 + size: Small - type: Tag tags: - - WeaponPistolCHIMPUpgradeKit \ No newline at end of file + - WeaponPistolCHIMPUpgradeKit diff --git a/Resources/Prototypes/Entities/Objects/Devices/forensic_scanner.yml b/Resources/Prototypes/Entities/Objects/Devices/forensic_scanner.yml index ad05777cfa6..21943bfaff3 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/forensic_scanner.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/forensic_scanner.yml @@ -8,7 +8,7 @@ sprite: Objects/Devices/forensic_scanner.rsi state: forensicnew - type: Item - size: 5 + size: Small - type: Clothing sprite: Objects/Devices/forensic_scanner.rsi quickEquip: false diff --git a/Resources/Prototypes/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Entities/Objects/Devices/pda.yml index dd9563ed924..7078591c06a 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pda.yml @@ -37,7 +37,7 @@ components: - IdCard - type: Item - size: 10 + size: Small - type: ContainerContainer containers: PDA-id: !type:ContainerSlot {} diff --git a/Resources/Prototypes/Entities/Objects/Devices/pinpointer.yml b/Resources/Prototypes/Entities/Objects/Devices/pinpointer.yml index 7038eef2ea9..8d48573d652 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pinpointer.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pinpointer.yml @@ -62,7 +62,7 @@ - type: entity name: universal pinpointer - description: A handheld tracking device. While typically far more capable, this one has been configured to lock onto certain signals. Keep upright to retain accuracy. + description: A handheld tracking device that locks onto any physical entity while off. Keep upright to retain accuracy. id: PinpointerUniversal parent: PinpointerBase components: diff --git a/Resources/Prototypes/Entities/Objects/Fun/Instruments/base_instruments.yml b/Resources/Prototypes/Entities/Objects/Fun/Instruments/base_instruments.yml index 06b23012620..07d918b5765 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Instruments/base_instruments.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Instruments/base_instruments.yml @@ -16,7 +16,7 @@ - key: enum.InstrumentUiKey.Key type: InstrumentBoundUserInterface - type: Item - size: 24 + size: Normal - type: StaticPrice price: 200 diff --git a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_brass.yml b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_brass.yml index e8ac6f7ce54..260490ccad5 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_brass.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_brass.yml @@ -14,7 +14,7 @@ sprite: Objects/Fun/Instruments/trumpet.rsi state: icon - type: Item - size: 24 + size: Normal sprite: Objects/Fun/Instruments/trumpet.rsi - type: Tag tags: @@ -32,7 +32,7 @@ sprite: Objects/Fun/Instruments/trombone.rsi state: icon - type: Item - size: 48 + size: Normal sprite: Objects/Fun/Instruments/trombone.rsi - type: Tag tags: @@ -50,7 +50,7 @@ sprite: Objects/Fun/Instruments/frenchhorn.rsi state: icon - type: Item - size: 48 + size: Normal sprite: Objects/Fun/Instruments/frenchhorn.rsi - type: Tag tags: @@ -69,7 +69,7 @@ sprite: Objects/Fun/Instruments/euphonium.rsi state: icon - type: Item - size: 48 + size: Normal sprite: Objects/Fun/Instruments/euphonium.rsi - type: Tag tags: diff --git a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_misc.yml b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_misc.yml index dc56c89f699..8c3aed0d069 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_misc.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_misc.yml @@ -10,7 +10,7 @@ - type: Instrument program: 121 - type: Item - size: 10 + size: Small - type: entity parent: BaseHandheldInstrument @@ -24,7 +24,7 @@ - type: Instrument program: 122 - type: Item - size: 10 + size: Normal - type: entity parent: BaseHandheldInstrument @@ -38,7 +38,8 @@ - type: Instrument program: 123 - type: Item - size: 5 + size: Small + storedRotation: 90 - type: entity parent: BaseHandheldInstrument @@ -55,7 +56,7 @@ - type: Instrument program: 124 - type: Item - size: 10 + size: Small - type: Prayable sentMessage: prayer-popup-notify-centcom-sent notifiactionPrefix: prayer-chat-notify-centcom @@ -87,7 +88,7 @@ - type: Instrument program: 125 - type: Item - size: 10 + size: Small - type: entity parent: BaseHandheldInstrument @@ -101,7 +102,7 @@ - type: Instrument program: 126 - type: Item - size: 5 + size: Tiny - type: entity parent: BaseHandheldInstrument @@ -115,10 +116,11 @@ sprite: Objects/Fun/Instruments/gunpet.rsi state: icon - type: Item - size: 15 + size: Small sprite: Objects/Fun/Instruments/gunpet.rsi - type: Tag tags: + - Sidearm - BrassInstrument - type: entity @@ -138,7 +140,7 @@ - BrassInstrument #Go figure. - type: Item sprite: Objects/Fun/Instruments/bike_horn.rsi - size: 10 + size: Small - type: Clothing sprite: Objects/Fun/Instruments/bike_horn.rsi slots: [Belt] diff --git a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_percussion.yml b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_percussion.yml index ddf1ec413fb..9a464a50096 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_percussion.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_percussion.yml @@ -9,7 +9,7 @@ sprite: Objects/Fun/Instruments/glockenspiel.rsi state: icon - type: Item - size: 24 + size: Normal sprite: Objects/Fun/Instruments/glockenspiel.rsi - type: Tag tags: @@ -58,7 +58,7 @@ sprite: Objects/Fun/Instruments/microphone.rsi state: icon - type: Item - size: 10 + size: Small sprite: Objects/Fun/Instruments/microphone.rsi - type: entity @@ -76,7 +76,7 @@ sprite: Objects/Fun/Instruments/h_synthesizer.rsi state: icon - type: Item - size: 24 + size: Normal sprite: Objects/Fun/Instruments/h_synthesizer.rsi - type: Tag tags: @@ -138,5 +138,5 @@ sprite: Objects/Fun/Instruments/h_synthesizer.rsi state: icon - type: Item - size: 24 - sprite: Objects/Fun/Instruments/h_synthesizer.rsi \ No newline at end of file + size: Normal + sprite: Objects/Fun/Instruments/h_synthesizer.rsi diff --git a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_string.yml b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_string.yml index c71fecd91ba..7224efa9e02 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_string.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_string.yml @@ -15,7 +15,7 @@ sprite: Objects/Fun/Instruments/eguitar.rsi state: icon - type: Item - size: 24 + size: Normal sprite: Objects/Fun/Instruments/eguitar.rsi - type: Clothing quickEquip: false @@ -44,7 +44,7 @@ sprite: Objects/Fun/Instruments/bassguitar.rsi state: icon - type: Item - size: 24 + size: Normal sprite: Objects/Fun/Instruments/bassguitar.rsi - type: Clothing quickEquip: false @@ -72,7 +72,7 @@ sprite: Objects/Fun/Instruments/rockguitar.rsi state: icon - type: Item - size: 24 + size: Normal sprite: Objects/Fun/Instruments/rockguitar.rsi - type: Clothing quickEquip: false @@ -115,7 +115,7 @@ - StringInstrument - type: Item sprite: Objects/Fun/Instruments/guitar.rsi - size: 24 + size: Normal - type: Clothing quickEquip: false slots: @@ -178,7 +178,7 @@ sprite: Objects/Fun/Instruments/banjo.rsi state: icon - type: Item - size: 24 + size: Normal sprite: Objects/Fun/Instruments/banjo.rsi - type: Tag tags: @@ -200,7 +200,7 @@ sprite: Objects/Fun/Instruments/violin.rsi state: icon - type: Item - size: 24 + size: Normal sprite: Objects/Fun/Instruments/violin.rsi - type: Tag tags: @@ -218,7 +218,7 @@ sprite: Objects/Fun/Instruments/viola.rsi state: icon - type: Item - size: 24 + size: Normal sprite: Objects/Fun/Instruments/viola.rsi - type: Tag tags: @@ -236,7 +236,9 @@ sprite: Objects/Fun/Instruments/cello.rsi state: icon - type: Item - size: 48 + size: Large + shape: + - 0,0,1,3 sprite: Objects/Fun/Instruments/cello.rsi - type: Tag tags: diff --git a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_wind.yml b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_wind.yml index 09db6133139..c8a098b586e 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_wind.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/Instruments/instruments_wind.yml @@ -16,7 +16,7 @@ sprite: Objects/Fun/Instruments/saxophone.rsi state: icon - type: Item - size: 24 + size: Normal sprite: Objects/Fun/Instruments/saxophone.rsi - type: Tag tags: @@ -45,7 +45,7 @@ sprite: Objects/Fun/Instruments/accordion.rsi state: icon - type: Item - size: 24 + size: Normal sprite: Objects/Fun/Instruments/accordion.rsi - type: Tag tags: @@ -62,7 +62,7 @@ sprite: Objects/Fun/Instruments/harmonica.rsi state: icon - type: Item - size: 10 + size: Small sprite: Objects/Fun/Instruments/harmonica.rsi - type: Tag tags: @@ -80,7 +80,7 @@ sprite: Objects/Fun/Instruments/clarinet.rsi state: icon - type: Item - size: 20 + size: Normal sprite: Objects/Fun/Instruments/clarinet.rsi - type: Tag tags: @@ -98,7 +98,7 @@ sprite: Objects/Fun/Instruments/flute.rsi state: icon - type: Item - size: 20 + size: Normal sprite: Objects/Fun/Instruments/flute.rsi - type: Tag tags: @@ -116,7 +116,7 @@ sprite: Objects/Fun/Instruments/recorder.rsi state: icon - type: Item - size: 24 + size: Normal sprite: Objects/Fun/Instruments/recorder.rsi - type: Tag tags: @@ -134,7 +134,7 @@ sprite: Objects/Fun/Instruments/panflute.rsi state: icon - type: Item - size: 15 + size: Normal sprite: Objects/Fun/Instruments/panflute.rsi - type: Tag tags: @@ -153,7 +153,7 @@ sprite: Objects/Fun/Instruments/ocarina.rsi state: icon - type: Item - size: 15 + size: Normal sprite: Objects/Fun/Instruments/ocarina.rsi - type: Tag tags: @@ -171,8 +171,8 @@ sprite: Objects/Fun/Instruments/bagpipes.rsi state: icon - type: Item - size: 48 + size: Large sprite: Objects/Fun/Instruments/bagpipes.rsi - type: Tag tags: - - WoodwindInstrument \ No newline at end of file + - WoodwindInstrument diff --git a/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml b/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml index fc20f1a58dd..caf2b909c60 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml @@ -9,7 +9,7 @@ state: icon - type: Item sprite: Objects/Fun/bikehorn.rsi - size: 5 + size: Tiny - type: Clothing sprite: Objects/Fun/bikehorn.rsi slots: [Belt] @@ -58,7 +58,7 @@ state: icon - type: Item sprite: Objects/Fun/cluwnehorn.rsi - size: 5 + size: Tiny - type: Clothing sprite: Objects/Fun/cluwnehorn.rsi slots: [Belt] @@ -100,7 +100,7 @@ state: icon - type: Item sprite: Objects/Fun/goldbikehorn.rsi - size: 5 + size: Tiny - type: Clothing sprite: Objects/Fun/goldbikehorn.rsi slots: [Belt] @@ -119,7 +119,7 @@ state: icon - type: Item sprite: Objects/Fun/bananiumhorn.rsi - size: 5 + size: Small - type: Clothing sprite: Objects/Fun/bananiumhorn.rsi slots: [Belt] diff --git a/Resources/Prototypes/Entities/Objects/Fun/candy_bucket.yml b/Resources/Prototypes/Entities/Objects/Fun/candy_bucket.yml new file mode 100644 index 00000000000..d8f11cdea29 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Fun/candy_bucket.yml @@ -0,0 +1,43 @@ +- type: entity + name: "candy bucket" + parent: BaseItem + id: CandyBucket + description: A festive bucket for all your treats. + components: + - type: Sprite + sprite: Objects/Fun/candy_bucket.rsi + layers: + - state: empty_icon + map: [ "enum.ToggleVisuals.Layer" ] + - type: ContainerHeld + threshold: 1 + - type: Item + heldPrefix: empty + size: Normal + - type: Appearance + - type: GenericVisualizer + visuals: + enum.ToggleVisuals.Toggled: + enum.ToggleVisuals.Layer: + True: {state: full_icon} + False: {state: empty_icon} + - type: Storage + maxItemSize: Small + grid: + - 0,0,3,2 + whitelist: + components: + - Pill + tags: + - FoodSnack + - type: ContainerContainer + containers: + storagebase: !type:Container + ents: [] + - type: UserInterface + interfaces: + - key: enum.StorageUiKey.Key + type: StorageBoundUserInterface + # to prevent bag open/honk spam + - type: UseDelay + delay: 0.5 diff --git a/Resources/Prototypes/Entities/Objects/Fun/crayons.yml b/Resources/Prototypes/Entities/Objects/Fun/crayons.yml index cf03c9733e8..cb755b161a6 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/crayons.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/crayons.yml @@ -9,7 +9,7 @@ sprite: Objects/Fun/crayons.rsi - type: Item sprite: Objects/Fun/crayons.rsi - size: 1 + size: Tiny - type: Tag tags: - Write @@ -235,10 +235,12 @@ sprite: Objects/Fun/crayons.rsi state: box - type: Storage - capacity: 8 + grid: + - 0,0,7,0 + maxItemSize: Tiny - type: Item sprite: Objects/Fun/crayons.rsi - size: 8 + size: Small heldPrefix: box - type: StorageFill contents: diff --git a/Resources/Prototypes/Entities/Objects/Fun/darts.yml b/Resources/Prototypes/Entities/Objects/Fun/darts.yml index 617c20eb9b1..8d8565361d4 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/darts.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/darts.yml @@ -40,7 +40,7 @@ types: Piercing: 4 - type: Item - size: 2 + size: Tiny sprite: Objects/Fun/Darts/dart_red.rsi - type: ItemCooldown - type: SolutionContainerManager @@ -86,7 +86,7 @@ - type: SolutionContainerVisuals maxFillLevels: 1 fillBaseName: dart - + - type: entity parent: Dart id: DartBlue @@ -95,7 +95,7 @@ sprite: Objects/Fun/Darts/dart_blue.rsi - type: Item sprite: Objects/Fun/Darts/dart_blue.rsi - + - type: entity parent: Dart id: DartPurple @@ -104,7 +104,7 @@ sprite: Objects/Fun/Darts/dart_purple.rsi - type: Item sprite: Objects/Fun/Darts/dart_purple.rsi - + - type: entity parent: Dart id: DartYellow diff --git a/Resources/Prototypes/Entities/Objects/Fun/dice.yml b/Resources/Prototypes/Entities/Objects/Fun/dice.yml index e84e78b6ebf..d5f28d09b62 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/dice.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/dice.yml @@ -13,7 +13,7 @@ tags: - Dice - type: Item - size: 2 + size: Tiny - type: entity parent: BaseDice diff --git a/Resources/Prototypes/Entities/Objects/Fun/dice_bag.yml b/Resources/Prototypes/Entities/Objects/Fun/dice_bag.yml index 8c3b5aea8b5..1a579572d97 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/dice_bag.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/dice_bag.yml @@ -17,11 +17,13 @@ sprite: Objects/Fun/dice.rsi state: dicebag - type: Item + size: Small - type: Storage - capacity: 18 + grid: + - 0,0,3,1 whitelist: tags: - - Dice + - Dice - type: entity parent: DiceBag @@ -32,4 +34,5 @@ sprite: Objects/Fun/dice.rsi state: magicdicebag - type: Storage - capacity: 30 + grid: + - 0,0,4,3 diff --git a/Resources/Prototypes/Entities/Objects/Fun/puppet.yml b/Resources/Prototypes/Entities/Objects/Fun/puppet.yml index c0649d0acfa..01a15d2e5bd 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/puppet.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/puppet.yml @@ -14,7 +14,7 @@ - type: DoAfter - type: VentriloquistPuppet - type: Item - size: 30 + size: Normal - type: Muted - type: TypingIndicator proto: robot diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index 1c4fbff3d7a..45350d2d724 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -79,6 +79,8 @@ suffix: DO NOT MAP description: So soft it almost makes you want to take a nap... components: + - type: Item + size: Normal - type: Sprite sprite: DeltaV/Mobs/Ghosts/revenant.rsi # DeltaV - Custom revenant sprite state: icon @@ -97,6 +99,7 @@ sprite: Objects/Fun/toys.rsi state: plushie_h - type: Item + size: Normal sprite: Objects/Fun/toys.rsi heldPrefix: bee - type: Extractable @@ -201,6 +204,15 @@ soundHit: path: /Audio/Items/Toys/weh.ogg +- type: entity + parent: PlushieLizard + id: PlushieLizardMirrored + components: + - type: Item + size: Small + - type: Sprite + state: plushie_lizard_mirrored + - type: entity parent: BasePlushie id: PlushieSpaceLizard #ᵂᵉʰ! @@ -336,6 +348,8 @@ name: ratvar plushie description: A small stuffed doll of the elder god Ratvar. components: + - type: Item + size: Normal - type: Sprite state: plushie_ratvar @@ -345,6 +359,8 @@ name: nar'sie plushie description: A small stuffed doll of the elder goddess Nar'Sie. components: + - type: Item + size: Normal - type: Sprite state: narplush @@ -427,6 +443,8 @@ name: rubber ducky description: Not carried here by ocean currents. components: + - type: Item + size: Tiny - type: Sprite sprite: Objects/Fun/ducky.rsi state: icon @@ -473,6 +491,8 @@ name: xeno plushie description: An adorable stuffed toy that resembles a scary xenomorf. You're lucky it's just a toy. components: + - type: Item + size: Normal - type: Sprite state: plushie_xeno - type: EmitSoundOnUse @@ -547,6 +567,8 @@ name: ian toy description: Unable to eat, but just as fluffy as the real guy! components: + - type: Item + size: Tiny - type: Sprite state: ian - type: EmitSoundOnUse @@ -565,7 +587,7 @@ components: - type: Sprite - type: Item - size: 24 + size: Normal - type: entity parent: FoamWeaponBase @@ -577,7 +599,7 @@ sprite: Objects/Fun/toys.rsi state: foamcrossbow - type: Item - size: 24 + size: Normal sprite: Objects/Fun/toys.rsi heldPrefix: foamcrossbow - type: Gun @@ -683,7 +705,7 @@ types: Blunt: 0 - type: Item - size: 20 + size: Small sprite: Objects/Fun/toys.rsi heldPrefix: foamblade - type: ItemCooldown @@ -703,7 +725,7 @@ sound: path: /Audio/Effects/Footsteps/bounce.ogg - type: Item - size: 24 + size: Normal sprite: Objects/Fun/toys.rsi heldPrefix: bask - type: TileFrictionModifier @@ -719,7 +741,7 @@ sprite: Objects/Fun/toys.rsi state: football - type: Item - size: 12 + size: Small sprite: Objects/Fun/toys.rsi heldPrefix: footb @@ -736,7 +758,7 @@ sound: path: /Audio/Effects/Footsteps/bounce.ogg - type: Item - size: 24 + size: Normal sprite: Objects/Fun/toys.rsi heldPrefix: beachb - type: TileFrictionModifier @@ -752,7 +774,7 @@ sprite: Objects/Fun/toys.rsi state: synb - type: Item - size: 24 + size: Small sprite: Objects/Fun/toys.rsi heldPrefix: synb - type: Damageable @@ -771,7 +793,7 @@ sprite: Objects/Fun/toys.rsi state: corgib - type: Item - size: 24 + size: Small sprite: Objects/Fun/toys.rsi heldPrefix: corgib - type: Damageable @@ -796,7 +818,7 @@ intensity: 2000 falloffPower: 2.6 - type: Item - size: 12 + size: Normal sprite: Objects/Fun/toys.rsi heldPrefix: singularitytoy @@ -814,7 +836,7 @@ radius: 2 color: "#00CCFF" - type: Item - size: 24 + size: Normal sprite: Objects/Fun/toys.rsi heldPrefix: orb - type: TileFrictionModifier @@ -840,7 +862,7 @@ shader: unshaded map: [ "blade" ] - type: Item - size: 5 + size: Small sprite: Objects/Fun/toy_sword.rsi - type: UseDelay delay: 1.0 @@ -904,7 +926,7 @@ types: Blunt: 0 - type: Item - size: 15 + size: Normal sprite: Objects/Weapons/Melee/cutlass.rsi - type: entity @@ -946,7 +968,7 @@ - type: StaminaDamageOnHit damage: 8 - type: Item - size: 5 + size: Small sprite: Objects/Fun/rubber_hammer.rsi - type: Appearance - type: DisarmMalus diff --git a/Resources/Prototypes/Entities/Objects/Magic/books.yml b/Resources/Prototypes/Entities/Objects/Magic/books.yml index 812949fb0b9..89acd9e7dab 100644 --- a/Resources/Prototypes/Entities/Objects/Magic/books.yml +++ b/Resources/Prototypes/Entities/Objects/Magic/books.yml @@ -92,6 +92,8 @@ name: scroll of runes parent: BaseSpellbook components: + - type: Item + size: Normal - type: Sprite sprite: Objects/Magic/magicactions.rsi layers: diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml index 0cdeae4e6d0..6d622ff97cb 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/glass.yml @@ -9,7 +9,7 @@ sprite: Objects/Materials/Sheets/glass.rsi - type: Item sprite: Objects/Materials/Sheets/glass.rsi - size: 30 + size: Normal - type: StaticPrice price: 0 - type: Tag @@ -93,8 +93,6 @@ - type: Stack stackType: Glass count: 10 - - type: Item - size: 10 - type: entity parent: SheetGlass @@ -106,16 +104,12 @@ - type: Stack stackType: Glass count: 1 - - type: Item - size: 1 - type: entity parent: SheetGlass id: SheetGlassLingering0 suffix: Lingering, 0 components: - - type: Item - size: 0 - type: Stack lingering: true count: 0 @@ -186,8 +180,6 @@ - type: Stack stackType: ReinforcedGlass count: 1 - - type: Item - size: 1 - type: Extractable grindableSolutionName: rglass - type: SolutionContainerManager @@ -225,7 +217,6 @@ map: ["base"] - type: Item heldPrefix: pglass - size: 30 - type: Construction graph: Glass node: SheetPGlass @@ -265,8 +256,6 @@ - type: Stack stackType: PlasmaGlass count: 1 - - type: Item - size: 1 - type: Extractable grindableSolutionName: pglass - type: SolutionContainerManager @@ -331,8 +320,6 @@ - type: Stack stackType: ReinforcedPlasmaGlass count: 1 - - type: Item - size: 1 - type: entity parent: SheetGlassBase @@ -407,8 +394,6 @@ - type: Stack stackType: UraniumGlass count: 1 - - type: Item - size: 1 - type: entity parent: SheetUGlass @@ -461,5 +446,3 @@ - type: Stack stackType: ReinforcedUraniumGlass count: 1 - - type: Item - size: 1 diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml index 8559b77e3a1..829a78326a8 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/metal.yml @@ -8,7 +8,7 @@ sprite: Objects/Materials/Sheets/metal.rsi - type: Item sprite: Objects/Materials/Sheets/metal.rsi - size: 30 + size: Normal - type: StaticPrice price: 0 - type: Tag @@ -73,8 +73,6 @@ name: steel suffix: 10 components: - - type: Item - size: 10 - type: Sprite state: steel - type: Stack @@ -87,8 +85,6 @@ name: steel suffix: Single components: - - type: Item - size: 1 - type: Sprite state: steel - type: Stack @@ -100,8 +96,6 @@ id: SheetSteelLingering0 suffix: Lingering, 0 components: - - type: Item - size: 0 - type: Stack lingering: true count: 0 @@ -155,8 +149,6 @@ - type: Stack stackType: Plasteel count: 10 - - type: Item - size: 10 - type: entity parent: SheetPlasteel @@ -169,5 +161,3 @@ - type: Stack stackType: Plasteel count: 1 - - type: Item - size: 1 diff --git a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml index 21c7c505a59..29bef20b7cf 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/Sheets/other.yml @@ -8,7 +8,7 @@ sprite: Objects/Materials/Sheets/other.rsi - type: Item sprite: Objects/Materials/Sheets/other.rsi - size: 30 + size: Normal - type: Tag tags: - Sheet @@ -69,8 +69,6 @@ state: paper - type: Stack count: 1 - - type: Item - size: 1 - type: entity parent: SheetOtherBase @@ -119,8 +117,6 @@ state: plasma - type: Stack count: 1 - - type: Item - size: 1 - type: entity parent: SheetOtherBase @@ -151,7 +147,6 @@ map: ["base"] - type: Item heldPrefix: plastic - size: 30 - type: Appearance - type: Extractable grindableSolutionName: plastic @@ -172,8 +167,6 @@ components: - type: Sprite state: plastic - - type: Item - size: 10 - type: Stack count: 10 @@ -185,8 +178,6 @@ components: - type: Sprite state: plastic - - type: Item - size: 1 - type: Stack count: 1 @@ -237,8 +228,6 @@ components: - type: Stack count: 1 - - type: Item - size: 1 - type: entity parent: SheetOtherBase @@ -289,5 +278,3 @@ state: meat - type: Stack count: 1 - - type: Item - size: 1 diff --git a/Resources/Prototypes/Entities/Objects/Materials/ingots.yml b/Resources/Prototypes/Entities/Objects/Materials/ingots.yml index eef2b8ce007..24e8ca649c9 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/ingots.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/ingots.yml @@ -8,7 +8,7 @@ sprite: Objects/Materials/ingots.rsi - type: Item sprite: Objects/Materials/ingots.rsi - size: 30 + size: Normal - type: StaticPrice price: 0 - type: Tag @@ -70,8 +70,6 @@ state: gold - type: Stack count: 1 - - type: Item - size: 1 - type: entity parent: IngotBase @@ -115,7 +113,3 @@ components: - type: Sprite state: silver - - type: Stack - count: 1 - - type: Item - size: 1 diff --git a/Resources/Prototypes/Entities/Objects/Materials/materials.yml b/Resources/Prototypes/Entities/Objects/Materials/materials.yml index 1c0e8a2ae93..1573c070525 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/materials.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/materials.yml @@ -8,7 +8,7 @@ sprite: Objects/Materials/materials.rsi - type: Item sprite: Objects/Materials/materials.rsi - size: 30 + size: Normal - type: Tag tags: - DroneUsable @@ -47,8 +47,6 @@ - state: cardboard_3 map: ["base"] - type: Appearance - - type: Item - size: 30 - type: Extractable grindableSolutionName: cardboard - type: SolutionContainerManager @@ -67,8 +65,6 @@ state: cardboard - type: Stack count: 10 - - type: Item - size: 10 - type: entity parent: MaterialCardboard @@ -79,8 +75,6 @@ state: cardboard - type: Stack count: 1 - - type: Item - size: 1 - type: entity parent: MaterialBase @@ -122,8 +116,6 @@ - state: cloth_3 map: ["base"] - type: Appearance - - type: Item - size: 30 - type: Food requiresSpecialDigestion: true - type: SolutionContainerManager @@ -152,8 +144,6 @@ state: cloth - type: Stack count: 10 - - type: Item - size: 10 - type: entity parent: MaterialCloth @@ -164,8 +154,6 @@ state: cloth - type: Stack count: 1 - - type: Item - size: 1 - type: entity parent: MaterialBase @@ -217,8 +205,6 @@ state: durathread - type: Stack count: 1 - - type: Item - size: 1 - type: SolutionContainerManager solutions: food: @@ -273,8 +259,6 @@ components: - type: Stack count: 10 - - type: Item - size: 10 - type: entity parent: MaterialWoodPlank @@ -283,8 +267,6 @@ components: - type: Stack count: 1 - - type: Item - size: 1 - type: entity parent: MaterialBase @@ -306,8 +288,6 @@ - type: GuideHelp guides: - Cloning - - type: Item - size: 100 - type: entity parent: MaterialBiomass @@ -316,8 +296,6 @@ components: - type: Stack count: 1 - - type: Item - size: 1 # Following not used currently - type: entity @@ -380,7 +358,6 @@ state: diamond - type: Item heldPrefix: diamond - size: 60 - type: Extractable grindableSolutionName: diamond - type: SolutionContainerManager @@ -397,8 +374,6 @@ components: - type: Stack count: 1 - - type: Item - size: 2 - type: entity parent: MaterialBase @@ -419,8 +394,6 @@ - state: cotton_3 map: ["base"] - type: Appearance - - type: Item - size: 30 - type: Food requiresSpecialDigestion: true - type: SolutionContainerManager @@ -451,8 +424,6 @@ state: cotton - type: Stack count: 1 - - type: Item - size: 1 - type: entity parent: MaterialBase @@ -503,8 +474,6 @@ - ReagentId: Honk Quantity: 5 - type: Appearance - - type: Item - size: 20 - type: entity parent: MaterialBananium @@ -515,8 +484,6 @@ state: bananium - type: Stack count: 1 - - type: Item - size: 2 - type: entity parent: MaterialBase @@ -534,8 +501,6 @@ - type: Stack count: 50 stackType: WebSilk - - type: Item - size: 50 - type: Food requiresSpecialDigestion: true - type: FlavorProfile @@ -568,8 +533,6 @@ components: - type: Stack count: 25 - - type: Item - size: 25 - type: entity parent: MaterialWebSilk @@ -578,8 +541,6 @@ components: - type: Stack count: 1 - - type: Item - size: 1 - type: entity parent: MaterialBase @@ -600,8 +561,6 @@ - state: cotton_3 map: ["base"] - type: Appearance - - type: Item - size: 30 - type: Food - type: BadFood - type: SolutionContainerManager @@ -619,5 +578,3 @@ components: - type: Stack count: 1 - - type: Item - size: 1 diff --git a/Resources/Prototypes/Entities/Objects/Materials/ore.yml b/Resources/Prototypes/Entities/Objects/Materials/ore.yml index 619857424d9..aa3ebfaaf28 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/ore.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/ore.yml @@ -8,7 +8,7 @@ sprite: Objects/Materials/ore.rsi - type: Item sprite: Objects/Materials/ore.rsi - size: 60 + size: Normal - type: Tag tags: - Ore @@ -57,8 +57,6 @@ components: - type: Stack count: 1 - - type: Item - size: 2 - type: entity parent: OreBase @@ -82,8 +80,6 @@ components: - type: Stack count: 1 - - type: Item - size: 2 - type: entity parent: OreBase @@ -107,8 +103,6 @@ components: - type: Stack count: 1 - - type: Item - size: 2 - type: entity parent: OreBase @@ -132,8 +126,6 @@ components: - type: Stack count: 1 - - type: Item - size: 2 - type: entity parent: OreBase @@ -157,8 +149,6 @@ components: - type: Stack count: 1 - - type: Item - size: 2 - type: entity parent: OreBase @@ -182,9 +172,6 @@ components: - type: Stack count: 1 - - type: Item - size: 2 - - type: entity parent: OreBase @@ -208,8 +195,6 @@ components: - type: Stack count: 1 - - type: Item - size: 2 - type: entity parent: OreBase @@ -249,5 +234,3 @@ components: - type: Stack count: 1 - - type: Item - size: 2 diff --git a/Resources/Prototypes/Entities/Objects/Materials/parts.yml b/Resources/Prototypes/Entities/Objects/Materials/parts.yml index 5792fec1d9e..15159ba69de 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/parts.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/parts.yml @@ -47,7 +47,7 @@ - state: rods_5 map: ["base"] - type: Item - size: 30 + size: Normal # heldPrefix: rods - type: Construction graph: MetalRod @@ -86,8 +86,6 @@ state: rods - type: Stack count: 10 - - type: Item - size: 10 - type: entity parent: PartRodMetal @@ -103,16 +101,12 @@ state: rods - type: Stack count: 1 - - type: Item - size: 1 - type: entity parent: PartRodMetal id: PartRodMetalLingering0 suffix: Lingering, 0 components: - - type: Item - size: 0 - type: Stack lingering: true count: 0 diff --git a/Resources/Prototypes/Entities/Objects/Materials/shards.yml b/Resources/Prototypes/Entities/Objects/Materials/shards.yml index 1d92d4f4cb0..cdccac8c60e 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/shards.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/shards.yml @@ -26,7 +26,7 @@ Slash: 3.5 - type: Item sprite: Objects/Materials/Shards/shard.rsi - size: 4 + size: Tiny - type: CollisionWake enabled: false - type: Fixtures diff --git a/Resources/Prototypes/Entities/Objects/Misc/bedsheets.yml b/Resources/Prototypes/Entities/Objects/Misc/bedsheets.yml index 8b8772dc2db..71a2442cf2c 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/bedsheets.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/bedsheets.yml @@ -13,7 +13,7 @@ sprite: Objects/Misc/bedsheets.rsi noRot: true - type: Item - size: 10 + size: Small - type: Clothing quickEquip: true slots: diff --git a/Resources/Prototypes/Entities/Objects/Misc/box.yml b/Resources/Prototypes/Entities/Objects/Misc/box.yml index 59a2abd5662..edb1a812391 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/box.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/box.yml @@ -7,9 +7,13 @@ sprite: Objects/Storage/boxes.rsi - type: Item sprite: Objects/Storage/boxes.rsi - size: 30 + size: Large + shape: + - 0,0,2,2 - type: Storage - capacity: 30 + maxItemSize: Small + grid: + - 0,0,2,2 - type: ContainerContainer containers: storagebase: !type:Container diff --git a/Resources/Prototypes/Entities/Objects/Misc/briefcases.yml b/Resources/Prototypes/Entities/Objects/Misc/briefcases.yml index 1866d3513e0..aa8823d70d8 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/briefcases.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/briefcases.yml @@ -5,9 +5,10 @@ description: Useful for carrying items in your hands. components: - type: Item - size: 60 + size: Ginormous - type: Storage - capacity: 60 + grid: + - 0,0,5,3 - type: Tag tags: - Briefcase @@ -25,19 +26,14 @@ sprite: Objects/Storage/Briefcases/briefcase_brown.rsi - type: entity - parent: BaseStorageItem + parent: BriefcaseBase abstract: true id: BriefcaseSyndieBase suffix: Syndicate, Empty description: Useful for carrying items in your hands. components: - type: Item - size: 80 - - type: Storage - capacity: 80 - - type: Tag - tags: - - Briefcase + size: Huge - type: entity name: brown briefcase diff --git a/Resources/Prototypes/Entities/Objects/Misc/candles.yml b/Resources/Prototypes/Entities/Objects/Misc/candles.yml index d86b20caf61..bef37e5fd08 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/candles.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/candles.yml @@ -11,14 +11,14 @@ - state: candle-big color: "#decb8e" - type: Item - size: 2 + size: Small - type: Appearance - type: Reactive groups: Flammable: [ Touch ] Extinguish: [ Touch ] - type: ExtinguishOnInteract - extinguishAttemptSound: + extinguishAttemptSound: path: /Audio/Items/candle_blowing.ogg params: variation: 0.05 @@ -28,9 +28,9 @@ fireSpread: false canResistFire: false alwaysCombustible: true - canExtinguish: true + canExtinguish: true firestacksOnIgnite: 3.0 - firestackFade: -0.01 + firestackFade: -0.01 damage: types: Heat: 0.1 @@ -56,7 +56,7 @@ behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] - + - type: entity name: red candle parent: Candle @@ -120,7 +120,7 @@ - type: Sprite layers: - state: candle-big - color: "#5d997e" + color: "#5d997e" - type: Item inhandVisuals: left: @@ -149,13 +149,13 @@ color: "#984aa1" -- type: entity +- type: entity name: small candle parent: Candle id: CandleSmall components: - type: Item - size: 1 + size: Tiny - type: Sprite layers: - state: candle-small @@ -236,7 +236,7 @@ - type: Sprite layers: - state: candle-small - color: "#5d997e" + color: "#5d997e" - type: Item inhandVisuals: left: @@ -266,8 +266,8 @@ #Purely decorative candles for mappers. Do not have any functionality. -- type: entity - name: magic candle +- type: entity + name: magic candle description: It's either magic or high tech, but this candle never goes out. On the other hand, its flame is quite cold. parent: BaseItem suffix: Decorative @@ -354,7 +354,7 @@ - type: Sprite layers: - state: candle-big - color: "#5d997e" + color: "#5d997e" - state: fire-big shader: unshaded - type: Item @@ -444,7 +444,7 @@ color: "#1b1724" right: - state: inhand-right - color: "#1b1724" + color: "#1b1724" - type: entity name: small magic green candle @@ -456,7 +456,7 @@ - state: candle-small color: "#5d997e" - state: fire-small - shader: unshaded + shader: unshaded - type: Item inhandVisuals: left: @@ -464,7 +464,7 @@ color: "#5d997e" right: - state: inhand-right - color: "#5d997e" + color: "#5d997e" - type: entity name: small magic purple candle @@ -484,4 +484,4 @@ color: "#984aa1" right: - state: inhand-right - color: "#984aa1" + color: "#984aa1" diff --git a/Resources/Prototypes/Entities/Objects/Misc/eggspider.yml b/Resources/Prototypes/Entities/Objects/Misc/eggspider.yml index f53e39e3645..c2357ed3c8c 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/eggspider.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/eggspider.yml @@ -14,7 +14,7 @@ Structural: 2 animation: WeaponArcPunch - type: Item - size: 5 + size: Small - type: PointLight radius: 1.5 energy: 3 diff --git a/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml b/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml index a90f598a5dd..1deafac00bf 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/fire_extinguisher.yml @@ -11,7 +11,7 @@ map: [ "enabled" ] - type: Item sprite: Objects/Misc/fire_extinguisher.rsi - size: 10 + size: Normal - type: SolutionContainerManager solutions: spray: diff --git a/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml b/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml index 77b321f9513..1b925b5cb08 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/fluff_lights.yml @@ -38,7 +38,7 @@ sprite: Objects/Misc/Lights/lights.rsi - type: Item sprite: Objects/Misc/Lights/lights.rsi - size: 20 + size: Normal heldPrefix: off - type: PointLight enabled: false @@ -158,7 +158,7 @@ description: A pole with powerful mounted lights on it. components: - type: Item - size: 50 + size: Normal - type: Sprite layers: - state: floodlight diff --git a/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml b/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml index befd24f36e1..f2fbab04a0e 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/handcuffs.yml @@ -5,7 +5,8 @@ parent: BaseItem components: - type: Item - size: 3 + size: Small + storedRotation: 90 - type: Handcuff cuffedRSI: Objects/Misc/handcuffs.rsi bodyIconState: body-overlay @@ -31,8 +32,6 @@ id: Cablecuffs parent: Handcuffs components: - - type: Item - size: 5 - type: Handcuff breakoutTime: 15 cuffedRSI: Objects/Misc/cablecuffs.rsi @@ -65,7 +64,8 @@ parent: Handcuffs components: - type: Item - size: 2 + size: Tiny + storedRotation: 0 - type: Handcuff breakoutTime: 20 # halfway between improvised cablecuffs and metal ones cuffedRSI: Objects/Misc/cablecuffs.rsi # cablecuffs will look fine @@ -92,7 +92,7 @@ abstract: true components: - type: Item - size: 2 + size: Small - type: Tag tags: - Trash @@ -128,7 +128,7 @@ description: Used to restrain those who may cause harm to themselves or others. components: - type: Item - size: 20 + size: Normal - type: Handcuff cuffedRSI: Clothing/OuterClothing/Misc/straight_jacket.rsi breakoutTime: 100 diff --git a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml index a13a9d28d31..a9f4024ebec 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/identification_cards.yml @@ -12,7 +12,9 @@ - idcard sprite: Objects/Misc/id_cards.rsi - type: Item + size: Small heldPrefix: default + storedRotation: -90 - type: Access - type: IdCard - type: StationRecordKeyStorage diff --git a/Resources/Prototypes/Entities/Objects/Misc/implanters.yml b/Resources/Prototypes/Entities/Objects/Misc/implanters.yml index ce323261e8a..f35e72de8cd 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/implanters.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/implanters.yml @@ -39,6 +39,7 @@ - type: Item sprite: Objects/Specific/Medical/implanter.rsi heldPrefix: 0 + size: Small - type: Appearance - type: GenericVisualizer visuals: @@ -97,7 +98,6 @@ components: - type: Item sprite: Objects/Specific/Medical/syndi_implanter.rsi - size: 3 - type: Sprite sprite: Objects/Specific/Medical/syndi_implanter.rsi state: implanter1 diff --git a/Resources/Prototypes/Entities/Objects/Misc/improvised_gun_parts.yml b/Resources/Prototypes/Entities/Objects/Misc/improvised_gun_parts.yml index d94193e49a1..abf4e0974a6 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/improvised_gun_parts.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/improvised_gun_parts.yml @@ -2,12 +2,12 @@ #TODO: Assimilate these into the same RSI. - type: entity parent: BaseItem - id: ModularReceiver - name: modular receiver + id: ModularReceiver + name: modular receiver description: A vital part used in the creation of firearms. #Could use a better description, but I'm not a gun nut so I can't really do that. components: # - type: Item -# size: 15 +# size: Normal - type: Sprite sprite: Objects/Misc/modular_receiver.rsi state: icon @@ -23,7 +23,7 @@ description: A robust wooden stock, used in the creation of firearms. #Same as above components: # - type: Item -# size: 25 +# size: Normal - type: Sprite sprite: Objects/Misc/rifle_stock.rsi state: icon diff --git a/Resources/Prototypes/Entities/Objects/Misc/machine_parts.yml b/Resources/Prototypes/Entities/Objects/Misc/machine_parts.yml index cd065770213..7900933de26 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/machine_parts.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/machine_parts.yml @@ -8,7 +8,7 @@ - type: Sprite sprite: Objects/Misc/stock_parts.rsi - type: Item - size: 1 + size: Tiny - type: GuideHelp guides: - MachineUpgrading diff --git a/Resources/Prototypes/Entities/Objects/Misc/medalcase.yml b/Resources/Prototypes/Entities/Objects/Misc/medalcase.yml index 64c11d5a2ff..f178fffae05 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/medalcase.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/medalcase.yml @@ -9,9 +9,10 @@ state: icon - type: Item sprite: Objects/Storage/medalcase.rsi - size: 80 + size: Normal - type: Storage - capacity: 80 + grid: + - 0,0,7,1 - type: StorageFill contents: - id: ClothingNeckGoldmedal diff --git a/Resources/Prototypes/Entities/Objects/Misc/monkeycube.yml b/Resources/Prototypes/Entities/Objects/Misc/monkeycube.yml index 32ad0552c00..3814ec29236 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/monkeycube.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/monkeycube.yml @@ -4,11 +4,6 @@ id: MonkeyCubeBox description: Drymate brand monkey cubes. Just add water! components: - - type: Storage - whitelist: - tags: - - MonkeyCube - capacity: 30 - type: StorageFill contents: - id: MonkeyCubeWrapped @@ -24,6 +19,8 @@ id: MonkeyCubeWrapped description: Unwrap this to get a monkey cube. components: + - type: Item + size: Tiny - type: SpawnItemsOnUse items: - id: MonkeyCube @@ -47,7 +44,6 @@ whitelist: tags: - MonkeyCube - capacity: 30 - type: StorageFill contents: - id: SyndicateSpongeWrapped @@ -71,6 +67,8 @@ - type: Sprite sprite: Objects/Misc/monkeycube.rsi state: wrapper + - type: Item + size: Tiny - type: Tag tags: - MonkeyCube diff --git a/Resources/Prototypes/Entities/Objects/Misc/paper.yml b/Resources/Prototypes/Entities/Objects/Misc/paper.yml index 59cee2ea1dd..fa12ad50237 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/paper.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/paper.yml @@ -23,7 +23,7 @@ - key: enum.PaperUiKey.Key type: PaperBoundUserInterface - type: Item - size: 1 + size: Tiny - type: Tag tags: - Document @@ -245,7 +245,7 @@ - type: Item sprite: Objects/Misc/bureaucracy.rsi heldPrefix: pen - size: 2 + size: Tiny - type: PhysicalComposition materialComposition: Steel: 25 @@ -304,7 +304,7 @@ - type: Item sprite: Objects/Misc/bureaucracy.rsi heldPrefix: overpriced_pen - size: 2 + size: Tiny - type: entity name: captain's fountain pen @@ -364,9 +364,12 @@ # green: "#43bc38" - type: Item sprite: Objects/Misc/bureaucracy.rsi - size: 5 + size: Small + shape: null - type: Storage - capacity: 10 + maxItemSize: Small + grid: + - 0,0,4,3 whitelist: tags: - Document @@ -521,13 +524,14 @@ insertOnInteract: false - type: Item sprite: Objects/Misc/clipboard.rsi - size: 10 + size: Small - type: Clothing slots: [belt] quickEquip: false sprite: Objects/Misc/clipboard.rsi - type: Storage - capacity: 20 + grid: + - 0,0,5,3 whitelist: tags: - Document @@ -566,7 +570,7 @@ - state: clipboard_over - type: Item sprite: Objects/Misc/cc-clipboard.rsi - size: 10 + size: Small - type: Clothing slots: [belt] quickEquip: false @@ -604,13 +608,14 @@ insertOnInteract: true - type: Item sprite: Objects/Misc/qm_clipboard.rsi - size: 30 + size: Normal - type: Clothing slots: [belt] quickEquip: false sprite: Objects/Misc/qm_clipboard.rsi - type: Storage - capacity: 90 + grid: + - 0,0,4,3 quickInsert: true whitelist: tags: @@ -663,7 +668,7 @@ sprite: Objects/Misc/bureaucracy.rsi state: stamp-mime - type: Item - size: 3 + size: Tiny - type: entity name: alternate rubber stamp diff --git a/Resources/Prototypes/Entities/Objects/Misc/pet_carrier.yml b/Resources/Prototypes/Entities/Objects/Misc/pet_carrier.yml index 6427cc81eb1..84c9c7c7520 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/pet_carrier.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/pet_carrier.yml @@ -62,5 +62,5 @@ paper_label: !type:ContainerSlot - type: ItemSlots - type: Item - size: 9999 + size: Ginormous sprite: Objects/Storage/petcarrier.rsi diff --git a/Resources/Prototypes/Entities/Objects/Misc/potatoai_chip.yml b/Resources/Prototypes/Entities/Objects/Misc/potatoai_chip.yml index 528aa30a148..0f871831e2b 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/potatoai_chip.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/potatoai_chip.yml @@ -8,10 +8,10 @@ sprite: Objects/Misc/potatoai_chip.rsi state: icon - type: Item - size: 3 + size: Tiny - type: Tag tags: - SmallAIChip - type: Construction graph: PotatoAIChip - node: potatoaichip \ No newline at end of file + node: potatoaichip diff --git a/Resources/Prototypes/Entities/Objects/Misc/subdermal_implants.yml b/Resources/Prototypes/Entities/Objects/Misc/subdermal_implants.yml index 7b5989166c8..1a1b25ed4e6 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/subdermal_implants.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/subdermal_implants.yml @@ -118,7 +118,9 @@ components: - Hands # no use giving a mouse a storage implant, but a monkey is another story... - type: Storage - capacity: 20 #10-20 should be more than enough for this + grid: + - 0,0,2,2 + maxItemSize: Small - type: ContainerContainer containers: storagebase: !type:Container diff --git a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml index e6b0d4ce407..8d8102ef39c 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/tiles.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/tiles.yml @@ -8,6 +8,7 @@ sprite: Objects/Tiles/tile.rsi - type: Item sprite: Objects/Tiles/tile.rsi + size: Normal - type: DamageOtherOnHit damage: types: diff --git a/Resources/Prototypes/Entities/Objects/Power/antimatter_jar.yml b/Resources/Prototypes/Entities/Objects/Power/antimatter_jar.yml index 8267903dbb8..22e5b9bb3cf 100644 --- a/Resources/Prototypes/Entities/Objects/Power/antimatter_jar.yml +++ b/Resources/Prototypes/Entities/Objects/Power/antimatter_jar.yml @@ -5,7 +5,7 @@ description: A hermetically sealed jar containing antimatter for use in an antimatter reactor. components: - type: Item - size: 5 + size: Normal sprite: Objects/Power/AME/ame_jar.rsi - type: Sprite sprite: Objects/Power/AME/ame_jar.rsi diff --git a/Resources/Prototypes/Entities/Objects/Power/antimatter_part.yml b/Resources/Prototypes/Entities/Objects/Power/antimatter_part.yml index a393cad6176..b4477958131 100644 --- a/Resources/Prototypes/Entities/Objects/Power/antimatter_part.yml +++ b/Resources/Prototypes/Entities/Objects/Power/antimatter_part.yml @@ -5,7 +5,7 @@ description: A flatpack used for constructing an antimatter engine reactor. Use a multitool to unpack it. components: - type: Item - size: 5 + size: Normal sprite: Objects/Power/AME/ame_part.rsi - type: Sprite sprite: Objects/Power/AME/ame_part.rsi diff --git a/Resources/Prototypes/Entities/Objects/Power/powercells.yml b/Resources/Prototypes/Entities/Objects/Power/powercells.yml index 01680dec3a0..841288c479d 100644 --- a/Resources/Prototypes/Entities/Objects/Power/powercells.yml +++ b/Resources/Prototypes/Entities/Objects/Power/powercells.yml @@ -28,9 +28,13 @@ - type: Tag tags: - DroneUsable + - PowerCell - type: Appearance - type: PowerCellVisuals - type: Riggable + - type: HitscanBatteryAmmoProvider + proto: RedLightLaser + fireCost: 50 - type: entity name: potato battery @@ -112,7 +116,7 @@ startingCharge: 720 - type: MachinePart part: PowerCell - rating: 2 + rating: 2 - type: entity id: PowerCellMediumPrinted @@ -151,7 +155,7 @@ - type: MachinePart part: PowerCell rating: 3 - + - type: entity id: PowerCellHighPrinted suffix: Empty @@ -189,7 +193,7 @@ - type: MachinePart part: PowerCell rating: 4 - + - type: entity id: PowerCellHyperPrinted suffix: Empty diff --git a/Resources/Prototypes/Entities/Objects/Power/powersink.yml b/Resources/Prototypes/Entities/Objects/Power/powersink.yml index 9317dd741ff..c44a167bcd6 100644 --- a/Resources/Prototypes/Entities/Objects/Power/powersink.yml +++ b/Resources/Prototypes/Entities/Objects/Power/powersink.yml @@ -5,7 +5,7 @@ description: Drains immense amounts of electricity from the grid. components: - type: Item - size: 150 + size: Huge - type: NodeContainer examinable: true nodes: diff --git a/Resources/Prototypes/Entities/Objects/Power/solar_parts.yml b/Resources/Prototypes/Entities/Objects/Power/solar_parts.yml index ff333b93c2b..7c8e7fa4951 100644 --- a/Resources/Prototypes/Entities/Objects/Power/solar_parts.yml +++ b/Resources/Prototypes/Entities/Objects/Power/solar_parts.yml @@ -4,7 +4,7 @@ name: solar assembly part components: - type: Item - size: 10 + size: Normal - type: Sprite sprite: Objects/Power/solar_parts.rsi state: solar_assembly_parts diff --git a/Resources/Prototypes/Entities/Objects/Shields/shields.yml b/Resources/Prototypes/Entities/Objects/Shields/shields.yml index 311f5b35b5f..4596085f341 100644 --- a/Resources/Prototypes/Entities/Objects/Shields/shields.yml +++ b/Resources/Prototypes/Entities/Objects/Shields/shields.yml @@ -10,7 +10,7 @@ state: riot-icon - type: Item sprite: Objects/Weapons/Melee/shields.rsi - size: 100 + size: Ginormous heldPrefix: riot - type: Blocking passiveBlockModifier: @@ -361,7 +361,7 @@ path: /Audio/Weapons/ebladeon.ogg deActivateSound: path: /Audio/Weapons/ebladeoff.ogg - offSize: 5 + offSize: Small - type: Sprite sprite: Objects/Weapons/Melee/e_shield.rsi layers: @@ -372,7 +372,7 @@ shader: unshaded map: [ "shield" ] - type: Item - size: 5 + size: Small sprite: Objects/Weapons/Melee/e_shield.rsi heldPrefix: eshield - type: UseDelay @@ -451,7 +451,7 @@ state: eshield-icon - type: Item sprite: Objects/Weapons/Melee/e_shield.rsi - size: 5 + size: Small heldPrefix: eshield - type: entity @@ -470,7 +470,7 @@ path: /Audio/Weapons/telescopicoff.ogg params: volume: -5 - offSize: 10 + offSize: Small - type: Sprite sprite: Objects/Weapons/Melee/teleriot_shield.rsi layers: @@ -479,7 +479,7 @@ visible: false map: [ "shield" ] - type: Item - size: 10 + size: Small sprite: Objects/Weapons/Melee/teleriot_shield.rsi heldPrefix: teleriot - type: UseDelay diff --git a/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml b/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml index 798ecc27890..1e576c92fd8 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Chapel/bibles.yml @@ -31,13 +31,14 @@ sprite: Objects/Specific/Chapel/bible.rsi state: icon - type: Item - size: 15 + size: Small sprite: Objects/Specific/Chapel/bible.rsi - type: Clothing slots: - Belt - type: Storage - capacity: 10 + grid: + - 0,0,0,1 - type: UserInterface interfaces: - key: enum.StorageUiKey.Key @@ -78,7 +79,6 @@ - type: Sprite sprite: Objects/Specific/Chapel/necronomicon.rsi - type: Item - size: 15 sprite: Objects/Specific/Chapel/necronomicon.rsi - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Specific/Chapel/urn.yml b/Resources/Prototypes/Entities/Objects/Specific/Chapel/urn.yml index e378ffedd44..8324fc5a725 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Chapel/urn.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Chapel/urn.yml @@ -5,16 +5,15 @@ id: Urn components: - type: Storage - capacity: 5 # Me when -# grid: -# - 0,0,0,1 -# - type: UserInterface -# interfaces: -# - key: enum.StorageUiKey.Key -# type: StorageBoundUserInterface + grid: + - 0,0,0,1 + - type: UserInterface + interfaces: + - key: enum.StorageUiKey.Key + type: StorageBoundUserInterface - type: Sprite sprite: Objects/Specific/Chapel/chaplainurn.rsi state: icon - type: Item - size: 20 + size: Normal sprite: Objects/Specific/Chapel/chaplainurn.rsi diff --git a/Resources/Prototypes/Entities/Objects/Specific/Chemistry/chem_bag.yml b/Resources/Prototypes/Entities/Objects/Specific/Chemistry/chem_bag.yml index 97067c79d5e..a4692db9b5f 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Chemistry/chem_bag.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Chemistry/chem_bag.yml @@ -13,13 +13,16 @@ slots: - belt - type: Item - size: 46 + size: Ginormous - type: Storage - capacity: 45 + maxItemSize: Normal # allow up to 5 large beakers / 10 beakers / 10 pill canisters + grid: + - 0,0,4,3 quickInsert: true areaInsert: true whitelist: components: + - FitsInDispenser - Pill tags: - Document diff --git a/Resources/Prototypes/Entities/Objects/Specific/Forensics/forensics.yml b/Resources/Prototypes/Entities/Objects/Specific/Forensics/forensics.yml index a3abd4f1e35..628ec7ee972 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Forensics/forensics.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Forensics/forensics.yml @@ -5,7 +5,7 @@ description: A forensic pad for collecting fingerprints or fibers. components: - type: Item - size: 3 + size: Small - type: ForensicPad - type: Sprite sprite: Objects/Misc/bureaucracy.rsi diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/leaves.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/leaves.yml index 6da11b53fb5..8e26898daad 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/leaves.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/leaves.yml @@ -63,7 +63,7 @@ tags: - Smokable - type: Item - size: 1 + size: Tiny - type: entity name: tobacco leaves @@ -121,4 +121,4 @@ tags: - Smokable - type: Item - size: 1 + size: Tiny diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml index 18500328c63..2bbb720259d 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/seeds.yml @@ -8,7 +8,7 @@ sprite: Objects/Specific/Hydroponics/seeds.rsi state: seed - type: Item - size: 2 + size: Tiny - type: StaticPrice price: 20 @@ -467,7 +467,7 @@ seedId: watermelon - type: Sprite sprite: Objects/Specific/Hydroponics/watermelon.rsi - + - type: entity parent: SeedBase name: packet of grape seeds @@ -508,7 +508,7 @@ seedId: bungo - type: Sprite sprite: Objects/Specific/Hydroponics/bungo.rsi - + - type: entity parent: SeedBase id: PeaSeeds diff --git a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml index c939cc9ca1c..7e02106e6a7 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Hydroponics/tools.yml @@ -59,7 +59,7 @@ types: Slash: 10 - type: Item - size: 20 + size: Normal - type: Clothing sprite: Objects/Tools/Hydroponics/scythe.rsi slots: @@ -123,13 +123,14 @@ - type: Sprite sprite: Objects/Specific/Hydroponics/Equipment/plant_bag.rsi state: icon - - type: Item - type: Clothing quickEquip: false slots: - belt - type: Storage - capacity: 200 + grid: + - 0,0,7,4 + maxItemSize: Small quickInsert: true areaInsert: true whitelist: diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml index 917012017ca..be823f2b653 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/janitor.yml @@ -20,7 +20,7 @@ types: Blunt: 5 - type: Item - size: 15 + size: Large sprite: Objects/Specific/Janitorial/mop.rsi - type: Absorbent - type: SolutionContainerManager @@ -59,7 +59,7 @@ types: Blunt: 5 - type: Item - size: 15 + size: Large sprite: Objects/Specific/Janitorial/advmop.rsi - type: Absorbent pickupAmount: 100 @@ -203,7 +203,7 @@ sprite: Objects/Specific/Janitorial/wet_floor_sign.rsi - type: Item sprite: Objects/Specific/Janitorial/wet_floor_sign.rsi - size: 15 + size: Normal - type: Armor modifiers: coefficients: @@ -594,7 +594,7 @@ types: Blunt: 0 - type: Item - size: 10 + size: Small sprite: Objects/Specific/Janitorial/rag.rsi - type: Absorbent pickupAmount: 15 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml index e6f989f84a2..4a6df02a9e2 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml @@ -19,6 +19,7 @@ - type: Appearance - type: Item sprite: Objects/Specific/Janitorial/soap.rsi + storedRotation: -90 - type: Slippery paralyzeTime: 2 launchForwardsMultiplier: 1.5 @@ -72,7 +73,6 @@ residueAdjective: residue-slippery residueColor: residue-green - - type: entity name: soap id: SoapNT @@ -234,4 +234,4 @@ Quantity: 240 - type: Residue residueAdjective: residue-slippery - residueColor: residue-blue \ No newline at end of file + residueColor: residue-blue diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/trashbag.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/trashbag.yml index 80aace05e73..567f91b15fd 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/trashbag.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/trashbag.yml @@ -9,7 +9,9 @@ - state: icon-0 map: ["enum.StorageFillLayers.Fill"] - type: Storage - capacity: 125 + maxItemSize: Small + grid: + - 0,0,7,5 quickInsert: true areaInsert: true storageOpenSound: @@ -33,7 +35,7 @@ slots: [belt] sprite: Objects/Specific/Janitorial/trashbag.rsi - type: Item - size: 125 + size: Normal - type: entity name: trash bag @@ -55,7 +57,9 @@ parent: TrashBagBlue components: - type: Storage - capacity: 125000 + maxItemSize: Huge + grid: + - 0,0,19,9 quickInsert: true areaInsert: true areaInsertRadius: 1000 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Kitchen/foodcarts.yml b/Resources/Prototypes/Entities/Objects/Specific/Kitchen/foodcarts.yml index 7438336d939..ecd4cfd5d59 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Kitchen/foodcarts.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Kitchen/foodcarts.yml @@ -47,7 +47,9 @@ - key: enum.StorageUiKey.Key type: StorageBoundUserInterface - type: Storage - capacity: 100 #20 burgers #Delta V + maxItemSize: Normal + grid: + - 0,0,7,4 - type: TileFrictionModifier modifier: 0.4 # makes it slide diff --git a/Resources/Prototypes/Entities/Objects/Specific/Librarian/books_bag.yml b/Resources/Prototypes/Entities/Objects/Specific/Librarian/books_bag.yml index 2ad28399a66..e4befcbb670 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Librarian/books_bag.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Librarian/books_bag.yml @@ -13,9 +13,10 @@ slots: - belt - type: Item - size: 151 + size: Ginormous - type: Storage - capacity: 150 + grid: + - 0,0,7,3 quickInsert: true areaInsert: true whitelist: diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mech_construction.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mech_construction.yml index 678cd5ea122..c40073c659d 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Mech/mech_construction.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mech_construction.yml @@ -44,7 +44,7 @@ abstract: true components: - type: Item - size: 50 + size: Ginormous - type: entity parent: BaseRipleyPart @@ -172,7 +172,7 @@ abstract: true components: - type: Item - size: 50 + size: Ginormous - type: entity parent: BaseHonkerPart @@ -300,7 +300,7 @@ abstract: true components: - type: Item - size: 50 + size: Huge - type: entity parent: BaseHamtrPart @@ -428,7 +428,7 @@ abstract: true components: - type: Item - size: 10 + size: Small - type: entity parent: BaseVimPartItem diff --git a/Resources/Prototypes/Entities/Objects/Specific/Mech/mecha_equipment.yml b/Resources/Prototypes/Entities/Objects/Specific/Mech/mecha_equipment.yml index 8539c473b93..c489dec1c56 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Mech/mecha_equipment.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Mech/mecha_equipment.yml @@ -7,7 +7,7 @@ sprite: Objects/Specific/Mech/mecha_equipment.rsi - type: Item sprite: Objects/Specific/Mech/mecha_equipment.rsi - size: 50 + size: Ginormous - type: MechEquipment - type: GuideHelp guides: diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/defib.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/defib.yml index a69147b610d..2d1af8f2465 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/defib.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/defib.yml @@ -28,7 +28,7 @@ True: { visible: true } False: { visible: false } - type: Item - size: 50 + size: Large - type: ItemCooldown - type: Speech speechVerb: Robotic diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/disease.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/disease.yml index 9c67cbb28c2..b85f7087773 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/disease.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/disease.yml @@ -5,7 +5,7 @@ description: Used for taking and transfering samples. Sterile until open. Single use only. components: - type: Item - size: 1 + size: Tiny - type: Sprite sprite: Objects/Specific/Medical/mouth_swab.rsi state: icon @@ -26,7 +26,7 @@ description: Prevents people who DON'T already have a disease from catching it. components: - type: Item - size: 3 + size: Tiny - type: Sprite sprite: Objects/Specific/Medical/medipen.rsi state: salpen diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml index cf7d0c5cc59..2e5dad3a7b7 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml @@ -6,7 +6,7 @@ - type: Sprite sprite: Objects/Specific/Medical/medical.rsi - type: Item - size: 10 + size: Small sprite: Objects/Specific/Medical/medical.rsi heldPrefix: ointment # Inherited @@ -54,8 +54,6 @@ - type: Stack stackType: Ointment count: 1 - - type: Item - size: 1 - type: entity id: Ointment10Lingering @@ -105,8 +103,6 @@ - type: Stack stackType: RegenerativeMesh count: 1 - - type: Item - size: 1 - type: entity name: bruise pack @@ -144,8 +140,6 @@ - type: Stack stackType: Brutepack count: 1 - - type: Item - size: 1 - type: entity id: Brutepack10Lingering @@ -193,8 +187,6 @@ - type: Stack stackType: MedicatedSuture count: 1 - - type: Item - size: 1 - type: entity name: blood pack @@ -273,8 +265,6 @@ components: - type: Stack count: 1 - - type: Item - size: 1 - type: entity id: Gauze10Lingering diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml index 4bb9a5ae093..b9a6b080525 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/hypospray.yml @@ -101,7 +101,7 @@ map: ["enum.SolutionContainerLayers.Fill"] - type: Item sprite: Objects/Specific/Medical/medipen.rsi - size: 3 + size: Tiny - type: SolutionContainerManager solutions: pen: @@ -314,8 +314,6 @@ layers: - state: stimpen map: ["enum.SolutionContainerLayers.Fill"] - - type: Item - size: 10 - type: SolutionContainerManager solutions: pen: @@ -346,8 +344,6 @@ layers: - state: microstimpen map: ["enum.SolutionContainerLayers.Fill"] - - type: Item - size: 5 - type: SolutionContainerManager solutions: pen: @@ -375,8 +371,6 @@ layers: - state: morphen map: ["enum.SolutionContainerLayers.Fill"] - - type: Item - size: 5 - type: SolutionContainerVisuals maxFillLevels: 1 changeColor: false @@ -426,6 +420,8 @@ name: hypopen box description: A small box containing a hypopen. Packaging disintegrates when opened, leaving no evidence behind. components: + - type: Item + size: Tiny - type: Sprite sprite: Objects/Storage/penbox.rsi state: hypopen diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/medkits.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/medkits.yml index 400f6670ab6..d7f2231ec99 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/medkits.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/medkits.yml @@ -8,9 +8,11 @@ sprite: Objects/Specific/Medical/firstaidkits.rsi state: firstaid - type: Storage - capacity: 60 + maxItemSize: Small + grid: + - 0,0,3,1 - type: Item - size: 60 + size: Large sprite: Objects/Specific/Medical/firstaidkits.rsi heldPrefix: firstaid - type: Tag @@ -93,7 +95,5 @@ state: blackkit - type: Item heldPrefix: blackkit - size: 50 - - type: Storage - capacity: 50 + size: Normal diff --git a/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml b/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml index 17c5a54c8fc..f57dd2033f1 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Medical/morgue.yml @@ -5,7 +5,7 @@ description: A plastic bag designed for the storage and transportation of cadavers. components: - type: Item - size: 6 + size: Small - type: Sprite drawdepth: SmallObjects # I guess body bags need appear above a coroner's table? sprite: Objects/Specific/Medical/Morgue/bodybags.rsi diff --git a/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml b/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml index 7e1c5b3a7b6..7f5e3afca3c 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml @@ -19,6 +19,8 @@ - type: GuideHelp guides: - ScannersAndVessels + - type: Item + storedRotation: -90 - type: ReverseEngineering # Nyano difficulty: 2 recipes: diff --git a/Resources/Prototypes/Entities/Objects/Specific/Research/rped.yml b/Resources/Prototypes/Entities/Objects/Specific/Research/rped.yml index f928c9f00b9..3f2ea00827b 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Research/rped.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Research/rped.yml @@ -9,13 +9,14 @@ state: icon - type: Item sprite: Objects/Specific/Research/rped.rsi - size: 50 + size: Normal - type: GuideHelp guides: - MachineUpgrading - type: PartExchanger - type: Storage - capacity: 150 + grid: + - 0,0,9,2 quickInsert: true areaInsert: true whitelist: diff --git a/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag.yml b/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag.yml index 583aef374a7..a36bfaf676b 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag.yml @@ -14,9 +14,11 @@ slots: - belt - type: Item - size: 176 + size: Ginormous - type: Storage - capacity: 175 + maxItemSize: Normal + grid: + - 0,0,9,3 quickInsert: true areaInsert: true whitelist: diff --git a/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag_holding.yml b/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag_holding.yml index a772a475e2f..e8c7fa37dd4 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag_holding.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Salvage/ore_bag_holding.yml @@ -12,4 +12,5 @@ - type: Clothing sprite: Objects/Specific/Mining/ore_bag_holding.rsi - type: Storage - capacity: 9999 + grid: + - 0,0,19,9 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Service/vending_machine_restock.yml b/Resources/Prototypes/Entities/Objects/Specific/Service/vending_machine_restock.yml index 6ada51176c9..6abdd790c9c 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Service/vending_machine_restock.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Service/vending_machine_restock.yml @@ -22,7 +22,7 @@ soundSwing: path: /Audio/Weapons/punchmiss.ogg - type: Item - size: 50 + size: Normal - type: Damageable damageContainer: Inorganic damageModifierSet: Metallic diff --git a/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/item_artifacts.yml b/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/item_artifacts.yml index 78c5e41a1f9..3b33295395b 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/item_artifacts.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/item_artifacts.yml @@ -55,7 +55,7 @@ type: IntercomBoundUserInterface - type: Appearance - type: Item - size: 40 + size: Normal sprite: Objects/Specific/Xenoarchaeology/item_artifacts.rsi heldPrefix: ano01 - type: Actions @@ -179,7 +179,7 @@ wizardball6: "" - type: Appearance - type: Item - size: 150 + size: Normal - type: Tag tags: - ArtifactFragment @@ -203,5 +203,3 @@ components: - type: Stack count: 1 - - type: Item - size: 5 diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemical-containers.yml b/Resources/Prototypes/Entities/Objects/Specific/chemical-containers.yml index 067ee574178..ba422313e3d 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemical-containers.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemical-containers.yml @@ -17,7 +17,7 @@ map: [ "enum.SolutionContainerLayers.Fill" ] visible: false - type: Item - size: 20 + size: Normal sprite: Objects/Specific/Chemistry/jug.rsi - type: RefillableSolution solution: beaker diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry-bottles.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry-bottles.yml index 430cede7bcb..acfb65aa54f 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemistry-bottles.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry-bottles.yml @@ -46,7 +46,7 @@ - key: enum.TransferAmountUiKey.Key type: TransferAmountBoundUserInterface - type: Item - size: 3 + size: Tiny sprite: Objects/Specific/Chemistry/beaker.rsi - type: Spillable solution: drink diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry-vials.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry-vials.yml index cb484460711..1091fadaa40 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemistry-vials.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry-vials.yml @@ -47,8 +47,10 @@ - key: enum.TransferAmountUiKey.Key type: TransferAmountBoundUserInterface - type: Item - size: 2 + size: Tiny sprite: Objects/Specific/Chemistry/vial.rsi + shape: + - 0,0,0,0 - type: MeleeWeapon soundNoDamage: path: "/Audio/Effects/Fluids/splat.ogg" diff --git a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml index 7938b81a421..2fad96411fc 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/chemistry.yml @@ -189,7 +189,7 @@ map: ["enum.SolutionContainerLayers.Fill"] visible: false - type: Item - size: 10 + size: Normal sprite: Objects/Specific/Chemistry/beaker_large.rsi - type: SolutionContainerManager solutions: @@ -319,7 +319,7 @@ sprite: Objects/Specific/Chemistry/syringe.rsi state: "syringe_base0" - type: Item - size: 3 + size: Tiny sprite: Objects/Specific/Chemistry/syringe.rsi heldPrefix: 0 - type: SolutionContainerManager @@ -389,7 +389,7 @@ id: SyringeCryostasis parent: BaseSyringe name: cryostasis syringe - description: A syringe used to contain chemicals or solutions without reactions. + description: A syringe used to contain chemicals or solutions without reactions. components: - type: Sprite layers: @@ -427,7 +427,7 @@ sprite: Objects/Specific/Chemistry/pills.rsi state: pill - type: Item - size: 1 + size: Tiny sprite: Objects/Specific/Chemistry/pills.rsi - type: Pill - type: Food @@ -470,24 +470,23 @@ name: pill canister id: PillCanister parent: BaseStorageItem - description: Holds up to 9 pills. + description: Holds up to 10 pills. components: + - type: Item + size: Tiny + sprite: Objects/Specific/Chemistry/pills_canister.rsi - type: Sprite sprite: Objects/Specific/Chemistry/pills_canister.rsi state: pill_canister - - type: Item - sprite: Objects/Specific/Chemistry/pills_canister.rsi - type: Tag tags: - PillCanister - type: Storage - capacity: 9 + grid: + - 0,0,4,1 quickInsert: true areaInsert: true areaInsertRadius: 1 storageInsertSound: /Audio/Effects/pill_insert.ogg storageRemoveSound: /Audio/Effects/pill_remove.ogg - whitelist: - components: - - Pill - type: Dumpable diff --git a/Resources/Prototypes/Entities/Objects/Specific/rehydrateable.yml b/Resources/Prototypes/Entities/Objects/Specific/rehydrateable.yml index 8a2e4a29ce9..1888c4c4a96 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/rehydrateable.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/rehydrateable.yml @@ -4,6 +4,8 @@ name: monkey cube description: Just add water! components: + - type: Item + size: Tiny - type: SolutionContainerManager solutions: cube: @@ -109,6 +111,8 @@ suffix: Syndicate description: Just add water! components: + - type: Item + size: Tiny - type: SolutionContainerManager solutions: cube: diff --git a/Resources/Prototypes/Entities/Objects/Specific/syndicate.yml b/Resources/Prototypes/Entities/Objects/Specific/syndicate.yml index 81836f9c6cb..aa6a64789e7 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/syndicate.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/syndicate.yml @@ -10,7 +10,7 @@ state: telecrystal - type: Item sprite: Objects/Specific/Syndicate/telecrystal.rsi - size: 20 + size: Tiny - type: Stack count: 20 stackType: Telecrystal @@ -29,8 +29,6 @@ components: - type: Stack count: 1 - - type: Item - size: 1 - type: entity parent: Telecrystal @@ -39,8 +37,6 @@ components: - type: Stack count: 5 - - type: Item - size: 5 - type: entity parent: Telecrystal @@ -49,8 +45,6 @@ components: - type: Stack count: 10 - - type: Item - size: 10 # Uplinks - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Tools/access_configurator.yml b/Resources/Prototypes/Entities/Objects/Tools/access_configurator.yml index 54a32b56385..721a0654689 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/access_configurator.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/access_configurator.yml @@ -11,7 +11,7 @@ sprite: Objects/Tools/access_configurator.rsi state: icon - type: Item - size: 5 + size: Small - type: Clothing sprite: Objects/Tools/access_configurator.rsi quickEquip: false diff --git a/Resources/Prototypes/Entities/Objects/Tools/appraisal.yml b/Resources/Prototypes/Entities/Objects/Tools/appraisal.yml index c56f66b2913..539e5a3dc5f 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/appraisal.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/appraisal.yml @@ -4,23 +4,23 @@ name: appraisal tool description: A beancounter's best friend, with a quantum connection to the galactic market and the ability to appraise even the toughest items. components: - - type: Sprite - sprite: Objects/Tools/appraisal-tool.rsi - state: icon - - type: Item - sprite: Objects/Tools/appraisal-tool.rsi - - type: PriceGun - - type: UseDelay - delay: 3 - - type: Clothing - sprite: Objects/Tools/appraisal-tool.rsi - quickEquip: false - slots: - - Belt - - type: Tag - tags: - - AppraisalTool - - Sidearm - - type: GuideHelp - guides: - - Cargo + - type: Sprite + sprite: Objects/Tools/appraisal-tool.rsi + state: icon + - type: Item + sprite: Objects/Tools/appraisal-tool.rsi + - type: PriceGun + - type: UseDelay + delay: 3 + - type: Clothing + sprite: Objects/Tools/appraisal-tool.rsi + quickEquip: false + slots: + - Belt + - type: Tag + tags: + - AppraisalTool + - Sidearm + - type: GuideHelp + guides: + - Cargo diff --git a/Resources/Prototypes/Entities/Objects/Tools/bucket.yml b/Resources/Prototypes/Entities/Objects/Tools/bucket.yml index 2a5870908fe..c7d62d759b7 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/bucket.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/bucket.yml @@ -16,7 +16,7 @@ state: fill-1 visible: false - type: Item - size: 100 + size: Normal - type: Clothing sprite: Objects/Tools/bucket.rsi slots: diff --git a/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml b/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml index 24c78cac130..e1e565cc186 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/cable_coils.yml @@ -19,7 +19,7 @@ sprite: Objects/Tools/cable-coils.rsi - type: Item sprite: Objects/Tools/cable-coils.rsi - size: 30 + size: Normal - type: CablePlacer - type: Clickable - type: StaticPrice @@ -74,8 +74,6 @@ state: coilhv-10 - type: Stack count: 10 - - type: Item - size: 10 - type: entity parent: CableHVStack10 @@ -95,8 +93,6 @@ state: coilhv-10 - type: Stack count: 1 - - type: Item - size: 1 - type: entity parent: CableStack @@ -143,8 +139,6 @@ state: coilmv-10 - type: Stack count: 10 - - type: Item - size: 10 - type: entity parent: CableMVStack10 @@ -164,8 +158,6 @@ state: coilmv-10 - type: Stack count: 1 - - type: Item - size: 1 - type: entity parent: CableStack @@ -211,8 +203,6 @@ state: coillv-10 - type: Stack count: 10 - - type: Item - size: 10 - type: entity parent: CableApcStack10 @@ -231,6 +221,4 @@ - type: Sprite state: coillv-10 - type: Stack - count: 1 - - type: Item - size: 1 + count: 1 \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Objects/Tools/cowtools.yml b/Resources/Prototypes/Entities/Objects/Tools/cowtools.yml index 24eb0b02b24..e6a7a43fa40 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/cowtools.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/cowtools.yml @@ -127,7 +127,7 @@ - type: Sprite sprite: Objects/Tools/Cowtools/cowelder.rsi - type: Item - size: 10 + size: Small sprite: Objects/Tools/Cowtools/cowelder.rsi - type: Tool speed: 0.05 diff --git a/Resources/Prototypes/Entities/Objects/Tools/flare.yml b/Resources/Prototypes/Entities/Objects/Tools/flare.yml index 16ae88a0680..6ef85c015ee 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/flare.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/flare.yml @@ -40,6 +40,7 @@ - type: Item sprite: Objects/Misc/flare.rsi heldPrefix: unlit + size: Tiny - type: Appearance - type: PointLight enabled: false diff --git a/Resources/Prototypes/Entities/Objects/Tools/fulton.yml b/Resources/Prototypes/Entities/Objects/Tools/fulton.yml index 8e54b4277f9..612c8b93b91 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/fulton.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/fulton.yml @@ -28,7 +28,7 @@ mask: - Impassable - type: Item - size: 30 + size: Normal - type: Foldable folded: true - type: Clickable @@ -58,7 +58,7 @@ components: - type: Fulton - type: Item - size: 20 + size: Normal - type: Stack stackType: Fulton count: 10 @@ -84,7 +84,7 @@ suffix: One components: - type: Item - size: 2 + size: Small - type: Stack count: 1 diff --git a/Resources/Prototypes/Entities/Objects/Tools/gas_tanks.yml b/Resources/Prototypes/Entities/Objects/Tools/gas_tanks.yml index 42cd3114aba..0dba7570f51 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/gas_tanks.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/gas_tanks.yml @@ -7,7 +7,7 @@ sprite: Objects/Tanks/generic.rsi state: icon - type: Item - size: 15 + size: Normal sprite: Objects/Tanks/generic.rsi - type: Clothing sprite: Objects/Tanks/generic.rsi @@ -100,7 +100,7 @@ - type: Sprite sprite: Objects/Tanks/emergency.rsi - type: Item - size: 10 + size: Small sprite: Objects/Tanks/emergency.rsi - type: GasTank air: diff --git a/Resources/Prototypes/Entities/Objects/Tools/inflatable_wall.yml b/Resources/Prototypes/Entities/Objects/Tools/inflatable_wall.yml index b3d117dced5..5c30cfdea3a 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/inflatable_wall.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/inflatable_wall.yml @@ -13,7 +13,7 @@ state: item_wall - type: Item sprite: Objects/Misc/inflatable_wall.rsi - size: 10 + size: Small - type: SpawnAfterInteract prototype: InflatableWall doAfter: 1 @@ -39,7 +39,7 @@ state: item_door - type: Item sprite: Objects/Misc/inflatable_door.rsi - size: 4 + size: Small - type: SpawnAfterInteract prototype: InflatableDoor doAfter: 1 @@ -57,8 +57,6 @@ components: - type: Sprite state: item_wall - - type: Item - size: 5 - type: Stack count: 5 @@ -69,8 +67,6 @@ components: - type: Sprite state: item_wall - - type: Item - size: 1 - type: Stack count: 1 @@ -81,7 +77,5 @@ components: - type: Sprite state: item_door - - type: Item - size: 1 - type: Stack count: 1 diff --git a/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml b/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml index 36f96f61af8..31d852354bb 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/jaws_of_life.yml @@ -11,7 +11,7 @@ sprite: Objects/Tools/jaws_of_life.rsi state: jaws_pry - type: Item - size: 50 + size: Normal - type: Clothing sprite: Objects/Tools/jaws_of_life.rsi quickEquip: false @@ -61,7 +61,7 @@ sprite: Objects/Tools/jaws_of_life.rsi state: syn_jaws_pry - type: Item - size: 35 + size: Normal - type: Tool qualities: - Prying diff --git a/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml b/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml index 12e20324d3c..b4a458c4ab7 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/jetpacks.yml @@ -37,7 +37,7 @@ state: icon - type: Item sprite: Objects/Tanks/Jetpacks/blue.rsi - size: 100 + size: Huge - type: UserInterface interfaces: - key: enum.SharedGasTankUiKey.Key @@ -161,7 +161,7 @@ - SuitStorage - type: Item sprite: Objects/Tanks/Jetpacks/captain.rsi - size: 30 + size: Normal - type: Tag tags: - HighRiskItem diff --git a/Resources/Prototypes/Entities/Objects/Tools/lighters.yml b/Resources/Prototypes/Entities/Objects/Tools/lighters.yml index e3422f2a4a2..a3b6b3fd6e8 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/lighters.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/lighters.yml @@ -40,7 +40,7 @@ visible: false - state: basic_icon_top - type: Item - size: 1 + size: Tiny sprite: Objects/Tools/lighters.rsi heldPrefix: off - type: ItemCooldown diff --git a/Resources/Prototypes/Entities/Objects/Tools/matches.yml b/Resources/Prototypes/Entities/Objects/Tools/matches.yml index fd7e185cb02..e8601fcf355 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/matches.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/matches.yml @@ -4,9 +4,10 @@ abstract: true components: - type: Storage - capacity: 10 + grid: + - 0,0,6,1 - type: Item - size: 10 + size: Small - type: entity name: match stick @@ -26,7 +27,7 @@ - type: Item sprite: Objects/Tools/matches.rsi heldPrefix: unlit - size: 1 + size: Tiny - type: Matchstick duration: 10 igniteSound: @@ -80,13 +81,14 @@ - type: Item sprite: Objects/Tools/matches.rsi heldPrefix: matchbox - size: 5 + size: Small - type: Storage - capacity: 5 + grid: + - 0,0,2,1 - type: StorageFill contents: - id: Matchstick - amount: 5 + amount: 6 - type: ItemCounter count: tags: [Matchstick] diff --git a/Resources/Prototypes/Entities/Objects/Tools/toolbox.yml b/Resources/Prototypes/Entities/Objects/Tools/toolbox.yml index e9f05267963..30bcdf3739d 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/toolbox.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/toolbox.yml @@ -8,9 +8,11 @@ sound: path: /Audio/Items/toolbox_drop.ogg - type: Storage - capacity: 60 + maxItemSize: Normal + grid: + - 0,0,6,3 - type: Item - size: 9999 + size: Ginormous - type: ItemCooldown - type: MeleeWeapon damage: @@ -114,7 +116,9 @@ - type: Item sprite: Objects/Tools/Toolboxes/toolbox_syn.rsi - type: Storage - capacity: 170 # this seems silly high + maxItemSize: Huge + grid: + - 0,0,7,3 - type: MeleeWeapon damage: types: diff --git a/Resources/Prototypes/Entities/Objects/Tools/tools.yml b/Resources/Prototypes/Entities/Objects/Tools/tools.yml index 54a40ab4a85..53b24a49bce 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/tools.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/tools.yml @@ -37,6 +37,7 @@ cutters: Rainbow - type: Item sprite: Objects/Tools/wirecutters.rsi + storedRotation: -90 - type: LatticeCutting - type: PhysicalComposition materialComposition: @@ -64,6 +65,7 @@ - state: screwdriver-screwybits - type: Item sprite: Objects/Tools/screwdriver.rsi + storedRotation: -90 - type: ItemCooldown - type: MeleeWeapon wideAnimationRotation: -90 @@ -105,6 +107,9 @@ state: icon - type: Item sprite: Objects/Tools/wrench.rsi + storedSprite: + sprite: Objects/Tools/wrench.rsi + state: storage - type: ItemCooldown - type: MeleeWeapon wideAnimationRotation: 135 @@ -140,7 +145,10 @@ state: icon - type: Item sprite: Objects/Tools/crowbar.rsi - size: 10 + size: Small + storedSprite: + sprite: Objects/Tools/crowbar.rsi + state: storage - type: ItemCooldown - type: MeleeWeapon wideAnimationRotation: -135 @@ -173,6 +181,9 @@ state: red-icon - type: Item heldPrefix: red + storedSprite: + sprite: Objects/Tools/crowbar.rsi + state: red-storage - type: entity name: multitool @@ -190,7 +201,7 @@ - state: green-unlit shader: unshaded - type: Item - size: 5 + size: Small - type: Clothing sprite: Objects/Tools/multitool.rsi quickEquip: false @@ -239,7 +250,7 @@ map: ["enum.NetworkConfiguratorLayers.ModeLight"] shader: unshaded - type: Item - size: 5 + size: Small - type: Clothing sprite: Objects/Tools/network_configurator.rsi quickEquip: false @@ -289,7 +300,7 @@ state: drill_screw - type: Item sprite: Objects/Tools/drill.rsi - size: 10 + size: Small - type: Tool qualities: - Screwing @@ -351,7 +362,7 @@ sprite: Objects/Tools/rcd.rsi state: icon - type: Item - size: 20 + size: Normal - type: Clothing sprite: Objects/Tools/rcd.rsi quickEquip: false @@ -433,7 +444,7 @@ state: omnitool-screwing - type: Item sprite: Objects/Tools/omnitool.rsi - size: 20 + size: Normal - type: Tag tags: - Multitool @@ -508,7 +519,7 @@ types: Blunt: 14 - type: Item - size: 90 + size: Normal sprite: Objects/Tools/shovel.rsi - type: PhysicalComposition materialComposition: @@ -535,7 +546,7 @@ state: icon - type: Item sprite: Objects/Tools/rolling_pin.rsi - size: 10 + size: Small - type: Clothing sprite: Objects/Tools/rolling_pin.rsi quickEquip: false diff --git a/Resources/Prototypes/Entities/Objects/Tools/welders.yml b/Resources/Prototypes/Entities/Objects/Tools/welders.yml index 7c3de82d0ad..caa0d4c2088 100644 --- a/Resources/Prototypes/Entities/Objects/Tools/welders.yml +++ b/Resources/Prototypes/Entities/Objects/Tools/welders.yml @@ -17,7 +17,7 @@ shader: unshaded visible: false - type: Item - size: 10 + size: Small sprite: Objects/Tools/welder.rsi - type: ToggleableLightVisuals spriteLayer: flame @@ -142,7 +142,7 @@ - type: Sprite sprite: Objects/Tools/welder_mini.rsi - type: Item - size: 5 + size: Tiny sprite: Objects/Tools/welder_mini.rsi - type: RefillableSolution solution: Welder diff --git a/Resources/Prototypes/Entities/Objects/Vehicles/keys.yml b/Resources/Prototypes/Entities/Objects/Vehicles/keys.yml index f361c2b877a..468f1aa3a56 100644 --- a/Resources/Prototypes/Entities/Objects/Vehicles/keys.yml +++ b/Resources/Prototypes/Entities/Objects/Vehicles/keys.yml @@ -5,7 +5,7 @@ description: Interesting design. components: - type: Item - size: 2 + size: Tiny - type: Tag tags: - VehicleKey diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/funny.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/funny.yml index d23ebc74f76..7d95e7481e3 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/funny.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/funny.yml @@ -12,7 +12,7 @@ map: ["base"] - type: Item sprite: Objects/Weapons/Bombs/hot_potato.rsi - size: 5 + size: Small - type: AmbientSound enabled: false range: 8 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/pen.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/pen.yml index 312955f297c..029649ab370 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/pen.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/pen.yml @@ -27,6 +27,8 @@ name: exploding pen box description: A small box containing an exploding pen. Packaging disintegrates when opened, leaving no evidence behind. components: + - type: Item + size: Tiny - type: Sprite sprite: Objects/Storage/penbox.rsi state: exploding_pen diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml index 4d9fed1f914..e3581370f03 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml @@ -12,7 +12,7 @@ map: ["base"] - type: Item sprite: Objects/Weapons/Bombs/c4.rsi - size: 10 + size: Small - type: OnUseTimerTrigger delay: 10 delayOptions: [10, 30, 60, 120, 300] diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/spider.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/spider.yml index 50a7ea8687b..8f997b76874 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/spider.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/spider.yml @@ -10,7 +10,7 @@ state: icon - type: Item sprite: Objects/Weapons/Bombs/spidercharge.rsi - size: 10 + size: Small - type: SpiderCharge - type: OnUseTimerTrigger delay: 10 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 c7980f845f8..28157ef3450 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/antimateriel.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/antimateriel.yml @@ -12,7 +12,7 @@ proto: CartridgeAntiMateriel capacity: 10 - type: Item - size: 5 + size: Small - type: ContainerContainer containers: ballistic-ammo: !type:Container 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 4a77bfcfc56..063268d8b53 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 @@ -12,7 +12,7 @@ proto: CartridgeCaselessRifle capacity: 60 - type: Item - size: 5 + size: Small - type: ContainerContainer containers: ballistic-ammo: !type:Container 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 6052f589f9d..94867fc7aad 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 @@ -12,7 +12,7 @@ proto: CartridgeLightRifle capacity: 50 - type: Item - size: 5 + size: Small - type: ContainerContainer containers: ballistic-ammo: !type:Container 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 50e79f0f8ee..04f9b7b238a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/magnum.yml @@ -11,7 +11,7 @@ proto: CartridgeMagnum capacity: 60 - type: Item - size: 5 + size: Small - type: ContainerContainer containers: ballistic-ammo: !type:Container 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 1aa4b34c241..5e970b2b0b5 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/pistol.yml @@ -12,7 +12,7 @@ proto: CartridgePistol capacity: 60 - type: Item - size: 5 + size: Small - type: ContainerContainer containers: ballistic-ammo: !type:Container 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 d0bd96d31d1..f974dbb2adf 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/rifle.yml @@ -11,7 +11,7 @@ proto: CartridgeRifle capacity: 60 - type: Item - size: 5 + size: Small - type: ContainerContainer containers: ballistic-ammo: !type:Container diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/base_cartridge.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/base_cartridge.yml index de6f9f92a5b..1831db28e75 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/base_cartridge.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/base_cartridge.yml @@ -20,7 +20,7 @@ tags: - Cartridge - type: Item - size: 1 + size: Tiny - type: SpaceGarbage - type: EmitSoundOnLand sound: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/caseless_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/caseless_rifle.yml index 773ff01ed85..0d16f1e966c 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/caseless_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/caseless_rifle.yml @@ -15,7 +15,7 @@ proto: CartridgeCaselessRifle capacity: 30 - type: Item - size: 5 + size: Small - type: ContainerContainer containers: ballistic-ammo: !type:Container @@ -42,7 +42,7 @@ proto: CartridgeCaselessRifle capacity: 10 - type: Item - size: 3 + size: Tiny - type: Sprite sprite: Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_rifle_mag_short.rsi layers: @@ -67,7 +67,7 @@ proto: CartridgeCaselessRifle capacity: 10 - type: Item - size: 5 + size: Small - type: Sprite sprite: Objects/Weapons/Guns/Ammunition/Magazine/CaselessRifle/caseless_pistol_mag.rsi layers: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/heavy_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/heavy_rifle.yml index 239533c9408..d8af7064a4a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/heavy_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/heavy_rifle.yml @@ -8,7 +8,7 @@ tags: - MagazineHeavyRifle - type: Item - size: 10 + size: Small - type: BallisticAmmoProvider mayTransfer: true capacity: 100 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/light_rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/light_rifle.yml index e5863643695..7ae4f325244 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/light_rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/light_rifle.yml @@ -16,7 +16,7 @@ proto: CartridgeLightRifle capacity: 30 - type: Item - size: 5 + size: Small - type: ContainerContainer containers: ballistic-ammo: !type:Container diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml index 6060898d495..b65dac5d15a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/magnum.yml @@ -14,7 +14,7 @@ - CartridgeMagnum capacity: 25 - type: Item - size: 10 + size: Small - type: ContainerContainer containers: ballistic-ammo: !type:Container diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml index 4ed38fdeb35..8793a717e7e 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/pistol.yml @@ -14,7 +14,7 @@ - CartridgePistol capacity: 10 - type: Item - size: 5 + size: Small - type: ContainerContainer containers: ballistic-ammo: !type:Container @@ -47,7 +47,7 @@ - CartridgePistol capacity: 16 - type: Item - size: 5 + size: Small - type: ContainerContainer containers: ballistic-ammo: !type:Container @@ -80,7 +80,7 @@ - CartridgePistol capacity: 35 - type: Item - size: 10 + size: Small - type: ContainerContainer containers: ballistic-ammo: !type:Container diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/rifle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/rifle.yml index ca1f9b8de28..8e65cd992eb 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/rifle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/rifle.yml @@ -9,7 +9,7 @@ tags: - MagazineRifle - type: Item - size: 5 + size: Small - type: BallisticAmmoProvider mayTransfer: true whitelist: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/shotgun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/shotgun.yml index b78825f3e14..cbe9bbfbe97 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/shotgun.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/shotgun.yml @@ -16,7 +16,7 @@ soundRack: path: /Audio/Weapons/Guns/Cock/smg_cock.ogg - type: Item - size: 5 + size: Small - type: ContainerContainer containers: ballistic-ammo: !type:Container diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml index 56d420cb33c..86da8e6662c 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml @@ -10,7 +10,7 @@ tags: - CartridgeRocket - type: Item - size: 5 + size: Small - type: CartridgeAmmo proto: BulletRocket deleteOnSpawn: true @@ -30,7 +30,7 @@ tags: - CartridgeRocket - type: Item - size: 5 + size: Small - type: CartridgeAmmo proto: BulletWeakRocket deleteOnSpawn: true @@ -52,7 +52,7 @@ tags: - Grenade - type: Item - size: 5 + size: Small - type: Sprite - type: entity diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml index 041cf446c11..f85e93b893f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_pka.yml @@ -7,7 +7,7 @@ sprite: Objects/Weapons/Guns/Basic/kinetic_accelerator.rsi - type: Item sprite: Objects/Weapons/Guns/Basic/kinetic_accelerator.rsi - size: 30 + size: Normal - type: GunWieldBonus minAngle: -43 maxAngle: -43 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_staff.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_staff.yml index 76bd0b9e750..9cab4cac25a 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_staff.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_staff.yml @@ -7,7 +7,7 @@ sprite: Objects/Weapons/Guns/Basic/staves.rsi - type: Item heldPrefix: staff - size: 60 + size: Normal - type: Gun fireRate: 1 selectedMode: SemiAuto diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_wand.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_wand.yml index 3b97eac8ee9..c4a937ee2cd 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_wand.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/base_wand.yml @@ -7,7 +7,7 @@ sprite: Objects/Weapons/Guns/Basic/wands.rsi - type: Item heldPrefix: wand - size: 30 + size: Normal - type: Gun fireRate: 0.5 selectedMode: SemiAuto diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/spraynozzle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/spraynozzle.yml index d4d00252f51..f2e93a607ec 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/spraynozzle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/spraynozzle.yml @@ -9,7 +9,7 @@ state: icon - type: Item sprite: Objects/Weapons/Guns/Basic/spraynozzle.rsi - size: 30 + size: Normal - type: Gun cameraRecoilScalar: 0 #no recoil fireRate: 4 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/watergun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/watergun.yml index a815f9c0cd1..e925bdab876 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/watergun.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Basic/watergun.yml @@ -10,7 +10,7 @@ slots: BELT - type: Item sprite: Objects/Weapons/Guns/Pistols/water_pistol.rsi - size: 10 + size: Small - type: Gun clumsyProof: true cameraRecoilScalar: 0 #no recoil @@ -95,7 +95,7 @@ map: [ "enum.DamageStateVisualLayers.Base" ] - type: Item sprite: Objects/Weapons/Guns/Pistols/soaker.rsi - size: 35 + size: Normal - type: RandomSprite getAllGroups: true available: @@ -132,7 +132,7 @@ map: [ "enum.DamageStateVisualLayers.Base" ] - type: Item sprite: Objects/Weapons/Guns/Pistols/soaker.rsi - size: 35 + size: Normal - type: RandomSprite getAllGroups: true available: 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 38875ee9a75..b4d3ce5b914 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml @@ -5,7 +5,7 @@ components: - type: Sprite - type: Item - size: 50 + size: Huge - type: Clothing sprite: Objects/Weapons/Guns/Battery/laser_retro.rsi quickEquip: false @@ -31,13 +31,48 @@ - type: StaticPrice price: 500 +- type: entity + id: BaseWeaponPowerCell + parent: BaseItem + abstract: true + components: + - type: Sprite + - type: Item + size: Huge + - type: AmmoCounter + - type: Gun + fireRate: 2 + selectedMode: SemiAuto + availableModes: + - SemiAuto + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/laser.ogg + - type: MagazineAmmoProvider + - type: ItemSlots + slots: + gun_magazine: + name: Magazine + startingItem: PowerCellSmall + insertSound: /Audio/Weapons/Guns/MagIn/batrifle_magin.ogg + ejectSound: /Audio/Weapons/Guns/MagOut/batrifle_magout.ogg + whitelist: + tags: + - PowerCell + - PowerCellSmall + - type: Appearance + - type: StaticPrice + price: 500 + - type: ContainerContainer + containers: + gun_magazine: !type:ContainerSlot + - type: entity id: BaseWeaponBatterySmall parent: BaseWeaponBattery abstract: true components: - type: Item - size: 10 + size: Small - type: Tag tags: - Sidearm @@ -47,6 +82,43 @@ slots: - Belt +- type: entity + id: BaseWeaponPowerCellSmall + parent: BaseWeaponPowerCell + abstract: true + components: + - type: Item + size: Small + - type: Tag + tags: + - Sidearm + - type: Clothing + sprite: Objects/Weapons/Guns/Battery/taser.rsi + quickEquip: false + slots: + - Belt + +- type: entity + name: svalinn laser pistol + parent: BaseWeaponPowerCellSmall + id: WeaponLaserSvalinn + description: A cheap and widely used laser pistol. + components: + - type: Sprite + sprite: Objects/Weapons/Guns/Battery/svalinn.rsi + layers: + - state: base + map: ["enum.GunVisualLayers.Base"] + - state: mag-unshaded-4 + map: ["enum.GunVisualLayers.MagUnshaded"] + shader: unshaded + - type: Item + sprite: Objects/Weapons/Guns/Battery/svalinn.rsi + - type: MagazineVisuals + magState: mag + steps: 5 + zeroVisible: true + - type: entity name: retro laser blaster parent: BaseWeaponBatterySmall @@ -408,7 +480,7 @@ description: An experimental high-energy laser pistol with a self-charging nuclear battery. components: - type: Item - size: 30 # Intentionally larger than other pistols + size: Normal # Intentionally larger than other pistols - type: Sprite sprite: Objects/Weapons/Guns/Battery/advancedlasergun.rsi layers: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Bow/bow.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Bow/bow.yml index 88640f7812f..4b7125f571f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Bow/bow.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Bow/bow.yml @@ -8,7 +8,7 @@ - type: Sprite sprite: Objects/Weapons/Guns/Bow/bow.rsi - type: Item - size: 60 + size: Normal - type: Clothing quickEquip: false slots: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/HMGs/hmgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/HMGs/hmgs.yml index 785b36cc620..9d685e1ddc0 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/HMGs/hmgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/HMGs/hmgs.yml @@ -7,6 +7,7 @@ components: - type: Sprite - type: Item + size: Ginormous - type: Gun fireRate: 20 selectedMode: FullAuto @@ -33,7 +34,6 @@ map: ["enum.GunVisualLayers.Base"] - type: Item sprite: Objects/Weapons/Guns/HMGs/minigun.rsi - size: 90 - type: Gun fireRate: 15 soundGunshot: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml index 62142519bfa..729f06389fb 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml @@ -7,7 +7,7 @@ components: - type: Sprite - type: Item - size: 60 + size: Huge - type: Clothing sprite: Objects/Weapons/Guns/LMGs/l6.rsi quickEquip: false diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml index 3796ac92b89..371e89d4cfc 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml @@ -12,7 +12,7 @@ slots: - Back - type: Item - size: 60 + size: Huge - type: StaticPrice price: 500 - type: ContainerContainer diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml index 4a3d428de76..31698f16ef4 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml @@ -12,7 +12,7 @@ - state: mag-0 map: ["enum.GunVisualLayers.Mag"] - type: Item - size: 10 + size: Small - type: Tag tags: - Sidearm diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/arrows.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/arrows.yml index 32a2ea4623f..8dbcf2b3033 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/arrows.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/arrows.yml @@ -4,7 +4,7 @@ abstract: true components: - type: Item - size: 10 + size: Small - type: Sprite sprite: Objects/Weapons/Guns/Projectiles/arrows.rsi - type: Fixtures diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml index 1851dcddf6b..c523fd27979 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml @@ -8,7 +8,7 @@ - type: Sprite state: icon - type: Item - size: 10 + size: Small - type: Tag tags: - Sidearm @@ -122,7 +122,7 @@ params: volume: 2.25 -- type: entity +- type: entity name: Python parent: WeaponRevolverPython id: WeaponRevolverPythonAP # For the uplink. @@ -155,4 +155,4 @@ - type: RevolverAmmoProvider capacity: 5 chambers: [ True, True, True, True, True ] - ammoSlots: [ null, null, null, null, null ] \ No newline at end of file + ammoSlots: [ null, null, null, null, null ] diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml index fdec3216878..5bc8125ebaa 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml @@ -7,7 +7,7 @@ components: - type: Sprite - type: Item - size: 50 + size: Huge - type: Clothing sprite: Objects/Weapons/Guns/Rifles/ak.rsi quickEquip: false diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml index e423c098412..b693bdba370 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml @@ -7,7 +7,7 @@ components: - type: Sprite - type: Item - size: 30 + size: Large - type: Clothing sprite: Objects/Weapons/Guns/SMGs/atreides.rsi quickEquip: false diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml index a95eec59e60..a8d9f539917 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml @@ -11,7 +11,7 @@ map: [ "enum.GunVisualLayers.Base" ] - type: Item # If you update this also update the bulldog's size. - size: 30 + size: Large - type: Clothing sprite: DeltaV/Objects/Weapons/Guns/Shotguns/db_shotgun.rsi # Delta-V quickEquip: false @@ -58,7 +58,7 @@ - state: mag-0 map: ["enum.GunVisualLayers.Mag"] - type: Item - size: 30 + size: Large - type: Clothing sprite: Objects/Weapons/Guns/Shotguns/bulldog.rsi quickEquip: false @@ -107,6 +107,12 @@ components: - type: Sprite sprite: DeltaV/Objects/Weapons/Guns/Shotguns/db_shotgun.rsi # Delta-V + - type: Item + size: Normal + shape: + - 0,0,4,0 + sprite: Objects/Weapons/Guns/Shotguns/inhands_64x.rsi + heldPrefix: db - type: Gun fireRate: 2 - type: BallisticAmmoProvider @@ -137,7 +143,7 @@ - type: Clothing sprite: DeltaV/Objects/Weapons/Guns/Shotguns/enforcer.rsi # Delta-V - type: BallisticAmmoProvider - + - type: entity parent: WeaponShotgunEnforcer id: WeaponShotgunEnforcerRubber @@ -145,13 +151,19 @@ components: - type: BallisticAmmoProvider proto: ShellShotgunBeanbag - + - type: entity name: Kammerer parent: BaseWeaponShotgun id: WeaponShotgunKammerer description: When an old Remington design meets modern materials, this is the result. A favourite weapon of militia forces throughout many worlds. Uses .50 shotgun shells. components: + - type: Item + size: Normal + shape: + - 0,0,4,0 + sprite: Objects/Weapons/Guns/Shotguns/inhands_64x.rsi + heldPrefix: pump - type: Sprite sprite: DeltaV/Objects/Weapons/Guns/Shotguns/pump.rsi # Delta-V - type: Clothing @@ -173,7 +185,9 @@ - type: Clothing sprite: DeltaV/Objects/Weapons/Guns/Shotguns/sawn.rsi # Delta-V - type: Item - size: 10 + size: Small + sprite: Objects/Weapons/Guns/Shotguns/inhands_64x.rsi + heldPrefix: sawn - type: Gun fireRate: 4 - type: BallisticAmmoProvider @@ -203,12 +217,13 @@ id: WeaponShotgunHandmade description: Looks unreliable. Uses .50 shotgun shells. components: + - type: Item + size: Small + storedRotation: 90 - type: Sprite sprite: Objects/Weapons/Guns/Shotguns/hm_pistol.rsi - type: Clothing sprite: Objects/Weapons/Guns/Shotguns/hm_pistol.rsi - - type: Item - size: 10 - type: Gun fireRate: 4 - type: BallisticAmmoProvider @@ -227,6 +242,10 @@ suffix: Pirate description: Deadly at close range. components: + - type: Item + size: Normal + shape: + - 0,0,4,0 - type: Sprite sprite: Objects/Weapons/Guns/Shotguns/blunderbuss.rsi - type: Gun @@ -247,7 +266,11 @@ - type: Clothing sprite: DeltaV/Objects/Weapons/Guns/Shotguns/improvised_shotgun.rsi # Delta-V - type: Item - size: 75 + size: Normal + shape: + - 0,0,4,0 + sprite: Objects/Weapons/Guns/Shotguns/inhands_64x.rsi + heldPrefix: improvised - type: Gun fireRate: 4 #No reason to stifle the firerate since you have to manually reload every time anyways. - type: BallisticAmmoProvider diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml index ccec3c4d683..be1ca7b2728 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml @@ -10,7 +10,7 @@ - state: base map: ["enum.GunVisualLayers.Base"] - type: Item - size: 50 + size: Huge - type: Clothing sprite: Objects/Weapons/Guns/Snipers/bolt_gun_wood.rsi quickEquip: false @@ -69,6 +69,8 @@ id: Musket description: This should've been in a museum long before you were born. Uses .60 anti-materiel ammo. components: + - type: Item + size: Large - type: Sprite sprite: Objects/Weapons/Guns/Snipers/musket.rsi - type: Clothing @@ -90,6 +92,9 @@ id: WeaponPistolFlintlock description: A pirate's companion. Yarrr! Uses .60 anti-materiel ammo. components: + - type: Item + size: Small + storedRotation: 90 - type: Sprite sprite: Objects/Weapons/Guns/Snipers/flintlock.rsi - type: Clothing diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/flare_gun.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/flare_gun.yml index d4577930359..810a36105bd 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/flare_gun.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/flare_gun.yml @@ -10,7 +10,7 @@ - state: icon map: ["enum.GunVisualLayers.Base"] - type: Item - size: 10 + size: Small sprite: Objects/Weapons/Guns/Shotguns/flaregun.rsi - type: Gun fireRate: 8 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml index 9f3aec5c39b..ae1f5df3c15 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml @@ -12,7 +12,7 @@ map: [ "tank" ] visible: false - type: Item - size: 50 + size: Huge - type: Clothing quickEquip: false slots: @@ -32,7 +32,9 @@ container: storagebase - type: PneumaticCannon - type: Storage - capacity: 30 + maxItemSize: Normal + grid: + - 0,0,3,3 blacklist: tags: - CannonRestrict @@ -75,10 +77,12 @@ layers: - state: piecannon - type: Storage + maxItemSize: Normal + grid: + - 0,0,7,3 whitelist: components: - CreamPie - capacity: 40 - type: Gun fireRate: 1 selectedMode: SemiAuto @@ -93,7 +97,7 @@ - type: ContainerAmmoProvider container: storagebase - type: Item - size: 50 + size: Normal - type: Clothing sprite: Objects/Weapons/Guns/Cannons/pie_cannon.rsi quickEquip: false @@ -120,9 +124,13 @@ suffix: Admeme components: - type: Item - size: 9999 + size: Ginormous - type: Storage - capacity: 9999 + maxItemSize: Ginormous + grid: + - 0,0,19,10 + whitelist: + tags: [] #dodging a test fail like the IRS - type: PneumaticCannon gasUsage: 0 throwItems: false diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/armblade.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/armblade.yml index 9e9288c8d4a..497876f3596 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/armblade.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/armblade.yml @@ -16,7 +16,7 @@ Slash: 25 Piercing: 15 - type: Item - size: 15 + size: Normal sprite: Objects/Weapons/Melee/armblade.rsi - type: Tool qualities: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml index d33f5ce38d0..a02efc13f55 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/baseball_bat.yml @@ -20,7 +20,7 @@ Blunt: 5 Structural: 10 - type: Item - size: 80 + size: Normal - type: Tool qualities: - Rolling diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/chainsaw.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/chainsaw.yml index 7bd199f3523..dcead72ce64 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/chainsaw.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/chainsaw.yml @@ -30,7 +30,7 @@ Slash: 10 Structural: 10 - type: Item - size: 50 + size: Normal sprite: Objects/Weapons/Melee/chainsaw.rsi - type: DisarmMalus - type: RefillableSolution diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml index 89c67ca6bc4..db24d3e2cd0 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/cult.yml @@ -15,7 +15,7 @@ types: Slash: 12 - type: Item - size: 20 + size: Normal - type: Clothing sprite: Objects/Weapons/Melee/cult_dagger.rsi slots: @@ -39,7 +39,7 @@ types: Slash: 16 - type: Item - size: 20 + size: Normal - type: Clothing sprite: Objects/Weapons/Melee/cult_blade.rsi slots: @@ -75,7 +75,7 @@ Slash: 5 Structural: 10 - type: Item - size: 150 + size: Ginormous - type: Clothing sprite: Objects/Weapons/Melee/cult_halberd.rsi quickEquip: false diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml index b9f92512011..b67e5d5d108 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml @@ -30,7 +30,7 @@ types: Blunt: 4.5 - type: Item - size: 5 + size: Small sprite: DeltaV/Objects/Weapons/Melee/e_sword.rsi # Delta-V - type: UseDelay delay: 1.0 @@ -95,7 +95,7 @@ types: Blunt: 1 - type: Item - size: 2 + size: Tiny sprite: Objects/Weapons/Melee/e_dagger.rsi - type: UseDelay delay: 1.0 @@ -128,6 +128,8 @@ suffix: E-Dagger description: A small box containing an e-dagger. Packaging disintegrates when opened, leaving no evidence behind. components: + - type: Item + size: Tiny - type: Sprite sprite: Objects/Storage/penbox.rsi state: e_dagger @@ -168,8 +170,8 @@ types: Blunt: 6 - type: Item - size: 5 - sprite: Objects/Weapons/Melee/e_cutlass.rsi + size: Small + sprite: DeltaV/Objects/Weapons/Melee/e_cutlass.rsi #DeltaV - type: ToggleableLightVisuals spriteLayer: blade inhandVisuals: @@ -214,14 +216,14 @@ shader: unshaded map: [ "blade" ] - type: Item - size: 10 + size: Small sprite: Objects/Weapons/Melee/e_sword_double-inhands.rsi - type: Reflect enabled: true reflectProb: .80 #DeltaV: 80% Energy Reflection but no ballistics. spread: 75 - reflects: - - Energy #DeltaV: 80% Energy Reflection but no ballistics. + reflects: + - Energy #DeltaV: 80% Energy Reflection but no ballistics. - type: UseDelay delay: 1 - type: ToggleableLightVisuals diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml index 0daa9443d34..1a96d7d17b5 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/fireaxe.yml @@ -28,7 +28,7 @@ Slash: 10 Structural: 40 - type: Item - size: 150 + size: Ginormous - type: Clothing sprite: Objects/Weapons/Melee/fireaxe.rsi quickEquip: false diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/gohei.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/gohei.yml index d2bae624229..2380e19d79f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/gohei.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/gohei.yml @@ -13,5 +13,5 @@ types: Blunt: 0 - type: Item - size: 12 + size: Small sprite: Objects/Weapons/Melee/gohei.rsi diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml index 3f18e2cf50f..2bb1cfdd2ba 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml @@ -20,6 +20,7 @@ path: /Audio/Weapons/bladeslice.ogg - type: Sprite - type: Item + size: Small - type: Tool qualities: - Slicing @@ -37,10 +38,8 @@ - Knife - type: Sprite sprite: Objects/Weapons/Melee/kitchen_knife.rsi - size: 2 state: icon - type: Item - size: 10 sprite: Objects/Weapons/Melee/kitchen_knife.rsi - type: GuideHelp guides: @@ -57,7 +56,6 @@ - Knife - type: Sprite sprite: Objects/Weapons/Melee/cleaver.rsi - size: 4 state: butch - type: MeleeWeapon wideAnimationRotation: -135 @@ -66,7 +64,7 @@ types: Slash: 13 - type: Item - size: 10 + size: Normal sprite: Objects/Weapons/Melee/cleaver.rsi - type: GuideHelp guides: @@ -84,7 +82,6 @@ - Knife - type: Sprite sprite: Objects/Weapons/Melee/combat_knife.rsi - size: 2 state: icon - type: MeleeWeapon wideAnimationRotation: -135 @@ -99,7 +96,6 @@ types: Slash: 10 - type: Item - size: 10 sprite: Objects/Weapons/Melee/combat_knife.rsi - type: DisarmMalus malus: 0.225 @@ -112,10 +108,8 @@ components: - type: Sprite sprite: Objects/Weapons/Melee/survival_knife.rsi - size: 2 state: icon - type: Item - size: 10 sprite: Objects/Weapons/Melee/survival_knife.rsi - type: entity @@ -126,7 +120,6 @@ components: - type: Sprite sprite: Objects/Weapons/Melee/kukri_knife.rsi - size: 2 state: icon - type: MeleeWeapon attackRate: 1.0 @@ -134,7 +127,6 @@ types: Slash: 15 - type: Item - size: 10 sprite: Objects/Weapons/Melee/kukri_knife.rsi - type: entity @@ -153,7 +145,6 @@ node: icon - type: Sprite sprite: Objects/Weapons/Melee/shiv.rsi - size: 2 state: icon - type: MeleeWeapon attackRate: 1.5 @@ -161,7 +152,6 @@ types: Slash: 5.5 - type: Item - size: 4 #as much as a regular glass shard sprite: Objects/Weapons/Melee/shiv.rsi - type: DisarmMalus malus: 0.225 @@ -175,8 +165,6 @@ - type: Construction graph: ReinforcedShiv node: icon - size: 2 - state: icon - type: MeleeWeapon attackRate: 1.5 damage: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml index af9a9587172..33ff95bf3a6 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/mining.yml @@ -57,7 +57,7 @@ Structural: 10 - type: GunRequiresWield - type: Item - size: 150 + size: Ginormous - type: DisarmMalus - type: Tool qualities: @@ -79,8 +79,6 @@ damage: types: Slash: 12 - - type: Item - size: 10 - type: Tag tags: - Knife @@ -102,8 +100,6 @@ Brute: -15 - type: MeleeWeapon attackRate: 1.25 - - type: Item - size: 150 - type: Tag tags: - Pickaxe diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/needle.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/needle.yml index 48b2d6ad2b8..11efeba5f8c 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/needle.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/needle.yml @@ -13,5 +13,5 @@ types: Piercing: 1 - type: Item - size: 1 + size: Tiny - type: BalloonPopper diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml index 9e5830b9a0a..ec6520db71e 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/pickaxe.yml @@ -24,7 +24,10 @@ types: Structural: 25 - type: Item - size: 80 + size: Normal + shape: + - 0,0,2,0 + - 1,1,1,2 sprite: Objects/Weapons/Melee/pickaxe.rsi - type: UseDelay delay: 1 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml index b8703f5ae04..51025f16456 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml @@ -19,4 +19,4 @@ Blunt: 10 Structural: 10 - type: Item - size: 80 + size: Large diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml index a6b70ff9b60..e704fc90a4f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/spear.yml @@ -47,7 +47,7 @@ types: Piercing: 15 - type: Item - size: 95 + size: Ginormous - type: Clothing quickEquip: false slots: diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml index 25c9cf61257..b43ea5059c4 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/stunprod.yml @@ -26,7 +26,7 @@ - type: ItemCooldown - type: Item heldPrefix: off - size: 100 + size: Huge - type: Clothing sprite: Objects/Weapons/Melee/stunprod.rsi quickEquip: false diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml index 01cf611550e..7b17b7ad3ec 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml @@ -21,7 +21,7 @@ reflectProb: .5 spread: 90 - type: Item - size: 15 + size: Normal sprite: Objects/Weapons/Melee/captain_sabre.rsi - type: Tag tags: @@ -49,7 +49,7 @@ soundHit: path: /Audio/Weapons/bladeslice.ogg - type: Item - size: 15 + size: Normal sprite: DeltaV/Objects/Weapons/Melee/katana.rsi #DeltaV - type: DisarmMalus @@ -68,7 +68,7 @@ types: Slash: 30 - type: Item - size: 15 + size: Normal sprite: Objects/Weapons/Melee/energykatana.rsi - type: EnergyKatana - type: DashAbility @@ -105,7 +105,7 @@ soundHit: path: /Audio/Weapons/bladeslice.ogg - type: Item - size: 15 + size: Normal sprite: Objects/Weapons/Melee/machete.rsi - type: DisarmMalus @@ -128,7 +128,7 @@ soundHit: path: /Audio/Weapons/bladeslice.ogg - type: Item - size: 20 + size: Normal - type: Clothing sprite: Objects/Weapons/Melee/claymore.rsi slots: @@ -156,6 +156,6 @@ soundHit: path: /Audio/Weapons/bladeslice.ogg - type: Item - size: 15 + size: Normal sprite: Objects/Weapons/Melee/cutlass.rsi - type: DisarmMalus diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/weapon_toolbox.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/weapon_toolbox.yml index b5f85903044..36259ddcc22 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/weapon_toolbox.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/weapon_toolbox.yml @@ -9,7 +9,7 @@ sprite: Objects/Tools/Toolboxes/toolbox_red.rsi state: icon - type: Item - size: 150 + size: Ginormous sprite: Objects/Tools/Toolboxes/toolbox_red.rsi - type: MeleeWeapon wideAnimationRotation: -135 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml b/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml index be6f66d2585..6b24c96e309 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Melee/white_cane.yml @@ -8,7 +8,7 @@ sprite: Objects/Weapons/Melee/white_cane.rsi state: icon - type: Item - size: 15 + size: Normal sprite: Objects/Weapons/Melee/white_cane.rsi - type: MeleeWeapon wideAnimationRotation: 45 diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml index ebd568c3b8f..54ee2d90a50 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/bola.yml @@ -5,7 +5,7 @@ description: Linked together with some spare cuffs and metal. components: - type: Item - size: 20 + size: Normal - type: Sprite sprite: Objects/Weapons/Throwable/bola.rsi state: icon diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml index 0f749e72a0e..a3727351ece 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml @@ -9,7 +9,7 @@ - state: icon map: ["enum.TriggerVisualLayers.Base"] - type: Item - size: 5 + size: Small - type: Clothing quickEquip: false slots: @@ -272,7 +272,7 @@ - state: empty map: [ "enum.ConstructionVisuals.Layer" ] - type: Item - size: 8 + size: Small - type: PayloadCase - type: Construction graph: ModularGrenadeGraph diff --git a/Resources/Prototypes/Entities/Objects/Weapons/security.yml b/Resources/Prototypes/Entities/Objects/Weapons/security.yml index 0bfadb06c0d..7a2f65bfb6f 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/security.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/security.yml @@ -31,7 +31,7 @@ - type: ItemCooldown - type: Item heldPrefix: off - size: 20 + size: Normal - type: Clothing sprite: Objects/Weapons/Melee/stunbaton.rsi quickEquip: false @@ -81,7 +81,7 @@ Blunt: 20 bluntStaminaDamageFactor: 1.5 - type: Item - size: 20 + size: Normal - type: Clothing sprite: Objects\Weapons\Melee\truncheon.rsi quickEquip: false @@ -122,7 +122,7 @@ Blunt: 0 # melee weapon to allow flashing individual targets angle: 10 - type: Item - size: 5 + size: Small sprite: Objects/Weapons/Melee/flash.rsi - type: ItemCooldown # - type: DynamicPrice diff --git a/Resources/Prototypes/Entities/Objects/base_item.yml b/Resources/Prototypes/Entities/Objects/base_item.yml index 32325603c1d..bcc8e0dce49 100644 --- a/Resources/Prototypes/Entities/Objects/base_item.yml +++ b/Resources/Prototypes/Entities/Objects/base_item.yml @@ -4,7 +4,7 @@ abstract: true components: - type: Item - size: 5 + size: Small - type: Clickable - type: InteractionOutline - type: MovedByPressure diff --git a/Resources/Prototypes/Entities/Structures/Furniture/bookshelf.yml b/Resources/Prototypes/Entities/Structures/Furniture/bookshelf.yml index 9f1de3ff39d..c638fac2075 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/bookshelf.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/bookshelf.yml @@ -47,7 +47,9 @@ - type: Pullable - type: Occluder - type: Storage - capacity: 200 + grid: + - 0,0,15,3 + maxItemSize: Normal whitelist: tags: - Document diff --git a/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml b/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml index b1684bb3c32..058fae24dc7 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/chairs.yml @@ -314,7 +314,7 @@ map: ["foldedLayer"] visible: false - type: Item - size: 50 + size: Huge - type: Appearance - type: MeleeWeapon damage: @@ -348,4 +348,4 @@ - type: Rotatable - type: Sprite state: steel-bench - + diff --git a/Resources/Prototypes/Entities/Structures/Furniture/dresser.yml b/Resources/Prototypes/Entities/Structures/Furniture/dresser.yml index da2b82270f7..e3629fcf07f 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/dresser.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/dresser.yml @@ -25,7 +25,9 @@ - !type:DoActsBehavior acts: [ "Destruction" ] - type: Storage - capacity: 50 + grid: + - 0,0,5,3 + maxItemSize: Normal - type: ContainerContainer containers: storagebase: !type:Container @@ -67,7 +69,7 @@ - id: ClothingUniformJumpskirtColorPink prob: 0.05 - id: ClothingUniformJumpsuitLoungewear - prob: 0.05 + prob: 0.05 orGroup: dressermainloot - id: Pen # It`s pen. prob: 0.03 @@ -97,7 +99,7 @@ prob: 0.03 orGroup: dressermainloot - id: ClothingUniformJumpsuitColorRed - prob: 0.03 + prob: 0.03 orGroup: dressermainloot - id: ClothingUniformJumpskirtColorRed prob: 0.03 @@ -184,7 +186,7 @@ prob: 0.03 orGroup: dresserthirdloot - id: ClothingUnderSocksCoder - prob: 0.03 + prob: 0.03 orGroup: dressermainloot - id: ClothingUnderSocksBee prob: 0.03 @@ -224,7 +226,7 @@ orGroup: dresserthirdloot - id: PlushieLizard prob: 0.03 - orGroup: dresserthirdloot + orGroup: dresserthirdloot - id: ClothingOuterSuitShrineMaiden prob: 0.03 orGroup: dressersecondloot @@ -423,7 +425,7 @@ - id: BrokenBottle prob: 0.001 orGroup: dressersecondloot - - id: FoodMeatRotten + - id: FoodMeatRotten prob: 0.001 orGroup: dressersecondloot - id: ClothingOuterSkub diff --git a/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml b/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml index 695a529734f..406ff7fa48e 100644 --- a/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml +++ b/Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml @@ -7,7 +7,7 @@ - type: Transform noRot: true - type: Item - size: 25 + size: Normal - type: Sprite sprite: Structures/Furniture/rollerbeds.rsi noRot: true diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 65492628e38..2014ec0d283 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -276,6 +276,8 @@ - WeaponCrusherDagger - WeaponCrusherGlaive #- WeaponForceGun + - WeaponCrusherGlaive + - WeaponLaserSvalinn - WeaponProtoKineticAccelerator #- WeaponTetherGun #- WeaponGrapplingGun @@ -627,17 +629,13 @@ - MagazineBoxMagnumIncendiary - MagazineBoxPistolIncendiary - MagazineBoxRifleIncendiary - - CartridgeSpecialHoly # DeltaV - .38 Special revolver, Holy ammo - - CartridgeSpecialMindbreaker # DeltaV - .38 Special revolver, Mindbreaker ammo - - ShellSoulbreaker # Nyanotrasen - Shotgun shell to get rid of psionics - - MagazineBoxLightRiflePractice - - MagazineBoxMagnumPractice - - MagazineBoxPistolPractice - - MagazineBoxRiflePractice - MagazineBoxLightRifleUranium - MagazineBoxMagnumUranium - MagazineBoxPistolUranium - MagazineBoxRifleUranium + - CartridgeSpecialHoly # DeltaV - .38 Special revolver, Holy ammo + - CartridgeSpecialMindbreaker # DeltaV - .38 Special revolver, Mindbreaker ammo + - ShellSoulbreaker # Nyanotrasen - Shotgun shell to get rid of psionics - MagazineBoxLightRifleRubber - MagazineBoxMagnumRubber - MagazineBoxPistolRubber @@ -654,7 +652,6 @@ - WeaponAdvancedLaser - WeaponLaserCannon - WeaponLaserCarbine - - WeaponLaserCarbinePractice - ClothingHeadHelmetInsulated # Nyanotrasen - Insulative headgear - ClothingHeadCage # Nyanotrasen - Insulative headgear - ShockCollar # Nyanotrasen - Shock Collar diff --git a/Resources/Prototypes/Entities/Structures/Machines/recycler.yml b/Resources/Prototypes/Entities/Structures/Machines/recycler.yml index 4cb2cc92d72..814852125a0 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/recycler.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/recycler.yml @@ -111,3 +111,9 @@ - type: MaterialStorage - type: Conveyor - type: Rotatable + - type: InteractionPopup + successChance: 1.0 + interactSuccessString: petting-success-recycler + interactFailureString: petting-failure-generic + interactSuccessSound: + path: /Audio/Items/drill_hit.ogg diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/pipes.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/pipes.yml index c31a607eaef..1441d6f3082 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/pipes.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/pipes.yml @@ -8,7 +8,7 @@ mode: SnapgridCenter components: - type: Item - size: 10 + size: Normal - type: Transform anchored: true - type: Damageable diff --git a/Resources/Prototypes/Entities/Structures/Specific/Anomaly/cores.yml b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/cores.yml index c98b81a116e..1ee52646ecc 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/Anomaly/cores.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/Anomaly/cores.yml @@ -19,11 +19,11 @@ True: { visible: true } False: { visible: false } - type: Item - size: 10 + size: Normal - type: ItemCooldown - type: EmitSoundOnUse #placeholder for future unical mechanic sound: - collection: RadiationPulse + collection: RadiationPulse - type: UseDelay delay: 2 - type: AnomalyCore @@ -248,4 +248,4 @@ radius: 1.5 energy: 2.0 color: "#ffffaa" - castShadows: false \ No newline at end of file + castShadows: false diff --git a/Resources/Prototypes/Entities/Structures/Specific/Atmospherics/sensor.yml b/Resources/Prototypes/Entities/Structures/Specific/Atmospherics/sensor.yml index f70da759f5b..34ae4d946fa 100644 --- a/Resources/Prototypes/Entities/Structures/Specific/Atmospherics/sensor.yml +++ b/Resources/Prototypes/Entities/Structures/Specific/Atmospherics/sensor.yml @@ -87,7 +87,7 @@ description: Air sensor assembly. An assembly of air sensors? components: - type: Item - size: 10 + size: Small - type: Anchorable - type: Construction graph: AirSensor diff --git a/Resources/Prototypes/Entities/Structures/Storage/filing_cabinets.yml b/Resources/Prototypes/Entities/Structures/Storage/filing_cabinets.yml index b79921815b6..df25ed52387 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/filing_cabinets.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/filing_cabinets.yml @@ -6,7 +6,9 @@ description: A cabinet for all your filing needs. components: - type: Storage - capacity: 80 + grid: + - 0,0,9,3 + maxItemSize: Normal whitelist: tags: - Document @@ -65,7 +67,9 @@ description: A small drawer for all your filing needs, Now with wheels! components: - type: Storage - capacity: 50 + grid: + - 0,0,7,2 + maxItemSize: Normal whitelist: tags: - Document diff --git a/Resources/Prototypes/Entities/Structures/Storage/ore_box.yml b/Resources/Prototypes/Entities/Structures/Storage/ore_box.yml index 7099e1b45d3..961d7854c08 100644 --- a/Resources/Prototypes/Entities/Structures/Storage/ore_box.yml +++ b/Resources/Prototypes/Entities/Structures/Storage/ore_box.yml @@ -50,7 +50,9 @@ True: { visible: false } False: { visible: true } - type: Storage - capacity: 525 + grid: + - 0,0,9,5 + maxItemSize: Normal storageOpenSound: /Audio/Effects/closetopen.ogg storageCloseSound: /Audio/Effects/closetclose.ogg whitelist: diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/noticeboard.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/noticeboard.yml index 773e1d04e19..bad84227c85 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/noticeboard.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/noticeboard.yml @@ -38,7 +38,9 @@ - !type:DoActsBehavior acts: ["Destruction"] - type: Storage - capacity: 10 + grid: + - 0,0,4,3 + maxItemSize: Small whitelist: tags: - Folder diff --git a/Resources/Prototypes/InventoryTemplates/arachnid_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/arachnid_inventory_template.yml index b41fc3a0ef7..771f2716033 100644 --- a/Resources/Prototypes/InventoryTemplates/arachnid_inventory_template.yml +++ b/Resources/Prototypes/InventoryTemplates/arachnid_inventory_template.yml @@ -103,11 +103,9 @@ uiWindowPos: 0,4 strippingWindowPos: 0,5 displayName: Pocket 3 - - name: outerClothing slotTexture: suit slotFlags: OUTERCLOTHING - slotGroup: SecondHotbar stripTime: 6 uiWindowPos: 1,2 strippingWindowPos: 1,2 @@ -132,3 +130,12 @@ dependsOn: jumpsuit displayName: Pocket 2 stripHidden: true + - name: suitstorage + slotTexture: suit_storage + slotFlags: SUITSTORAGE + slotGroup: MainHotbar + stripTime: 3 + uiWindowPos: 2,0 + strippingWindowPos: 2,5 + dependsOn: outerClothing + displayName: Suit Storage diff --git a/Resources/Prototypes/InventoryTemplates/corpse_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/corpse_inventory_template.yml index e980a14bbbb..227624c690f 100644 --- a/Resources/Prototypes/InventoryTemplates/corpse_inventory_template.yml +++ b/Resources/Prototypes/InventoryTemplates/corpse_inventory_template.yml @@ -18,7 +18,6 @@ - name: outerClothing slotTexture: suit slotFlags: OUTERCLOTHING - slotGroup: MainHotbar stripTime: 6 uiWindowPos: 1,2 strippingWindowPos: 1,2 @@ -77,6 +76,7 @@ - name: suitstorage slotTexture: suit_storage slotFlags: SUITSTORAGE + slotGroup: MainHotbar stripTime: 3 uiWindowPos: 2,0 strippingWindowPos: 2,5 diff --git a/Resources/Prototypes/InventoryTemplates/diona_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/diona_inventory_template.yml index e7ce6ccfa13..3fcbd8df6b4 100644 --- a/Resources/Prototypes/InventoryTemplates/diona_inventory_template.yml +++ b/Resources/Prototypes/InventoryTemplates/diona_inventory_template.yml @@ -12,7 +12,6 @@ - name: outerClothing slotTexture: suit slotFlags: OUTERCLOTHING - slotGroup: MainHotbar stripTime: 6 uiWindowPos: 1,2 strippingWindowPos: 1,2 @@ -78,6 +77,7 @@ - name: suitstorage slotTexture: suit_storage slotFlags: SUITSTORAGE + slotGroup: MainHotbar stripTime: 3 uiWindowPos: 2,0 strippingWindowPos: 2,5 diff --git a/Resources/Prototypes/InventoryTemplates/human_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/human_inventory_template.yml index 3c7df3cc57c..aaf22ac34c5 100644 --- a/Resources/Prototypes/InventoryTemplates/human_inventory_template.yml +++ b/Resources/Prototypes/InventoryTemplates/human_inventory_template.yml @@ -18,7 +18,6 @@ - name: outerClothing slotTexture: suit slotFlags: OUTERCLOTHING - slotGroup: MainHotbar stripTime: 6 uiWindowPos: 1,2 strippingWindowPos: 1,2 @@ -84,6 +83,7 @@ - name: suitstorage slotTexture: suit_storage slotFlags: SUITSTORAGE + slotGroup: MainHotbar stripTime: 3 uiWindowPos: 2,0 strippingWindowPos: 2,5 diff --git a/Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml b/Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml index d6b53d07726..121648ebabb 100644 --- a/Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml +++ b/Resources/Prototypes/InventoryTemplates/monkey_inventory_template.yml @@ -4,14 +4,12 @@ - name: head slotTexture: head slotFlags: HEAD - slotGroup: MainHotbar uiWindowPos: 0,0 strippingWindowPos: 0,0 displayName: Head - name: ears slotTexture: ears slotFlags: EARS - slotGroup: MainHotbar stripTime: 3 uiWindowPos: 1,2 strippingWindowPos: 1,2 @@ -47,6 +45,7 @@ - name: suitstorage slotTexture: suit_storage slotFlags: SUITSTORAGE + slotGroup: MainHotbar stripTime: 3 uiWindowPos: 2,0 strippingWindowPos: 2,5 @@ -55,7 +54,6 @@ - name: outerClothing slotTexture: suit slotFlags: OUTERCLOTHING - slotGroup: MainHotbar stripTime: 6 uiWindowPos: 1,3 strippingWindowPos: 1,3 diff --git a/Resources/Prototypes/Magic/staves.yml b/Resources/Prototypes/Magic/staves.yml index 4713a838f84..5d894e0f416 100644 --- a/Resources/Prototypes/Magic/staves.yml +++ b/Resources/Prototypes/Magic/staves.yml @@ -17,6 +17,7 @@ actions: - ActionRgbLight - type: Item + size: Normal inhandVisuals: left: - state: staff-inhand-left diff --git a/Resources/Prototypes/Maps/salvage.yml b/Resources/Prototypes/Maps/salvage.yml index a798aa565fb..7d065db15ff 100644 --- a/Resources/Prototypes/Maps/salvage.yml +++ b/Resources/Prototypes/Maps/salvage.yml @@ -105,11 +105,6 @@ name: "Crashed Shuttle" mapPath: /Maps/Salvage/DeltaV/DV-med-crashed-shuttle.yml #DeltaV: DV salvage map Location -- type: salvageMap - id: EngineeringChunk - name: "Engineering Department Chunk" - mapPath: /Maps/Salvage/engineering-chunk.yml - # """Large""" maps #- type: salvageMap #DeltaV: Remove non-salvage testing map from pool @@ -132,7 +127,6 @@ name: "Security Department Chunk" mapPath: /Maps/Salvage/DeltaV/DV-security-chunk.yml #DeltaV: DV salvage map Location - #Nyano Maps #Medium diff --git a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Boxes/ammunition.yml b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Boxes/ammunition.yml index 65f70d8fa80..ceb1f1b152d 100644 --- a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Boxes/ammunition.yml +++ b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Boxes/ammunition.yml @@ -22,6 +22,13 @@ contents: - id: MagazineUniversalMagnum amount: 6 + - type: Storage + maxItemSize: Small + grid: + - 0,0,3,2 + whitelist: + components: + - BallisticAmmoProvider - type: entity name: box of .45 magnum Universal (practice) magazines @@ -33,6 +40,13 @@ contents: - id: MagazineUniversalMagnumPractice amount: 6 + - type: Storage + maxItemSize: Small + grid: + - 0,0,3,2 + whitelist: + components: + - BallisticAmmoProvider - type: entity name: box of .45 magnum Universal (rubber) magazines @@ -44,6 +58,13 @@ contents: - id: MagazineUniversalMagnumRubber amount: 6 + - type: Storage + maxItemSize: Small + grid: + - 0,0,3,2 + whitelist: + components: + - BallisticAmmoProvider - type: entity name: box of .30 rifle speed loaders @@ -55,3 +76,10 @@ contents: - id: SpeedLoaderLightRifle amount: 6 + - type: Storage + maxItemSize: Small + grid: + - 0,0,3,2 + whitelist: + tags: + - SpeedLoaderRifle diff --git a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Boxes/general.yml b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Boxes/general.yml index 13169ee3796..6f227252cb6 100644 --- a/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Boxes/general.yml +++ b/Resources/Prototypes/Nyanotrasen/Catalog/Fills/Boxes/general.yml @@ -17,7 +17,9 @@ - state: box - state: lighttube - type: Storage - capacity: 60 + maxItemSize: Small + grid: + - 0,0,4,4 whitelist: components: - LightBulb @@ -42,7 +44,9 @@ - state: box - state: light - type: Storage - capacity: 60 + maxItemSize: Small + grid: + - 0,0,4,4 whitelist: components: - LightBulb @@ -56,14 +60,14 @@ id: BoxHolyWater description: This box is filled with everything you need to make homemade holy water. Water not included. components: - - type: StorageFill - contents: - - id: MercuryChemistryBottle - amount: 3 - - id: DrinkWineBottleFull - amount: 1 - - id: SprayBottle - amount: 1 +# - type: StorageFill +# contents: +# - id: MercuryChemistryBottle +# amount: 3 +# - id: DrinkWineBottleFull +# amount: 1 +# - id: SprayBottle +# amount: 1 - type: Sprite layers: - state: box_science diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Belt/belts.yml b/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Belt/belts.yml index 065b127efea..4f2ac846efa 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Belt/belts.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Clothing/Belt/belts.yml @@ -30,7 +30,7 @@ Blunt: 1 Slash: 1 - type: Item - size: 10 + size: Small - type: Sprite sprite: Nyanotrasen/Clothing/Belt/Martial/black.rsi - type: Clothing @@ -48,7 +48,8 @@ - type: Clothing sprite: Nyanotrasen/Clothing/Belt/katanasheath.rsi - type: Storage - capacity: 25 + grid: + - 0,0,3,1 whitelist: tags: - Katana @@ -74,9 +75,11 @@ - type: Clothing sprite: Nyanotrasen/Clothing/Belt/cmowebbing.rsi - type: Item - size: 60 + size: Large - type: Storage - capacity: 40 # Buffed for Velta usage; it's just a drippier chest rig. + maxItemSize: Normal + grid: + - 0,0,6,2 - type: Tag tags: - BeltSlotNotBelt diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/mobs.yml b/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/mobs.yml index 41402d426e4..6bc5c8e878a 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/mobs.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Markers/Spawners/mobs.yml @@ -25,4 +25,4 @@ - type: ConditionalSpawner prototypes: - MobFerret - - MobFerretWhite \ No newline at end of file + - MobFerretWhite diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/NPCs/mutants.yml b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/NPCs/mutants.yml index 011e71842a0..5daf2e15e56 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/NPCs/mutants.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/NPCs/mutants.yml @@ -273,7 +273,7 @@ 40: Critical 80: Dead - type: Item - size: 12 + size: Normal - type: Stamina critThreshold: 80 - type: MeleeWeapon diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Consumable/Drinks/drinks_cups.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Consumable/Drinks/drinks_cups.yml index 10ad6d4be0a..53d1a2d08b8 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Consumable/Drinks/drinks_cups.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Consumable/Drinks/drinks_cups.yml @@ -14,4 +14,4 @@ sprite: Nyanotrasen/Objects/Consumable/Drinks/sakecup.rsi state: icon - type: TrashOnSolutionEmpty - solution: drink \ No newline at end of file + solution: drink diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Consumable/Food/ration.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Consumable/Food/ration.yml index bb452588829..fe37afc3017 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Consumable/Food/ration.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Consumable/Food/ration.yml @@ -20,7 +20,7 @@ sprite: Nyanotrasen/Objects/Consumable/Food/ration.rsi state: psb - type: Item - size: 3 + size: Tiny - type: SpaceGarbage - type: StaticPrice #DynamicPrice price: 0 diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Fun/instruments.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Fun/instruments.yml index 48194b42af0..67978f89fe0 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Fun/instruments.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Fun/instruments.yml @@ -16,7 +16,7 @@ sprite: Nyanotrasen/Objects/Fun/Instruments/rickenbacker.rsi state: icon - type: Item - size: 24 + size: Normal sprite: Nyanotrasen/Objects/Fun/Instruments/rickenbacker.rsi # - type: MeleeStaminaCost # swing: 10 diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Materials/materials.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Materials/materials.yml index ea280e8fef5..75bb4727da2 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Materials/materials.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Materials/materials.yml @@ -27,7 +27,7 @@ - bluespace_3 count: 5 - type: Item - size: 5 + size: Small - type: entity parent: MaterialBluespace @@ -40,8 +40,8 @@ stackType: Bluespace count: 1 - type: Item - size: 1 - + size: Tiny + - type: entity parent: BaseItem id: HideMothroach diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Chapel/amphorae.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Chapel/amphorae.yml index e630e0735cf..10f5d631aa5 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Chapel/amphorae.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Chapel/amphorae.yml @@ -8,7 +8,7 @@ - type: Sprite sprite: Nyanotrasen/Objects/Specific/Chapel/amphorae.rsi - type: Item - size: 10 + size: Small sprite: Nyanotrasen/Objects/Specific/Chapel/amphorae.rsi - type: StaticPrice price: 50 diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Chapel/bibles.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Chapel/bibles.yml index c3a1dfa4362..21a03a1c0e5 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Chapel/bibles.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Chapel/bibles.yml @@ -10,5 +10,5 @@ sprite: Nyanotrasen/Objects/Specific/Chapel/holylight.rsi state: icon - type: Item - size: 15 + size: Small sprite: Nyanotrasen/Objects/Specific/Chapel/holylight.rsi diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/base_mail.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/base_mail.yml index f3e9a20b5f4..c1ca2cd60b1 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/base_mail.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/base_mail.yml @@ -5,7 +5,7 @@ name: mail-item-name-unaddressed components: - type: Item - size: 20 + size: Normal - type: Mail - type: AccessReader - type: Sprite diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/tools.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/tools.yml index b628ed4d526..5db7c020ab4 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/tools.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Specific/Mail/tools.yml @@ -13,9 +13,10 @@ slots: - belt - type: Item - size: 121 + size: Large - type: Storage - capacity: 120 + grid: + - 0,0,5,3 quickInsert: true whitelist: components: diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Guns/Ammunition/Magazine/magnum.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Guns/Ammunition/Magazine/magnum.yml index 9393d9cea15..1a575e67b7a 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Guns/Ammunition/Magazine/magnum.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Guns/Ammunition/Magazine/magnum.yml @@ -14,7 +14,7 @@ proto: CartridgeMagnum capacity: 12 - type: Item - size: 5 + size: Small - type: Sprite sprite: Nyanotrasen/Objects/Weapons/Guns/Ammunition/Magazine/Magnum/universal_mag.rsi layers: diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/blunt.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/blunt.yml index ea24e249a42..d00b35b9e58 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/blunt.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/blunt.yml @@ -8,7 +8,7 @@ sprite: Nyanotrasen/Objects/Weapons/Melee/kanabou.rsi state: icon - type: Item - size: 20 + size: Normal - type: MeleeWeapon attackRate: 0.75 range: 1.75 @@ -55,7 +55,7 @@ - type: StaminaDamageOnHit damage: 10 - type: Item - size: 15 + size: Normal sprite: Nyanotrasen/Objects/Weapons/Melee/shinai.rsi - type: DisarmMalus diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/breaching_hammer.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/breaching_hammer.yml index d28d2b55940..d019cee1360 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/breaching_hammer.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/breaching_hammer.yml @@ -8,7 +8,7 @@ sprite: Nyanotrasen/Objects/Weapons/Melee/breaching_hammer.rsi state: icon - type: Item - size: 150 + size: Huge - type: MeleeWeapon attackRate: 0.75 range: 1.70 diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/dulled.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/dulled.yml index 3d0783d01f0..9cab55f2a71 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/dulled.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/dulled.yml @@ -17,7 +17,7 @@ Blunt: 5 Slash: 1 - type: Item - size: 15 + size: Normal sprite: Objects/Weapons/Melee/katana.rsi - type: entity @@ -37,7 +37,7 @@ Blunt: 6 Slash: 1 - type: Item - size: 20 + size: Normal - type: Clothing sprite: Objects/Weapons/Melee/claymore.rsi slots: diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/knives.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/knives.yml index 681a43b4cce..b9d8d365174 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/knives.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/knives.yml @@ -19,7 +19,6 @@ Slash: 1.2 Piercing: 1.2 Holy: 1.2 - - type: Sprite sprite: Nyanotrasen/Objects/Weapons/Melee/anti_psychic_knife.rsi state: icon diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/sword.yml b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/sword.yml index 3fe7816769d..f1c96d2969e 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/sword.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Objects/Weapons/Melee/sword.yml @@ -23,7 +23,7 @@ soundHit: path: /Audio/Weapons/bladeslice.ogg - type: Item - size: 10 + size: Normal sprite: Nyanotrasen/Objects/Weapons/Melee/wakizashi.rsi - type: Tool qualities: diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Machines/laundry.yml b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Machines/laundry.yml index 4b7b0066daf..020a6b0329c 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Machines/laundry.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Machines/laundry.yml @@ -71,7 +71,9 @@ - type: Climbable delay: 1.6 - type: Storage - capacity: 240 + maxItemSize: Normal + grid: + - 0,0,5,5 storageOpenSound: path: /Audio/Nyanotrasen/Machines/washer_open.ogg storageCloseSound: diff --git a/Resources/Prototypes/Reagents/medicine.yml b/Resources/Prototypes/Reagents/medicine.yml index fae996bc6e1..0fabf1abdd9 100644 --- a/Resources/Prototypes/Reagents/medicine.yml +++ b/Resources/Prototypes/Reagents/medicine.yml @@ -17,10 +17,9 @@ - !type:GenericStatusEffect key: Stutter component: ScrambledAccent - type: Add - !type:GenericStatusEffect key: PsionicsDisabled #Nyano - Summary: disables psinoics from being used by the wearer. - component: PsionicsDisabled #Nyano - Summary: see above. + component: PsionicsDisabled #Nyano - Summary: see above. type: Add - !type:Drunk slurSpeech: false diff --git a/Resources/Prototypes/Reagents/toxins.yml b/Resources/Prototypes/Reagents/toxins.yml index 2b7a0aa0d4e..794eff94022 100644 --- a/Resources/Prototypes/Reagents/toxins.yml +++ b/Resources/Prototypes/Reagents/toxins.yml @@ -319,16 +319,18 @@ metabolisms: Poison: effects: - - !type:HealthChange - probability: 0.1 - damage: - groups: - Toxin: 2 - - !type:ChemRemovePsionic #Nyano - Summary: removes psionics from the user at 20u. + - !type:GenericStatusEffect + key: SeeingRainbows + component: SeeingRainbows + type: Add + time: 10 + refresh: false + - !type:ChemRemovePsionic #Nyano - Summary: removes psionics from the user at 20u. conditions: - - !type:ReagentThreshold - reagent: MindbreakerToxin - min: 20 + - !type:ReagentThreshold + reagent: MindbreakerToxin + min: 20 + # TODO: PROPER hallucinations - type: reagent id: Histamine diff --git a/Resources/Prototypes/Recipes/Lathes/security.yml b/Resources/Prototypes/Recipes/Lathes/security.yml index 73a751775fa..ade8bd9ebf7 100644 --- a/Resources/Prototypes/Recipes/Lathes/security.yml +++ b/Resources/Prototypes/Recipes/Lathes/security.yml @@ -55,6 +55,14 @@ Plastic: 750 Gold: 500 +- type: latheRecipe + id: WeaponLaserSvalinn + result: WeaponLaserSvalinn + completetime: 5 + materials: + Steel: 2000 + Gold: 500 + - type: latheRecipe id: WeaponXrayCannon result: WeaponXrayCannon diff --git a/Resources/Prototypes/Research/arsenal.yml b/Resources/Prototypes/Research/arsenal.yml index 1df1b174e0f..05ba1c96aa6 100644 --- a/Resources/Prototypes/Research/arsenal.yml +++ b/Resources/Prototypes/Research/arsenal.yml @@ -163,3 +163,15 @@ cost: 15000 recipeUnlocks: - WeaponAdvancedLaser + +- type: technology + id: ExperimentalBatteryAmmo + name: research-technology-experimental-battery-ammo + icon: + sprite: Objects/Weapons/Guns/Battery/svalinn.rsi + state: icon + discipline: Arsenal + tier: 3 + cost: 15000 + recipeUnlocks: + - WeaponLaserSvalinn diff --git a/Resources/Prototypes/Research/industrial.yml b/Resources/Prototypes/Research/industrial.yml index 70f461a8f2f..17086d4575d 100644 --- a/Resources/Prototypes/Research/industrial.yml +++ b/Resources/Prototypes/Research/industrial.yml @@ -13,8 +13,8 @@ - MiningDrill - BorgModuleMining - OreProcessorMachineCircuitboard - - SalvageExpeditionsComputerCircuitboard # DeltaV - OreBagOfHolding + - SalvageExpeditionsComputerCircuitboard # DeltaV - type: technology id: AdvancedPowercells diff --git a/Resources/Prototypes/Roles/Jobs/Civilian/lawyer.yml b/Resources/Prototypes/Roles/Jobs/Civilian/lawyer.yml index cd1dce5ac03..f89f39308ce 100644 --- a/Resources/Prototypes/Roles/Jobs/Civilian/lawyer.yml +++ b/Resources/Prototypes/Roles/Jobs/Civilian/lawyer.yml @@ -16,7 +16,6 @@ access: - Service - Lawyer - #- Brig #Delta V: Removed Brig Access - Maintenance - type: startingGear diff --git a/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml b/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml index 3a50f203202..fe9e0b6120c 100644 --- a/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml +++ b/Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml @@ -47,7 +47,7 @@ # - Detective # - Salvage # - Security # NoooOoOo!! My HoPcurity!1 -# - Brig # Lawyer access # Delta V: Removed +# - Brig - Lawyer # - Cargo # - Atmospherics @@ -78,8 +78,8 @@ shoes: ClothingShoesLeather # DeltaV - HoP needs something better than plebe shoes. head: ClothingHeadHatHopcap id: HoPPDA - ears: ClothingHeadsetHoP # DeltaV - HoP is now a service role, replaces their all channels headset. gloves: ClothingHandsGlovesHop + ears: ClothingHeadsetHoP # DeltaV - HoP is now a service role, replaces their all channels headset. belt: BoxFolderClipboard innerClothingSkirt: ClothingUniformJumpskirtHoP satchel: ClothingBackpackSatchelHOPFilled diff --git a/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml b/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml index b7d18ba1aa8..af56a258dce 100644 --- a/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml +++ b/Resources/Prototypes/Roles/Jobs/Medical/paramedic.yml @@ -29,12 +29,12 @@ equipment: jumpsuit: ClothingUniformJumpsuitParamedic back: ClothingBackpackParamedicFilled # DeltaV - Give Paramedics useful tools on spawn, see Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StargerGear/backpack.yml - shoes: ClothingShoesColorWhite + shoes: ClothingShoesColorBlue id: ParamedicPDA ears: ClothingHeadsetMedical belt: ClothingBeltParamedicFilled pocket1: HandheldGPSBasic # DeltaV - Give Paramedics useful tools on spawn pocket2: HandheldCrewMonitor # DeltaV - Give Paramedics useful tools on spawn innerClothingSkirt: ClothingUniformJumpskirtParamedic - satchel: ClothingBackpackSatchelParamedicFilled # DeltaV - Give Paramedics useful tools on spawn, see Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StargerGear/satchel.yml - duffelbag: ClothingBackpackDuffelParamedicFilled # DeltaV - Give Paramedics useful tools on spawn, see Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StargerGear/duffelbag.yml + satchel: ClothingBackpackSatchelParamedicFilledDV # DeltaV - Give Paramedics useful tools on spawn, see Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StargerGear/satchel.yml + duffelbag: ClothingBackpackDuffelParamedicFilledDV # DeltaV - Give Paramedics useful tools on spawn, see Resources/Prototypes/DeltaV/Catalog/Fills/Backpacks/StargerGear/duffelbag.yml diff --git a/Resources/Prototypes/XenoArch/Effects/utility_effects.yml b/Resources/Prototypes/XenoArch/Effects/utility_effects.yml index f819946a4d2..fdf28fe9a01 100644 --- a/Resources/Prototypes/XenoArch/Effects/utility_effects.yml +++ b/Resources/Prototypes/XenoArch/Effects/utility_effects.yml @@ -52,7 +52,9 @@ storagebase: !type:Container ents: [ ] - type: Storage - capacity: 50 + maxItemSize: Huge + grid: + - 0,0,10,5 - type: artifactEffect id: EffectPhasing diff --git a/Resources/Prototypes/item_size.yml b/Resources/Prototypes/item_size.yml new file mode 100644 index 00000000000..e2b7f84df27 --- /dev/null +++ b/Resources/Prototypes/item_size.yml @@ -0,0 +1,47 @@ +# Items that can be held completely in one's hand. +- type: itemSize + id: Tiny + weight: 1 + name: item-component-size-Tiny + defaultShape: + - 0,0,0,0 + +# Items that can fit inside of a standard pocket. +- type: itemSize + id: Small + weight: 2 + name: item-component-size-Small + defaultShape: + - 0,0,0,1 + +# Items that can fit inside of a standard bag. +- type: itemSize + id: Normal + weight: 4 + name: item-component-size-Normal + defaultShape: + - 0,0,1,1 + +# Items that are too large to fit inside of standard bags, but can worn in exterior slots or placed in custom containers. +- type: itemSize + id: Large + weight: 8 + name: item-component-size-Large + defaultShape: + - 0,0,3,1 + +# Items that are too large to place inside of any kind of container. +- type: itemSize + id: Huge + weight: 16 + name: item-component-size-Huge + defaultShape: + - 0,0,3,3 + +# Picture big chungus +- type: itemSize + id: Ginormous + weight: 32 + name: item-component-size-Ginormous + defaultShape: + - 0,0,5,5 diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 145d65e15ad..50d14ef150b 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -884,6 +884,9 @@ - type: Tag id: PotatoBattery +- type: Tag + id: PowerCell + - type: Tag id: PowerCellSmall @@ -1150,4 +1153,4 @@ id: MindShield - type: Tag - id: boots \ No newline at end of file + id: boots diff --git a/Resources/ServerInfo/Guidebook/Cargo/Salvage.xml b/Resources/ServerInfo/Guidebook/Cargo/Salvage.xml index f9318257667..6452cb9b49b 100644 --- a/Resources/ServerInfo/Guidebook/Cargo/Salvage.xml +++ b/Resources/ServerInfo/Guidebook/Cargo/Salvage.xml @@ -32,7 +32,7 @@ Internals will be important, given all species need to breathe, and space doesnt -The crusher devices are your first and last line of defense against space fauna and other things that want to bring harm to logistics personnel. While the dagger is just a standard knife, the glaive is has a special property that if you shoot something with it, then follow up with a melee attack, it deals 2x more damage. The protokinetic accelerator is like a recharging weapon that can provide thrust in the scenerio that your jetpack runs dry, or mine for you. +The crusher devices are your first and last line of defense against space fauna and other things that want to bring harm to logistics personnel. While the dagger is just a standard knife, the crusher is has a special property that if you shoot something with it, then follow up with a melee attack, it deals 2x more damage. The protokinetic accelerator is like a recharging weapon that can provide thrust in the scenerio that your jetpack runs dry, or mine for you. diff --git a/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/meta.json b/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/meta.json index abe15350145..a2e10d43001 100644 --- a/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/meta.json +++ b/Resources/Textures/Clothing/Head/Hardsuits/security.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Sprite made by Gtheglorious based on the sprite taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, | vulpkanin versions taken from https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/091d9ec00f186052b87bd65125e896f78faefe38 and edited by Floofers", + "copyright": "Sprite made by Gtheglorious based on the sprite taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, | vulpkanin versions taken from https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13/commit/091d9ec00f186052b87bd65125e896f78faefe38 and edited by Floofers", "size": { "x": 32, "y": 32 diff --git a/Resources/Textures/Clothing/Mask/gascaptain.rsi/meta.json b/Resources/Textures/Clothing/Mask/gascaptain.rsi/meta.json index c2fdec87e27..113751dd3d9 100644 --- a/Resources/Textures/Clothing/Mask/gascaptain.rsi/meta.json +++ b/Resources/Textures/Clothing/Mask/gascaptain.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, edited by Emisse for ss14 | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers", + "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/4f6190e2895e09116663ef282d3ce1d8b35c032e, edited by Emisse for ss14 | vulpkanin version taken from Paradise station at https://github.com/ParadiseSS13/Paradise/commit/f0fa4e1fd809482fbc104a310aa34cebf7df157d edited by Floofers", "size": { "x": 32, "y": 32 diff --git a/Resources/Textures/Interface/Default/Storage/back.png b/Resources/Textures/Interface/Default/Storage/back.png new file mode 100644 index 00000000000..3fe8540952e Binary files /dev/null and b/Resources/Textures/Interface/Default/Storage/back.png differ diff --git a/Resources/Textures/Interface/Default/Storage/exit.png b/Resources/Textures/Interface/Default/Storage/exit.png new file mode 100644 index 00000000000..186c447d4b6 Binary files /dev/null and b/Resources/Textures/Interface/Default/Storage/exit.png differ diff --git a/Resources/Textures/Interface/Default/Storage/marked.png b/Resources/Textures/Interface/Default/Storage/marked.png new file mode 100644 index 00000000000..2739b7e248d Binary files /dev/null and b/Resources/Textures/Interface/Default/Storage/marked.png differ diff --git a/Resources/Textures/Interface/Default/Storage/piece_bottom.png b/Resources/Textures/Interface/Default/Storage/piece_bottom.png new file mode 100644 index 00000000000..a860ddd1813 Binary files /dev/null and b/Resources/Textures/Interface/Default/Storage/piece_bottom.png differ diff --git a/Resources/Textures/Interface/Default/Storage/piece_bottomLeft.png b/Resources/Textures/Interface/Default/Storage/piece_bottomLeft.png new file mode 100644 index 00000000000..43676e75f83 Binary files /dev/null and b/Resources/Textures/Interface/Default/Storage/piece_bottomLeft.png differ diff --git a/Resources/Textures/Interface/Default/Storage/piece_bottomRight.png b/Resources/Textures/Interface/Default/Storage/piece_bottomRight.png new file mode 100644 index 00000000000..59a49cb3cc8 Binary files /dev/null and b/Resources/Textures/Interface/Default/Storage/piece_bottomRight.png differ diff --git a/Resources/Textures/Interface/Default/Storage/piece_center.png b/Resources/Textures/Interface/Default/Storage/piece_center.png new file mode 100644 index 00000000000..27916d44c99 Binary files /dev/null and b/Resources/Textures/Interface/Default/Storage/piece_center.png differ diff --git a/Resources/Textures/Interface/Default/Storage/piece_left.png b/Resources/Textures/Interface/Default/Storage/piece_left.png new file mode 100644 index 00000000000..a99eeada369 Binary files /dev/null and b/Resources/Textures/Interface/Default/Storage/piece_left.png differ diff --git a/Resources/Textures/Interface/Default/Storage/piece_right.png b/Resources/Textures/Interface/Default/Storage/piece_right.png new file mode 100644 index 00000000000..ef7bd80179c Binary files /dev/null and b/Resources/Textures/Interface/Default/Storage/piece_right.png differ diff --git a/Resources/Textures/Interface/Default/Storage/piece_top.png b/Resources/Textures/Interface/Default/Storage/piece_top.png new file mode 100644 index 00000000000..219ec30e24b Binary files /dev/null and b/Resources/Textures/Interface/Default/Storage/piece_top.png differ diff --git a/Resources/Textures/Interface/Default/Storage/piece_topLeft.png b/Resources/Textures/Interface/Default/Storage/piece_topLeft.png new file mode 100644 index 00000000000..bfe9134c0f4 Binary files /dev/null and b/Resources/Textures/Interface/Default/Storage/piece_topLeft.png differ diff --git a/Resources/Textures/Interface/Default/Storage/piece_topRight.png b/Resources/Textures/Interface/Default/Storage/piece_topRight.png new file mode 100644 index 00000000000..c8a48b18672 Binary files /dev/null and b/Resources/Textures/Interface/Default/Storage/piece_topRight.png differ diff --git a/Resources/Textures/Interface/Default/Storage/sidebar_bottom.png b/Resources/Textures/Interface/Default/Storage/sidebar_bottom.png new file mode 100644 index 00000000000..59339253689 Binary files /dev/null and b/Resources/Textures/Interface/Default/Storage/sidebar_bottom.png differ diff --git a/Resources/Textures/Interface/Default/Storage/sidebar_fat.png b/Resources/Textures/Interface/Default/Storage/sidebar_fat.png new file mode 100644 index 00000000000..0223dcad52a Binary files /dev/null and b/Resources/Textures/Interface/Default/Storage/sidebar_fat.png differ diff --git a/Resources/Textures/Interface/Default/Storage/sidebar_mid.png b/Resources/Textures/Interface/Default/Storage/sidebar_mid.png new file mode 100644 index 00000000000..20b53298764 Binary files /dev/null and b/Resources/Textures/Interface/Default/Storage/sidebar_mid.png differ diff --git a/Resources/Textures/Interface/Default/Storage/sidebar_top.png b/Resources/Textures/Interface/Default/Storage/sidebar_top.png new file mode 100644 index 00000000000..798c03da7d9 Binary files /dev/null and b/Resources/Textures/Interface/Default/Storage/sidebar_top.png differ diff --git a/Resources/Textures/Interface/Default/Storage/tile_blocked.png b/Resources/Textures/Interface/Default/Storage/tile_blocked.png new file mode 100644 index 00000000000..663f9b5ec54 Binary files /dev/null and b/Resources/Textures/Interface/Default/Storage/tile_blocked.png differ diff --git a/Resources/Textures/Interface/Default/Storage/tile_blocked_opaque.png b/Resources/Textures/Interface/Default/Storage/tile_blocked_opaque.png new file mode 100644 index 00000000000..16a65e36dbd Binary files /dev/null and b/Resources/Textures/Interface/Default/Storage/tile_blocked_opaque.png differ diff --git a/Resources/Textures/Interface/Default/Storage/tile_empty.png b/Resources/Textures/Interface/Default/Storage/tile_empty.png new file mode 100644 index 00000000000..551ac8fe86f Binary files /dev/null and b/Resources/Textures/Interface/Default/Storage/tile_empty.png differ diff --git a/Resources/Textures/Interface/Default/Storage/tile_empty_opaque.png b/Resources/Textures/Interface/Default/Storage/tile_empty_opaque.png new file mode 100644 index 00000000000..6a6eb055a72 Binary files /dev/null and b/Resources/Textures/Interface/Default/Storage/tile_empty_opaque.png differ diff --git a/Resources/Textures/Objects/Fun/candy_bucket.rsi/empty-inhand-left.png b/Resources/Textures/Objects/Fun/candy_bucket.rsi/empty-inhand-left.png new file mode 100644 index 00000000000..b1a487b9eeb Binary files /dev/null and b/Resources/Textures/Objects/Fun/candy_bucket.rsi/empty-inhand-left.png differ diff --git a/Resources/Textures/Objects/Fun/candy_bucket.rsi/empty-inhand-right.png b/Resources/Textures/Objects/Fun/candy_bucket.rsi/empty-inhand-right.png new file mode 100644 index 00000000000..3cdffed9c37 Binary files /dev/null and b/Resources/Textures/Objects/Fun/candy_bucket.rsi/empty-inhand-right.png differ diff --git a/Resources/Textures/Objects/Fun/candy_bucket.rsi/empty_icon.png b/Resources/Textures/Objects/Fun/candy_bucket.rsi/empty_icon.png new file mode 100644 index 00000000000..b2216f0573e Binary files /dev/null and b/Resources/Textures/Objects/Fun/candy_bucket.rsi/empty_icon.png differ diff --git a/Resources/Textures/Objects/Fun/candy_bucket.rsi/full-inhand-left.png b/Resources/Textures/Objects/Fun/candy_bucket.rsi/full-inhand-left.png new file mode 100644 index 00000000000..2a804cffc5c Binary files /dev/null and b/Resources/Textures/Objects/Fun/candy_bucket.rsi/full-inhand-left.png differ diff --git a/Resources/Textures/Objects/Fun/candy_bucket.rsi/full-inhand-right.png b/Resources/Textures/Objects/Fun/candy_bucket.rsi/full-inhand-right.png new file mode 100644 index 00000000000..32a28cbaf97 Binary files /dev/null and b/Resources/Textures/Objects/Fun/candy_bucket.rsi/full-inhand-right.png differ diff --git a/Resources/Textures/Objects/Fun/candy_bucket.rsi/full_icon.png b/Resources/Textures/Objects/Fun/candy_bucket.rsi/full_icon.png new file mode 100644 index 00000000000..673d50f6ec7 Binary files /dev/null and b/Resources/Textures/Objects/Fun/candy_bucket.rsi/full_icon.png differ diff --git a/Resources/Textures/Objects/Fun/candy_bucket.rsi/meta.json b/Resources/Textures/Objects/Fun/candy_bucket.rsi/meta.json new file mode 100644 index 00000000000..e5d850f948b --- /dev/null +++ b/Resources/Textures/Objects/Fun/candy_bucket.rsi/meta.json @@ -0,0 +1,33 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by @ps3moira#9488", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "empty_icon" + }, + { + "name": "full_icon" + }, + { + "name": "empty-inhand-right", + "directions": 4 + }, + { + "name": "empty-inhand-left", + "directions": 4 + }, + { + "name": "full-inhand-right", + "directions": 4 + }, + { + "name": "full-inhand-left", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/Objects/Fun/toys.rsi/meta.json b/Resources/Textures/Objects/Fun/toys.rsi/meta.json index 7ab46a31083..00999ac01e5 100644 --- a/Resources/Textures/Objects/Fun/toys.rsi/meta.json +++ b/Resources/Textures/Objects/Fun/toys.rsi/meta.json @@ -49,6 +49,9 @@ }, { "name": "plushie_lizard" + }, + { + "name": "plushie_lizard_mirrored" }, { "name": "plushie_lamp" diff --git a/Resources/Textures/Objects/Fun/toys.rsi/plushie_lizard_mirrored.png b/Resources/Textures/Objects/Fun/toys.rsi/plushie_lizard_mirrored.png new file mode 100644 index 00000000000..a8ad75da91d Binary files /dev/null and b/Resources/Textures/Objects/Fun/toys.rsi/plushie_lizard_mirrored.png differ diff --git a/Resources/Textures/Objects/Tools/crowbar.rsi/meta.json b/Resources/Textures/Objects/Tools/crowbar.rsi/meta.json index 1778efa00c7..d4cab89f8ef 100644 --- a/Resources/Textures/Objects/Tools/crowbar.rsi/meta.json +++ b/Resources/Textures/Objects/Tools/crowbar.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/eea0599511b088fdab9d43e562210cdbd51c6a98", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/eea0599511b088fdab9d43e562210cdbd51c6a98, storage and red-storage by Flareguy", "size": { "x": 32, "y": 32 @@ -36,6 +36,12 @@ { "name": "red-equipped-BELT", "directions": 4 + }, + { + "name": "storage" + }, + { + "name": "red-storage" } ] } diff --git a/Resources/Textures/Objects/Tools/crowbar.rsi/red-storage.png b/Resources/Textures/Objects/Tools/crowbar.rsi/red-storage.png new file mode 100644 index 00000000000..1d88fecb2b0 Binary files /dev/null and b/Resources/Textures/Objects/Tools/crowbar.rsi/red-storage.png differ diff --git a/Resources/Textures/Objects/Tools/crowbar.rsi/storage.png b/Resources/Textures/Objects/Tools/crowbar.rsi/storage.png new file mode 100644 index 00000000000..444ec90e9a9 Binary files /dev/null and b/Resources/Textures/Objects/Tools/crowbar.rsi/storage.png differ diff --git a/Resources/Textures/Objects/Tools/wrench.rsi/meta.json b/Resources/Textures/Objects/Tools/wrench.rsi/meta.json index 9f7b9badd5d..a2c8f06819b 100644 --- a/Resources/Textures/Objects/Tools/wrench.rsi/meta.json +++ b/Resources/Textures/Objects/Tools/wrench.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from vgstation at commit https://github.com/vgstation-coders/vgstation13/commit/1cdfb0230cc96d0ba751fa002d04f8aa2f25ad7d", + "copyright": "Taken from vgstation at commit https://github.com/vgstation-coders/vgstation13/commit/1cdfb0230cc96d0ba751fa002d04f8aa2f25ad7d, storage by EmoGarbage404 (github)", "size": { "x": 32, "y": 32 @@ -21,6 +21,9 @@ { "name": "equipped-BELT", "directions": 4 + }, + { + "name": "storage" } ] } diff --git a/Resources/Textures/Objects/Tools/wrench.rsi/storage.png b/Resources/Textures/Objects/Tools/wrench.rsi/storage.png new file mode 100644 index 00000000000..54d1d9b28e9 Binary files /dev/null and b/Resources/Textures/Objects/Tools/wrench.rsi/storage.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/base.png b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/base.png new file mode 100644 index 00000000000..b5a65edff48 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/base.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/icon.png b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/icon.png new file mode 100644 index 00000000000..a85afab7127 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-left-0.png b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-left-0.png new file mode 100644 index 00000000000..f4e9e49a5aa Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-left-0.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-left-1.png b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-left-1.png new file mode 100644 index 00000000000..9d2a4d004e6 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-left-1.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-left-2.png b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-left-2.png new file mode 100644 index 00000000000..88bab46c51c Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-left-2.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-left-3.png b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-left-3.png new file mode 100644 index 00000000000..57142eecd98 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-left-3.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-left.png new file mode 100644 index 00000000000..a2ed57443d8 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-right-0.png b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-right-0.png new file mode 100644 index 00000000000..5b51ce47414 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-right-0.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-right-1.png b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-right-1.png new file mode 100644 index 00000000000..2e3c8ec1d9c Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-right-1.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-right-2.png b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-right-2.png new file mode 100644 index 00000000000..ea72601137b Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-right-2.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-right-3.png b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-right-3.png new file mode 100644 index 00000000000..3a9db1d3e30 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-right-3.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-right.png new file mode 100644 index 00000000000..b23c4f39e3e Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/mag-unshaded-0.png b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/mag-unshaded-0.png new file mode 100644 index 00000000000..2f4c8db73b4 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/mag-unshaded-0.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/mag-unshaded-1.png b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/mag-unshaded-1.png new file mode 100644 index 00000000000..a90970412c6 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/mag-unshaded-1.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/mag-unshaded-2.png b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/mag-unshaded-2.png new file mode 100644 index 00000000000..5b62a04dfa0 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/mag-unshaded-2.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/mag-unshaded-3.png b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/mag-unshaded-3.png new file mode 100644 index 00000000000..f34af9bae07 Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/mag-unshaded-3.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/mag-unshaded-4.png b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/mag-unshaded-4.png new file mode 100644 index 00000000000..046c1328b3b Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/mag-unshaded-4.png differ diff --git a/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/meta.json new file mode 100644 index 00000000000..8e2e71fb882 --- /dev/null +++ b/Resources/Textures/Objects/Weapons/Guns/Battery/svalinn.rsi/meta.json @@ -0,0 +1,72 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from CEV Eris at commit https://github.com/discordia-space/CEV-Eris/commit/d75bd7c51620423bacf0b8accc8d29ffbfc387d8, edited by Emisse for SS14", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "base" + }, + { + "name": "mag-unshaded-0" + }, + { + "name": "mag-unshaded-1" + }, + { + "name": "mag-unshaded-2" + }, + { + "name": "mag-unshaded-3" + }, + { + "name": "mag-unshaded-4" + }, + { + "name": "inhand-left-0", + "directions": 4 + }, + { + "name": "inhand-right-0", + "directions": 4 + }, + { + "name": "inhand-left-1", + "directions": 4 + }, + { + "name": "inhand-right-1", + "directions": 4 + }, + { + "name": "inhand-left-2", + "directions": 4 + }, + { + "name": "inhand-right-2", + "directions": 4 + }, + { + "name": "inhand-left-3", + "directions": 4 + }, + { + "name": "inhand-right-3", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/keybinds.yml b/Resources/keybinds.yml index b3ba05def26..897506623c6 100644 --- a/Resources/keybinds.yml +++ b/Resources/keybinds.yml @@ -163,6 +163,13 @@ binds: - function: SwapHands type: State key: X +- function: MoveStoredItem + type: State + key: MouseLeft + canFocus: true +- function: RotateStoredItem + type: State + key: MouseRight - function: Drop type: State key: Q @@ -237,6 +244,13 @@ binds: type: State key: E mod1: Shift +- function: OpenBackpack + type: State + key: V +- function: OpenBelt + type: State + key: V + mod1: Shift - function: ShowDebugConsole type: State key: Tilde